J'utilise un serveur Ubuntu 12.04 LTS. J'ai actuellement un problème où l'un de mes paquets utilisés a un bug gênant. Au lieu de l'enlever et de le construire à partir des sources, je souhaite l'intégrer à la gestion des paquets Ubuntus/Debians.
En venant d'ArchLinux, nous avons fait cela en copiant le PKGBUILD d'origine et en le changeant de telle sorte qu'il compile le nouveau nouveau . C'est un processus très simple, mais il informe le gestionnaire de paquets de ce paquet même s'il ne se trouve dans aucun référentiel local.
Existe-t-il un moyen similaire pour Ubuntu/Debian? Puis-je facilement baser mon paquet sur la version obsolète d'Ubuntu et installer ce paquet à la place de celui du référentiel d'origine?
Note : Le logiciel en question est libvirt (il faut au minimum 0.9.13, 12.04 tourne 0.9.8) et j'apprécierais une solution pour cela Dans les commentaires, je cherche une solution plus générale à ces problèmes s’ils se poseraient à l’avenir.
Contrairement aux questions Comment puis-je assembler manuellement mon propre paquet "à la dure"? et Quel est le guide de packaging Debian le plus simple? Je ne suis pas intéressé par la création d'un new package mais utilisez plutôt les ressources existantes et mettez-les à jour vers une version plus récente.
Je téléchargerais d'abord les dépendances de source et de construction pour la version Ubuntu:
apt-get install dpkg-dev
apt-get build-dep <package>
apt-get source <package>
La source en amont non modifiée sur laquelle la version Ubuntu est basée sera dans un fichier nommé <pkg> _ <ver> .orig.tar.gz (le schéma de compression peut varier) - Je le décompresserais dans un répertoire (appelons-le "dir" A "), puis téléchargez le code source dans la version corrigée du bogue dans un autre répertoire (" dir B "), puis générez un correctif pour les modifications apportées:
diff -Nur <dirA> <dirB> >/tmp/upgrade.patch
Ensuite, allez dans le répertoire où apt-get source a décompressé la version modifiée d’Ubuntu et appliquez le correctif.
patch -p1 </tmp/upgrade.patch
En supposant qu'il n'y ait pas beaucoup de changements entre les deux versions amont et qu'ils ne soient en conflit avec aucun des changements du conditionneur d'Ubuntu, cela devrait fonctionner. Ensuite, éditez debian/changelog dans le paquet Ubuntu pour lui donner un nouveau numéro de version, et dpkg-buildpackage devrait vous construire une version personnalisée.
Juste pour me vanter, j'ai créé une solution pour cette circonstance exacte. Vous pouvez télécharger, décompresser, construire et réinstaller un paquet Debian en 2 ou 3 commandes.
C'est un script Shell debtool et est disponible sur GitHub via le lien susmentionné.
Construire des paquets Debian à partir des sources peut s'avérer fastidieux, en particulier pour un pilote quotidien que vous ne voulez pas forcément confondre avec de nombreuses dépendances de construction, etc.
En supposant que libvirt soit disponible via des sources, exécutez la commande suivante:
debtool --download --unpack libvirt
La commande ci-dessus vient de télécharger le fichier libvirt_0.9.8_all.deb et de le décompresser dans le répertoire libvirt_0.9.8_all. .
Vous pouvez également décompresser la version de libvirt actuellement installée sur votre système:
debtool --unpack libvirt
À ce stade, vous devez apporter toutes les modifications aux fichiers du répertoire. Vous voudrez probablement aussi ajouter le numéro de version du paquet (0.9.8-custom1) situé dans ./ libvirt_0.9.8_all/DEBIAN/control .
Maintenant, construisez le paquet en lançant la commande suivante:
debtool --build ./libvirt_0.9.8_all
Votre paquet fini est maintenant dans le répertoire en cours sous le nom libvirt_0.9.8-custom1_all.deb .
Vous pouvez réinstaller rapidement ce paquet en exécutant debtool --reinst ./libvirt_0.9.8-custom1_all.deb
ou alternativement debtool --build --reinst ./libvirt_0.9.8_all
pour créer et réinstaller en une fois.
Vous pouvez également effectuer quelques tâches connexes avec debtool .
Si plusieurs versions d’un package sont disponibles dans les référentiels, vous pouvez les répertorier comme suit:
debtool --show zsh
La commande ci-dessus retournera ce qui suit:
zsh 5.0.5-4ubuntu1~ubuntu14.04.1 AMD64
zsh 5.0.2-3ubuntu6 AMD64
Si vous souhaitez télécharger les packages manuellement, vous pouvez utiliser l'option --show-format
.
debtool --show --show-format zsh
Retournera ce qui suit:
apt-get download zsh=5.0.5-4ubuntu1~ubuntu14.04.1 -a=AMD64
apt-get download zsh=5.0.2-3ubuntu6 -a=AMD64
Vous pouvez télécharger la version la plus récente d'un package comme suit:
debtool --download zsh
Vous pouvez télécharger une version spécifique comme suit:
debtool --download zsh=5.0.2-3ubuntu6
Vous pouvez décompresser un paquet sur votre disque dur:
debtool --unpack package.deb
Vous pouvez également décompresser un paquet actuellement installé sur votre système:
debtool --unpack package
Si vous avez modifié des fichiers installés, ceux-ci seront également incorporés. Ceci est parfait si vous souhaitez utiliser un package qui n'est plus disponible à partir de sources ou si vous souhaitez incorporer des correctifs préexistants dans un deb "corrigé".