Jessaie dinstaller le SDK OpenCL dIntel mais les fichiers DEB sont des conversions boguées de RPM (voir ici pour les curieux). Je dois modifier le script postinst
dans le DEB quils fournissent.
Comment puis-je prendre un DEB existant, extraire le contenu (y compris les informations de contrôle), puis reconditionner plus tard le contenu pour créer un nouveau DEB? Je néditerai que les fichiers, aucun fichier ne sera ajouté ou supprimé.
Commentaires
Answer
Le La commande principale pour manipuler les packages deb est dpkg-deb
.
Pour décompresser le package, créez un videz le répertoire et accédez-y, puis exécutez dpkg-deb
pour extraire ses informations de contrôle et les fichiers du package. Utilisez dpkg-deb -b
pour reconstruire le package.
mkdir tmp dpkg-deb -R original.deb tmp # edit DEBIAN/postinst dpkg-deb -b tmp fixed.deb
Attention, à moins que votre script ne sexécute en tant que root, les fichiers » les autorisations et la propriété seront corrompues au stade de lextraction. Pour éviter cela, exécutez votre script sous fakeroot
. Notez que vous devez exécuter la séquence entière sous fakeroot
, pas chaque dpkg-deb
individuellement, car il « est le fakeroot
processus qui garde la mémoire des permissions des fichiers qui ne peuvent » pas être créés tels quels.
fakeroot sh -c " mkdir tmp dpkg-deb -R original.deb tmp # edit DEBIAN/postinst dpkg-deb -b tmp fixed.deb "
Plutôt que du désordre avec des autorisations, vous pouvez conserver larchive de données intacte et ne modifier que larchive de contrôle. dpkg-deb
ne fournit pas un moyen de le faire. Heureusement, les paquets deb sont dans un format standard: ils « re ar
archives. Vous pouvez donc utiliser ar
pour extraire larchive de contrôle, modifier ses fichiers et utiliser à nouveau ar
pour remplacer larchive de contrôle par une nouvelle version.
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
Vous devez ajouter une entrée de journal des modifications et modifier le numéro de version si vous modifiez quelque chose dans le paquet. Linfrastructure pour manipuler les paquets Debian suppose que si deux paquets ont le même nom et la même version, ils « sont le même paquet. Ajoutez un suffixe à la partie debian_revision à la fin du numéro de version; pour des raisons de tri, le suffixe doit commencer par ~
, par exemple 1.2.3-4.1
devient 1.2.3-4.1~johnjumper1
.
Au lieu dutiliser des outils shell, vous pouvez utiliser Emacs. Le dpkg-dev-el
package (qui est son propre en amont car il sagit dun package Debian natif) contient des modes pour éditer .deb
et pour éditer les journaux de modifications Debian. Emacs peut être utilisé de manière interactive ou scriptée.
Commentaires
- Vous pouvez également utiliser le commutateur
-e
de fpm pour modifier le fichier de contrôle:fpm -e -s deb -t deb ../old.deb
. Cela ouvrira le fichier de contrôle dans votre éditeur. - btw,
fakeroot bash
et essayez démettre des commandes ne fonctionnera pas concernant la propriété, et lear
est incroyablement rapide pour les gros fichiers deb! - Merci. Cela a été utile. En utilisant
dpkg-deb -R
, les modes ont été conservés etdpkg-deb -b
réinitialise leuid:gid
des fichiers extraits à0:0
. Na ' pas besoin de fakeroot (jimagine quil pourrait y avoir des problèmes sil y avait des fichiers {u, g} id définis dans larchive mais ce nétait pas ' t le cas dans ma situation. - @PSkocik Pas seulement des fichiers setxid, aussi par exemple des fichiers et répertoires sous
/etc
ou/var
qui doivent appartenir à un groupe spécifique. - Merci pour cette excellente réponse. Existe-t-il un moyen de garantir que le package reconstruit et le package dorigine ont la même somme md5?
Réponse
Vous pouvez utiliser fpm avec --after-install
option pour remplacer le script postinst
, comme ceci:
fpm -e --after-install ../DEBIAN/postinst.new -s deb -t deb ../old.deb
Commentaires
- Pour installer fpm sur Debian / Ubuntu: sudo apt-get install ruby-dev build-essential; sudo gem install fpm
Réponse
Si vous souhaitez uniquement extraire des fichiers dun fichier .deb fi le, 7-Zip est pratique. 7-Zip prend en charge les fichiers « ar » pour « décompresser uniquement ». (Pas besoin de renommer le fichier; il ouvre * .deb comme « ar » et affiche « data.tar » à lintérieur.)
Commentaires
- Bienvenue sur le site et merci pour votre contribution.Veuillez noter que lOP a spécifiquement demandé de " décompresser DEB … et reconditionner DEB ". Vous pouvez peut-être modifier votre message pour aborder ce sujet également.
apt install mc
) – appuyez simplement sur Entrée sur un fichier deb