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

  • la partie de déballage peut être effectuée à partir de minuit commander (apt install mc) – appuyez simplement sur Entrée sur un fichier deb

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 le ar est incroyablement rapide pour les gros fichiers deb!
  • Merci. Cela a été utile. En utilisant dpkg-deb -R, les modes ont été conservés et dpkg-deb -b réinitialise le uid: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.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *