Debian - Gestion de paquets

Empaquetage

Définir le nom du mainteneur du paquet pour utilisation avec dch

Afin d’avoir le champ contenant le nom du mainteneur et son adresse email correctement définis lors d’une modification du changelog du paquet avec l’utilitaire dch, il est possible de définir les variables d’environnement suivantes :

export DEBFULLNAME="Bob Kelso"
export DEBEMAIL="[email protected]"

Récupérer facilement les sources d’un package avec dget

L’utilitaire dget permet de récupérer en une commande les sources originales ainsi que les sources d’un paquet Debian. Exemple :

$ dget -q http://ftp.de.debian.org/debian/pool/main/m/mydumper/mydumper_0.6.1-1.dsc

$ ls
mydumper_0.6.1-1.debian.tar.gz  mydumper_0.6.1-1.dsc  mydumper_0.6.1.orig.tar.gz

Apt/Aptitude

Sous les distributions Debian (ou assimilées) mettent à notre disposition les outils APT afin de géré les paquets de nos systèmes.

Voici donc quelques petites astuces ou pense-bête relatifs à sa configuration ou son utilisation.

Configuration

Ne pas installer les paquets recommandés/suggérés

Il est possible de ne pas tenir compte du champ Recommends présent dans certains paquets lors de leur installation et d’éviter ainsi de récupérer des dépendances parfois inutiles.

Configurer APT comme suit afin de mimer le comportement de l’option --no-install-recommends de la commande apt-get :

echo "APT::Install-Recommends false;" >>/etc/apt/apt.conf.d/99custom

ou --without-recommends de aptitude :

echo "Aptitude::Recommends-Important false;" >>/etc/apt/apt.conf.d/90custom

Supprimer automatiquement les paquets n’étant plus utilisés

Lors de la désinstallation de paquets, il est possible de supprimer par la même occasion ceux ayant été installés en même temps que celui à enlever et n’étant plus utiles au système.

Ce comportement est normalement obtenu à l’aide des commandes apt-get autoremove <nom_du_paquet> ou aptitude purge --purge-unused <nom_du_paquet> et peut être généralisé à l’aide de la configuration suivante :

echo "APT::Get::AutomaticRemove true;" >>/etc/apt/apt.conf.d/99custom

ou pour aptitude :

echo "Aptitude::Purge-Unused true;" >>/etc/apt/apt.conf.d/99custom

ℹ️ Note: en plus de désinstaller les paquets, Aptitude purge en plus leurs configurations.

Astuces

Installer, supprimer et purger conjointement des paquets

Il est possible d’installer, de supprimer et de purger plusieurs paquets en une seule ligne de commande. Cette manipulation peut être utile notamment pour l’exécution de la commande aptitude à l’intérieur de scripts.

paquet+    installer le package
paquet-    supprimer le package
paquet_    purger le package

Exemple

aptitude install paquet1+ paquet2+ paquet3_ paquet4- paquet5+

Cette commande installera les paquets 1, 2 et 5, supprimera le paquet 4 et purgera le paquet 3.

Télécharger un paquet sans l’installer

apt-get download <nom du paquet>

dpkg

Astuces

Purger les configurations des paquets désinstallés

Lors de la désinstallation de paquets via apt-get remove package ou à l’aide de tout autre utilitaire de gestion de paquets, les configurations sont laissées intactes sur le système.

Afin de consulter la liste des paquets désinstallés pour lesquels il reste des fichiers de configuration, taper :

dpkg -l | awk '$1=="rc"{print $2}'

Une fois cette liste obtenue, l’ajout d’un simple xargs vous débarrassera de toutes lesdites configurations :

dpkg -l | awk '$1=="rc"{print $2}' | xargs dpkg --purge

Obtenir des informations sur un paquet

dpkg-deb --info un_paquet.deb

Lister les paquets à mettre à jour

aptitude search ~U
aptitude search ~U -F '%p' # n'afficher que le nom des paquets à mettre à jour

Maintenir un paquet à sa version courante

Pour maintenir certains paquets à leur version courante, il est nécessaire de les passer à l’état hold :

apt-mark hold <nom_du_paquet>

ou, si nous utilisons aptitude :

aptitude hold <nom_du_paquet>

ℹ️ Note: utiliser le mot clef unhold pour annuler cette opération.

Lister les paquets maintenus à leur version courante

apt-mark showhold

ou via aptitude :

aptitude search ~ahold

Savoir quel paquet a causé l’installation du paquet XXX

Pour savoir quel paquet a causé, par exemple, l’installation du paquet libldap-2.4-2 :

apt-cache rdepends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances --installed <nom_paquet>

ou :

aptitude why <nom_paquet>

Empêcher un paquet de (re)démarrer/arrêter automatiquement un service

Lorsqu’un service – Apache, Nginx, MySQL, Postfix… – est installé via un paquet, Debian démarre automatiquement le service en question à l’issue de l’installation. Si le paquet est “bien fait”, le démarrage automatique du service est conditionné par une variable du type <SERVICE>_ENABLED dans le fichier /etc/default/<service>, et cette variable est définie à false ou 0 par défaut. Néanmoins pour les paquets ne disposant pas de ce garde-fou, il est possible de prévenir le démarrage d’un service dont la comportement non-configuré pourrait poser problème en utilisant l’astuce suivante :

echo exit 101 > /usr/sbin/policy-rc.d
chmod +x /usr/sbin/policy-rc.d

Le code retour 101 du script interdit alors à l’utilitaire invoke-rc.d d’effectuer l’opération demandée par le script de post-installation du paquet (“invoke-rc.d: policy-rc.d denied execution of start.").

Si vous ne souhaitez pas que ce comportement soit permanent, il est possible d’utiliser les directives de configuration Dpkg::Pre-Invoke et Dpkg::Post-Invoke pour que ce fichier ne soit créé qu’à l’utilisation de des commandes dpkg/apt-get/aptitude :

cat >>/etc/apt/apt.conf.d/70debconf <<EOF
Dpkg::Pre-Invoke {"echo exit 101 > /usr/sbin/policy-rc.d && chmod +x /usr/sbin/policy-rc.d";};
Dpkg::Post-Invoke {"rm -f /usr/sbin/policy-rc.d";};
EOF

Installer une clé de signature GPG distante via HTTP

Afin d’éviter d’avoir à télécharger un fichier de clé GPG de signature de paquets puis de l’ajouter au trousseau via apt-key add <fichier>, il existe une parade simple pour installer une clé de signature de paquets d’un coup :

apt-get adv --fetch-keys http://domaine.fr/chemin/cle.gpg

Tableau de correspondance des commandes APT/Aptitude

APTAptitude
apt-get updateaptitude update
apt-get install [--no-install-recommends]aptitude install [--without-recommends]
apt-get removeaptitude remove
apt-get purgeaptitude purge
apt-cache searchaptitude search
apt-cache showaptitude show
apt-cache policyaptitude versions
apt-mark holdaptitude hold
apt-mark unholdaptitude unhold
apt-mark showholdaptitude search ~ahold
apt-mark autoaptitude markauto
apt-mark manualaptitude unmarkauto
apt-mark showmanualaptitude search "!~M"