Gestion maintenance

Gagner de la place

Les gros paquets

L'utilisation de grep-status (paquet dpkg-ctrl ) permet de construire une commande (puissante) pour classer les paquets selon leur occupation disque :

 grep-status -nsInstalled-size,Package -F Status ' installed' \
 || perl -p00l12 -e 's/\n/ /' \
 || sort -rn

ou encore

 dpkg-query -W --showformat='${Installed-Size} ${Package}\n' || sort -n

Juste pour info : fr/PackSize

Les paquets inutiles

Il est très facile d'installer des tonnes de programmes que l'on n'utilise jamais. La question est alors de connaître les paquets que je peux désinstaller sans risque?

Il ne faut supprimer que des paquets dont aucun paquet ne dépend (que l'on nommera dans la suite les paquets terminaux). Il est donc possible de les désinstaller sans casser le système, mais évidemment, si on désinstalle ainsi un paquet terminal, mais utile quand même, ce n'est pas très malin. Par exemple, j'aime bien programmer en OCaml, donc le paquet ocaml peut bien être terminal, je ne vais pas me priver de mon compilateur favori pour autant...Voici comment on peut vouloir procéder pour se débarrasser de certains paquets superflus :

Il existait (potato) un programme, pkg-nodep dans le paquet pkg-order , qui liste les paquets terminaux. On peut par exemple écrire dans un fichier la liste de ces paquets avec la commande :

 pkg-nodep > liste-des-nodeps

Remarque

Une autre commande analogue existe, il s'agit de deborphan (paquet deborphan ). Elle semble plus riche en fonctionnalités.

Pour éliminer les paquets dont aucun autre ne dépend, effectuer simplement :

 deborphan || xargs apt-get -s -u remove

Plusieurs méthodes :

 dpkg   -s ocaml

peut être bien utile pour cela.

 dpkg   -L ocaml

On fera par exemple attention aux programmes exécutables qui disparaîtront dans la bataille, en cherchant les fichiers dans bin. On peut vouloir connaître la date de dernière utilisation des exécutables. Dans ce cas, la commande

 ls     --time=atime fichier

est bien pratique.

Si on n'est pas sûr, le paquet dpkg-repack fournit la commande homonyme utile pour réempaqueter un paquet (avec ses fichiers de configuration actuels) pour le stocker avant de le retirer.

Si une applications a été installée «non empaquetée Debian» , il est possible de supprimer un paquet dont celle-ci dépend et de la rendre dès lors inutilisable...Prudence!

Détecter les paquets mal installés?

La commande "dpkg -l" donne l'état des paquets installés. La première colonne du listing utilise un codage à deux ou trois lettres des états possibles (lire les 3 premières lignes du listing pour comprendre leur signification)

La ligne d'un paquet correctement installé commence par le code «ii» i.e l'«i»nstallation a été demandée et le paquet est (effectivement) dans l'état «i»nstallé.

La commande ci-dessous permet donc de sélectionner les paquets qui ne sont pas dans l'état correct.

 dpkg   -l || grep -v ^ii

Exemple

 pc  mozilla-mailne 0.9.6-7        Mozilla Web Browser - 
 pc  php4           4.1.2-2        A server-side, ...
 pc  zope-zshell    1.2-1          Zshell present ...

et effectivement, il y a problème, ainsi ...

 dpkg --purge php4
 (Lecture de la base de données ... 
 50815 fichiers et répertoires déjà installés.)
 Suppression de php4 ...
 Purge des fichiers de configuration de php4 ...
 rmdir: `/etc/php4': Aucun fichier ou répertoire de ce type
 dpkg: erreur de traitement de php4 (--purge):
 le sous-processus post-removal script a retourné 
 une erreur de sortie d'état 1

4.3 Empêcher la mise à jour d'un paquet?

Il suffit de marquer le paquet « à garder » (on hold, en anglais). Pour ce faire, on peut soit :

il faut se placer sur la ligne correspondant au paquet, puis appuyer sur 'H'.

Voici une belle solution, qui fonctionne en ligne de commande :

 echo   "<paquet à garder> hold" || dpkg --set-selections

S'abonner à un paquet

Si vous voulez suivre de manière assidue et étroite la <<vie>> d'un ou plusieurs paquets Debian, le plus simple est de vous abonner au PTS, le système de suivi de paquet.

Le système de suivi de paquet

(FixMe) description du PTS

Interface web au PTS

(traduction inspiré d'un message de R. Herzog sur DebianListPage:debian-devel-announce )

La page http://packages.qa.debian.org/nom-de-paquet donne une vue globale de l'état du paquet "nom-de-paquet". Vous y trouverez par exemple :

4.5 Intra et inter-distributions

4.5.1 Un paquet d'unstable/testing alors qu'on utilise stable

Il est parfois utile d'installer un paquet qui n'existe que dans une distribution supérieure (et moins stable).

Les versions supérieures à 0.5.0 d'apt permettent de faire cela simplement. Donc, si vous avez une patate ou plus ancien, il faudra auparavant obtenir une version d'apt plus récente par un autre moyen (backport).

Voici la marche à suivre pour cette opération :

 deb http://serveur/debian unstable main contrib 
 deb http://serveur/debian unstable non-free 
 deb http://serveur/debian-non-US unstable/non-US main 
 deb http://serveur/debian-non-US unstable/non-US contrib 
 deb http://serveur/debian-non-US unstable/non-US non-free

Avec comme serveur par exemple ftp.fr.debian.org

  APT::Default-Release "stable";

  apt-get update

  apt-get install -t unstable paquet 
  apt-get install paquet/unstable

apt-get va alors installer le paquet et toutes ses dépendances. La différence entre les deux versions étant que dans le premier cas (avec «-t unstable»), les dépendances sont cherchées dans unstable, alors que dans l'autre cas (avec « /unstable »), les dépendances sont cherchées dans la distribution par défaut.

En créant un fichier /etc/apt/preferences , cette technique peut être affinée en spécifiant des niveaux de préférences, avec par exemple :

 Package: *
 Pin: release a=woody
 Pin-Priority: 800

 Package: *
 Pin: release a=stable
 Pin-Priority: 500

 Package: *
 Pin: release a=unstable
 Pin-Priority: 80

4.5.2 Un paquet d'une autre distribution

Vous l'aurez sans doute remarqué, il est plus courant de trouver des paquets (rpm) faits pour les distributions basées sur ?RedHat que pour celles basées sur Debian (deb). La tentation est donc grande de récupérer ces paquets!

Il faut pour cela utiliser le paquet alien afin de convertir le paquet «étranger» en paquet Debian.

Les informations relatives aux dépendances, aux répertoires standards étant différentes selon les distributions, il est impossible de garantir qu'un paquet ainsi "converti" soit correct (quelque soit le sens de la conversion!). Cette manipulation n'est à utiliser qu'en cas d'absolue nécessité!