Debian-Installationsdateien erstellen - deb-Dateien. Erstellen von RPM- oder DEB-Paketen mit Checkinstall unter Linux Debian, wie man aus dem Quellcode erstellt

→ Anleitung zum Erstellen eines Deb-Pakets

Es gibt im Netz einige Artikel darüber, wie man ein Deb-Paket baut, aber leider werden nicht alle für einen Entwickler verständlich sein, der sich zum ersten Mal entschieden hat, zu bauen. Sie haben also Ihren Code. Es ist nützlich, gut, erfordert jedoch einige Fähigkeiten und Mühe, um es auf einem Server oder Desktop zu installieren. Um manuelle Arbeit zu vermeiden, die mit dem Kopieren von Dateien, der Manipulation der Datenbank, dem Einrichten von Start-Stopp-Skripten (für Daemons) und dem Einrichten von Konfigurationen verbunden ist, haben Sie sich entschieden, alles in einem deb-Paket zu sammeln.

Idealerweise sollte das richtige deb-Paket mit einem gpg-Schlüssel signiert werden. Andernfalls betrachtet apt das Paket als unzuverlässig und gibt eine entsprechende Warnung aus. Aber wir überspringen diesen Teil vorerst. Das Handbuch zum Erstellen eines gpg-Schlüssels und zum Signieren eines Deb-Pakets mit einem gpg-Schlüssel wird später besprochen.

Schritt 1. Installieren Sie die Dienstprogramme, die zum Erstellen Ihres Pakets erforderlich sind:

Sudo apt-get install autoconf automake libtool autotools-dev dpkg-dev fakeroot

Schritt 2. Erstellen Sie ein Stammverzeichnis für das zukünftige Paket und kopieren Sie alle Dateien Ihres Dienstprogramms in dieses Verzeichnis, das für den Betrieb und die Installation benötigt wird. Zum Beispiel:

Mkdir -p / home / username / deb / my_package cp / some_source_files / home / username / deb / my_package

Wenn sich Ihr Dienstprogramm im Ordner befindet:

/usr/local/share/my_project

/ home / username / deb / my_package / usr / local / share / my_project

Schritt 3. Erstellen Sie das DEBIAN-Verzeichnis im Paketstamm.

Der Verzeichnisname muss in Großbuchstaben angegeben werden. Dieses Verzeichnis enthält Metainformationen, die während der Installation verwendet werden.

Cd / home / username / deb / my_package mkdir DEBIAN

Weiter im Katalog DEBIAN Erstellen Sie eine erforderliche Textdatei - Steuerung... V Diese Datei enthält grundlegende Informationen zum Paket. In der Datei enthält jede Zeile Schlüssel-Wert-Paare, die durch Doppelpunkte getrennt sind.

Cd ./DEBIAN-Touch-Steuerung

Beispieldatei:

Paket: my-package Version: 1.0.0 Bereitstellung: my-package Betreuer: Vasiliy Batareikin Architektur: alle Abschnitt: web Priorität: optional Pre-Depends: gcc, make, perl (> = 5.10), mysql-server Depends: gcc, make, perl (> = 5.10), perlmagick, mysql-server, unzip, rar Beschreibung : Mein erstes Debian-Paket

Paket- Paketnamen. Gültige Zeichen. Erforderlicher Parameter.

Ausführung- Paketversion. Erforderlicher Parameter.

Bietet- Anwendungsname im System registriert.

Betreuer- Name und Post des Paketbetreuers. Erforderlicher Parameter.

Die Architektur- Die Prozessorarchitektur, für die das Paket bestimmt ist. Erforderlicher Parameter.

Abschnitt- Definiert eine Gruppe von Anwendungen. Erforderlicher Parameter.

Priorität- Paketpriorität. Der Parameter bestimmt, wie wichtig Ihr Paket für das System ist.

Vorher abhängig- Eine durch Kommas getrennte Liste von Paketen, die während der Installation Ihres Pakets erforderlich sind. Der Paketmanager installiert automatisch die angegebenen Pakete.

Kommt darauf an- Eine durch Kommas getrennte Liste von Paketen, die für die Funktion dieses Pakets erforderlich sind. Der Paketmanager installiert automatisch die angegebenen Pakete.

Beschreibung- Paketbeschreibung. Erforderlicher Parameter.

Wenn Sie beim Installieren oder Deinstallieren eines Pakets bestimmte Aktionen ausführen müssen, können Sie spezielle Skripte verwenden. Wir erstellen sie und legen die Ausführungsrechte fest:

Cd ./DEBIAN touch preinst postinst prerm postrm chmod 775 preinst postinst prerm postrm

vorinst- Wird ausgeführt, bevor das Paket installiert wird.

postinst- Wird sofort nach der Installation des Pakets ausgeführt.

prerm- Wird ausgeführt, kurz bevor das Paket deinstalliert wird.

postrm- Wird sofort ausgeführt, nachdem das Paket entfernt wurde.


Schritt 4. Paket aufbauen.

Wir gehen mit dem Stammordner des Pakets eine Ebene nach oben und bauen.


Autor: Michael Reed
Veröffentlichungsdatum: 4. Januar 2014
Übersetzung: N. Romodanov
Datum der Übertragung: Juni 2014

Wir zeigen Ihnen, wie Sie die beiden gängigsten Typen erstellen Linux-Pakete zum Verteilen von Software, und Sie können Ihre eigenen Pakete selbst verteilen.

Wir führen Sie durch den Prozess der Paketierung von Software für die beiden beliebtesten Paketsysteme DEB und RPM. Sie können diese Techniken verwenden, um Pakete Ihrer eigenen Software zu erstellen oder sogar Pakete für Software zu verwalten, die Ihrer Meinung nach unbemerkt bleibt.

Wir beginnen mit einem Tutorial zum Erstellen von DEB-Dateien ((.deb) für von Debian abgeleitete Distributionen - wir verwenden Xubuntu als unsere Basis dafür, dann werden wir die Methoden beschreiben, die zum Erstellen von RPM-Paketen für die Verwendung in Red Hat erforderlich sind -abgeleitete Distributionen.Und wir werden dafür Fedora verwenden.Sie können oft ein Paket auf einer Distribution erstellen und es dann auf einer verwandten Distribution installieren (zB Ubuntu> Debian), aber wenn es darauf ankommt, möchten Sie es vielleicht selbst ausprobieren.

Für das Programm verwenden wir den leichtgewichtigen Dillo-Webbrowser als Beispiel für ein Paket, das aus dem Quellcode erstellt wurde. Wenn Sie aus dem Quellcode bauen, können Sie, falls der Build nicht gut läuft, wie üblich im Internet nach Lösungen suchen. Im Fall von Dillo 3.0.3 mussten wir beispielsweise aufgrund eines Versehens im Quellcodearchiv, damit die Befehle funktionieren, "LIBS = -lX11" vor den Build-Befehlen hinzufügen.

Build erfolgt auf der Kommandozeile

Ressourcen

Installation (oder virtuelle Maschine) Ubuntu und Fedora

Schritt für Schritt Beschreibung

Schritt 01: Verwenden einer virtuellen Maschine

Die Verwendung von Virtualisierungstools wie VirtualBox oder Vmware ist oft der beste Ansatz für das Paketieren anderer Systeme. Einerseits ermöglicht Ihnen dieser Ansatz eine relativ saubere Basisinstallation, vergleichbar mit den Einstellungen, mit denen andere wahrscheinlich arbeiten werden. Dies bedeutet auch, dass Sie eine Sammlung von Zielsystemen mit unterschiedlichen Distributionen erhalten können. Darüber hinaus ermöglichen die meisten Virtualisierungstools die Emulation verschiedener Architekturen, und daher ist es möglich, 64-Bit-Betriebssysteme auf einer 32-Bit-Plattform auszuführen, obwohl die Leistung darunter leidet.

Schritt 02: Von Anfang an anfangen

Wenn in Ubuntu oder Fedora etwas schief geht, ist es absolut sicher, einfach das Originalverzeichnis zu löschen und von vorne zu beginnen. Beachten Sie, dass die Debian-Tools das Originalarchiv modifizieren, sodass Sie mit einer neuen Kopie beginnen müssen.

Teil 1: Debian

Schritt 03: Installieren Sie die Build-Umgebung

Wir beginnen mit der Installation der meisten Tools, die wir zum Erstellen von Programmen aus dem Quellcode benötigen. Wählen:

$ sudo apt-get install build-essential autoconf automake autotools-dev

Jetzt müssen wir die Tools installieren, die verwendet werden, um mit DEB-Paketen zu arbeiten. Tun Sie es mit dem folgenden Befehl ...

$ sudo apt-get install dh-make debhelper devscripts fakeroot xutils lintian pbuilder

Schritt 04: Erstellen Sie einen GPG-Schlüssel

Wenn Sie in der Vergangenheit noch nicht erstellt haben Öffentlicher Schlüssel GPG, Sie müssen es jetzt erstellen, um Pakete signieren zu können. Geben Sie zunächst den Text gpg –gen-key ein. Wählen Sie die Standardeinstellungen und geben Sie Ihren richtigen Namen und Ihre Kontaktinformationen ein, wenn Sie dazu aufgefordert werden. Achten Sie darauf, alle Daten sorgfältig zu notieren, da wir sie später in der Konfigurationsdatei genau abgleichen müssen. Führen Sie dann den Befehl ls ~ / .gnupg aus, um sicherzustellen, dass der neue Schlüssel existiert (dies ist die Datei name_lastname.gpg). Erstellen Sie daraus einen öffentlichen Schlüssel:

Gpg -a --output ~ / .gnupg / .gpg --export "[Ihr Name]"

Importieren Sie es mit:

Gpg --import ~ / .gnupg / .gpg

Schritt 05: Laden Sie das Paket herunter

In diesem Beispiel werden wir die neueste Version des Dillo-Webbrowsers herunterladen und erstellen. Gehen Sie zur Dillo-Website (www.dillo.org) und laden Sie das neueste .tar.bz-Archiv herunter. Verwenden Sie den Befehl mkdir ~ / srcand, um ein Quellverzeichnis zu erstellen und das Archiv dorthin zu verschieben.

Schritt 06: Entpacken Sie das Archiv

Entpacken Sie das Archiv mit tar-Befehle-xjvf [Archivname] .tar.bz2. Beachten Sie, dass die Einhaltung der Verzeichnisnamenskonventionen (Paketversion) für unsere Zwecke wichtig ist, und glücklicherweise ist dies beim Dillo-Paket der Fall. Wichtig ist auch, dass sich das Quellarchiv eine Ebene über dem Quellverzeichnis befindet.

Schritt 07: Konfiguration für Debian

Verschieben Sie das dh_make-Skript in das gerade entpackte Verzeichnis, das den größten Teil der Arbeit erledigt - fügen Sie die Konfigurationsdatei hinzu und erstellen Sie die Verzeichnisstruktur, die Teil des zuvor hinzugefügten Entwickler-Toolkits ist.

Dh_make -e -c Lizenz -f ../

In unserem Beispiel, Befehlszeile es wird so aussehen:

Dh_make -c gpl3 -e [E-Mail geschützt]-f ../dillo-3.0.3.tar.bz2

Wählen Sie eine Binärdatei aus, wenn Sie dazu aufgefordert werden. Das Hilfsskript sollte ein Verzeichnis namens Debian im Quellverzeichnis erstellen.

Schritt 08:Öffnen Sie die Steuerdatei

Öffnen in Texteditor eine Kontrolldatei im Debian-Unterverzeichnis. Füllen Sie den Abschnitt "Home" aus (verwenden Sie Google, um die Liste der Debian-Programme auszufüllen) und die Beschreibungsfelder für diese Datei.

Schritt 09: Erkunden Sie die bestehenden Abhängigkeiten

Sie können untersuchen, welche Abhängigkeiten zum Ausführen des gebündelten Programms erforderlich sind. Wechseln Sie in Ihr Quellverzeichnis und geben Sie dpkg-depcheck -d ./configure in ein Terminal ein. Wenn Sie dies tun, erhalten Sie Fehlermeldungen, die angeben, welches Paket fehlt, das zum Erstellen des Programms erforderlich ist (separat mitgeliefert). Sie können dieses Paket öffnen, indem Sie sudo apt-get build-dep [Paketname] eingeben, und dies sollte helfen, wenn das Paket im Repository der Distribution unterstützt wird. Wenn es nicht unterstützt wird, müssen Sie dpkg-depcheck -d ./config wiederholt ausführen und Pakete manuell hinzufügen, indem Sie psudo apt-get install [Paketname] eingeben.

Schritt 10: Abhängigkeiten zur Steuerdatei hinzufügen

Wenn alle Schritte aus dem vorherigen Schritt abgeschlossen sind, sollten Sie über eine Liste aller erforderlichen Pakete verfügen. Fügen Sie diese Liste der Abhängigkeiten zum Abschnitt "hängt:" der Steuerdatei hinzu. Das Element in der Liste muss durch Komma und Leerzeichen getrennt werden.

Versuchen Sie diesen Schritt so vollständig wie möglich und überspringen Sie ihn nicht. Quelle: ist normalerweise Hauptseite Projekt. Ersetzen Sie im Abschnitt Dateien: * die Copyright-Informationen durch die Namen der Autoren des Projekts. Sie können ein Beispiel für das Ausfüllen des Abschnitts Files: debian / * sehen, in dem die entsprechenden Informationen eingegeben werden sollen. Möglicherweise müssen Sie ein bisschen Detektiv sein, um die Informationen zu finden, die Sie benötigen. Suchen Sie im Quellverzeichnis nach Dateien wie AUTHORS und COPYING.

Schritt 12: Bearbeiten Sie die Änderungsprotokolldatei

Öffnen Sie die Änderungsprotokolldatei und stellen Sie sicher, dass der Name und die Adresse Email sind die gleichen, die Sie beim Erstellen des GPG-Schlüssels eingegeben haben. Normalerweise kann das Hilfsskript den Benutzernamen zur Datei hinzufügen, nicht Ihren echten Namen. Wie bei der Copyright-Datei sollten Sie diesen Abschnitt nicht überspringen, da er den Paketerstellungsprozess stoppen oder das falsche Paket erstellen könnte.

Schritt 13: Paket erstellen

Wenn alles richtig konfiguriert ist, können wir endlich das DEB-Paket bauen. Wechseln Sie in das Quellcodeverzeichnis und geben Sie dpkg-buildpackage -b ein, um das Paket zu erstellen, das im Verzeichnis ~ / src / abgelegt wird. Erstellen Sie beispielsweise ein Paket mit dem Befehl dpkg -I [Paket]. Um die Einhaltung der Debian-Richtlinien zu überprüfen, verwenden Sie den Befehl lintian [package], um das Lintian-Programm auszuführen. Beachten Sie, dass dieses Tool bekanntermaßen streng ist und Sie entscheiden, ob einige geringfügige Warnungen bei Nichteinhaltung für Sie akzeptabel sind. Installieren Sie abschließend das Paket mit dem Befehl sudo dpgk -i [Paket].

Teil 2: Erstellen von RPMs in Fedora

Schritt 14:Öffnen Sie die Steuerdatei

Wechseln Sie in den Root-Benutzermodus, indem Sie su eingeben. Beginnen Sie mit der Installationsgruppe der Entwicklungstools in yum und verwenden Sie dann yum, um den gcc-c ++ fedora-bundler zu installieren. Führen Sie den Befehl usermod -a -G mock aus, um Ihren Benutzer der Mock-Gruppe hinzuzufügen. Auf diese Weise können wir den Build-Vorgang abschließen, ohne in die Root-Benutzerrolle wechseln zu müssen.

Schritt 15: Erstellen Sie eine Build-Umgebung

Drücken Sie Strg + D, um sich von der Root-Rolle abzumelden. Geben Sie rpmdev-setuptree ein, um den benötigten Verzeichnisbaum (unter ~ / rpmbuild) zu erstellen.

Schritt 16: Laden Sie das Archiv herunter und verschieben Sie es an den gewünschten Ort

Laden Sie das Dillo-Paket von der Dillo-Website herunter und verschieben Sie das Archiv in das entsprechende Verzeichnis - geben Sie mv [Archivname] ~ / rpmbuild / SOURCES ein.

Schritt 17 Erstellen Sie eine .spec-Datei

Red Hat-basierte Distributionen wie Fedora verwenden .spec-Dateien, um den Build-Prozess zu spezifizieren. Wechseln Sie mit dem Befehl cd ~ / rpmbuild / SPECS / andcreateablank.spec in das Verzeichnis, in dem sich diese Dateien befinden, und erstellen Sie mit dem Befehl rpmdev-newspec dillo eine leere .spec-Datei.

Schritt 18 Bearbeiten Sie die .spec-Datei

Führen Sie den Befehl gedit dillo.spec aus. Füllen Sie die Felder Version, Zusammenfassung, Lizenz (in diesem Fall GPLv3 +) aus. Die URL ist die Startseite des Projekts; Source0 gibt die Adresse des Quellcodes an. Geben Sie Kommentare in den Feldern BuildRequires und Requires ein. Fügen Sie dem Bereich "% description" eine vollständige Beschreibung hinzu.

Schritt 19 Quellcode erstellen

Wenn das Paket auf dem System überhaupt unterstützt wird, führen Sie den Befehl yum-builddep [Paketname] aus. Andernfalls müssen Sie den Build-Befehl wiederholen, um Fehlermeldungen zu erhalten, oder nach Dokumentation im Quellarchiv suchen. Geben Sie im Verzeichnis SPEC rpmbuild -ba [Paketname] .spec ein. Wenn dieser Build fehlschlägt und Sie Meldungen über zusätzliche Dateien erhalten, die nicht entpackt wurden, wählen Sie diese Dateiliste aus, kopieren Sie sie in den Abschnitt % files der Datei.spec und führen Sie den Build-Befehl erneut aus. Das Paket befindet sich nun im RPMS-Verzeichnis. Geben Sie rpm -ivh [Paket] ein, um es zu installieren. Typ U/min -qa | grep [Paket], um sicherzustellen, dass es installiert ist.

Ich werde versuchen, den Prozess der Erstellung von Deb-Paketen so einfach wie möglich am Beispiel von Ruby-Zookeper zu erklären. Ich warne Sie sofort, dass die von mir beschriebene Methode zum Verpacken von Rubin-Edelsteinen falsch ist, es ist besser, dafür gem2deb zu verwenden, aber da Baue Ruby-Zookeper aus Quellen mit gem2deb letzte Version Es ist mir nicht gelungen, dann ist hier die einfachste Montagemethode.

Wenn Sie Ruby-Pakete wie empfohlen über gem2deb erstellen möchten, ist es besser, die Zeile hinzuzufügen

Exportiere DH_RUBY_IGNORE_TESTS = alle / exportiere DH_RUBY_IGNORE_TESTS = alle

in debian / regeln.

Weil Wir werden Ruby-Code erstellen, dann brauchen wir Ruby und eine Reihe von Tools zum Erstellen von Deb-Paketen.

Sudo apt-get install ruby ​​dpkg-dev

Wenn Sie haben alte Version ruby, dann ist kein gem-Befehl darin enthalten, müssen Sie auch das rubygems-Paket installieren oder ruby ​​aktualisieren.

Jetzt installieren wir das Gem fpm die ein deb-Paket für uns erstellen wird.

Sudo gem install fpm fpm -s gem -t deb zookeeper

Im aktuellen Verzeichnis haben wir das Paket rubygem-zookeeper_1.4.11_amd64.deb, es scheint, dass dieses bereits in der Tasche ist, aber da wir brauchen ein Quellpaket, um daraus deb kompilieren zu können, zum Beispiel in OBS, dann machen wir weiter.

Lassen Sie uns ein Build-Verzeichnis erstellen

Cp rubygem-zookeeper_1.4.11_amd64.deb ~ / cd mkdir -p ruby-zookeeper / fakeroot cd ruby-zookeeper / fakeroot

Lassen Sie uns den Inhalt des neu zusammengestellten Pakets darin extrahieren.

Dpkg-deb -R ~ / rubygem-zookeeper_1.4.11_amd64.deb ruby-zookeeper_1.4.11-1

Jetzt erstellen wir die Dateien, die zum Erstellen des Pakets erforderlich sind. Sie sollten sich im debian-Verzeichnis befinden. Wir können einige der Dateien aus dem entpackten Paket kopieren.

Mkdir debian cp rubygem-zookeeper_1.4.11-1 / DEBIAN / control debian / control

Lassen Sie uns es in den nächsten Zustand bearbeiten. Vergessen Sie nicht, den Betreuer zu wechseln

Quelle: ruby-zookeeper Betreuer: Abschnitt: ruby ​​Build-Abhängig: debhelper (> = 7.0.50 ~) Priorität: extra Homepage: https://github.com/slyphon/zookeeper Paket: ruby-zookeeper Architektur: amd64 Abhängig: $ (shlibs: Abhängig) , $ (misc: Depends), ruby ​​​​Beschreibung: Ein Low-Level-Multi-Ruby-Wrapper um die ZooKeeper-API-Bindungen. Eine benutzerfreundlichere Benutzeroberfläche finden Sie unter http://github.com/slyphon/zk. Derzeit unterstützt: MRT: (1.8.7, 1.9.2, 1.9.3), JRuby: ~> 1.6.7, Rubinius: 2.0.testing, REE 1.8.7. ... Diese Bibliothek verwendet Version 3.4.5 von Zookeeper-Bindungen.

Wir brauchen auch Debian/Regeln. Lass es uns erstellen. override_dh_shlibdeps wird benötigt, um die Verlinkung der Zookeeper-Bibliotheken nicht zu überprüfen, weil es geht nicht.

#! / usr / bin / make -f # - * - Makefile - * -%: dh [E-Mail geschützt] override_dh_shlibdeps: wahr

Debian-/Regelregisterkarten sind erforderlich und können nicht durch Leerzeichen ersetzt werden. Machen wir es ausführbar.

Chmod + x debian / regeln

Usr / * var / *

Jetzt erstellen wir debian / changelog und schreiben dort:

Rubin-Zookeeper (1.4.11-1) UNVERÖFFENTLICHT; Dringlichkeit = mittel * Erstveröffentlichung - Wurzel Mi, 25. Nov. 2015 20:01:55 +0300

Wir brauchen auch debian / compat

Echo 7> debian / kompatibel

Kopieren wir die zu installierenden Dateien in das lokale Verzeichnis und löschen den Ordner mit dem entpackten Paket, es wird uns nicht mehr nützen.

Mv ruby-zookeeper_1.4.11-1 / (usr, var). rm -r rubin-zookeeper_1.4.11-1

Lassen Sie uns ein neues Paket sowie ein Quellpaket erstellen.

Dpkg-buildpackage -rfakeroot -uc -F

Im obigen Verzeichnis haben wir alle notwendigen Dateien.

Ll .. total 5528 drwxr-xr-x 3 Wurzel Wurzel 4096 20. Dez 13:32 ./ drwx ------ 12 Wurzel Wurzel 4096 20. Dez 13:31 ../ drwxr-xr-x 5 Wurzel Wurzel 4096 Dez 20 13:28 fakeroot / -rw-r - r-- 1 Wurzel Wurzel 1261 20. Dezember 13:32 ruby-zookeeper_1.4.11-1_amd64.changes -rw-r - r-- 1 Wurzel Wurzel 2375044 20. Dezember 13: 32 Ruby -zookeeper_1.4.11-1_amd64.deb -rw-r - r-- 1 Wurzel Wurzel 565 20. Dezember 13:32 ruby-zookeeper_1.4.11-1.dsc -rw-r - r-- 1 Wurzel Wurzel 3263381 20. Dezember 13: 32 ruby-zookeeper_1.4.11-1.tar.gz

Sie können den Inhalt des resultierenden Deb-Pakets überprüfen

Heute erzähle ich euch an einem abstrakten Beispiel wie rechts Erstellen Sie ein *.deb-Paket für Ubuntu / Debian. Wir machen das Paket binär. Pakete, die Binärdateien aus dem Quellcode kompilieren, werden hier nicht berücksichtigt: Wenn Sie die unten aufgeführten Kenntnisse in Zukunft anhand vorgefertigter Beispiele beherrschen, können Sie das Wesentliche verstehen und analog handeln :)

In dem Artikel wird kein unnötiges "manuell" herumgefummelt: Das Paketformat hat sich zu einer ziemlich einfachen und vor allem logischen Struktur entwickelt, und alles wird buchstäblich auf dem Knie mit ein paar spezialisierten Dienstprogrammen erledigt.

Als Bonus gibt es am Ende des Artikels ein Beispiel schnelle Erstellung eigenes lokales Repository: Wenn Sie Pakete aus dem Repository installieren, können Sie Abhängigkeiten automatisch verfolgen, und natürlich! - alles mit einem Konsolenbefehl auf mehreren Rechnern installieren :)

Für diejenigen, die nicht in das mächtige Software-Installationssystem von Linux einsteigen möchten, empfehle ich den Besuch der CheckInstall-Programm-Website: Sie erstellt automatisch ein Deb-Paket aus dem Befehl "make install" ;) Und wir, zusammen mit den Neugierigen -

Quellen von

Informationen werden von vielen Stellen abgerufen, aber hier sind zwei Hauptpunkte:
  • Debian.org: Debian-Richtlinienhandbuch - offiziell
  • Ubuntu-Wiki: PackagingGuide / Basic
In diesem Artikel wurden die Grundlagen der Paketerstellung detailliert beschrieben, die ausreichen, um eine ausreichende Kontrolle über die Anwendungsinstallation zu ermöglichen. Fortgeschrittenere Funktionen wurden weggelassen, aber für Interessierte stehen direkte Links zur Dokumentation zur Verfügung.
Der Artikel ist keine Kopie oder Übersetzung einer Dokumentation: Es ist eine Sammlung von Wissen, die in Form von Notizen herumlag und nun in Form eines Artikels gerahmt ist. Aus Gründen der Übersichtlichkeit gibt es überall Beispiele, Erklärungen an den Fingern, praktische Funktionen, die ich gefunden habe und einiges typische Fehler das kann man unwissentlich machen.

Vorbereitung

Warum ist das alles?
Ja, CheckInstall kann ein funktionierendes Paket erstellen, aber es unterstützt nicht alle Extras, zu denen Deb-Pakete fähig sind :) Nämlich:
  • Skripte, die vor, nach und anstelle der Installation des Pakets ausgeführt werden :)
  • Automatische Verwaltung von Konfigurationsdateien: Das Paket erlaubt Ihnen nicht, alte Konfigurationen ohne Nachfrage durch neue zu überschreiben
  • Arbeiten mit Vorlagen: die Möglichkeit, dem Benutzer während der Installation Fragen zu stellen (!!!)
  • Andere Paketdateien ändern
Was wird benötigt
Natürlich reichen tar-, gz-, ar-Archiver aus, um ein vollwertiges Paket zu erstellen, aber Sie können unnötigen Aufwand ausschließen und die erstellten Tools verwenden, um das Leben zu erleichtern :)
Wir stellen:
$ sudo apt-get install dpkg debconf debhelper lintian
Was werden wir machen
Als Beispiel wird ein Skript /usr/bin/super.sh betrachtet. Egal was drin ist, Hauptsache wie es an der richtigen Stelle erscheint :)
Ordner vorbereiten
Erstellen Sie im Home-Verzeichnis (oder wo immer Sie möchten) einen Ordner, der alle Dateien des zukünftigen Pakets enthält: mkdir ~ / supersh. Im Folgenden nennen wir es Paket root.
Erstellen Sie im Stammverzeichnis des Pakets einen Ordner "DEBIAN" (in Großbuchstaben, das ist wichtig!). Dieser Ordner enthält Informationen, die die Erstellung des Pakets steuern, und wird bei der Installation des Pakets nicht auf die Festplatte kopiert.
Außerdem enthält der Root-Ordner des Pakets das zukünftige „Disk-Root“: Bei der Installation des Pakets werden alle Dateien (außer dem „debian“-Ordner) in das Root/entpackt. Daher sollte unser Skript entlang dieses Pfads liegen, relativ zum Stammverzeichnis des Pakets: "usr / bin / super.sh"
Weiß auf Schwarz:
mkdir -p ~ / supersh / DEBIAN # Kontrollordner
mkdir -p ~ / supersh / usr / bin # Pfad zum Skript
cp super.sh ~ / supersh / usr / bin / # kopiere unser Skript an die richtige Stelle
Als Ergebnis haben wir:
supersch / DEBIAN /
supersh / usr /
supersh / usr / bin /
supersh / usr / bin / super.sh

Paketerstellung: DEBIAN / *

Wie gesagt, der Ordner DEBIAN enthält die Dateien, die während der Installation verwendet wurden. Hier werde ich (mit Beispielen) jede Datei beschreiben.
Um ein vollwertiges Paket zu erstellen, reicht die Steuerdatei "control", der Rest wird entweder zum Anhängen verwendet Textinformationen(Changelog, Lizenz) oder um erweiterte Installationsoptionen für Anwendungen zu verwalten.
Wählen Sie aus den unten beschriebenen Dateien im Ordner DEBIAN / * die erforderlichen aus und füllen Sie sie gemäß den Anweisungen aus :)
In unserem Beispiel nur erforderlich DEBIAN / Kontrolle.
DEBIAN / Kontrolle: Grundlegende Informationen
control ist die zentrale Datei des Pakets, die alle Haupteigenschaften beschreibt. Die Datei ist eine Textdatei bestehend aus Paaren "Attribut: Wert". Sie können Kommentare verwenden: das "#"-Symbol am Anfang der Zeile (das Feature wurde in Version dpkg> = 1.10.11 hinzugefügt, Sie sollten nicht auf Kommentare hoffen :).
Die Tabelle listet alle Felder auf, die für die Steuerdatei definiert sind. Pflichtfelder sind markiert Fett gedruckt: Ohne sie wird das Paket nicht als korrekt angesehen.
Attribut Beschreibung Beispiele von
- Basic -
Paket: Paketname: - Nur lateinische Buchstaben, Zahlen und ein Bindestrich. Der Name wird während der Installation verwendet: apt-get install Paket: supersh
Ausführung: Paketversion (und Programme darin). Wird verwendet, um zu bestimmen, ob aktualisiert werden soll.
Das Format ist wie folgt:<версия_программы>-<версия_пакета> .
Empfehlen immer geben Sie die Version des Pakets an: Wenn die Struktur des Pakets geändert wird, wird die Zahl um eins erhöht.
Die erlaubten Zeichen sind völlig frei: Datum und Buchstaben können verwendet werden. Sehen Sie sich heute Beispiele in Ihrem Repository an :)
Version: 1.0-1
Version: 2009.12.12-1
Bietet Der Name der Anwendung (eventuell virtuell), die durch die Installation dieses Pakets beim System registriert wird.
Es wird selten verwendet, hauptsächlich wenn ein Paketname geändert werden muss oder wenn mehr als ein Paket die gleiche Funktionalität bietet. Beispielsweise stellen die Apache- und nginx-Pakete httpd bereit: Bietet: httpd-Daemon-Fähigkeit
Beim Installationsversuch ist wahrscheinlich ein Fehler aufgetreten: "ist ein virtuelles Paket". Das ist es :)
Bietet: supersh
Betreuer Der Name und die E-Mail-Adresse des Paketbetreuers: die Person, die die Anwendung "debianisiert" hat.
Das Format ist willkürlich, aber der Name wird akzeptiert
Betreuer: o_O Tync
Die Architektur Die Prozessorarchitektur, für die das Paket bestimmt ist.
Gültige Werte: i386, amd64, all, source
all wird für Skripte verwendet: sie sind portabel, oder? :)
source wird für kompilierte Quellpakete verwendet
Architektur: alle
Abschnitt Definiert die Aufgabe, für die die Anwendung typischerweise verwendet wird (Anwendungsgruppe).
Mögliche Werte: admin, base, comm, contrib, devel, doc, editors, electronics, embedded, games, gnome, graphics, hamradio, interpreters, kde, libs, libdevel, mail, math, misc, net, news, non-free , oldlibs, otherosfs, perl, python, wissenschaft, shells, sound, tex, text, utils, web, x11
Abschnitt: Sonstiges
Beschreibung Paketbeschreibung.
Die Beschreibung besteht aus zwei Teilen: einer kurzen Beschreibung (70 Zeichen) in derselben Zeile und einer langen Beschreibung in den nachfolgenden Zeilen. beginnend mit einem Leerzeichen.
In der erweiterten Beschreibung werden alle Zeilenumbrüche ignoriert. Ein einzelner Punkt wird verwendet, um \ n einzufügen.
Beschreibung: Kurz.
␣Lang
geht hier.
␣.
␣Neue Zeile.
- Verbindungen und Abhängigkeiten -
Kommt darauf an Eine durch Kommas getrennte Liste von Paketen, die zum Installieren dieses Pakets erforderlich sind.
Nach dem Paketnamen können Sie mit den Operatoren eine Versionseinschränkung in Klammern angeben:<<, =, >>, <=, >=. Wenn kein Operator angegeben ist -> = wird verwendet
Abhängig von: dpkg, libz (> = 1.2.3), jpeg (= 6b), png (< 2.0)
Vorher abhängig Liste der Pakete, die während der Installation dieses Pakets erforderlich sind.
Diese Abhängigkeiten können für Paketinstallationsskripte erforderlich sein: zum Beispiel erfordert das Flash-Installer-Paket wget
Versionsbeschränkungen können verwendet werden (siehe Abhängig).
Abhängig von: wget (> = 1.0)
Konflikte Liste der Pakete, die nicht gleichzeitig installiert werden können.
Die Installation schlägt fehl, wenn mindestens eines der aufgeführten Pakete bereits installiert ist.
Konflikte: Schrott
Ersetzt Liste der Pakete, deren Dateien von diesem Paket geändert werden.
Erforderlich, wenn ein "Patch-Paket" erstellt wird, das etwas ändert: Andernfalls tritt beim Ersetzen von Dateien eines anderen Pakets während der Installation ein Fehler auf. Zum Beispiel habe ich ein solches Paket, das UT2004 patcht und den Sound des Raketenwerfers entfernt :)
Ersetzt: ut2004
Empfiehlt Liste der für die Installation empfohlenen Pakete
Diese Pakete sind optional, werden aber normalerweise in Verbindung mit dem aktuellen verwendet.
Empfehlt: Superplattform
Schlägt vor Liste der zur Installation angebotenen Pakete.
Diese Pakete sind optional, aber das Programm funktioniert noch besser damit :) Theoretisch sollte der Paketmanager anbieten, sie zu installieren.
schlägt vor: supersh-module
Build-Abhängig (Architektur: nur Quelle)
Liste der Pakete, die zum Kompilieren von Quellen erforderlich sind.
Wie Depends, aber logisch getrennt.
Build-Abhängig: cmake
- extra -
Installierte Größe Die Größe der Paketdateien in Kilobyte.
Nur eine auf die nächste ganze Zahl gerundete Zahl. Wird vom Paketmanager verwendet, um den erforderlichen Gesamtspeicherplatz zu bestimmen.
Installierte Größe: 3
Priorität Paketpriorität: wie wichtig es im System ist
Mögliche Werte: extra, optional, standard, wichtig, erforderlich (solche Pakete werden überhaupt nicht entfernt!).
Priorität: optional
Wesentlich Wenn Sie dieses Attribut auf yes setzen, kann das Paket nicht entfernt werden. Wesentlich: ja
Herkunft Zeile: woher die Programme im Paket kamen. Normalerweise wird die Site-URL, die E-Mail-Adresse oder der Name des Autors verwendet. Herkunft: Gehirn
X-Quelle Vollständiger Link zum * .tar.gz-Quellarchiv X-Quelle: ... *.Tgz

Ja, die Steuerdatei hat so solide Fähigkeiten :)
Und in unserem Beispiel sieht es so aus:
Paket: supersh
Version: 1.0-1
Abschnitt: Sonstiges
Architektur: alle
Abhängig von: bash, sed (> = 3.02-8)
Betreuer: o_O Tync
Beschreibung: Super Shell-Skript
␣Ein super Beispielskript.
␣.
␣Es tut nichts :)
DEBIAN / Copyright: / Lizenz
Lizenztext. Die Datei ist nicht erforderlich, aber es ist besser, Ihre Urheberschaft hervorzuheben;)
DEBIAN / Änderungsprotokoll: Änderungsprotokoll
Changelog in speziellem Format: Wird von dpkg verwendet, um die Versionsnummer, Revision, Verteilung und Wichtigkeit eines Pakets zu erhalten. Anschauen ist besser ;) aber ich gebe nur ein Beispiel:
supersh (1.0-1) stabil; Dringlichkeit = mittel

O_O Tync So, 13 Dez 2009 00:11:46 +0300

DEBIAN / conffiles: Liste der Konfigurationsdateien
Normalerweise enthalten Pakete Leerzeichen Konfigurationsdateien, zum Beispiel in / etc. Wenn die Konfiguration im Paket aktualisiert wird, verliert der Benutzer natürlich seine bearbeitete Konfiguration. Dieses Problem kann leicht gelöst werden, indem Ordner wie "config.d" verwendet werden, deren Inhalt in der Hauptkonfiguration enthalten ist und die doppelten Optionen ersetzt.
Die Datei DEBIAN / conffiles bietet eine andere Lösung des Problems: Sie enthält eine Liste von Konfigurationsdateien (eine pro Zeile). Wenn in der aktuellen Version des Pakets eine dieser Dateien aktualisiert wird, erhält der Benutzer eine Warnung über den Konflikt der Versionen der Konfigurationen und kann wählen: Löschen, Ersetzen oder Zusammenführen.
Jeder Linux-Benutzer, der in Configs gegraben hat, ist wahrscheinlich auf diese Situation gestoßen :) Und die Beine wachsen von hier aus.
Jede Zeile muss einen vollständigen absoluten Pfad zu jeder Konfiguration haben. Zum Beispiel:
/etc/supersh/init.conf
/etc/supersh/actions.conf
DEBIAN / dirs: Liste der zu erstellenden Ordner
"Eine Liste absoluter Pfade zu Ordnern, die vom Programm benötigt werden, aber aus irgendeinem Grund nicht erstellt werden." - liest die offizielle Dokumentation. In der Praxis werden hier alle Ordner aufgelistet, die vom Programm auf die eine oder andere Weise verwendet werden: und wo sich die Binärdateien befinden und die vom Programm verwendet werden.
Eine pro Zeile. Zum Beispiel:
/var/log/supersh
/var/lib/supersh
Bequem zu verwenden, um mehrere leere Ordner zu erstellen.
DEBIAN / Menü: Menüpunkte erstellen
Eine knifflige Datei zum Erstellen von Menüelementen. Bei mir hat es nie funktioniert :) Man hat das Gefühl, dass sein Inhalt entweder in ungewöhnlichen verwendet wird Fenstermanager, entweder in einer Art Konsolenmenü ... oder es wurde früher verwendet und wurde vergessen :)
Beispiel:
? Paket (supersh): needs = "text" section = "Applications / Programming" title = "(! SPRACHE: Super Shell Script" command="/usr/bin/super.sh" !}
TODO: Finden Sie heraus, warum Sie es brauchen. Dies ist in man5 menufile geschrieben, um ehrlich zu sein, habe ich mich nicht damit befasst :)
UPD: Korrekter Weg, um einen Menüpunkt hinzuzufügen
Die Datei /DEBIAN / menu erzeugt Unbekanntes und es ist nicht klar wo: Die Elemente des grafischen Menüs werden noch nicht erstellt. Deshalb machen wir es richtig :)
In /usr/share/applications sehen wir eine Reihe von *.desktop-Dateien: Dies sind die Menüpunkte. Sie repräsentieren Textdateien mit Syntax wie eine ini-Datei. Wir öffnen, lernen, tun dasselbe und legen die resultierende * .desktop-Datei in usr / share / applications / ab. Das Symbol dafür sollte sich in usr / share / pixmaps befinden.
Danach müssen Sie dem postinst-Skript den Befehl update-menus menu update hinzufügen:
if ["$ 1" = "configure"] && [-x "` welche Update-Menüs 2> / dev / null` "]; dann
Update-Menüs
fi

Die Arbeit mit Paketinstallationsskripten wird im Folgenden erläutert.
Danke an Condorious für den Tipp :)

DEBIAN / md5sums: Prüfsummen von Dateien
Wird verwendet, um die Integrität eines Pakets zu überprüfen. Eine wichtige Datei.
So ausgefüllt (cwd = Paketstamm):
$ md5deep -r usr> DEBIAN / md5sums
DEBIAN / watch: Überwachung der Site, von der das Programm heruntergeladen wurde
Diese Funktion ist nützlich, wenn Sie mehrere Dutzend Pakete verwalten und es schwierig ist, alle Updates nachzuverfolgen.
Die Datei enthält Anweisungen für die Programme uscan und uupdate. Mit dieser Funktion können Sie die Site verfolgen, von der die Paketquellen bezogen wurden, und die Qualitätskontrolle der gesamten Verteilung sicherstellen.
Beispiel:
# Skript für die Version des Site-Verzeichnismusters
ftp.obsession.se / gentoo gentoo - (. *) \.tar \ .gz debian uupdate
DEBIAN / (preinst | postinst | prerm | postrm): Installationsskripte
Insgesamt können Sie bis zu vier Skripte in einem Paket erstellen:

Bitte beachten Sie, dass Fehler in diesen Skripten sind nicht eingeloggt: nichts Interessanteres als der Skript-Returncode wird irgendwo gespeichert und die Protokollierung muss manuell erfolgen! Benutzer eines meiner Pakete schlugen bei der Installation unter Linux Mint fehl, und es gab nicht einmal die Möglichkeit, sie nach einem Fehlerprotokoll (das nicht da ist) zu fragen, um den Grund anzugeben :)
Ich empfehle, am Anfang jedes Skripts das folgende Leerzeichen zu verwenden: Es speichert alle auftretenden Fehler in syslog.
#! / bin / bash
set -e # bei jedem Fehler fehlschlagen
set -u # nicht gesetzte Variablen als Fehler behandeln

# ====== [Trap-Fehler] ====== #
set -E # Shell-Funktionen erben ERR-Trap

# Nicht-normale Ausstiegssignale einfangen:
# 1 / HUP, 2 / INT, 3 / ENDE, 15 / TERM, ERR
trap err_handler 1 2 3 15 ERR
Funktion err_handler (
lokaler exit_status = $ (1: - $?)
logger -s -p "syslog.err" -t "ootync.deb" "supersh.deb script" $ 0 "Fehlercode $ exit_status (Zeile $ BASH_LINENO:" $ BASH_COMMAND ")"
beenden $ exit_status
}

Ihr Installationsskriptcode ...

ACHTUNG: der Rohling wurde noch nicht ausgiebig getestet, überprüfen Sie ihn noch einmal! Ich bin vor kurzem auf die Unmöglichkeit des Debuggens gestoßen :)

DEBIAN / Vorlagen: Vorlagen für Dialoge
Wie bereits erwähnt, können Sie im DEBIAN / config-Skript dem Benutzer Fragen stellen: eine Zeile eingeben, eine der Optionen auswählen, das Kontrollkästchen aktivieren, ... Dies macht die "Bibliothek". Bash-Funktionen debhelper des debconf-Pakets, das auch viele nützliche Dinge enthält. Ich betrachte sie hier nicht :)
Die Datei DEBIAN / templates enthält Daten, die zum Anzeigen von Dialogfeldern (GUI oder ncurses) verwendet werden. Die Datei enthält Blöcke, die durch getrennt sind leere Zeile... Jeder Block definiert die Ressourcen, die in einem bestimmten Dialogfeld verwendet werden.
Die Kopfzeile für alle Arten von Dialogen ist Standard:
Vorlage: supersh / Vorlagenname
Typ: Schnur
Standard: Standardwert
Beschreibung: Dialogtitel
␣Dialog-Text

Vorlage – eine (innerhalb eines Pakets) eindeutige Vorlagenkennung. Wenn Sie im Skript einen bestimmten Dialog aufrufen müssen, wird dieser Name verwendet.
Typ - der Typ der Vorlage. Folgende Typen sind definiert: string, password, boolean, select, multiselect, text, note, error.
Standardwert - der Standardwert: Der Benutzer kann ihm einfach zustimmen.
Beschreibung - Sie besteht wie in der Steuerdatei aus zwei Feldern: einer Kurzbeschreibung und einem Langtext. Das erste ist der Titel des "Fensters", das zweite ist eine detailliertere Beschreibung der Anforderungen des Benutzers. Es wird empfohlen, keine Wörter wie "Enter" zu verwenden, sondern sofort das Wesentliche: "Gruß das Skript", "Mount Point", ...

Art der Vorlagenbeschreibung
Schnur Aufforderung zur Eingabe einer Textzeichenfolge
Passwort Passwortabfrage.
Für diesen Vorlagentyp gibt es aus offensichtlichen Gründen keinen Standardwert :)
boolesch Häkchen :) Hat einen Stringwert "true" oder "false"
auswählen Die Möglichkeit, eine von mehreren Optionen auszuwählen.

Auswahl: ja, nein, vielleicht
Mehrfachauswahl Die Möglichkeit, mehrere Optionen mit Häkchen auszuwählen.
Die Optionen werden in einem zusätzlichen Vorlagenattribut angeboten:
Wahlmöglichkeiten: Sex, Drogen, Rock'n'Roll
Text Zeigt Text an: einige nicht sehr wichtige Informationen
Hinweis Zeigt Text an: wichtige Informationen
Error Zeigt Text an: sehr wichtige Informationen, kritisch.

Es gibt auch keinen Standardwert für die Text-, Notiz-, Fehlervorlagen, da sie nur Informationen anzeigen :)
Spielen wir mit der folgenden Vorlage:
Vorlage: supersh / gruß
Typ: Schnur
Beschreibung: Willkommensnachricht
␣Die Nachricht, mit der das Skript Sie willkommen heißen soll.
Standard: Grüße, mein Meister!
Die Grundlagen der Verwendung von Debconf und Debhelper
Dies sind nur praktikable Skizzen. Im Original können Sie hier über Vorlagen und das Arbeiten mit ihnen lesen: man 7 debconf-devel :)
Um Vorlagen in Ihrem DEBIAN / config-Konfigurationsskript zu verwenden, müssen Sie zuerst die Debhelper-Funktionen aktivieren:
... /usr/share/debconf/confmodule. Außerdem muss diese Datei im postinst-Skript enthalten sein: sonst wird das DEBIAN / config-Skript gar nicht ausgeführt!
Diese Funktionen sind im Debconf-Paket verfügbar, vergessen Sie nicht, sie in die Abhängigkeiten aufzunehmen!
Ein primitives Anwendungsbeispiel. DEBIAN / Konfigurationsdatei
#! / bin / bash -e

# Debconf-Befehle verbinden

Fall "$ 1" in
konfigurieren | neu konfigurieren)
# Anfrage


# Bearbeitung der Antwort

Gruß = "$ RET"
echo "$ Gruß"> /etc/supersh/greeting.txt
;;
*)
echo "config mit unbekanntem Argument aufgerufen \` $ 1 ""> & 2
Ausgang 1
;;
esac
# Anfrage
db_input medium "supersh / gruß" || true # Initialisierung
db_go || true # zeige die Anfrage auf dem Bildschirm an

# Bearbeitung der Antwort
db_get "supersh / gruß" # Hole den Wert in die $ RET-Variable
Gruß = "$ RET"
echo "$ Gruß"> /etc/supersh/greeting.txt

Hier gibt es bereits einen unangenehmen Hinterhalt: Beachten Sie, dass der Funktion db_input die Priorität des mittleren Dialogs übergeben wird. Für Debconf können Sie die Mindestpriorität einstellen: Dialoge mit einer darunter liegenden Priorität werden nicht angezeigt, aber der Standardwert (Default-Template) wird übernommen! Um dies GENAU zu verhindern, verwenden wir die kritische Priorität :) Außerdem ist bei der Installation über die GUI die Schwelle für die Anzeige von Fragen höher, und viele von ihnen werden überhaupt nicht angezeigt.
Mögliche Prioritäten: niedrig - Standard wird immer verwendet, mittel - Standard ist normalerweise in Ordnung, hoch - Standard ist unerwünscht, kritisch - Die Aufmerksamkeit des Benutzers ist wichtig.
|| true wird verwendet, um zu verhindern, dass das Skript aufgrund des an bash übergebenen Schalters "-e" abbricht.
In diesem Skript wird auch empfohlen, diese Disc zu verwenden, um Fehler abzufangen, sonst können Sie beim Debuggen Probleme mit dem weiterverteilbaren Paket haben :)
Alle Feinheiten der Verwendung von Debconf (Funktionen, Methoden, Parameter, Fehlercodes) werden in einem ziemlich ausführlichen Mana beschrieben: man debconf-devel.

Zu guter Letzt muss beim Entfernen eines Pakets mit dem Befehl purge - debconf auch die Paketinformationen aus seiner Datenbank gelöscht werden. Es speichert beispielsweise die Auswahl des Benutzers über db_input-Anforderungen hinweg.
Um diese Daten zu bereinigen, müssen Sie dem postinst-Skript Folgendes hinzufügen:
if ["$ 1" == "purge"] && [-e/usr/share/debconf/confmodule]; dann
... /usr/share/debconf/confmodule
db_purge
fi

Paket zusammenstellen! :)

Hurra! Alle notwendigen Dateien wurden erstellt, sie befinden sich in den erforderlichen Ordnern. Jetzt ist es Zeit, das Paket zu bauen :)
Als erstes müssen alle Dateien im Root des Pakets rekursiv auf den Benutzer und die Gruppe root gesetzt werden: root (oder andere, falls erforderlich). Dies ist dann notwendig, dass die Paketdateien in ein tar.gz-Archiv gepackt werden, das sowohl die Berechtigungen für die Dateien als auch den Eigentümer beibehält. Daher müssen Sie Folgendes ausführen:
$ sudo chown -R root: root.
Dies ist jedoch nicht erforderlich. Es gibt einen ausgezeichneten fakeroot-Befehl, der beim Erstellen eines Archivs den Besitzer der Datei mit root ändert.
In unserem Beispiel muss das Skript ein ausführbares Bit haben.
Dann gehen wir zurück in den Ordner, damit der Stammordner des Pakets zu sehen ist, und das Paket wird mit einem leichten Kick selbst erstellt:
$ fakeroot dpkg-deb --build supersh
Das erstellte Paket muss umbenannt werden, damit es der Benennungsreihenfolge von *.deb-Paketen entspricht:<имя пакета>_<версия>_<архитектура>.deb
$ mv supersh.deb supersh_1.0-1_all.deb
Das war's, das Paket ist fertig!
Automatische Paketprüfung
Es gibt ein Dienstprogramm namens lintian, mit dem Sie ein Paket überprüfen und häufige Fehler in seiner Struktur identifizieren können. Dies geschieht so:
$lintian supersh_1.0-1_all.deb
Paket installieren
$ sudo dpkg -i supersh_1.0-1_all.deb

Erstellen Sie Ihr eigenes Paket-Repository

Wir haben jetzt unser eigenes Paket. Wenn es mehrere davon gibt, und noch mehr - mit Abhängigkeiten, wird es sich als viel bequemer herausstellen, schnell ein eigenes lokales Mikro-Repository zu erstellen und es in die Liste der Quellen des Paketmanagers aufzunehmen :) Hier Ich werde ein kurzes HowTo beschreiben, "wie Sie Ihr eigenes Repository erstellen". Es wird einfach sein, die Idee zu entwickeln, indem Sie die entsprechende Dokumentation lesen :)
Zuerst installieren wir den Helfer:
$ sudo apt-get install reprepro
Beschreibung des zukünftigen Endlagers
Repository-Center - seine Beschreibung. Die Hauptsache darin ist die Liste der Komponenten des Repositorys. Wir werden die Komponenten "soft" und "games" erstellen.
Wählen Sie einen Ordner für das zukünftige Repository aus. Alle Aktionen werden von der Wurzel aus ausgeführt.
Erstellen Sie eine conf/distributions-Datei mit folgendem Inhalt:
Beschreibung: mein lokales Repository
Herkunft: Ubuntu
Suite: testen
AlsoAcceptFor: instabiles Experiment
Codename: karmic
Version: 5.0
Architekturen: i386 AMD64 Quelle
Komponenten: Softgames
UDebComponents: Softgames

In unserem Geschäft, ein einfaches Repository zu erstellen, spielen alle Felder keine grundlegende Rolle und werden nur verwendet, um visuell "was ist was" zu definieren :)

Erstellen eines Repositorys
Das Repository ist beschrieben! Lassen Sie uns nun ein Leerzeichen basierend auf der Beschreibung generieren. Die Befehle werden im Stammverzeichnis des Repositorys ausgeführt:
$ Reprepro-Export
$ reprepro createsymlinks
Und fügen Sie ein fertiges Repository zu /etc/apt/sources.list hinzu:
deb-Datei: /// Pfad / zum / Repo / Karmic Soft Games
Dieses Repository kann auch über einen Webserver freigegeben werden.
Paketverwaltung im Repository
Wir legen *.deb-Dateien im Stammverzeichnis des Repositorys ab, um sie hinzuzufügen, und fügen sie der weichen Komponente der karmischen Verteilung hinzu:
reprepro -C weich enthalteneb karmic * .deb
jetzt sind Pakete über den Paketmanager verfügbar :)
Pakete entfernen:
reprepro -C soft entfernen karmisches supersh

Das Ende

Der Artikel beschreibt Materialien zum Erstellen von Deb-Paketen. Der Schwerpunkt liegt auf den Punkten, für die das Netzwerk keine ausreichend beschreibende Beschreibung hat. Ich hoffe, dass mein Versuch, es einfach und übersichtlich darzustellen, nicht gescheitert ist :)
Hausaufgaben :)) - ziemlich gut dokumentierte Dinge, die in man "ah und Artikeln leicht zu finden sind:
  • Erstellen von Quellpaketen, die Quellen kompilieren: Am Beispiel von Zabbix hat Mahoro Habrayuser in seinem Artikel perfekt darüber gesprochen
  • Debconf, Debhelper in Konfigurationsskripten: Lesen Sie Manna von debconf-devel und debhelper. Sie ermöglichen Ihnen auch, das Skelett eines Pakets mit dem Befehl dh_make zu erstellen.
  • Erweiterte Möglichkeiten zum Erstellen von Dokumentation in Paketen: DEBIAN / docs, DEBIAN / manpage
  • Init-Skripte erstellen
  • Cronjobs verwalten
  • Signieren des Repositorys mit dem gpg-Schlüssel