Jak zrobić własną paczkę .deb - krótkie HOWTO.
11 lutego, 2009
Zdarza się, że mamy jakiś własny skrypt czy binarkę (ot, choćby narzędzia do kontrolera RAID), która nie jest spaczkowana (do .deb). Przy większej ilości maszyn z Debianem/Ubuntu warto dorzucić coś takiego w formie paczki do swojego repozytorium - ułatwia zachowanie porządku (mamy wersjonowanie i zarządzanie przy pomocy bazy dpkg) i nie trzeba ręcznie kopiować. Poniżej krótki i nieco łopatologiczny opis szybkiej metody paczkowania do .deb, gdy mamy np. binarkę danego programu.
Po pierwsze, tworzymy katalog tymczasowy:
mkdir -p /tmp/program
Po drugie, tworzymy miejsce, gdzie chcemy wrzucić binarkę docelowo (zakładam /usr/local/bin), ale w naszym katalogu, oraz katalog DEBIAN na pliki pomocnicze:
mkdir -p /tmp/program/usr/local/bin mkdir -p /tmp/program/DEBIAN
Jeśli mamy np. dokumentację, czy pliki konfiguracyjne, to można utworzyć oczywiście więcej stosownych katalogów.
Po trzecie, kopiujemy naszą binarkę (binarka; zakładam, że ma stosowne prawa nadane), i tworzymy plik control, gdzie ładnie opisujemy co to, po co to, do czego to, zależności itp. Opcjonalnie w katalogu DEBIAN można stworzyć inne pliki, takie jak preinst, postinst, changelog itp., czyli skrypty wykonywane przed/po instalacji. Zarówno przy ich tworzeniu, jak i tworzeniu control polecam posiłkowanie się gotowcami z /var/cache/apt/archives (przystępny opis mile widziany - nie szukałem, nie znalazałem). Ważne: skrypty preinst i postinst muszą być napisane tak, by kończyły się bez błędu, także w "niesprzyjających" okolicznościach (typu tworzą plik, który istnieje), inaczej pakiety nie będą się ładnie instalować, tylko dpkg przerwie instalację z błędem.
cp binarka /tmp/program/usr/local/bin nano /tmp/program/DEBIAN/control
cd /tmp/ dpkg -b program program-wersja.deb
Powinniśmy otrzymać w /tmp naszą upragnioną paczkę, którą możemy dodać do naszego repozytorium w standardowy sposób. W przypadku błędów (zwykle prawa dostępu), należy je skorygować, jak prosi dpkg.
Oczywiście to wariant minimum, zachęcam do zapoznania się z polityką tworzenia nazw paczek w Debianie i zgłębienia tematu. Poniżej dość ciekawe linki na ten temat (ang):
How to make Debian package
Binary package
Debian Binary Package Building HOWTO
1. Rafał 'Malin' Malinowski napisał(a):
11 lutego 2009, 08:23:09
./configure
make
checkinstall
2. rozie napisał(a):
11 lutego 2009, 08:25:23
Malin: Zakładasz, że masz źródło, prawda? Szczerze, prościej przy skrypcie napisać control (który w minimalnej wersji ma raptem kilka linii), niż makefile. Przynajmniej mi. ;-)
3. Livio napisał(a):
11 lutego 2009, 11:52:26
To howto wydaje mi się śmiesznie krótkie. Nie dlatego, że znam się na pakietach .deb, ale nie wierzę, by mogło się obejść bez pliku typu spec/PKGBUILD/cokolwiek.
Gdzie definicje zależności itd.?
4. sl3dziu napisał(a):
11 lutego 2009, 14:02:44
To nie jest howto, tylko jakiś mglisty zarys tego jak się takie paczki robi. Więcej się człowiek dowie po prostu rozpakowując .deb’a niż z Twojego tekstu.
Dla przykładu dość dobry poradnik jak tworzyć paczki dla KateOS (TGZex):
http://wikidoc.kateos.org/index.php/Jak_stworzyć_pakiet_TGZex
5. bookmark napisał(a):
11 lutego 2009, 16:32:36
„Howto make debian standard debs from scratch”
http://ubuntuforums.org/showthread.php?t=51003
6. rozie napisał(a):
11 lutego 2009, 18:07:23
Livio: Zależności definiujesz w pliku controls właśnie (np. Depends: perl). Poza tym, prosty skrypt czy binarka do kontrolera niekoniecznie musi mieć jakiekolwiek zależności. ;-)
sl3dziu: Mi wystarczy do bezproblemowego zrobienia prostej paczki w przyszłości (TBH, nie pamiętałem tego dpkg -b i układu w katalogu ostatnio). Z deba albo się dowiesz więcej, albo nie, zależy na jakiego trafisz. Raczej miało to być krótkie „tak a tak się da, wygląda to mniej więcej w ten sposób, resztę doczytaj sam”. Na pełne HOWTO nie mam ani ambicji, ani – przede wszystkim – czasu. Poza tym, byłoby to najwyżej tłumaczenie tego, co podlinkowałem.
bookmark: OK, fajny tutorial, ale to znowu jest wersja, gdzie dysponujesz źródłem.
7. Uzytkownik napisał(a):
12 lutego 2009, 23:48:24
Tak naprawdę zazwyczaj lepiej niż kopiować jest:
./configure —prefix=/usr/local
make
make install DESTDIR=./
Malin: ./configure —enable-mess-on-rootfs ;)
8. Anonim napisał(a):
11 października 2010, 19:41:15
ej to jest ciagle o Debianie a cos na windowsa