Podstawowym poleceniem do manipulowania pakietami deb jest dpkg-deb
.
Aby rozpakować pakiet, utwórz pusty katalog i przejdź do niego, a następnie uruchom, dpkg-deb
aby wyodrębnić informacje sterujące i pliki pakietu. Użyj, dpkg-deb -b
aby przebudować pakiet.
mkdir tmp
dpkg-deb -R original.deb tmp
# edit DEBIAN/postinst
dpkg-deb -b tmp fixed.deb
Uwaga: chyba że skrypt działa jako root, uprawnienia i prawa własności plików zostaną uszkodzone na etapie wyodrębniania. Jednym ze sposobów uniknięcia tego jest uruchomienie skryptu fakeroot
. Zauważ, że musisz uruchomić całą sekwencję fakeroot
, a nie każdą dpkg-deb
osobno, ponieważ jest to fakeroot
proces, który utrzymuje pamięć uprawnień plików, których nie można utworzyć takimi, jakie są.
fakeroot sh -c '
mkdir tmp
dpkg-deb -R original.deb tmp
# edit DEBIAN/postinst
dpkg-deb -b tmp fixed.deb
'
Zamiast zadzierać z uprawnieniami, możesz zachować archiwum danych nienaruszone i zmodyfikować tylko archiwum kontrolne. dpkg-deb
nie zapewnia na to sposobu. Na szczęście pakiety deb są w standardowym formacie: są to ar
archiwa. Możesz więc użyć ar
do wyodrębnienia archiwum kontrolnego, zmodyfikować jego pliki i użyć ar
ponownie, aby zastąpić archiwum kontrolne nową wersją.
mkdir tmp
cd tmp
ar p ../original.deb control.tar.gz | tar -xz
# edit postinst
cp ../original.deb ../fixed.deb
tar czf control.tar.gz *[!z]
ar r ../fixed.deb control.tar.gz
Powinieneś dodać pozycję dziennika zmian i zmienić numer wersji, jeśli zmodyfikujesz cokolwiek w pakiecie. Infrastruktura do manipulowania pakietami Debian zakłada, że jeśli dwa pakiety mają tę samą nazwę i wersję, są one tym samym pakietem. Dodaj przyrostek do części debian_revision na końcu numeru wersji; z powodów sortowania przyrostek powinien zaczynać się ~
, np . 1.2.3-4.1
staje 1.2.3-4.1~johnjumper1
.
Zamiast używać narzędzi powłoki, możesz użyć Emacsa. dpkg-dev-el
Pakiet (który jest jego własny prąd, jak to jest rodowitym pakiet Debiana) zawiera tryby do edycji .deb
plików i edycję changelog Debiana. Emacsa można używać interaktywnie lub skryptowo.
-e
przełącznika z FPM zmienić plik kontrolny:fpm -e -s deb -t deb ../old.deb
. Spowoduje to otwarcie pliku sterującego w edytorze.fakeroot bash
i próba wydania poleceń nie będzie działać w odniesieniu do własności, aar
metoda jest niezwykle szybka w przypadku dużych plików deb!dpkg-deb -R
z trybów zostało zachowane idpkg-deb -b
zresetujuid:gid
wyodrębnione pliki do0:0
. Nie potrzebowałem fakeroot (wyobrażam sobie, że mogą istnieć problemy, jeśli w archiwum są ustawione {u, g} pliki identyfikatora, ale w mojej sytuacji tak nie było./etc
lub/var
które muszą należeć do określonej grupy.Możesz użyć fpm z
--after-install
opcją zastąpieniapostinst
skryptu:źródło