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

Na koniec wisienka na tort, czyli stworzenie paczki:

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