Încerc să instalez OpenCL SDK Intel, dar fișierele DEB sunt conversii bug-uri de la RPM (consultați aici pentru curioși). Trebuie să editez scriptul postinst în DEB pe care îl furnizează.

Cum pot lua un DEB existent, să extrag conținutul (inclusiv informațiile de control), apoi reambalează ulterior conținutul pentru a crea un nou DEB? Voi edita doar fișiere, nu vor fi adăugate sau eliminate fișiere.

Comentarii

  • partea de despachetare poate fi făcută de la comandantul de la miezul nopții (apt install mc) – doar apăsați Enter pe un fișier deb

Răspuns

comanda principală pentru manipularea pachetelor deb este dpkg-deb .

Pentru a despacheta pachetul, creați un goliți directorul și treceți la acesta, apoi rulați dpkg-deb pentru a extrage informațiile sale de control și fișierele pachetului. Utilizați dpkg-deb -b pentru a reconstrui pachetul.

mkdir tmp dpkg-deb -R original.deb tmp # edit DEBIAN/postinst dpkg-deb -b tmp fixed.deb 

Atenție la faptul că, cu excepția cazului în care scriptul dvs. rulează ca root, fișierele ” permisiunile și proprietatea vor fi corupte în etapa de extragere. O modalitate de a evita acest lucru este să rulați scriptul în fakeroot . Rețineți că trebuie să rulați întreaga secvență sub fakeroot, nu fiecare dpkg-deb individual, deoarece este fakeroot proces care păstrează memoria permisiunilor fișierelor care nu pot fi create așa cum sunt.

fakeroot sh -c " mkdir tmp dpkg-deb -R original.deb tmp # edit DEBIAN/postinst dpkg-deb -b tmp fixed.deb " 

Mai degrabă decât mess cu permisiuni, puteți păstra arhiva de date intactă și modificați numai arhiva de control. dpkg-deb nu oferă o modalitate de a face acest lucru. Din fericire, pachetele deb sunt într-un format standard: ele „re ar . Deci puteți utiliza ar pentru a extrage arhiva de control, a-i modifica fișierele și a utiliza din nou ar pentru a înlocui arhiva de control cu o nouă versiune.

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 

Ar trebui să adăugați o intrare din jurnalul de modificări și să modificați numărul versiunii dacă modificați ceva din pachet. Infrastructura de manipulare a pachetelor Debian presupune că dacă două pachete au același nume și versiune, sunt „același pachet. Adăugați un sufix la partea debian_revision la sfârșitul numărului de versiune; din motive de sortare, sufixul ar trebui să înceapă cu ~, de ex. 1.2.3-4.1 devine 1.2.3-4.1~johnjumper1.

În loc să utilizați instrumente shell, puteți utiliza Emacs. Pachetul dpkg-dev-el pachetul (care este propriul său în amonte deoarece acesta este un pachet Debian nativ) conține moduri de editare .deb și pentru a edita jurnalele de schimbări Debian. Emacs poate fi utilizat interactiv sau cu script.

Comentarii

  • Puteți utiliza și comutatorul -e al fpm pentru a modifica fișierul de control: fpm -e -s deb -t deb ../old.deb. Aceasta va deschide fișierul de control în editorul dvs.
  • btw, fakeroot bash și încercați să emiteți comenzi nu va funcționa în ceea ce privește dreptul de proprietate și este incredibil de rapidă pentru fișierele Deb mari!
  • Vă mulțumim. Acest lucru a fost util. Folosind dpkg-deb -R modurile au fost păstrate și dpkg-deb -b resetați uid:gid al fișierelor extrase la 0:0. Nu ' nu aveam nevoie de fakeroot (îmi imaginez că ar putea exista probleme dacă ar fi setate {u, g} fișiere id în interiorul arhivei, dar asta nu era ' nu este cazul în situația mea.
  • @PSkocik Nu doar fișierele setxid, ci și fișierele și directoarele din /etc sau /var care trebuie să aparțină unui anumit grup.
  • Vă mulțumim pentru răspunsul excelent. Există o modalitate de a vă asigura că pachetul reconstruit față de pachetul original are același md5sum?

Răspuns

Puteți utiliza fpm cu --after-install opțiune pentru a înlocui scriptul postinst, astfel:

fpm -e --after-install ../DEBIAN/postinst.new -s deb -t deb ../old.deb 

Comentarii

  • Pentru a instala fpm pe Debian / Ubuntu: sudo apt-get install ruby-dev build-essential; sudo gem install fpm

Răspuns

Dacă doriți doar să extrageți fișiere dintr-un fișier .deb le, 7-Zip este convenabil. 7-Zip acceptă fișierele „ar” doar pentru „despachetare”. (Nu este nevoie să redenumiți fișierul; acesta deschide * .deb ca „ar” și afișează „data.tar” în interior.)

Comentarii

  • Bine ați venit pe site și vă mulțumim pentru contribuție.Vă rugăm să rețineți că OP-ul a solicitat în mod specific " despachetați DEB … și reambalați DEB ". Poate că poți edita postarea ta pentru a aborda și subiectul respectiv.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *