Î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
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 șidpkg-deb -b
resetațiuid:gid
al fișierelor extrase la0: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.
apt install mc
) – doar apăsați Enter pe un fișier deb