Modifier les dépendances d'un paquet debian avec Ansible
L'installation de logiciel est facilitée sur Debian et Ubuntu grâce au paquet .deb. Mais parfois les dépendances du paquet ne peuvent être résolues et empêchent l'installation. Il est possible de corriger le problème mais les commandes sont un peu longues, je vous présente donc comme le faire avec un rôle Ansible.
J'ai pris le paquet .deb de Slack comme exemple avec Debian 11 (Bullseye); j'ai également eu le problème avec Insomnia.
Voici ce que renvoie dpkg quand on essaye d'installer Slack
root@orion:/root# dpkg -i slack-desktop-4.22.0-amd64.deb Sélection du paquet slack-desktop précédemment désélectionné. (Lecture de la base de données... 122646 fichiers et répertoires déjà installés.) Préparation du dépaquetage de slack-desktop-4.22.0-amd64.deb ... Dépaquetage de slack-desktop (4.22.0) ... dpkg: des problèmes de dépendances empêchent la configuration de slack-desktop : slack-desktop dépend de libappindicator3-1 ; cependant : Le paquet libappindicator3-1 n'est pas installé.
Le problème c'est que le paquet libappindicator3-1 n'existe pas sur Debian 11 sous ce nom là. Il existe sous le nom libayatana-appindicator3-1. Il faut donc modifier le paquet de Slack pour renommer la dépendance.
La première étape consiste à télécharger le fichier .deb, j'ai choisi le dossier /opt comme répertoire de travail.
- name: download slack get_url: url: https://downloads.slack-edge.com/releases/linux/4.22.0/prod/x64/slack-desktop-4.22.0-amd64.deb dest: /opt/slack-desktop.deb owner: root mode: 0644
Ensuite nous allons décomposer le paquet Debian dans le dossier unpack et vérifier son intégrité grâce à l'outil dpkb-deb.
- name: unpack slack deb command: "dpkg-deb -x slack-desktop.deb unpack" args: chdir: /opt - name: control slack deb command: "dpkg-deb --control slack-desktop.deb" args: chdir: /opt
Avec la décomposition du paquet on obtient un dossier DEBIAN/ et un dossier unpack/. Pour recréer le paquet nous avons besoin de déplacer le dossier DEBIAN/ dans le dossier unpack/
- name: rename unpack deb command: "mv DEBIAN unpack" args: chdir: /opt
Il faut ensuite éditer le fichier control pour mettre à jour le nom du paquet. Le module replace d'Ansible est parfait pour ça.
- name: replace dependency replace: path: /opt/unpack/DEBIAN/control regexp: 'libappindicator3-1' replace: 'libayatana-appindicator3-1'
- name: repack deb command: "dpkg -b unpack/ slack-fixed.deb" args: chdir: /opt
Et voilà, on a maintenant un paquet qui contient les bonnes dépendances par rapport à notre système, il est possible de l'installer et ne pas oublier de nettoyer le travail.
- name: install slack apt: deb: /opt/slack-fixed.deb - name: clean slack command: "rm -Rf /opt/slack-fixed.deb /opt/unpack /opt/slack-desktop.deb"
J'ai volontairement gardé l'exemple simple sans ajouter de variable pour le rendre lisible.
Réponse de Ulrich le 25 oct. 2022