Pakowanie binarek do paczki .deb

Archiwalne, stare wpisy FAQ i HowTo Użytkowników
Awatar użytkownika
jasiekmarc
Posty: 88
Rejestracja: 27 września 2009, 20:05
Lokalizacja: Wrocław

Pakowanie binarek do paczki .deb

Post autor: jasiekmarc »

W niniejszym poradniku posłużymy się przykładem instalowania Firefoxa ściągniętego ze strony Mozilli tak, by systemowi to nie wadziło:
  1. Zaczniemy od ściągnięcia binarek. Nie jest to oczywiście przedmiotem naszego poradnika, więc nie będziemy poświęcać temu zbyt dużo czasu. Trzeba jednak powiedzieć, że są one dostarczone w archiwum, które po rozpakowaniu staje się folderem o nazwie firefox.
  2. Stwórzmy folder, w którym będziemy trzymać wszystkie części naszego pakietu. Niech nazywa się on firefox_paczka.
  3. W folderze tym stwórzmy folder o nazwie DEBIAN. Jest to najważniejsza część naszej paczki. Muszą znajdować się w nim dwa pliki:
    control - W naszym przypadku będzie on wyglądał w sposób następujący:

    Kod: Zaznacz cały

    Package: firefox
    Version: 3.5.4
    Section: web
    Priority: optional
    Architecture: i386
    Depends: libgtk2.0-0 (>= 2.10), libglib2.0-0 (>= 2.16.0), libc6 (>= 2.4), debianutils (>= 1.16)
    Conflicts: iceweasel
    Installed-Size: 31457
    Maintainer: mozilla
    Description: The lightweight browser provided by Mozilla.
    	Firefox delivers safe, easy web browsing. A familiar user interface, enhanced security features including protection from online identity theft, and integrated search let you get the most out of the web.
    
    Jedyna niejasność tutaj może dotyczyć pola Description. W pierwszej linijce jest opis skrócony, zaś w drugiej (koniecznie z wcięciem) szerszy.

    Drugi plik to data. Nim zajmiemy się na samym końcu. Podobnie opcjonalnymi skryptami postinst i prerm.
  4. Obok folderu DEBIAN umieszczamy nasz ściągnięty i rozpakowany firefox. Nie wystarczy jednak go tak po prostu skopiować. Trzeba umieścić go w dobrym miejscu w systemie plików, w którym będziemy instalować paczkę - załóżmy, że chcemy, by nasz rozpakowany folder znalazł się w /usr/share. Musimy zatem we wspomnianym już firefox_paczka stworzyć folder o nazwie usr, a w nim share. Dopiero tam kopiujemy firefoxa. ¯eby wszystko było zrobione porządnie, warto stworzyć też wpis w Debianowym menu - w firefox_paczka/usr/share trzeba stworzyć menu, a w nim plik firefox:

    Kod: Zaznacz cały

    ?package(firefox):needs="x11" section="Applications/Network/Web Browsing" \
            title="Firefox" \
            longtitle="Firefox Web Browser" \
            icon="/usr/share/firefox/icons/mozicon50.xpm" \
            command="/usr/bin/firefox" \
    	hints="Web browsers"
    .
    Wszystkie pliki w katalogu firefox_paczka, a poza DEBIAN muszą należeć do roota.
  5. W mojej paczce znalazły się jeszcze inne dodatkowe pliki. Zrobiłem dowiązanie usr/bin/firefox -> ../share/firefox/firefox, dzięki któremu mogę uruchamiać firefoxa krótkim poleceniem. Poza tym dodałem do wyszukiwarek tę z repozytoriów Debiana, a do ustawień standardowych identyfikację systemu. Nie będę wchodził w te niepotrzebne szczegóły.
  6. Wróćmy do katalogu DEBIAN. W pliku data musi się znaleźć lista dostarczanych przez pakiet plików. Ja tworzę ją poleceniem

    Kod: Zaznacz cały

    tree -i -f firefox_paczka > firefox_paczka/DEBIAN/data
    Następnie wywalam wszystkie wpisy z folderem DEBIAN i usuwam kropki (a także podsumowanie, które znajdzie się na samym końcu pliku). Mój plik data wygląda tak:

    Kod: Zaznacz cały

    /usr
    /usr/bin
    /usr/bin/firefox -> ../share/firefox/firefox
    /usr/share
    /usr/share/firefox
    /usr/share/firefox/README.txt
    /usr/share/firefox/Throbber-small.gif
    /usr/share/firefox/application.ini
    /usr/share/firefox/blocklist.xml
    /usr/share/firefox/browserconfig.properties
    i tak dalej...
  7. Jak już wspomnieliśmy. W DEBIAN mogą też być skrypty postinst i prerm. Służą one do konfigurowania systemu przez paczkę. I znowu najlepiej posłużyć się przykładem:
    (postinst)

    Kod: Zaznacz cały

    #!/bin/sh
    set -e
    
    case "$1" in
    configure)
    update-alternatives --install /usr/bin/x-www-browser x-www-browser /usr/bin/firefox 55
    update-alternatives --set x-www-browser /usr/bin/firefox
    ;;
    esac
    
    (prerm)

    Kod: Zaznacz cały

    #! /bin/sh
    
    set -e
    
    case "$1" in
    remove)
    
    update-alternatives --remove x-www-browser /usr/bin/firefox
    
    ;;
    esac
    
    Pliki te mówią systemowi, że po instalacji Firefoxa, ma się on stać domyślną przeglądarką, zaś gdy się go pozbędziemy, musi przestać nią być.
Koniec: Przyszła kolej na zwieńczenie całego procesu samym budowaniem pakietu. Wychodzimy z folderu firefox_paczka i wpisujemy w konsolę

Kod: Zaznacz cały

dpkg-deb --build firefox_paczka .
(kropka jest ważna). W katalogu nadrzędnym dla firefox_paczka pojawi nam się (po jakimś czasie) pakiet, którego nazwa wynika bezpośrednio z tego, co zadeklarowaliśmy w pliku control.[/list]
Zablokowany