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

  • część rozpakowywania można wykonać z poziomu Midnight Commandera (apt install mc) – po prostu naciśnij Enter w pliku deb

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, a ar 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 i dpkg-deb -b zresetuj uid:gid wyodrębnionych plików do 0: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.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *