Wie modifiziere ich ein Deb-Paket?

12256
Kim

Was ich bisher gemacht habe

  • Ich habe die Quelle eines offiziellen Deb-Pakets aus den Ubuntu-Repositories heruntergeladen.
  • Ich habe einen Patch angebracht.
  • Ran konfigurieren und erfolgreich machen.
  • Das Programm getestet.

Was ich gerne machen würde

  • Ich möchte daraus ein Deb-Paket erstellen und dabei alle Informationen (Abhängigkeiten usw.) des alten Pakets verwenden.

Meine Frage ist (sie sind eng miteinander verbunden)

  1. Gibt es eine einfache (= meist automatisierte) Möglichkeit, dies zu tun?
  2. Kann ich die Binärdateien einfach in die alte deb-Datei kopieren?
  3. Werden meine Änderungen überschrieben, sobald das Originalpaket in den Repos aktualisiert wird?
  4. Wenn ja, wie kann man das vermeiden?
  5. Gibt es eine Möglichkeit, es als "alternative" Version zu kennzeichnen, die alle "eingehenden" Abhängigkeiten des ursprünglichen Pakets erfüllt?

zusätzliche Information

  • Ich betreibe Ubuntu 9.04, 32bit, andere Archs / Versionen interessieren mich im Moment nicht.
  • Das fragliche Paket ist compiz-gnome.
  • Die Änderung ist sehr geringfügig und fügt keine Abhängigkeiten hinzu.
7
Die Fragen sind eindeutig so eng miteinander verbunden, dass eine getrennte Diskussion von jedem von ihnen keinen Sinn macht. Kim vor 14 Jahren 0
Frage bearbeitet, wie vorgeschlagen. Kim vor 14 Jahren 0
+ 1 Schöne Frage joe vor 14 Jahren 0

5 Antworten auf die Frage

4
lyarwood

Ich habe die folgende Anleitung in den Ubuntu-Foren zum Wiederaufbau des Netzwerkmanagerpakets hier gefunden

Re: wie die Quelle eines Debs gepatcht wird

Zitat: Zitat von Schnur

Ich möchte das Netzwerkmanagerpaket grundsätzlich mit einem benutzerdefinierten Patch neu erstellen, um etwas zu testen. Ich möchte also: 1. den Quellcode für die Ubuntu "Version" des Netzwerkmanagers erhalten

Code:

sudo apt-get source network-manager

Zitat: 2. Patch mit meinem Patch patchen Die Quelldateien werden in das Arbeitsverzeichnis heruntergeladen. Sehen Sie diese für weitere Informationen.

Quote: 3. mache eine deb-Datei, die ich anstelle des aktuellen Netzwerkmanagers installieren kann.

Code ausführen:

dpkg-buildpackage -rfakeroot -uc -b
im erstellten Verzeichnis.

Außerdem wurde der folgende Artikel gefunden: Debian New Maintainers 'Guide Kapitel 6 - Erstellen des Pakets


Ich bin mir nicht sicher, ob Ihre Änderungen durch ein Update aus den offiziellen Repositories verloren gehen. Sie können immer nur Ihren Patch stromaufwärts senden zurück zu den compiz-gnome Paket - Maintainer oder Ihr eigenes Repository erstellen für das aktualisierte Paket.

Um zu vermeiden, dass Ihr privates Paket verschmutzt wird, können Sie oben in `debian / changelog` einen Eintrag mit einer höheren Versionsnummer hinzufügen und dann Ihr Paket erstellen. Chris Jester-Young vor 14 Jahren 2
Der Patch wird aller Voraussicht nach nicht akzeptiert, da er bereits seit einiger Zeit verfügbar ist. Das Erstellen eines eigenen Repos scheint für die 20-Zeilen-Änderung zu viel zu sein. Vielleicht versuche ich einfach mal zu sehen, was passiert. Danke für deine Antwort. Kim vor 14 Jahren 1
4
Ryan Thompson

Das Verfahren, das ich verwende, ist folgendes:

Holen Sie sich die Quelle (via apt-get src).

Wenden Sie einen Patch an, oder ändern Sie die erforderlichen Änderungen.

Führen debchange --nmuSie den Befehl aus und geben Sie eine Beschreibung der vorgenommenen Änderung ein. Dadurch wird die Versionsnummer automatisch erhöht, sodass das System nicht versucht, Ihr benutzerdefiniertes Paket wieder auf das Standardpaket zu "aktualisieren".

Laufen debuild.

Genießen Sie Ihre Deb-Dateien.

3
nagul

Die Antwort auf # 3 und # 4 lautet, dass Sie das Paket nach der Installation der Version in den Status " Halten" setzen sollten . Dadurch wird das Debian-Paketverwaltungssystem angewiesen, alle zukünftigen Änderungen an diesem Paket zu "speichern", so dass Sie das Paket tatsächlich manuell verwalten können.

Aus der Debian- FAQ :

7.11 Was bedeutet "unbekannt", "Installieren", "Entfernen", "Löschen" und "Halten" im Paketstatus?

Diese "wollen" -Flags sagen aus, was der Benutzer mit einem Paket machen wollte (wie entweder durch die Aktionen des Benutzers im Abschnitt "Select" von dselect oder durch die direkten Aufrufe von dpkg durch den Benutzer angezeigt wird).

Ihre Bedeutungen sind:

  • unbekannt - der Benutzer hat noch nie angegeben, ob er das Paket> möchte

  • install - Der Benutzer möchte, dass das Paket installiert oder aktualisiert wird

  • remove - Der Benutzer möchte, dass das Paket entfernt wird, jedoch keine vorhandenen Konfigurationsdateien entfernen.

  • purge - Der Benutzer möchte, dass das Paket einschließlich der> Konfigurationsdateien vollständig entfernt wird.

  • hold - Der Benutzer möchte, dass dieses Paket nicht verarbeitet wird, dh er möchte die aktuelle Version mit dem aktuellen Status belassen.

7.12 Wie lege ich ein Paket in die Warteschleife?

Es gibt drei Möglichkeiten, Pakete zurückzuhalten, mit dpkg, aptitude oder mit dselect.

Mit dpkg müssen Sie die Liste der Paketauswahlen exportieren mit:

dpkg --get-selections *> selections.txt

Bearbeiten Sie dann die resultierende Datei selections.txt und ändern Sie die Zeile mit dem Paket, das Sie enthalten möchten, z. B. libc6, wie folgt:

libc6 installieren

zu diesem:

libc6 halten

Speichern Sie die Datei und laden Sie sie erneut in die dpkg-Datenbank mit:

dpkg --set-selections <auswahl.txt

Mit aptitude können Sie ein Paket mit halten

aptitude hold Paketname

und entfernen Sie den Griff mit

aptitude haltet paketname ab

Mit dselect müssen Sie den Bildschirm [S] select aufrufen, das Paket, das Sie halten möchten, im aktuellen Status finden und die Taste =' key (orH ' drücken . Die Änderungen werden unmittelbar nach dem Verlassen des Bildschirms [S] elect aktiviert.

Hinweis: Die Benutzer haben Probleme mit dem Befehl aptitude hold gefunden. Daher sollten Sie den Befehl dpkg vorziehen, um das Paket zu halten. Alternativ können Sie das Paket auch über die GUI-Oberfläche des Synaptic Package Manager (Package> Lock Version) speichern. Ich bevorzuge dpkg, weil es für mich gut funktioniert hat.

Sie haben bereits eine gute Antwort für den Rest, so dass ich meine Meinung dazu nicht wagen kann.

Danke für die zusätzlichen Infos! Ich glaube, ich habe jetzt alles abgedeckt. :) Kim vor 14 Jahren 0
1
jack

Wenn Sie Quellen von der offiziellen Website herunterladen, sollte das Paket selbst über apt verfügbar sein. Sie können also einfach das fertige Paket herunterladen, ändern und erneut packen:

apt-get download your_package dpkg -x your_package_vesion.deb your_package_folder/ ... making changes in your_package_folder/ ... # extract all needed controles/scripts from existing deb to new dpkg -e your_package_vesion.deb your_package_folder/DEBIAN dpkg -b your_package_folder/ new_package_vesion.deb 

Quelle mit Details: http://sysadm.pp.ua/linux/deb-creation-edit.html

0
Journeyman Geek

Nun, es kommt auf die Neukompilierung an. Wenn Sie keine vollständige, von Debian genehmigte Paketerstellungsumgebung (der richtige Weg) möchten, habe ich checkinstall für die schnelle und schmutzige Paketerstellung verwendet (der einfache Weg) - es ist nicht der von Debian empfohlene Weg, aber es ist viel einfacher der andere Weg. Konfigurieren Sie dann make und ersetzen Sie makeinstall durch checkinstall. Dann installieren Sie Ihr neues Paket mit sudo dpkg -i