Yritän asentaa Intelin OpenCL SDK: ta, mutta DEB-tiedostot ovat virheellisiä tuloksia RPM: stä (katso täällä uteliaille). Minun täytyy muokata komentoa postinst
heidän toimittamassaan DEB: ssä.
Kuinka voin ottaa olemassa olevan DEB: n, purkaa sisällön (mukaan lukien ohjaustiedot) ja sitten pakata sisältö uudelleen myöhemmin uuden DEB: n tekemiseksi? Muokkaan vain tiedostoja, tiedostoja ei lisätä tai poistaa.
Kommentit
Vastaa
ensisijainen komento manipuloida deb-paketteja on dpkg-deb
.
Paketin purkamiseksi luo tyhjennä hakemisto ja vaihda siihen ja suorita sitten dpkg-deb
purkamaan sen ohjaustiedot ja pakettitiedostot. Käytä paketin uudelleen rakentamiseen dpkg-deb -b
.
mkdir tmp dpkg-deb -R original.deb tmp # edit DEBIAN/postinst dpkg-deb -b tmp fixed.deb
Varo, että ellei komentosarjasi ole juurtunut, tiedostot ” käyttöoikeudet ja omistajuus vioittuvat purkuvaiheessa. Yksi tapa välttää tämä on suorittaa komentosarja fakeroot
. Huomaa, että sinun on suoritettava koko jakso kohdassa fakeroot
, ei kukin dpkg-deb
erikseen, koska se on fakeroot
prosessi, joka pitää muistissa tiedostojen käyttöoikeudet, joita ei voida luoda sellaisenaan.
fakeroot sh -c " mkdir tmp dpkg-deb -R original.deb tmp # edit DEBIAN/postinst dpkg-deb -b tmp fixed.deb "
Sen sijaan, että sekaisin oikeuksilla voit pitää tietoarkiston ehjänä ja muokata vain ohjausarkistoa. dpkg-deb
ei tarjoa tapaa tehdä sitä. Onneksi deb-paketit ovat vakiomuodossa: ne ”re ar
-arkistot. Joten voit käyttää ar
purkaa ohjausarkisto, muokkaa sen tiedostoja ja korvaa ohjausarkisto uudella versiolla ar
.
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
Sinun tulisi lisätä muutosloki ja muuttaa versionumero jos muokkaat jotain paketista. Debian-pakettien käsittelyyn tarkoitettu infrastruktuuri olettaa, että jos kahdella paketilla on samalla nimellä ja versiolla, ne ovat sama paketti. Lisää loppuliite debian_revision -osaan versionumeron loppuun; lajittelun vuoksi loppuliitteen tulisi alkaa ~
, esim. 1.2.3-4.1
tulee 1.2.3-4.1~johnjumper1
.
Shell-työkalujen käyttämisen sijaan voit käyttää Emacsia. Paketti dpkg-dev-el
-paketti (joka on oma ylävirta, koska tämä on natiivi Debian-paketti) sisältää tilat muokkaamaan .deb
-tiedostoja ja muokata Debianin muutoslokeja. Emacs-tiedostoja voidaan käyttää vuorovaikutteisesti tai komentosarjojen avulla.
Kommentit
- Voit käyttää myös kytkintä
-e
. fpm ohjaustiedoston muuttamiseksi:fpm -e -s deb -t deb ../old.deb
. Tämä avaa ohjaustiedoston editorissasi. - btw,
fakeroot bash
ja yritä antaa komentoja ei toimi omistajuuden suhteen, jaar
-menetelmä on uskomattoman nopea isoille deb-tiedostoille! - Kiitos. Tämä oli hyödyllistä. Käyttämällä
dpkg-deb -R
-tiloja säilytettiin jadpkg-deb -b
palautettiin purettujen tiedostojenuid:gid
-asetukseksi0:0
. Eikä ' tarvinnut fakerootia (luulen, että saattaa olla ongelmia, jos arkistossa oli asetettuja {u, g} id-tiedostoja, mutta niitä ei ollut ' t tapaus tilanteessani. - @PSkocik Ei vain setxid-tiedostot, myös tiedostot ja hakemistot
/etc
tai/var
joiden on kuuluttava tiettyyn ryhmään. - Kiitos erinomaisesta vastauksesta. Onko tapa varmistaa, että uudelleenrakennetulla paketilla ja alkuperäisellä paketilla on sama md5sum?
Vastaus
Voit käyttää fpm --after-install
vaihtoehto korvata komentosarja postinst
seuraavasti:
fpm -e --after-install ../DEBIAN/postinst.new -s deb -t deb ../old.deb
kommentit
- fpm: n asentaminen Debianiin / Ubuntuun: sudo apt-get install ruby-dev build-essential; sudo gem install fpm
Vastaa
Jos haluat purkaa tiedostoja vain .deb fi -palvelusta 7-vetoketju on kätevä. 7-Zip tukee ar-tiedostoja vain purkamiseen. (Tiedostoa ei tarvitse nimetä uudelleen; se avaa * .deb nimellä ”ar” ja näyttää ”data.tar” sisällä.)
Kommentit
- Tervetuloa sivustolle ja kiitos panoksestasi.Huomaa, että OP pyysi erityisesti " purkaa DEB … ja pakkaa DEB uudelleen ". Ehkä voit muokata viestiäsi myös kyseisen aiheen mukaan.
apt install mc
) – paina vain Enter-tiedostoa deb-tiedostossa