Próbuję zainstalować pakiet SDK OpenCL firmy Intel, ale pliki DEB są błędnymi konwersjami z RPM (zobacz tutaj dla ciekawskich). Muszę edytować skrypt postinst
w dostarczonym przez nich DEB.
Jak mogę pobrać istniejący DEB, wyodrębnić zawartość (w tym informacje kontrolne), a następnie później przepakuj zawartość, aby utworzyć nowy DEB? Będę tylko edytować pliki, żadne pliki nie zostaną dodane ani usunięte.
Komentarze
Odpowiedź
podstawowym poleceniem 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 kontrolne i pliki pakietów. Użyj dpkg-deb -b
, aby odbudować pakiet.
mkdir tmp dpkg-deb -R original.deb tmp # edit DEBIAN/postinst dpkg-deb -b tmp fixed.deb
Uważaj, jeśli twój skrypt nie działa jako root, pliki ” uprawnienia i własność zostaną uszkodzone na etapie wyodrębniania. Jednym ze sposobów uniknięcia tego jest uruchomienie skryptu pod adresem fakeroot
. Pamiętaj, że musisz uruchomić całą sekwencję pod fakeroot
, a nie każdą dpkg-deb
osobno, ponieważ jest to fakeroot
proces, który przechowuje w pamięci uprawnienia plików, których nie można utworzyć w takiej postaci, w jakiej są.
fakeroot sh -c " mkdir tmp dpkg-deb -R original.deb tmp # edit DEBIAN/postinst dpkg-deb -b tmp fixed.deb "
Zamiast bałaganu z uprawnieniami możesz zachować archiwum danych w stanie nienaruszonym i modyfikować tylko archiwum kontrolne. dpkg-deb
nie daje na to sposobu. Na szczęście pakiety deb mają standardowy format: są to archiwa „re ar
. Możesz więc użyć ar
, aby wyodrębnić archiwum kontroli, zmodyfikować jego pliki i ponownie użyć ar
, 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ć wpis w dzienniku zmian i zmienić numer wersji jeśli zmodyfikujesz cokolwiek w pakiecie. Infrastruktura do manipulowania pakietami Debiana zakłada, że jeśli dwa pakiety mają ta sama nazwa i wersja, to ten sam pakiet. Dodaj sufiks do części debian_revision na końcu numeru wersji; ze względu na sortowanie przyrostek powinien zaczynać się od ~
, np. 1.2.3-4.1
staje się 1.2.3-4.1~johnjumper1
.
Zamiast używać narzędzi powłoki, możesz użyć Emacsa. Pakiet dpkg-dev-el
(będący własnym pakietem źródłowym, ponieważ jest to natywny pakiet Debiana) zawiera tryby edycji .deb
i edytować dzienniki zmian Debiana. Emacsa można używać w trybie interaktywnym lub skryptowym.
Komentarze
- Możesz także użyć przełącznika
-e
fpm , aby zmienić plik kontrolny:fpm -e -s deb -t deb ../old.deb
. Spowoduje to otwarcie pliku kontrolnego w Twoim edytorze. - btw,
fakeroot bash
i próba wydania poleceń nie będzie działać w odniesieniu do własności, aar
jest niesamowicie szybka w przypadku dużych plików deb! - Dzięki. To było przydatne. Używając
dpkg-deb -R
, tryby zostały zachowane idpkg-deb -b
zresetujuid:gid
wyodrębnionych plików do0:0
. Czy nie ' nie potrzebuje fakeroot (wyobrażam sobie, że mogą wystąpić problemy, gdyby w archiwum znajdowały się pliki {u, g} id, ale nie było to ' t przypadek w mojej sytuacji. - @PSkocik Nie tylko pliki setxid, ale także np. pliki i katalogi w
/etc
lub/var
które muszą należeć do określonej grupy. - Dziękuję za świetną odpowiedź. Czy istnieje sposób, aby upewnić się, że odbudowany pakiet w porównaniu z oryginalnym ma taką samą sumę md5?
Odpowiedź
Możesz użyć fpm z --after-install
możliwość zamiany skryptu postinst
, na przykład:
fpm -e --after-install ../DEBIAN/postinst.new -s deb -t deb ../old.deb
Komentarze
- Aby zainstalować fpm na Debianie / Ubuntu: sudo apt-get install ruby-dev build-essential; sudo gem install fpm
Odpowiedź
Jeśli chcesz tylko wyodrębnić pliki z .deb fi le, 7-Zip jest wygodny. 7-Zip obsługuje pliki „ar” tylko do rozpakowywania. (Nie ma potrzeby zmiany nazwy pliku; otwiera się * .deb jako „ar” i wyświetla „data.tar” w środku).
Komentarze
- Witamy na stronie i dziękujemy za Twój wkład.Zwróć uwagę, że OP konkretnie poprosił o " rozpakowanie DEB … i przepakowanie DEB ". Być może możesz edytować swój post, aby również zająć się tym tematem.
apt install mc
) – po prostu naciśnij Enter w pliku deb