Tworzenie pakietów Debiana — instrukcje

Debian Package Creation Howto



1. Przedmowa

Odpowiedzialność za maszynę oznacza dbanie zarówno o sprzęt, jak i komponenty oprogramowania. Jak widać na co dzień jako administrator systemu, znacznie lepiej jest instalować oprogramowanie jako pakiet oprogramowania niż kilka plików źródłowych. Zmniejsza to koszty prawidłowej konserwacji systemu.

Pakiety dostępne u preferowanego dystrybutora są sprawdzane i nadzorowane przez opiekuna pakietu. Przetestował oprogramowanie i zapewnia, że ​​pasuje do innych pakietów oprogramowania dostępnych w dystrybucji. Ponadto pakiet jest podpisany kluczem GPG od opiekuna pakietu. Gwarantuje to integralność pakietu i pokazuje, że pakiet pochodzi z zaufanego źródła.







Format pakietu zależy od twojej dystrybucji Linuksa. Wybrane formaty to:



deb

Pakiety używane w: Debian GNU/Linux , Ubuntu , Armbian , Mennica Linuksa , Knoppix



rpm

Pakiety używane w: Czerwony kapelusz , Fedora , CentOS , OpenSuse





tgz and txz

Pakiety używane w: Slackware

tar.xz

Pakiety używane w: Arch Linux



Ten dokument pokrótce wyjaśnia, jak zbudować pakiet dla Debiana GNU/Linuksa. Szczegółowe informacje o formacie pakietów Debiana i narzędziach do zarządzania systemem Linux opartym na `deb` można znaleźćw książce Zarządzanie pakietami Debiana [dpmb] Do budowania pakietów dla systemu Debian GNU/Linux niezbędne są następujące dokumenty:

  • Przewodnik po nowym opiekunie Debiana [dnmg]
  • Informacje dla deweloperów Debiana [NRD]
  • Samouczek tworzenia pakietów Debiana [Móc]
  • Podręcznik polityki Debiana [dpm]

Pakiet, z którym będziemy pracować, nazywa się `helloworld` i ma numer wersji 0.1. W celach demonstracyjnych zawiera po prostu pojedynczy skrypt Pythona, który wyświetla słynną wiadomość Hello, world!:

#!/usr/bin/python print ('Hello, world!') 

2. Wymagania

2.1. Klucz GPG

W kroku 1 przygotuj swój klucz GPG. Później klucz będzie potrzebny do podpisania paczki. Należy pamiętać, że niepodpisane pakiety są niewiarygodne i nie mogą być częścią uniwersum Debiana.

Jeśli nie masz jeszcze klucza GPG, utwórz go. Możesz wykonać trzy poniższe kroki. Pierwsze polecenie generuje nowy klucz, drugie eksportuje nowy klucz do osobnego pliku, a trzecie dodaje klucz do osobistego pęku kluczy.

$ gpg --gen-key $ gpg -a --output ~/.gnupg/YOUR_NAME.gpg --export 'YOUR NAME' $ gpg --import ~/.gnupg/YOUR_NAME.gpg 

Podczas tworzenia upewnij się, że podane imię _TWOJE IMIĘ_ jest poprawne. Często używa się kombinacji imienia i nazwiska. Ta nazwa będzie musiała być dokładnie taka sama w pakiecie podczas tworzenia pliku `control` pakietu Debiana. Aby uzyskać więcej informacji na temat GPG, zajrzyj do GNU Privacy Handbook [gph].

2.2. Łańcuch narzędzi do pakowania

Aby zbudować pakiet Debiana z kodem źródłowym, w systemie wymagane są następujące pakiety oprogramowania:

  • niezbędne do zbudowania
  • autokonf
  • autoprodukcja
  • autotools-dev
  • dh-make
  • debhelper
  • skrypty programistyczne
  • fałszywy korzeń
  • xutils
  • lintian
  • Pbuilder

Jako użytkownik `root` możesz je zainstalować za pomocą następującego polecenia:

# apt-get install build-essential autoconf automake autotools-dev dh-make debhelper devscripts fakeroot xutils lintian pbuilder 

2.3. Przygotuj oprogramowanie do spakowania

Musimy przygotować katalog do zbudowania pakietu. Utwórz katalog, aby przygotować środowisko, w którym zbudujemy pakiet:

$ mkdir -p ~./build/helloworld/0.1 

Skopiuj skompresowane archiwum `tar.gz` do katalogu:

$ cp helloworld-0.1.tar.gz ~./build/helloworld/0.1 

Przejdź do katalogu i rozpakuj pakiet:

$ cd ~./build/helloworld/0.1 ~/build/helloworld/0.1$ tar -xzf helloworld-0.1.tar.gz 

Teraz katalog zawiera zarówno kod źródłowy w osobnym katalogu, jak i skompresowane archiwum:

~/build/helloworld/0.1$ ls helloworld-0.1 helloworld-0.1.tar.gz 

3. Debianizacja

W tym momencie dodamy pliki specyficzne dla pakietu Debiana. Dlatego ten krok nazywa się _Debianizacja_ oprogramowania. Odbywa się to w kilku pojedynczych krokach.

3.1 Przygotuj strukturę pakietu

Przejdź do katalogu, w którym znajduje się cały kod źródłowy pakietu. W naszym przykładzie pakiet zawiera plik `helloworld.py`, tylko:

~$ cd build/helloworld/0.1/helloworld-0.1 ~/build/helloworld/0.1/helloworld-0.1$ ls helloworld.py 

Dodajmy pliki, które są specyficzne dla pakietu Debiana. W grę wchodzi narzędzie `dh_make`. Przełącznik `-e` używa podanego adresu jako adresu e-mail w polu `Maintainer` pliku `debian/control`. Budując pakiet, użyj własnego adresu e-mail. Pamiętaj, aby użyć tego samego adresu e-mail, który odpowiada Twojemu kluczowi GPG.

Przełącznik `-f` używa podanego pliku jako oryginalnego archiwum źródłowego i pomija kopiowanie bieżącego drzewa programu do `program.orig`.

~/build/helloworld/0.1/helloworld-0.1$ dh_make -e [email protected] -f ../helloworld-0.1.tar.gz 

Po wyświetleniu monitu zostaniesz poproszony o wybranie typu pakietu, który ma zostać utworzony. Aby wybrać _pojedynczy plik binarny_, wpisz `s`.

Type of package: single binary, indep binary, multiple binary, library, kernel module, kernel patch? [s/i/m/l/k/n] s Maintainer name : Frank Hofmann Email-Address : [email protected] Date : Sat, 04 Nov 2017 21:16:13 +0100 Package Name : helloworld Version : 0.1 License : blank Type of Package : Single Hit to confirm: Currently there is no top level Makefile. This may require additional tuning. Done. Please edit the files in the debian/ subdirectory now. You should also check that the helloworld Makefiles install into $DESTDIR and not in / . 

Rezultatem jest katalog o nazwie `debian`:

~/build/helloworld/0.1/helloworld-0.1$ ls debian helloworld.py 

Ten katalog zawiera wszystkie pliki specyficzne dla pakietu.

3.2. Dostosuj plik kontrolny

Plik `debian/control` przechowuje zależności potrzebne do _zbudowania_ pakietu. Używając polecenia `dpkg-depcheck -d ./configure` otrzymasz listę wszystkich wymaganych pakietów. W naszym przypadku nie jest potrzebny dodatkowy pakiet, ponieważ Python jest językiem interpretowanym.

Następnie musimy edytować plik `debian/control` i dodać wartości specyficzne dla pakietu. W naszym przykładzie wygląda to następująco:

Source: helloworld Section: python Priority: optional Maintainer: Frank Hofmann < [email protected] > Build-Depends: debhelper (>= 9) Standards-Version: 3.9.5 Homepage: http://www.efho.de/ #Vcs-Git: git://anonscm.debian.org/collab-maint/helloworld.git #Vcs-Browser: http://anonscm.debian.org/?p=collab-maint/helloworld.git;a=summary Package: helloworld Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends}, python Description: Prints Hello World in Python Prints Hello World in Python 

3.3. Dostosuj plik praw autorskich

Plik `debian/copyright` zawiera informacje o licencji pakietu oprogramowania. Jest przygotowany do wydania na licencji GNU Public License 2 (GPLv2). W naszym przykładzie wygląda to następująco:

Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ Upstream-Name: helloworld Source: http://www.efho.de/ Files: debian/* Copyright: 2017 Frank Hofmann < [email protected] > License: GPL-2+ This package is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. . This package is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. . You should have received a copy of the GNU General Public License along with this program. If not, see . On Debian systems, the complete text of the GNU General Public License version 2 can be found in '/usr/share/common-licenses/GPL-2'. 

3.4. Dostosuj plik dziennika zmian

Po informacji o prawach autorskich należy dostosować plik `debian/changelog`. W naszym przykładzie dodajemy informację Pierwsze wydanie.

helloworld (0.1-1) unstable; urgency=low * Initial release -- Frank Hofmann < [email protected] > Sat, 04 Nov 2017 21:16:13 +0100 

To wszystko, czego do tej pory potrzebowaliśmy — teraz możemy wreszcie zbudować pakiet.


4. Zbuduj pakiet

Aby zbudować pakiet musimy przejść o jeden katalog w górę i uruchomić następującą komendę:

~/build/helloworld/0.1/helloworld-0.1$ dpkg-buildpackage -rfakeroot

Opcja `-rfakeroot` umożliwia `dpkg-buildpackage` uruchamianie poleceń jako uprzywilejowany użytkownik za pomocą polecenia `fakeroot`. Jest to niezbędne do przygotowania pakietu oraz stworzenia plików i katalogów.
Powyższe polecenie powoduje dłuższą listę komunikatów wyjściowych (pokazanych tutaj w środowisku języka niemieckiego):

dpkg-buildpackage: Quellpaket helloworld dpkg-buildpackage: Quellpaket helloworld dpkg-buildpackage: Quellversion 0.1-1 dpkg-buildpackage: Quelldistribution unstable dpkg-buildpackage: Quellen geändert durch Frank Hofmann < [email protected] > dpkg-buildpackage: Host-Architektur amd64 dpkg-source --before-build helloworld-0.1 fakeroot debian/rules clean dh clean dh_testdir dh_auto_clean dh_clean dpkg-source -b helloworld-0.1 dpkg-source: Information: Quellformat 3.0 (quilt) wird verwendet dpkg-source: Information: helloworld wird unter Benutzung des existierenden ./helloworld_0.1.orig.tar.gz gebaut dpkg-source: Information: helloworld wird in helloworld_0.1-1.debian.tar.xz gebaut dpkg-source: Information: helloworld wird in helloworld_0.1-1.dsc gebaut debian/rules build dh build dh_testdir dh_auto_configure dh_auto_build dh_auto_test fakeroot debian/rules binary dh binary dh_testroot dh_prep dh_auto_install dh_installdocs dh_installchangelogs dh_perl dh_link dh_compress dh_fixperms dh_strip dh_makeshlibs dh_shlibdeps dh_installdeb dh_gencontrol dpkg-gencontrol: Warnung: Feld Depends von Paket helloworld: unbekannte Substitutionsvariable ${shlibs:Depends} dh_md5sums dh_builddeb dpkg-deb: Paket helloworld wird in ../helloworld_0.1-1_amd64.deb gebaut. dpkg-genchanges <../helloworld_0.1-1_amd64.changes dpkg-genchanges: kompletter Quellcode beim Hochladen hinzufügen dpkg-source --after-build helloworld-0.1 dpkg-buildpackage: Alles hochzuladen (Originalquellen enthalten) signfile helloworld_0.1-1.dsc Sie benötigen eine Passphrase, um den geheimen Schlüssel zu entsperren. Benutzer: 'Frank Hofmann (Hofmann EDV) < [email protected] > ' 4096-Bit RSA Schlüssel, ID D431AC07, erzeugt 2014-09-05 

4.1. Walidacja pakietu

Gratulacje — udało ci się zbudować pakiet Debiana — tak! Teraz przyjrzyjmy się bliżej paczce. Tutaj w grę wchodzi „lintian”. To narzędzie sprawdza poprawność pakietu w celu znalezienia naruszeń ścisłych zasad, które pakiety Debiana muszą spełniać.

Aby uruchomić testy, wpisz następujące polecenie:

lintian helloworld_0.1-1_amd64.deb 

Narzędzie nie znajduje naruszeń zasad, ale także błędów ortograficznych i niewłaściwych znaków. Przełącznik `–pedantyczny` prosi `lintian`, aby był o wiele bardziej krytyczny niż zwykle. Jak widać poniżej, `lintian` jest trochę zrzędliwy i odkrył trzy ostrzeżenia i jeden błąd.

Poza pierwszym ostrzeżeniem możemy łatwo uszczęśliwić `lintian` i dostosować zawartość pakietu zgodnie z ustalonymi regułami. Ostrzeżenie `new-package-should-close-itp-bug` oznacza, że ​​nie ma raportu o błędzie w pakiecie ITP (ITP oznacza _przeznaczony do pakietu_). W przypadku zwykłego pakietu Debiana, raport o błędzie musi zostać wysłany do bugtrackera dla pakietu ITP, aby powiadomić innych, że zamierzasz rozpocząć pakowanie tego oprogramowania.

4.2. Ostrzeżenie: `readme-debian-contains-debmake-template

Plik `README.Debian` jest przeznaczony do przechowywania dodatkowych informacji dotyczących tego pakietu. `dh_make` utworzył dla nas ten plik:

helloworld for Debian --------------------- -- Frank Hofmann < [email protected] > Sat, 04 Nov 2017 21:16:13 +0100 

W naszym przykładzie nie mamy dodatkowych informacji, więc możemy usunąć plik.

4.3. Ostrzeżenie: `description-zaczyna się-od-wiodącymi-spacjami`

To ostrzeżenie pojawia się, ponieważ dłuższy opis naszego pakietu w pliku `debian/control` zaczyna się od więcej niż jednej spacji. Gdy tylko usuniemy pojedynczą spację, ostrzeżenie zniknie.

4.4. Błąd: `opis-streszczenie-jest-zduplikowany`

Każdy pakiet wymaga zarówno krótkiego, jak i dłuższego opisu w `debian/control`. Ten błąd jest zgłaszany, ponieważ oba opisy są identyczne. Jak tylko rozszerzyliśmy dłuższy opis, błąd zniknął.


5. Linki i referencje

- [ddr] Andreas Barth, Adam Di Carlo, Raphaël Hertzog, Lucas Nussbaum, Christian Schwarz, Ian Jackson: Informacje dla deweloperów Debiana
– [Dnmg] Josip Rodin, Osamu Aoki: Przewodnik po nowym opiekunie Debiana
- [dpmb] Axel Beckert, Frank Hofmann: Księga zarządzania pakietami Debiana
- [dpm] Podręcznik polityki Debiana
- [Móc] Samouczek tworzenia pakietów Debiana
– [g/h] Podręcznik ochrony prywatności GNU
– [lushpaiPackage] Alex Lushpai: Jak stworzyć pakiet Debiana ze źródeł


6. Podziękowania

Autor dziękuje Axel Beckert oraz Gerold Rupprecht za wsparcie i krytykę podczas przygotowywania tego artykułu.