Outils pour utilisateurs

Outils du site


debian:debian_gestion_paquets

La gestion des paquets sous Debian

Après avoir installé votre système Debian il vous faudra le faire vivre : mises à jour et installation/désinstallation de logiciels sont des tâches courantes. Les programmes se présentent sous la forme de “paquets” qui portent l'extension “.deb”. Pour les utiliser Debian dispose d'outils très efficaces au premier rang desquels vient “apt”.

Un signe $ précède les commandes qui ne nécessitent pas des droits administrateurs, un signe # celles qui nécessitent des droits administrateurs. Ces signes ne font PAS partie de la commande. Les lignes qui ne commencent pas par un signe $ ou # correspondent au résultat de la commande précédente.

Le système de gestion de paquets “.deb” est commun à de nombreuses distributions dérivées de Debian, parmi lesquelles la famille des *buntu (Ubuntu, Kubuntu, Xubuntu…). En dehors des lignes de dépôts de logiciels qui sont spécifiques à chaque distribution/version, les outils présentés ici sont utilisables de la même façon sur la plupart des distributions dérivées de Debian.

"apt" : Les fichiers de configuration importants

sources.list

Le fichier central concernant la gestion de paquets sous Debian est /etc/apt/sources.list car c'est dans ce fichier que sont inscrites les sources de téléchargement, on parle de “dépôts de paquets”, que “apt” va utiliser. Ces sources se présentent sous la forme :

Concrètement cela donne pour une Debian “squeeze” sur laquelle on veut avoir accès à toutes les catégories de logiciels :

deb http://ftp.fr.debian.org/debian/ squeeze main contrib non-free
deb-src http://ftp.fr.debian.org/debian/ squeeze main contrib non-free

Les catégories (“sections” en Anglais) correspondent au statut des paquets par rapport à la charte du logiciel libre selon Debian, connu sous le nom de "Contrat Social" Debian. Les paquets de “main” étant totalement gérés par les développeurs de debian et libres selon les critères de Debian, “contrib” regroupe des paquets libres mais dont certaines dépendances ne le sont pas, et “non-free” s'applique aux paquets soumis à des licences restrictives (commercial, copyright, illégal dans certains pays…). Une dernière catégorie “restricted” peut apparaître sur certaines sources pour signifier des paquets propriétaires soumis à des conditions particulières (payant …etc).

Il est également possible d'ajouter le contenu d'un cdrom à la base de paquet pour faire des installations hors-ligne, il vous sera demandé de l'insérer en cas de besoin. La commande pour ajouter un cdrom est :

# apt-cdrom add

avec le cd dans le lecteur.

Les sources indispensables sont ajoutées dès l'installation, en particulier les sources qui concernent les mises à jour de sécurité. Vous pouvez prendre modèle sur la syntaxe de ces sources. À noter qu'un caractère “#” (dièse) au début d'une ligne désactive la ligne, on dit alors qu'elle est “commentée”.

Un exemple de fichier “sources.list” :

### Debian 6 "squeeze" ###

## securité squeeze

deb http://security.debian.org/ squeeze/updates main contrib non-free 
deb-src http://security.debian.org/ squeeze/updates main contrib non-free 

## squeeze-updates (ancien "volatile" + mises à jour) 

deb http://ftp.fr.debian.org/debian/ squeeze-updates main contrib non-free
deb-src http://ftp.fr.debian.org/debian/ squeeze-updates main contrib non-free

## squeeze-proposed-updates (mises à jour de pré-version)

deb http://ftp.fr.debian.org/debian squeeze-proposed-updates main contrib non-free
deb-src http://ftp.fr.debian.org/debian squeeze-proposed-updates main contrib non-free

## Depots principaux squeeze

deb http://ftp.fr.debian.org/debian/ squeeze main contrib non-free    
deb-src http://ftp.fr.debian.org/debian/ squeeze main contrib non-free 

###########Fin des dépôts officiels############

## Debian-multimedia - paquets multimedia non officiels
deb http://mirror.home-dn.net/debian-multimedia/ squeeze main non-free
deb-src http://mirror.home-dn.net/debian-multimedia/ squeeze main non-free

## Wine HQ - squeeze (non officiel)
## signing key "wget -O - http://www.lamaresh.net/apt/key.gpg | apt-key add -"
#deb http://www.lamaresh.net/apt squeeze main
#deb-src http://www.lamaresh.net/apt/ squeeze main

## Google software repository
#deb http://dl.google.com/linux/deb/ squeeze non-free
 

## SOGo (groupware, "lightning" avec support ldap)
#deb http://inverse.ca/debian/ squeeze main


## Oracle VirtualBox
#deb http://download.virtualbox.org/virtualbox/debian squeeze contrib


####Miroir Debian alternatif####

## Miroir squeeze
#deb http://mirrors.eu.kernel.org/debian/ squeeze main contrib non-free 
#deb-src http://mirrors.eu.kernel.org/debian/ squeeze main contrib non-free

Consultez le manuel pour plus de détails :

$ man sources.list

/etc/apt/preferences et /etc/apt/apt.conf

Ces fichiers peuvent ne pas exister par défaut, il suffit alors de les créer.

Dans ces fichiers vous pouvez assigner un degré de priorité à un niveau donné de stabilité pour l'ensemble de vos paquets ou certains seulement. On parle de “package pinning” en Anglais, ou “marquage de version”. Le fichier de préférences est simple par sa syntaxe mais complexe dans les conséquences qu'il peut entraîner, à utiliser avec prudence et documentation !
Un exemple de blocage du paquet “gimp” à sa version 2.6* :

Package: gimp
Pin: 2.6*
Pin-Priority: 1001

Pour utiliser des paquets de l'archive (a=) “experimental”, et suivre leurs mises à jour :

Package: *
Pin: release a=experimental
Pin-Priority: 101

Pour donner la priorité 990 aux paquets de la distribution de nom (n=) “squeeze” :

Package: *
Pin: release n=squeeze
Pin-Priority: 990

Un exemple en prenant l'origine du dépôt comme critère (information renvoyé par la commande “apt-cache policy”) :

Package: *
Pin: origin kernel-archive.buildserver.net
Pin-Priority: 101

:!: Attention à ne pas trop “jouer” avec des priorités de paquets car on peut entraîner de sérieux problèmes de dépendances…
Pour en savoir plus, voyez les liens en fin de page, et utilisez la commande

$ man apt_preferences

Un extrait du manuel au sujet des priorités :

Comment APT interprète-t-il les priorités ?
Les priorités (P) indiquées dans le fichier des préférences doivent être des entiers positifs ou négatifs.
Ils sont interprétés à peu près comme suit :

      P > 1000  Cette priorité entraîne l´installation du paquet même s´il s´agit d´un retour en arrière.

990 < P <=1000  La version sera installée, même si elle n´appartient pas à la distribution par défaut ;
                mais elle ne sera pas installée si la version installée est plus récente.

500 < P <=990   La version sera installée, sauf s´il existe une version appartenant à la distribution par
                défaut ou si la version installée est plus récente.

100 < P <=500   La version sera installée, sauf s´il existe une version appartenant à une autre distribution
                ou si la version installée est plus récente.

  0 < P <=100   La version sera installée si aucune version du paquet n´est installée.

      P < 0     Cette priorité empêche l´installation de la version.


Pour donner globalement la préférence à un niveau de stabilité sur l'ensemble du système il faut créer un fichier apt.conf dans /etc/apt , ou /etc/apt/apt.conf.d/local qui aura le contenu suivant pour un système privilégiant “testing” :

APT::Default-Release "testing";

Cette façon de faire évite de se retrouver au fil des mises à jour avec un système en “unstable” juste parce qu'on a ajouté une source “unstable” dans le fichier “sources.list”, cela n'empêche pas d'installer des paquets “unstable” avec la commande :

# apt-get -t unstable install nom_du_paquet

apt en ligne de commande

Une fois votre sources.list mis en ordre, vous pouvez rafraîchir la base de donnée des paquets avec la commande :

# apt-get update

Pour installer les mises à jour disponibles c'est :

# apt-get upgrade

Pour (dés)installer un paquet particulier c'est :

# apt-get install nom_du_paquet
# apt-get remove --purge nom_du_paquet

où l'option facultative “--purge” indique d'enlever également les fichiers de configurations du logiciel à désinstaller. À noter que l'extension des paquets .deb n'est pas nécessaire.

L'installation de plusieurs paquets est possible en indiquant leurs noms à la suite séparés par un espace, et l'installation et désinstallation en une seule commande également avec :

# apt-get install gimp scribus-

qui installera gimp et désinstallera scribus (notez le “-” (signe moins) après “scribus”).

Il est à noter que “apt-get” se charge de gérer les dépendances et vous indiquera les paquets supplémentaires qui seront automatiquement installés pour les satisfaire. En revanche il ne prend pas en charge les paquets “recommandés” et “suggérés” par défaut.

Vous voilà maître des commandes de base, il vous reste à savoir rechercher un paquet avec :

$ apt-cache search nom_du_paquet

Grâce à des “additifs” vous pouvez étendre les fonctions de apt, si vous installez par exemple le paquet “apt-show-versions” vous aurez accès à la commande:

$ apt-show-versions -u

qui listera tout les paquets disponibles pour mise à jour.

À utiliser avec prudence et discernement, la commande :

# apt-get dist-upgrade

fera passer l'ensemble de votre système à la version directement supérieure (“stable” > “testing” ou “testing” > “unstable” …etc), si vous avez bien entendu modifié votre sources.list pour pointer vers le nouveau niveaux.
Il est maintenant conseillé d'utiliser “Aptitude” (voir plus bas) pour cette usage.
Sauvegarde indispensable avant l'exécution de ce genre de mise à niveau !

Pour connaître l'ensemble des usages possibles de apt-get référez vous au manuel en tapant man apt-get dans une console. Ou bien lisez le apt how-to. Vous découvrirez que apt sait réparer des paquets dont les dépendances sont “brisées” ou lister et désinstaller des dépendances laissées orphelines et inutiles lors d'une désinstallation précédente.

Enfin un dernier avantage de “apt” est sa gestion de la signature des paquets, à chaque source correspond une signature numérique garantissant l'authenticité des paquets. Si cette clé d'identification est absente de votre système vous en avertira par la mention “The following packages cannot be authenticated!” ou “aucune clé publique n'est disponible…”. Dans ce cas il vous faut installer la clé d'identification de la source d'installation soit via le paquet “debian-archive-keyring” qui contient les clés des dépôts officiels et “debian-multimedia-keyring” pour les paquet de http://www.debian-multimedia.org , soit en important la clé manuellement pour des sources plus “exotiques”. L'exemple de la source Google©® :

Une fois ajouté au sources.list

deb http://dl.google.com/linux/deb/ stable non-free

il faut taper dans une console en root:

# wget -q http://dl.google.com/linux/linux_signing_key.pub -O- | sudo apt-key add -

en faisant bien attention aux tirets, ensuite un “apt-get update” rendra les paquets de cette source disponibles à l'installation.

:!: Attention :!: car en ajoutant un dépôt de logiciels à votre sources.list et surtout en ajoutant sa clé vous accordez totale confiance à tous les paquets qui s'y trouvent ! Donc prudence avec les fichiers sources.list récupérés sur des blogs ou sites perso !

L'outil Unofficial Apt Repository vous permettra de trouver des sources de manière plus sûr, en plus la syntaxe est déjà prête à l'emploi. À garder en marque-page donc ;-) .

Un mémo des commandes utiles. Si la commande n'est pas disponible sur votre système, l'installation du paquet correspondent est nécessaire (exemple : “apt-file”) :

Commande Fonction
# apt-get update mettre à jour la liste des paquets disponibles dans les dépôts
# apt-get upgrade mettre à jour les paquets installés
# apt-get dist-upgrade mise à niveau de distribution, par exemple pour passer de “testing” à “unstable”
# apt-get dist-upgrade -s simuler une action, affiche les actions nécessaires sans les effectuer réellement
# apt-get check met à jour l'arbre des dépendances et cherche les conflits/paquets cassés
# apt-get install paquet pour installer le(s) paquet(s) dont le(s) nom(s) sui(ven)t la commande
# apt-get remove paquet pour désinstaller le(s) paquet(s) dont le(s) nom(s) sui(ven)t la commande
# apt-get remove --purge paquet l'option “--purge” indique d'effacer également les fichiers de configuration
# apt-get autoremove supprimer les dépendances orphelines issues de paquets désinstallés
# apt-get clean efface les paquets téléchargés conservés en cache (/var/cache/apt/archives)
# apt-get autoclean efface les paquets téléchargés, seulement s'ils ne sont plus disponibles sur les dépôts
$ apt-cache search paquet recherche d'un paquet dont le nom suit la commande
$ apt-cache policy paquet donne la disponibilité d'un paquet, sa version, le dépôt d'origine et la priorité
$ apt-cache policy sans nom de paquet, affichage la priorité de tous les dépôts présent dans le sources.list
$ apt-cache madison paquet donne les versions d'un paquet installé ou disponible
$ apt-cache show paquet affiche les propriétés d'un paquet qu'il soit installé ou non
$ apt-cache depends paquet affiche les dépendances d'un paquet en incluant les conflits et paquets suggérés
$ apt-file search fichier recherche quel paquet fourni un fichier
$ apt-file update met à jour la liste du contenu des paquets, à effectuer régulièrement
$ apt-file list paquet liste les fichiers contenus dans un paquet (installé ou non)
$ apt-show-versions liste tous les paquets installés, leurs distributions, versions actuelles, versions plus récentes
$ apt-show-versions -i met à jour le cache de “apt-show-versions”
$ apt-show-versions -u liste les paquets dont une version plus récente est disponible
$ apt-rdepends paquet donne l'arbre des dépendances d'un paquet de manière récursive
$ apt-rdepends -r paquet liste les paquets qui dépendent du paquet donné en argument

apt en mode graphique

La ligne de commande c'est rapide et efficace, mais une belle interface graphique c'est plus confortable ! Apt en possède plusieurs dont les plus courantes sont “Synaptic” (lié à Gnome) et “KPaquagekit” (dans KDE4). On trouve également une interface simplifiée “gnome-app-install” dans l'environnement de bureau Gnome.
Plusieurs interfaces graphiques peuvent être installées sur le même système à condition de ne pas être utilisé simultanément. En revanche aucun problème à désintaller dans “KPackagekit” un paquet installé avec “Synaptic” : c'est toujours Apt qui fait le boulot ! “Synaptic” dispose d'un applet Gnome d'avertissement de mises à jour disponible, de même que “KPackagekit” pour KDE4. Il existe également des interfaces graphiques pour installer un paquet “.deb” isolé (téléchargé), comme “Gdebi” ou “KPackage”.
S'ils ne sont pas déjà présent sur le système, ces programmes s'intallent avec “apt-get” (mettre le nom du logiciel désiré) :

# apt-get install synaptic

Ces programmes permettent d'accéder à beaucoup des fonctions de “apt”, je vous laisse explorer les interfaces ;-) .

“Synaptic”, lié à l'environnement de bureau "Gnome" :


“gdebi” (ici en version “kde”, disponible pour “Gnome”), installe des paquets isolés en gérant les dépendances :


“KPackagekit”, lié à l'environnement de bureau "KDE4" :


“Kpackage” lié à “KDE” :

Aptitude, la relève

Apt est un outils puissant, souple et… ancien. La relève est déjà en ordre de marche sous le nom de Aptitude. Il s'agit d'une interface en mode texte ou en ligne de commande basée sur apt, mais qui ajoute une dose de finesse supplémentaire dans la gestion des dépendances et des paquets “recommandés” et “suggérés” lors d'une installation.
D'un emanière shématique on peut dire que “apt” est adapté à la gestion d'une Debian “stable”, sans mélange de versions et “pinning”. Dans les autres cas “aptitude” donnera souvent de meilleurs résultats.
“Aptitude” garde en mémoire les paquets installés manuellement et sait purger les dépendances orphelines, permet de choisir le niveau de stabilité auquel un paquet est installé et propose des solutions pour résoudre des conflits de dépendances :

# aptitude install gimp/unstable

installera gimp depuis une source “unstable” (présente dans le sources.list bien sûr).

“aptitude” s'intalle avec “apt-get” s'il n'est pas déjà présent sur le système :

# apt-get install aptitude

“aptitude” s'utilise avec une syntaxe similaire à “apt-get” (install, remove, purge, update, upgrade, full-upgrade …etc voir man aptitude pour la liste exhaustive des commandes et /usr/share/doc/aptitude/README).

aptitude en mode "graphique"

Aptitude peut s'utiliser via une interface “semi-graphique” “ncurse”, il suffit de taper la commande :

# aptitude

L'écran principal commenté en rouge :


L'écran d'informations détaillées sur un paquet :


L'écran de résumé des actions en attente :


Les raccourcis de l'interface “ncurse” sont :

Touches Actions
? Affiche l'aide
F10 Menu > point de départ de toutes les actions, à explorer absolument ;-)
u Mise à jour des informations de l'archive de paquets
+ Marque un paquet pour mise-à-jour ou installation
- Marque un paquet pour suppression (garde la configuration)
_ Marque un paquet pour purge (supprime la configuration)
= “Gèle” la version d'un paquet, il ne sera pas mis à jour
U Marque tous les paquets qui peuvent être mis à jour
g Téléchargement et installation des paquets sélectionnés
q Sortie de l'écran courant et sauvegarde des changements
x Sortie de l'écran courant sans sauvegarde
Enter Visualisation des informations sur un paquet
i Circule parmi les informations sur le paquet (panneau bas de l'interface)
C Visualisation des changements d'un paquet
/ Recherche la première occurrence
n Répète la dernière recherche
\ Recherche en arrière

On peut utiliser des motifs de recherche, par exemple écrire dans le champ de recherche “~dsamba” effectuera une recherche de “samba” sur la description des paquets (“~d”), et pas seulement sur leurs noms. Voir “aptitude en ligne de commande” pour plus de détails sur les motifs de recherche.

Si vous utilisez des motifs de recherche complexes en ligne de commande vous devrez échapper les caractères spéciaux pour éviter que le shell ne les interprètes, mais si vous utilisez le même motif de recherche dans la fenêtre de recherche intégrée d'Aptitude vous ne devez pas utiliser les caractères d'échappement. Un exemple : avec la recherche des paquets installés depuis le niveau “testing” et dont il existe une version plus récente en “unstable” :
En ligne de commande : aptitude search ~S~i\(~Atesting\!~Aunstable\)
Fonction de recherche d'Aptitude : ~S~i(~Atesting!~Aunstable)
Notez que les “\” ont disparu.

La gestion fine des dépendances peut être modifiée dans Menu([F10])–> Options –> Gestion des dépendances


Une interface graphique basée sur “GTK” est en cours de développement, nommée “aptitude-gtk” elle est déjà disponible sur les dépôts Debian “experimental”, mais son utilisation reste réservée à un public averti sur un système dédié aux tests. Pour suivre l'évolution du projet vous pouvez vous référer à ce blog.

aptitude en ligne de commande

Des exemples de commandes avancées en console:

  • aptitude why paquet1 paquet2 : Permet de visualiser les relations de dépendances entre deux paquets
  • aptitude why-not paquet : Permet de savoir pourquoi l'installation d'un paquet échoue ou est impossible
  • aptitude search ~dmozilla : Effectue une recherche sur la description des paquets plutôt que leurs noms
  • aptitude search '?depends(paquet)' : Liste tous les paquets dépendant de “(paquet)“
  • aptitude search '~S~i~Aexperimental' : Liste tous les paquets installés depuis l'archive experimental
  • aptitude search '?installed~dflash' : Liste les paquets installés dont la description contient le mot “flash”
  • aptitude search ~S~i~dflash : Exactement pareil que précédemment, forme courte
  • aptitude remove ~nopenoffice : Supprime tous les paquets dont le nom contient “openoffice”
  • aptitude install vlc=0.9.8a-3 : Installe le paquet “vlc” en version “0.9.8a-3”, si elle est disponible
  • aptitude forbid-version vlc=0.8.6 : Empêche l'installation par mise à jour de “vlc” en version “0.8.6”
  • aptitude hold vlc : Empêche toute mise à jour du paquet “vlc” (“gèle” du paquet, contraire “unhold”)
  • aptitude markauto '?section(libs)' : Marque toutes les librairies comme installées automatiquement. Si des librairies sont “orphelines” (aucun paquet ne dépend d'elles), elles seront désinstallées

Motifs de recherche courants :

Motif Forme longue Fonction Exemple
~n ?name Recherche par nom ~nmozilla = paquets dont le nom contient “mozilla”
~A ?archive Recherche par dépôt '?archive(experimental)' = paquets du dépôt “experimental”
~i ?installed Paquets actuellement installés ~i = paquets installés
~S ?narrow Opérateur logique “et” ~S~i~nmozilla = paquets installés ET dont le nom contient “mozilla”
! ?not Opérateur logique de négation '!~nmozilla' = paquets dont le nom ne contient pas “mozilla”
~O ?origin Recherche par origine '~S~i!~Odebian' = paquets installés et n'ayant pas pour origine “debian”
~s ?section Recherche par catégorie (voir note 1 ci-dessous) ~snon-free = paquets de la catégorie “non-free”
| ?or Opérateur logique “ou” '~S~i(~Atesting|~Aunstable)' = paquets installés depuis “testing” ou “unstable”
~m ?maintainer mainteneur du paquet ~mmarillat = paquets maintenus par “marillat” (Christian Marillat, debian-multimedia.org)
~o ?obsolete Paquets obsolètes ou locaux ~S~o~sdev = paquets locaux ou obsolètes de la section “dev” (développement)
~G ?tag Recherche par “Debtags” (étiquettes) ~S~i~Gpython = paquets installés ayant le “tag” “python”

<Wrap info> 1 : Le terme anglais “section” regroupe les catégories de paquets comme “main”, “contrib” et “non-free”, mais également les familles de paquets comme “dev”, “lib”, “video”, “admin” …etc. Les deux sont utilisables avec le motif de recherche ”~s” (“?section”).
Les motifs incluant les signes “?” (formes longues), “!”, “|” ou des parenthèses “()” doivent être protégées de l'interprétation du shell par des guillemets simple ' .</WRAP>

Pour une liste complète vous pouvez vous référez à la documentation de “aptitude”, chapitre “motifs de recherche”, ou à sa version en ligne (eng).

Les commandes courantes de “aptitude” :

Commande Fonction
search motif Recherche un nom ou un motif parmi les paquets disponibles, installé ou non
show paquet(s) Donne le descriptif détaillé d'un (ou plusieurs) paquet(s), installé(s) ou non
install paquet(s) Installe le(s) paquet(s) dont le nom est donnée en argument
remove paquet(s) Désinstalle le(s) paquet(s) dont le nom est donnée en argument
purge paquet(s) Désinstalle le(s) paquet(s) dont le nom est donnée en argument, et efface les fichiers de configuration
reinstall paquet(s) Réinstalle un paquet déjà présent sur le système
update Met à jour la listes des paquets disponibles sur les dépôts
safe-upgrade Met à jour le système de manière sûre, sans désinstaller de paquets (pour mise à jour de routine)
full-upgrade Met à jour le système même si des paquets doivent-être désinstallé (anciennement “dist-upgrade”)
clean Efface les paquets téléchargés du cache (/var/cache/apt/archives)
autoclean Efface les paquets téléchargés du cache, seulement s'ils ne sont plus disponibles dans les dépôts
hold paquet(s) Maintien le paquet dans sa version actuelle, il ne sera pas mis à jour
unhold paquet(s) Annule le maintien dans la version actuelle, le paquet pourra être mis à jour
forbid-version paquet=version Empêche l'installation d'une version (exp. paquet=0.8.6) d'un paquet
forbid-version paquet(s) Empêche l'installation de la version vers laquelle le paquet aurait dû être mis à jour
build-dep paquet(s)-src Installe un paquet-source avec toutes les dépendances nécessaires à sa compilation
markauto paquet(s) Marque les paquets comme installés automatiquement, si aucun paquet ne dépend plus d'eux ils seront désinstallés
unmarkauto paquet(s) Marque le paquet comme installé manuellement, il ne sera pas désinstallé automatiquement si “orphelin”

Bien d'autres exemple sont disponibles dans le manuel détaillé (eng).

Un mémo des options courantes en ligne de commande pour “aptitude” :

Options courtes Options longues Description
-D --show-deps Affiche un bref résumé sur la raison pour laquelle des paquets vont être automatiquement installés ou supprimés
-d --download-only N'installe ni ne supprime aucun paquet. Télécharge simplement les paquets nécessaires dans le cache
-f aucune Essaye de forcer la résolution des dépendances des paquets cassés (résultat aléatoire)
-h --help Affiche un court message d'aide
aucune --purge-unused Purge les paquets dont aucun autre paquet installé ne dépend
-R --without-recommends N'installe pas les paquets “recommandés” ou “suggérés”
-r --with-recommends Installe les paquets suggérés ou recommandés comme des dépendances
-s --simulate Simule l'exécution d'une commande, sans réellement effectuer les opérations demandées
aucune --schedule-only Différer les actions demandées
-t version --target-release Installer le(s) paquet(s) dans une version particulière (exp. “testing”)
-V --show-versions Indique quelle version du paquet sera installée
-v --verbose Force quelques actions (show par exemple) à afficher des informations supplémentaires
-y --assume-yes Répond « oui » à toute question sauf dans le cas de questions considérées dangereuses
-P --prompt Demande confirmation systématiquement pour toutes les actions, même demandées explicitement

Aptitude enregistre toutes ses actions dans /var/log/aptitude ce qui rend le suivit et l'analyse facile. Ci-dessous un exemple de contenu de ce fichier, lu avec le “pager” “less” :

$ less /var/log/aptitude

Aptitude 0.4.11.11: journal
mar, mai 12 2009 08:54:19 +0100

IMPORTANT : ce journal ne contient que les actions demandées ; certaines actions qui
échouent à cause d'erreurs de dpkg peuvent donc ne pas être réalisées.

11 paquets vont être installés, et 1 retirés.
2281ko d'espace disque vont être utilisés
===============================================================================
[SUPPRIMÉ, NON UTILISÉ] libclamav5
[INSTALLÉ, DÉPENDANCES] libclamav6
[INSTALLÉ, DÉPENDANCES] libtommath0
[INSTALLÉ] libclamunrar6
[MIS A JOUR] clamav 0.94.dfsg.2-1 -> 0.95.1+dfsg-2
[MIS A JOUR] clamav-base 0.94.dfsg.2-1 -> 0.95.1+dfsg-2
[MIS A JOUR] clamav-freshclam 0.94.dfsg.2-1 -> 0.95.1+dfsg-2
[MIS A JOUR] klamav 0.44-3 -> 0.46-2+b1
[MIS A JOUR] libboost-filesystem1.37.0 1.37.0-8 -> 1.37.0-9
[MIS A JOUR] libboost-iostreams1.37.0 1.37.0-8 -> 1.37.0-9
[MIS A JOUR] libboost-regex1.37.0 1.37.0-8 -> 1.37.0-9
[MIS A JOUR] libboost-system1.37.0 1.37.0-8 -> 1.37.0-9
===============================================================================

Enregistrement terminé.

Apt et Aptitude utilisent la même base de données, ils peuvent être considérés comme des alternatives, depuis “Lenny” Aptitude est considéré comme le gestionnaire de paquets recommandé par Debian.

La documentation de “aptitude” est accessible dans /usr/share/doc/aptitude/html/fr/index.html.

DPKG : la gestion de bas niveau

Lorsque l'on utilise “apt” ou “aptitude” ceux-ci font appel à une commande plus élémentaire : “dpkg”. Vous aurez besoin d'invoquer cette commande si vous voulez installer un ou plusieurs paquets téléchargé sur Internet :

# dpkg -i chemin_vers_le_paquet_.deb

Pour résoudre des cas épineux de paquet “qui veut pas” en raison de dépendances cassées, on peut utiliser les options “--ignore-depends”, “--force-depends”, “--force-overwrite” qui sont les derniers recours. :!: Ces commandes relèvent du cas désespéré, pas de l'usage normal, il est nécessaire de résoudre les problèmes de dépendances !

Des exemples d'utilisation simple de dpkg:

  • dpkg -s paquet : Montre la description d'un paquet
  • dpkg -S motif : Cherche un motif dans la liste des paquets (exp. “dpkg -S glx” )
  • dpkg -l : Liste tous les paquets installés, et donne leur état (cassé,…). L'option est un “L” minuscule.
  • dpkg -L paquet : Liste tous les fichiers contenus dans un paquet

Dpkg a un autre intérêt qui est de permettre la configuration des paquets qui utilisent “debconf” (l'outil de configuration de Debian). Si par exemple vous avez un problème d'affichage et une console au démarrage au lieu de l'interface graphique (suite à une mise à jour des pilotes de carte graphique…) la commande :

# dpkg-reconfigure -phigh xserver-xorg

pourrait vous sauver la vue ;-) . Avec les version récentes de “xserver-xorg” (“lenny”) et ses fonctions d'auto-configuration cette commande est cependant devenue quasiment obsolète.

De même en cas de changement de périphériques d'entrée/sortie/affichage un

# dpkg-reconfigure xserver-xorg

lancera un dialogue vous permettant de choisir des options pour l'ensemble de vos périphériques gérés par xorg (le dialogue est réduit dans les dernière versions de Debian (>Lenny), car Xorg dispose de nouvelles fonctions d'auto-configuration.)

De la même façon

# dpkg-reconfigure debconf

permet de choisir les options du mode de dialogue de “debconf”.


“dpkg” est donc un outils pratique, qui permet d'installer des paquets isolés, de les configurer, et parfois d'effectuer des manœuvres de la “dernière chance” (y compris installer des paquets sur un système qui ne démarre plus depuis un live cd !). Il sait également gérer les sources avec “dpkg-source” et assister la création de paquet avec “dpkg-buildpackage”.
Un exemple d'utilisation de “dpkg-buildpackage” pour créer un paquet Debian à partir de sources :

$ dpkg-buildpackage -rfakeroot -us -uc

( À taper en se plaçant dans le répertoire des sources décompressées. Les dépendances du paquet doivent être installées, ainsi que “build-essential”, “fakeroot”, “gcc”, “cdbs” et les “sources” ou “headers” du noyau courant.)

Dpkg est utilisé en arrière plan par “apt-get” et “aptitude”, en revanche il n'est pas conseillé de l'utiliser pour la gestion normale des paquets, les outils de plus haut niveau “apt-get” et “aptitude” sont fait pour ça.

Réinstaller un ensemble de paquets à l'identique

Imaginez que vous ayez un système aux petits oignons, avec tous les logiciels qu'il vous faut, et un beau jour vous devez réinstaller (pour changer de matériel, passer sur du raid, passer de 32 à 64 bits, etc…), ou installer un système sur une seconde machine, et vous voudriez retrouver exactement la même sélection de logiciels.

Avec "dpkg"

Avec la commande “dpkg --get-selections” nous pouvons créer un listing de tous les programmes installés :

La méthode utilisant “dpkg” est la plus ancienne, elle devrait maintenant être abandonnée au profit de “aptitude”, qui permet de conserver le statut d'installation des paquets (automatique, manuel, dépendance). Voir plus bas pour la méthode recommandée avec “aptitude”.

$ dpkg --get-selections | grep install$ > mes_logiciels.txt

Nous limitons le résultat au paquets proprement installés (ça exclu ceux qui sont cassés, ou dans un état incertain) avec “grep” en ciblant les lignes qui se terminent (le signe “$” à la fin) par “install”. Enfin nous dirigeons le résultat vers un fichier texte “mes_logiciels.txt”. Voici un extrait de ce fichier :

wicd                                            install                                 
winbind                                         install                                 
wine                                            install                                 
wireless-tools                                  install                                 
wodim                                           install                                 
wordnet                                         install                                 
wordnet-base                                    install                                 
wpagui                                          install                                 
wpasupplicant                                   install                                 
wwwconfig-common                                install                                 
x-ttcidfont-conf                                install                                 
x11-apps                                        install

C'est une simple suite de noms de paquets, chaque ligne se terminant par la directive “install”.

Sur le nouveau système, après avoir configuré votre fichier sources.list comme sur l'ancien système, il suffira de copier ce fichier texte, et d'injecter cette liste dans le système de gestion de paquets avec :

# dpkg --set-selections < mes_lociciels.txt

C'est déjà presque fini, pour la dernière étape vous avez deux options, soit utiliser la méthode “historique” avec “apt-get” ou être “tendance” et utiliser “aptitude”. Je donne les deux possibilités, vous ne devez en utiliser qu'une seule :

# apt-get dselect-upgrade
Avec "aptitude" (méthode recommandée)

Pour créer un listing des applications installées on utilise :

$ aptitude -F "%p" search '~i!~M' > liste_paquets.txt

L'option “-F ”%p“” permet de déterminer le format de sortie, ici on conserve uniquement le nom des paquets (“%p”) mais il est possible de conserver également la version installée avec “%V” (“V” majuscule), on écrira alors “%p%V” . Il est déconseillé de conserver un numéro de version particulier sauf cas très particuliers.
Avec la commande précédente vous avez créé un fichier texte “liste_paquets.txt”, il suffit de le copier sur le nouveau système et de “l'injecter” dans aptitude (il faut que le fichier “/etc/apt/sources.list” contienne les même dépôts que le système d'origine, même s'il n'est pas obligatoire qu'il s'agisse de la même version). L'option “-s” permet de simuler l'action, retirer la quant vous pensez que tout est conforme à vos attentes :

# aptitude install -s $(cat liste_paquets.txt)

ou avec “sudo” :

$ cat liste_paquets.txt | sudo aptitude install -s

Cette manipulation marche même si vous passez d'une système 32bits à un 64bits, il faudra simplement adapter quelques noms de paquets pour lesquels “aptitude” ou “apt-get” renverrons une erreur (par exemple “w32codecs” devient “w64codecs” en 64bits, les paquets de compatibilité “ia32-libs” n'existent que sur 64bits, ces cas sont rares).
Avec la méthode “aptitude”, il est également possible de réinstaller une liste de paquets d'un système “Sid” sur un système “Testing” par exemple, bien sûr il peut y avoir quelques cas particuliers pour lesquels le paquet a changé de nom, mais cela devrait être rare et compensé par la présence d'un paquet de transition de nom correspondant (“dummy package”).

Liens

Apt
Aptitude
Interfaces graphiques

————————————————————————————————————–

Envoyer un message au mainteneur

Retour à la page "Debian"

debian/debian_gestion_paquets.txt · Dernière modification: 2014/05/09 18:56 (modification externe)