[#] "Przepakowanie" pakietu .deb - skrypty .sh

( Ostatnio zmieniony pon., 09/06/2008 - 19:53 )
 

Problem

Czasem zdarza się, że podczas kompilacji programu ze źródeł, wykonując czynności:

./configure
make
sudo checkinstall

otrzymujemy błąd podobny do:

...
Building Debian package...OK
Installing Debian package... FAILED!

*** Failed to install the package
Do you want to see the log file?  [y]:
...


Rozpakowanie pakietu zastępującego nautilus-actions ...
dpkg: błąd przetwarzania /home/user/nautilus-actions-1.4.1/nautilus-actions_1.4.1-1_i386.deb (--install):
 próba nadpisania `/usr/bin/gcc', który istnieje także w pakiecie gcc
Wystąpiły błędy podczas przetwarzania:
 /home/user/nautilus-actions-1.4.1/nautilus-actions_1.4.1-1_i386.deb

Czyżby jakiś problem programu „checkinstall“ ? Nie wiem, ale aby to obejść, należy przepakować nasz pakiet i podmienić / naprawić to, co podczas instalacji powodowało problemy. W naszym przypadku, malezy usunąć niepotrzebne dowiązanie do /usr/bin/gcc w stworzonej paczce .deb

Przepakowywanie

Jeśli potrzebne będzie nam kiedykolwiek przepakowanie paczki .deb w calach ot choćby dodania spolszczenia do naszego pakieciku (lub nie naszego), lub zmodyfikowanie np. zależności pakietu, wówczas wystarczy że wykonamy poniższe porady:

  1. Tworzymy katalog tymczasowy „REPACK-DEB“ – nazwa dowolna
  2. Umieszczamy w nim oba skrypty: unpack-deb.shpack-deb.sh oraz nasz pakiet.deb
  3. Uruchamiamy konsolę i przechodzimy do katalogu „REPACK-DEB“ (lub innego jak go tam nazwałeś)
  4. Uruchamiamy skrypt podając jako parametr nazwę paczki .deb (utworzony zostanie katalog o nazwie takiej jak nasz pakiet): unpack-deb.sh pakiet.deb
  5. Modyfikujemy co nam w duszy śpiewa – to już według potrzeb (rzuć okiem na plik control i linię „Depend“ wpis, np.: libdupa11…na „libmiodzio22 (>= 20.1)“)
  6. Zastosowujemy zmiany na pakiecie .deb (budujemy pakiet): pack-deb.sh pakiet.deb

Przydatne informacje

Skrypty instalacyjne i deinstalacyjne, to skrypty automatycznie uruchamiane przed instalacją i po instalacji pakietu. Wraz z plikiem o nazwie control wchodzą w skład sekcji „control“ każdego pakietu .deb.

preinst – Ten skrypt jest wykonywany zanim pakiet zostanie rozpakowany z pliku .deb. Wiele skryptów „preinst” zatrzymuje działanie usług świadczonych przez pakiety, których nową wersję właśnie instalujemy, aż do czasu zakończenia procesu instalacji lub aktualizacji (tzn. do chwili bezbłędnego wykonania skryptu „postinst”).

postinst – Ten skrypt z zasady wykonuje wszelkie operacje konfiguracyjne wymagane do prawidłowej pracy pakietu po jego rozpakowaniu z pliku .deb. Skrypty „postinst” często wymagają wprowadzenia pewnych informacji przez użytkownika i/lub ostrzegają go, że w wypadku akceptacji wartości domyślnych powinien pamiętać o późniejszej rekonfiguracji pakietu w miarę potrzeb. Wiele ze skryptów „postinst” wykonuje następnie wszelkie polecenia konieczne do uruchomienia lub ponownego uruchomienia danej usługi po instalacji lub aktualizacji pakietu.

prerm – Z reguły, skrypt ten zatrzymuje wszystkie demony związane z pakietem, a jest wykonywany przed usunięciem plików, które zawierał ten pakiet.

postrm – Ten skrypt z reguły modyfikuje dowiązania lub inne pliki związane z pakietem i/lub usuwa pliki przezeń utworzone.

Skrypty

unpack-deb.sh

#!/bin/sh

if [ "${1##*.}" = "deb" ]; then
    echo "Tworzę katalogi tymczasowe"
    KATALOG=`echo "$1" | sed 's/\.[^.]*$//'`

    echo "Rozpakowuję data.tar.gz"
    dpkg-deb -x ${1} $KATALOG/

    echo "Rozpakowuję control.tar.gz"
    dpkg-deb -e ${1} $KATALOG/DEBIAN

fi

pack-deb.sh

#!/bin/sh

if [ "${1##*.}" = "deb" ]; then
    KATALOG=`echo "$1" | sed 's/\.[^.]*$//'`
    echo "Generuję sumy kontrolne"
    find $KATALOG -type f | grep -v "/DEBIAN" | xargs md5sum | sed s#$KATALOG/## > $KATALOG/DEBIAN/md5sums
    echo "Pakuję zmodyfikowany pakiet"
    dpkg --build $KATALOG
    rm -r $KATALOG
fi
5
Twoja ocena: Brak Średnio: 5 (3 głosy)