Tworzenie paczki DEB należy zacząć od pobrania programów niezbędnych do zbudowania jakiegokolwiek programu, a konkretnie kompilatora. Potrzebny będzie też zestaw programów debhelper, ułatwiających tworzenie paczki.
W tym celu wydajemy polecenie:
# apt-get install build-essential dh-make devscripts
Po zainstalowaniu kompilatorów ściągamy program, który chcemy spakować. (Jako przykład posłuży ncmpcpp, kontroler mpd napisany z użyciem ncurses)
1. dh_make[]
Program dh_make został stworzony, żeby ułatwić opiekunom tworzenie nowych paczek. Generuje on katalog debian/
, który będzie konieczny do zbudowania paczek. Po rozpakowaniu programu należy wejść do jego źródeł i urchomić dh_make.
Dane do przykładu:
- lokalizacja oryginalnego źródła: ~/ncmpcpp-0.5.tar.bz2
- lokalizacja rozpakowanych źródeł: ~/ncmpcpp-0.5
Przykład:
rafal@laptop:~/ncmpcpp-0.5$ dh_make -f ../ncmpcpp-0.5.tar.bz2 -e ad@res.pl Type of package: single binary, indep binary, multiple binary, library, kernel module, kernel patch or cdbs? [s/i/m/l/k/n/b] s Maintainer name : Jaś Nijaki Email-Address : ad@res.pl Date : Sat, 06 Feb 2010 21:20:07 +0100 Package Name : ncmpcpp Version : 0.5 License : blank Using dpatch : no Using quilt : no Type of Package : Single Hit <enter> to confirm: Done. Please edit the files in the debian/ subdirectory now. ncmpcpp uses a configure script, so you probably don't have to edit the Makefiles.
Uwaga: dh_make zapyta o typ paczki. Zwykle jest to single (s). W tym momencie mamy folder debian, który trzeba opisać. Następnym krokiem będzie...
2. Opisanie paczki[]
Wejdź do katalogu debian/. Znajduje się tu kilkanaście plików, część z końcówką .ex, która oznacza, że plik jest tylko przykładem. Te pliki są potrzebne np. do tworzenia skryptów init.d, stron manuala itp.
Otwórz plik control
. To, można rzec, najważniejszy plik w tym katalogu. Definiuje on nazwę, wersję, autora i wiele innych parametrów, które trzeba ustawić przy tworzeniu paczki. Ale po kolei.
Pierwszy "blok" to informacje o paczce źródłowej. Z niej tworzona jest paczka binarna. Source:
definiuje jej nazwę. Section:
dzieli pakiety na kategorie. Może być to np. net albo ruby. Dokładnie informacje znajdziesz na tej stronie. Priority przyjmuje kilka wartości:
- extra – pakiety dodatkowe,
- optional – pakiety niewymagane, aczkolwiek przydatne (np. Firefox),
- standard – pakiety, które zwykle umieszcza się na każdym systemie (np. X),
- important – pakiety, które powinny być na każdym systemie,
- required – pakiety, bez których system nie uruchomi się (np. dpkg).
Dla pakietu ncmpcpp nadaje się optionanal. Sekcję ustawmy na sound.
Maintainer:
to opiekun pakietu. Build-Depends:
to pakiety wymagane do zbudowania pakietu. Standards-Version:
definiują wersję Polityki Debiana użytą w tym pakiecie. Homepage
ustaw na stronę domową programu (dla ncmpcpp to http://unkart.ovh.org/ncmpcpp).
Niżej znajduje się blok z informacjami. Package: i Architecture: nas nie interesują. Schodzimy do Description. Wpisz tam krótki opis programu, np. (ncurses-based mpd controller). Linię poniżej opisz dokładniej program, pamiętając o spacji wiodącej, inaczej opis zostanie uznany za komendy.
Sprawdź teraz, jakie pliki dokumentacyjne zawiera paczka. Dopisz je linia pod linią do pliku docs.
Plik copyright zawiera informacje o licencji. Jak publikujesz paczkę, nie powinno się go pomijać.
Gdy skończysz opisywać program, możesz przejść do konfiguracji skryptów ./configure i make.
3. configure i Makefile[]
Ponieważ dh jest na tyle sprytne, żeby sprawdzić, czy program się kompiluje z autotools (co każdy większy program robi), uruchomi automatycznie ./configure, następnie make i make install. Domyślnie configure uruchamia się tak:
$ ./configure
A jeżeli chcesz przekazać parametry? Przykład:
$ ./configure --with-clock --enable-outputs
Wejdź do pliku debian/rules (ma on składnię Makefile) i ustaw target override_dh_auto_configure. Przykład:
#!/usr/bin/make -f %: dh $@ override_dh_auto_configure: ./configure --with-clock --enable-outputs
4. dpkg-buildpackage[]
Przechodzimy do ostatniego etapu. Jeżeli dotąd nie było żadnych błędów, wszystko wykona się cichutko i stworzy paczki. Krótka lista sprawdzająca:
- czy mam ustawiony plik
control
? - czy zainstalowałem i ustaliłem biblioteki potrzebne do budowy paczki?
- czy mam wszystkie narzędzia?
- czy mam wystarczającą ilość miejsca na dysku?
- czy pamiętam hasło
Jeżeli tak, wpisz:
$ dpkg-buildpackage
I tu zaczyna się magia. Debhelper (w skrócie) sprawdza zależności, uruchamia configure, kompiluje, instaluje do folderu tymczasowego, kopiuje dokumentacje, dokłada plik control, pakuje do pliku deb i podpisuje kluczem gpg.
Jeżeli wszystko pójdzie bez błędów, w katalogu wyżej (cd ..) otrzymasz kilka plików: paczkę .deb, podpis .key i plik ze zmianami. Do instalacji lokalnej wystarczy to pierwsze.
Dodatek: kompilacja skrośna[]
Kompilacja skrośna, nazywana cross-compilation to funkcja, która pozwala na kompilację na inną architekturę. dpkg-buildpackage niesamowicie trudno się wtedy wywołuje, bo aż z parametrem -anazwa_architektury. Zakładam, że masz kompilator dla tej architektury.
Dodatek 2: Co później?[]
- Poradnik dla nowych opiekunów pakietów Debiana – tutaj
- man dh_make, dpkg-buildpakage, dh
- Kącik Deweloperów Debiana – tutaj
Podsumowanie[]
Kompilacja paczki naprawdę nie jest trudna. W projekcie Debian uczestniczy masa ludzi, którzy robią podobna czynności, gdy pojawi się nowa wersja. To tyle w kwestii podsumowania. Powodzenia przy kompilacji programów!