Pokouším se nainstalovat OpenCL SDK společnosti Intel, ale soubory DEB jsou buggy převody z RPM (viz zde pro zvědavé). Potřebuji upravit skript postinst
v DEB, které poskytují.
Jak mohu vzít existující DEB, extrahovat obsah (včetně kontrolních informací), pak později přebalit obsah a vytvořit nový DEB? Budu upravovat pouze soubory, žádné soubory nebudou přidány ani odstraněny.
Komentáře
Odpovědět
The primární příkaz pro manipulaci s balíčky deb je dpkg-deb
.
Chcete-li balíček rozbalit, vytvořte vyprázdněte adresář a přepněte se do něj, poté spusťte dpkg-deb
a extrahujte jeho řídicí informace a soubory balíčku. K opětovné sestavení balíčku použijte dpkg-deb -b
.
mkdir tmp dpkg-deb -R original.deb tmp # edit DEBIAN/postinst dpkg-deb -b tmp fixed.deb
Upozorňujeme, že pokud váš skript není spuštěn jako root, soubory “ oprávnění a vlastnictví budou ve fázi těžby poškozena. Jedním ze způsobů, jak tomu zabránit, je spuštění skriptu pod fakeroot
. Všimněte si, že musíte spustit celou sekvenci pod fakeroot
, ne každý dpkg-deb
samostatně, protože to je fakeroot
proces, který uchovává paměť oprávnění souborů, které“ nelze vytvořit tak, jak jsou.
fakeroot sh -c " mkdir tmp dpkg-deb -R original.deb tmp # edit DEBIAN/postinst dpkg-deb -b tmp fixed.deb "
Spíše než nepořádek s oprávněními můžete zachovat neporušený datový archiv a upravit pouze kontrolní archiv. dpkg-deb
neposkytuje způsob, jak toho dosáhnout. Naštěstí jsou balíčky deb ve standardním formátu: archivují je „re ar
. Můžete tedy použít ar
rozbalte kontrolní archiv, upravte jeho soubory a znovu použijte ar
k nahrazení řídicího archivu novou verzí.
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
Měli byste přidat záznam změn a změnit číslo verze , pokud v balíčku něco upravíte. Infrastruktura pro manipulaci s balíčky Debianu předpokládá, že pokud mají dva balíčky stejný název a verzi, jsou to stejný balíček. Přidejte příponu do části debian_revision na konec čísla verze; z důvodů řazení by přípona měla začínat ~
, např. Z 1.2.3-4.1
se stane 1.2.3-4.1~johnjumper1
.
Místo použití nástrojů prostředí můžete použít Emacs. Balíček dpkg-dev-el
(což je jeho vlastní upstream, protože se jedná o nativní balíček Debianu) obsahuje režimy pro úpravy .deb
soubory a úpravy protokolů změn Debianu. Emacs lze používat interaktivně nebo skriptovaně.
Komentáře
- Můžete také použít
-e
přepínač fpm pro změnu kontrolního souboru:fpm -e -s deb -t deb ../old.deb
. Tím se otevře kontrolní soubor ve vašem editoru. - btw,
fakeroot bash
a pokusí se vydat příkazy nebudou ohledně vlastnictví fungovat aar
Metoda je neuvěřitelně rychlá pro velké deb soubory! - Díky. To bylo užitečné. Pomocí
dpkg-deb -R
byly režimy zachovány adpkg-deb -b
resetovatuid:gid
extrahovaných souborů na0:0
. Nepotřeboval jsem ' fakeroot (domnívám se, že by mohly nastat problémy, kdyby byly v archivu nastaveny {u, g} id soubory, ale to nebylo ' t případ v mé situaci. - @PSkocik Nejen setxid soubory, také např. soubory a adresáře pod
/etc
nebo/var
které musí patřit do konkrétní skupiny. - Děkujeme za skvělou odpověď. Existuje způsob, jak zajistit, aby nově vytvořený balíček vs původní balíček měl stejný soubor md5sum?
Odpověď
Pomocí fpm můžete použít --after-install
možnost nahradit skript postinst
takto:
fpm -e --after-install ../DEBIAN/postinst.new -s deb -t deb ../old.deb
komentáře
- Instalace fpm na Debian / Ubuntu: sudo apt-get install ruby-dev build-essential; sudo gem install fpm
Odpovědět
Pokud chcete pouze extrahovat soubory z .deb fi le, 7-Zip je pohodlný. 7-Zip podporuje soubory „ar“ pro „pouze rozbalení“. (Není třeba soubor přejmenovávat; otevře * .deb jako „ar“ a uvnitř zobrazí „data.tar“.)
Komentáře
- Vítejte na stránkách a děkujeme za váš příspěvek.Upozorňujeme, že OP výslovně požadoval " rozbalení DEB … a opětovné zabalení DEB ". Možná můžete svůj příspěvek upravit také tak, aby oslovoval tento předmět.
apt install mc
) – stačí stisknout klávesu Enter na deb souboru