Au tout début de l'histoire de Debian n'existait pas les apt-get, dpkg, portinstall, emerge et autres, tout était conçu, installé, manipulé via les fichiers sources, fichiers qui se termine souvent par .tar.gz se sont rapidement avéré être des plaies pour les utilisateurs, en effet comment installer un logiciel alors que celui ci requiert tel ou tel logiciel d'installé, que la version du logiciel x requiert la présence de la version y d'un autres logiciel. La popularité du système linux grandissant il fallait trouver une solution qui pourrait 'faciliter' la gestion de différents logiciels présents sur un serveur, ainsi naissa DPKG, qui est à l'origine de apt, application sur laquelle je focusserais.

Débutons tout dabord par une petite lecture officielle sur apt ( tiré du man )

nomad:~$ man apt-get

update La commande update permet de resynchroniser un fichier répertoriant les paquets disponibles et sa source. Ces fichiers sont récupérés aux endroits spécifiés dans /etc/apt/sources.list. Ainsi, lorsqu'on utilise une archive Debian, cette commande récupère les fichiers Packages.gz et les analyse de manière à rendre disponibles les informations concernant les nouveaux paquets et les paquets mis à jour. On doit toujours exécuter une commande update avant les commandes upgrade ou dist-upgrade. Il faut savoir que l'indicateur de progression d'ensemble n'est pas correct puisque la taille de ces fichiers ne peut être connue à l'avance.

upgrade La commande upgrade permet d'installer les versions les plusrécentes de tous les paquets présents sur le sytème en utilisant les sources énumérées dans /etc/apt/sources.list. Les paquets installés dont il existe de nouvelles versions sont récupérés et mis à niveau. En aucun cas des paquets déjà installés ne sont supprimés ; de même, des paquets qui ne sont pas déjà installés ne sont ni récupérés ni installés. Les paquets dont de nouvelles versions ne peuvent pas être installées sans changer le statut d'installation d'un autre paquet sont laissés dans leur version courante. On doit d'abord exécuter la commande update pour que apt-get connaisse l'existence de nouvelles versions des paquets

dist-upgrade La commande dist-upgrade effectue la fonction upgrade en y ajoutant une gestion intelligente des changements de dépendances dans les nouvelles versions des paquets ; apt-get possède un système « intelligent » de résolution des conflits et il essaye, quand c'est nécessaire, de mettre à niveau les paquets les plus importants aux dépens des paquets les moins importants. Le fichier /etc/apt/sources.list contient une liste de sources où récupérer les paquets désirés. Voyez aussi apt_preferences(5) pour un mécanisme d'annulation des paramètres d'un simple paquet.

Nous connaissons ainsi les trois ( 3 ) commandes qui sont le plus communément utilisé par les utilisateurs lambda sur un système DEBIAN. Pour être franc, même les professionnels utilisent plus souvent qu'autrement les utilitaires fournis par apt que dpkg et tendent à éviter de compiler via les sources. Certe il existera toujours les puristes qui clameront haut et fort qu'il n'y a rien de tel que de compiler à la main tous ses logiciels ( en utilisant les sources en provenance des .tar.gz ) mais dans un environnement de production, je n'ai pas 3 heures à passer pour installer un logiciel qui via apt prends 5 minutes.

Debian?, vous avez dis Debian?!

En premier lieu, avant toutes manipulation sur un serveur il est bon de connaître qu'elle est la version du système d'exploitation y séjournant est-ce qu'il s'agit d'une debian, d'une slackware, ubuntu, gentoo, freebsd, il y en a tellement. Par défaut les installations que nous effectuons sont sous un environnement Debian, anciennement celle ci était sous woody, plus récement sous sarge et dorénavent sous Debian Etch.

Ces noms sarge, etch, sont des noms tirés d'un film d'animation : Toy's Stoty - http://fr.wikipedia.org/wiki/Toy_Story

Comment connaitre sa version ?

nomad:~# cat /etc/debian_version 3.1

3.0 => Debian Woody
3.1 => Debian Sarge 
4.0 => Debian Etch

La future version qui pointe déjà sont nez (en testing) est la version Debian Lenny (selon les rumeurs 4.1) Il est a porter attention que la présence de ce fichier n'est pas le signe absolu que vous faites face à un système debian, en effet ubuntu à ce fichier de présent aussi. Une méthode de vous assurer que vous etes effectivement en présence d'une débian est de faire un cat du fichier suivant :

nomad:~# cat /etc/apt/sources.list

deb ftp://debian.sivit.org/debian/ sarge main non-free
deb ftp://ftp.proxad.net/mirrors/ftp.debian.org sarge main non-free
deb-src ftp://debian.sivit.org/debian/ sarge main non-free
deb-src ftp://ftp.proxad.net/mirrors/ftp.debian.org sarge main non-free
deb http://ftp.debian.de/debian sarge-proposed-updates main
deb ftp://debian.sivit.org/debian-security/ sarge/updates main contrib non-free
deb http://security.debian.org/ sarge/updates main non-free

Il est possible d'effectuer à la mise à jours de votre système très facilement via cet outil, le simple fait de tapper les commandes suivantes l'effectue. Nous débuterons par la mise à jours du fichier sources.list il est en effet important de procéder à cette mise - a - jour sinon cela peut en résulter à une instabilité système, des erreurs lors de l'éxécution de cette tâche etc...

nomad:~# apt-get update

Hit ftp://ftp.proxad.net sarge/main Packages 
Hit ftp://ftp.proxad.net sarge/main Release                                      
Hit ftp://ftp.proxad.net sarge/non-free Packages                                
Hit ftp://ftp.proxad.net sarge/non-free Release                                
Hit ftp://ftp.proxad.net sarge/main Sources                                    
Hit ftp://ftp.proxad.net sarge/main Release                                    
Hit ftp://ftp.proxad.net sarge/non-free Sources                                
Hit ftp://ftp.proxad.net sarge/non-free Release                                
Hit ftp://debian.sivit.org sarge/main Packages                                 
Hit ftp://debian.sivit.org sarge/main Release                                  
Hit ftp://debian.sivit.org sarge/non-free Packages                             
Hit ftp://debian.sivit.org sarge/non-free Release                              
Hit ftp://debian.sivit.org sarge/main Sources                                  
Hit ftp://debian.sivit.org sarge/main Release                                  
Hit ftp://debian.sivit.org sarge/non-free Sources                          
Hit ftp://debian.sivit.org sarge/non-free Release                          
Hit ftp://debian.sivit.org sarge/updates/main Packages                     
Hit ftp://debian.sivit.org sarge/updates/main Release                      
Hit ftp://debian.sivit.org sarge/updates/contrib Packages                  
Hit ftp://debian.sivit.org sarge/updates/contrib Release                   
Hit ftp://debian.sivit.org sarge/updates/non-free Packages                 
Hit ftp://debian.sivit.org sarge/updates/non-free Release                  
Get:1 http://ftp.debian.de sarge-proposed-updates/main Packages 115kB    
Get:2 http://security.debian.org sarge/updates/main Packages 440kB       
Get:3 http://ftp.debian.de sarge-proposed-updates/main Release 121B   
Get:4 http://security.debian.org sarge/updates/main Release 113B
Hit http://security.debian.org sarge/updates/non-free Packages
Get:5 http://security.debian.org sarge/updates/non-free Release 117B
Fetched 556kB in 0s (574kB/s)    
Reading Package Lists... Done

Qui sera alors suivit par un apt-get upgrade, il est TRES important de noter que vous ne DEVEZ JAMAIS!!! procéder à une mise à jour de votre système avec un sources.list qui ne corresponds pas à votre système, cela peut avoir des conséquences désastreuse et mener le plus souvent qu'autrement à la ré installation de votre système.



nomad:~# apt-get -u upgrade

Reading Package Lists... Done
Building Dependency Tree... Done
The following packages will be upgraded:
 libmysqlclient15off libxpm4 mysql-client-5.0 mysql-common mysql-server-5.0
5 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Need to get 35.6MB of archives.
After unpacking 16.1MB of additional disk space will be used.
Do you want to continue? Y/n

Si vous ne désirez simplement qu'installer qu'une simple application, cela ne demande pas beaucoup de manipulation non plus , un simple apt-get install 'paquet' suffit :

nomad:~# apt-get install screen

Reading Package Lists... Done
Building Dependency Tree... Done
The following NEW packages will be installed:
  screen
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 0B/582kB of archives.
After unpacking 1004kB of additional disk space will be used.
Preconfiguring packages ...
Selecting previously deselected package screen.
(Reading database ... 13794 files and directories currently installed.)
Unpacking screen (from .../screen_4.0.2-4.1sarge1_i386.deb) ...
Setting up screen (4.0.2-4.1sarge1) ...

Si vous possédez le paquet ( provenant d'une source tierce), il est possible d'installer celle ci via le système dpkg, en effet

dpkg -i nom_du_paquet.deb

installera et configurera celui ci sur votre système. Si vous avez remarqué, l'installation du paquet en utilisant le système dpkg n'est pas un .tar.gz mais bel et bien un .deb, dans un prochain article j'aborderais comment faire un .deb à partir d'un .tar.gz. Ce n'est pas 'très' compliqué cependant et il existe moulte ressource sur le web concernant cette opération.

Cependant veuillez porter attention que l'installation de screen est un exemple 'simple' , un exemple un peu plus compliqué comme l'installation d'apache prends plus de temps et installe plus de paquet et de dépendance comme vous pouvez le voir ci dessous :

nomad:~# apt-get install apache

Reading Package Lists... Done   
Building Dependency Tree... Done
The following extra packages will be installed:
  apache-common apache2-utils libapr0 libbz2-1.0 libexpat1 libmagic1 lynx mime-support ucf
Suggested packages:
  apache-doc apache-ssl apache-perl libbz2-dev bzip2 file
Recommended packages:
  debconf-utils
The following NEW packages will be installed:
  apache apache-common apache2-utils libapr0 libbz2-1.0 libexpat1 libmagic1 lynx mime-support
  ucf
0 upgraded, 10 newly installed, 0 to remove and 0 not upgraded.
Need to get 3721kB of archives.
After unpacking 11.4MB of additional disk space will be used.
Do you want to continue? Y/n 
Get:1 ftp://debian.sivit.org sarge/main libbz2-1.0 1.0.2-7 38.7kB
Get:2 http://ftp.debian.de sarge-proposed-updates/main libmagic1 4.12-1sarge2 233kB
Get:3 ftp://debian.sivit.org sarge/main mime-support 3.28-1 28.8kB
Get:4 ftp://debian.sivit.org sarge/main libexpat1 1.95.8-3 59.6kB
Get:5 ftp://debian.sivit.org sarge/main ucf 1.17 36.9kB
Get:6 ftp://debian.sivit.org sarge/main lynx 2.8.5-2sarge2 1855kB
Get:7 http://ftp.debian.de sarge-proposed-updates/main libapr0 2.0.54-5sarge2 131kB
Get:8 http://ftp.debian.de sarge-proposed-updates/main apache2-utils 2.0.54-5sarge2 91.0kB
Get:9 ftp://debian.sivit.org sarge/main apache-common 1.3.33-6sarge3 860kB
Get:10 ftp://debian.sivit.org sarge/main apache 1.3.33-6sarge3 387kB
Fetched 3721kB in 0s (6370kB/s)
Preconfiguring packages ...
Selecting previously deselected package libbz2-1.0.
(Reading database ... 13190 files and directories currently installed.)
Unpacking libbz2-1.0 (from .../libbz2-1.0_1.0.2-7_i386.deb) ...
Selecting previously deselected package libmagic1.
Unpacking libmagic1 (from .../libmagic1_4.12-1sarge2_i386.deb) ...
Selecting previously deselected package mime-support.
Unpacking mime-support (from .../mime-support_3.28-1_all.deb) ...
Selecting previously deselected package libexpat1.
Unpacking libexpat1 (from .../libexpat1_1.95.8-3_i386.deb) ...
Selecting previously deselected package libapr0.
Unpacking libapr0 (from .../libapr0_2.0.54-5sarge2_i386.deb) ...
Selecting previously deselected package apache2-utils.
Unpacking apache2-utils (from .../apache2-utils_2.0.54-5sarge2_i386.deb) ...
Selecting previously deselected package ucf.
Unpacking ucf (from .../apt/archives/ucf_1.17_all.deb) ...
Moving old data out of the way
Selecting previously deselected package lynx.
Unpacking lynx (from .../lynx_2.8.5-2sarge2_i386.deb) ...
Selecting previously deselected package apache-common.
Unpacking apache-common (from .../apache-common_1.3.33-6sarge3_i386.deb) ...
Selecting previously deselected package apache.
Unpacking apache (from .../apache_1.3.33-6sarge3_i386.deb) ...
Setting up libbz2-1.0 (1.0.2-7) ...

Setting up libmagic1 (4.12-1sarge2) ...

Setting up mime-support (3.28-1) ...

Setting up libexpat1 (1.95.8-3) ...

Setting up libapr0 (2.0.54-5sarge2) ...

Setting up apache2-utils (2.0.54-5sarge2) ...
Setting up ucf (1.17) ...
 
Setting up lynx (2.8.5-2sarge2) ...

Setting up apache-common (1.3.33-6sarge3) ...

Setting up apache (1.3.33-6sarge3) ...
 
Creating config file /etc/apache/httpd.conf with new version

Creating config file /etc/apache/srm.conf with new version

Creating config file /etc/apache/access.conf with new version

Creating config file /etc/apache/modules.conf with new version
 Starting web server: apache.

Imaginez toutes les manipulations que vous auriez du effectuer à la main si vous n'aviez accès à ce système de packaging via apt, pour l'avoir déjà fait plusieurs fois par le passé à la mano cela requiert quelques heures.

Pour supprimer un paquet rien de plus simple, il ne s'agit cependant pas de supprimer le répertoire dans le /usr/ cela peut causer d'autres logiciels de cesser de fonctionner, eh oui, linux est un tout, il n'y a pas de partie isolé ( du moins plus beaucoup )

nomad:~# apt-get remove --purge screen
Reading Package Lists... Done
Building Dependency Tree... Done
The following packages will be REMOVED:
  screen*
0 upgraded, 0 newly installed, 1 to remove and 0 not upgraded.
Need to get 0B of archives.
After unpacking 1004kB disk space will be freed.
Do you want to continue? Y/n y
(Reading database ... 13848 files and directories currently installed.)
Removing screen ...
Purging configuration files for screen ...

Il est à noter qu'il est aussi possible d'effectuer ces manipulations via dpkg

dpkg –-remove 'paquet' (supprime le paquet mais pas les fichiers de config) 
dpkg –- purge 'paquet' (supprime le paquet AINSI que les fichiers de config)

Recheche

Pour faire la liste des paquets qui sont installé sur votre système, c'est pas non plus très très sorcier la commande suivante:

dpkg -l

fait cette opération de façon rapide et simple et vous en ressors une liste tel que ci dessous :

nomad:~# dpkg -l

Desired=Unknown/Install/Remove/Purge/Hold 
Status=Not/Installed/Config-files/Unpacked/Failed-config/Half-installed
|/ Err?=(none)/Hold/Reinst-required/X=both-problems (Status,Err: uppercase=bad)
||/ Name                           Version                             Description 
+++-============================================================================================
ii  adduser                        3.63                                  Add and remove users and groups
ii  apache                         1.3.33-6sarge3                  versatile, high-performance HTTP server
ii  apache-common           1.3.33-6sarge3                  support files for all Apache webservers
...

Et ce n'est pas tout, vous pouvez trouver le paquet propriétaire d'un fichier ( par exemple vous chercher à quoi sert le fichier httpd.conf )

nomad:~# dpkg --search httpd.conf

apache-common: /usr/share/apache/default-configs/apache-ssl/httpd.conf
apache-common: /usr/share/apache/default-configs/apache-perl/httpd.conf
apache-common: /usr/share/apache/default-configs/apache/httpd.conf
apache: /usr/share/doc/apache/examples/httpd.conf
apache-common: /usr/share/doc/apache-common/examples/httpd.conf-dist

Pour simplement trouver des paquets en utilisant l'utilitaire apt :

Pour trouver les paquets dont la description contient mot :  
    apt-cache search mot
Pour afficher des informations détaillées sur un paquet :  
    apt-cache show paquet
Pour afficher les dépendances d'un paquet :

apt-cache depends paquet

Pour afficher des informations détaillées des versions disponibles pour un paquet et les paquets ayant des dépendances inverses sur lui :

apt-cache showpkg paquet

Pour ceux qui n'ont pas accès à une console pendant la lecture de cette 'petite' doc, voici le contenu de l'aide en ligne de ces deux commandes.

nomad:~# dpkg --help

Usage: 
 dpkg  i|-install      <.deb file name> ... | -R|-recursive <dir> ...
 dpkg --unpack          <.deb file name> ... | -R|-recursive <dir> ...
 dpkg A|--record-avail <.deb file name> ... | -R|-recursive <dir> ...
 dpkg --configure              <package name> ... | -a|-pending
 dpkg -r|--remove | -P|- -purge <package name> ... | -a|-pending
 dpkg --get-selections <pattern> ...    get list of selections to stdout
 dpkg --set-selections                    set package selections from stdin
 dpkg --update-avail <Packages-file>      replace available packages info
 dpkg --merge-avail <Packages-file>       merge with info from file
 dpkg --clear-avail                       erase existing available info
 dpkg --forget-old-unavail                forget uninstalled unavailable pkgs
 dpkg -s|--status <package-name> ...      display package status details
 dpkg -p|--print-avail <package-name> ... display available version details
 dpkg -L|--listfiles <package-name> ...   list files `owned' by package(s)
 dpkg -l|--list <pattern> ...           list packages concisely
 dpkg -S|--search <pattern> ...           find package(s) owning file(s)
 dpkg -C|--audit                          check for broken package(s)
 dpkg --print-architecture                print target architecture (uses GCC)
 dpkg --print-gnu-build-architecture      print GNU version of target arch
 dpkg --print-installation-architecture   print host architecture (for inst'n)
 dpkg --compare-versions <a> <rel> <b>    compare version numbers - see below
 dpkg --help | - -version                  show this help / version number
 dpkg --force-help | -Dh|- -debug=help     help on forcing resp. debugging
 dpkg --licence                           print copyright licensing terms
Use dpkg -b|- -build|-c|- -contents|-e|- -control|-I|-info|-f|--field|
-x|-extract|-X|-vextract|-fsys-tarfile  on archives (type dpkg-deb -help.)
For internal use: dpkg --assert-support-predepends | -predep-package |
 - -assert-working-epoch |  -assert-long-filenames | -assert-multi-conrep
Options:
 --admindir=<directory>     Use <directory> instead of /var/lib/dpkg
 --root=<directory>         Install on alternative system rooted elsewhere
 --instdir=<directory>      Change inst'n root without changing admin dir
 -O|--selected-only         Skip packages not selected for install/upgrade
 -E|--skip-same-version     Skip packages whose same version is installed
 -G|--refuse-downgrade      Skip packages with earlier version than installed
 -B|--auto-deconfigure      Install even if it would break some other package
 --no-debsig                Do no try to verify package signatures
 --no-act|- -dry-run|- -simulate
                            Just say what we would do - don't do it
 -D|- -debug=<octal>         Enable debugging - see -Dhelp or --debug=help
 --status-fd <n>            Send status change updates to file descriptor <n>
 --ignore-depends=<package>,... Ignore dependencies involving <package>
 - -force-...                    Override problems - see --force-help
 - -no-force-...|--refuse-...    Stop when problems encountered
 --abort-after <n>              Abort after encountering <n> errors
Comparison operators for --compare-versions are:
lt le eq ne ge gt       (treat empty version as earlier than any version);
lt-nl le-nl ge-nl gt-nl (treat empty version as later than any version);
< << <= = >= >> >       (only for compatibility with control file syntax).
Use `dselect' or 'aptitude' for user-friendly package management.

nomad:~# apt-get --help : APT (apt pour Advanced Package Tool )

apt 0.5.28.6 for linux i386 compiled on Mar 22 2005 07:17:03
Usage: apt-get options command
      apt-get options install|remove pkg1 pkg2 ...
      apt-get options source pkg1 pkg2 ...
apt-get is a simple command line interface for downloading andinstalling packages. 
The most frequently used commands are update and install.
Commands:
  update - Retrieve new lists of packages
  upgrade - Perform an upgrade
  install - Install new packages (pkg is libc6 not libc6.deb)
  remove - Remove packages
  source - Download source archives
  build-dep - Configure build-dependencies for source packages
  dist-upgrade - Distribution upgrade, see apt-get(8)
  dselect-upgrade - Follow dselect selections
  clean - Erase downloaded archive files
  autoclean - Erase old downloaded archive files
  check - Verify that there are no broken dependencies
Options:
 -h  This help text.
 -q  Loggable output - no progress indicator
 -qq No output except for errors
 -d  Download only - do NOT install or unpack archives
 -s  No-act. Perform ordering simulation
 -y  Assume Yes to all queries and do not prompt
 -f  Attempt to continue if the integrity check fails
 -m  Attempt to continue if archives are unlocatable
 -u  Show a list of upgraded packages as well
 -b  Build the source package after fetching it
 -V  Show verbose version numbers
 -c=? Read this configuration file
 -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp
See the apt-get(8), sources.list(5) and apt.conf(5) manual
pages for more information and options.
                      This APT has Super Cow Powers. < = phrase mythique.

Chaque site d'archives Debian possède la meme structure du répertoire. C'est ce qui permet de s'adresser et de télécharger les paquets sur l'un quelconque des sites Debian (officiel ou miroirs). Pour plus de détail voir http://www.fr.debian.org/doc/manuals/reference/ch-system.fr.html

Voici la structure du répertoire debian

* dists/ : répertoire des distributions stables ou non.
o stable/, sous-répertoire qui contient les paquets de l'actuelle distribution stable Etch (4.0)
+ stable/main/ : paquets constituant la version la plus récente du système Debian.
+ stable/non-free/ : paquets dont la distribution est restreinte pou lesquelq il faut tenir compte de la licence particulière (par exemple : interdiction d'utilisation commerciale, freeware ..)
+ stable/contrib/ : paquets qui sont conformes aux principes du logiciel libre selon Debian et distribuables librement, mais dépendent d'un paquet qui n'est pas distribuable librement et n'est ainsi disponible que dans la section non-free. 
o testing distribution en test (Lenny)
o unstable distribution en développement (Sid) 
* pool/ : tous les paquets des versions et pré-versions de Debian.
* tools/ : divers utilitaires DOS (disquettes de démarrage, partitionner un disque dur)
* doc/ : contient la documentation de base de Debian, la FAQ ..

Depuis quelques semaines déjà, la version stable de debian est la version ETCH, ce qui fait que si jamais vous avez stable dans votre fichier /etc/apt/sources.list et que vous avez par malheur fait un apt-get update/upgrade il y a de forte chance que vous soyez maintenant sous un environnement etch, il vous faut donc confirmer avec le fichier /etc/debian_version quelle est la distribution actuelle.

Techniques et procédures

Mise à jours d'une distribution sans changement de version ?

1 - éditer le fichier sources et y remplacer stable par la version présente sur votre serveur ( woody ( qui n'est plus supporté ) / sarge / etch / lenny )
2 - mise à jour de la base locale avec les paquets de la distribution courante
# mise a jours dans le système du fichier /etc/apt/sources.list
3 - apt-get update
# faire la mise a jour des paquets installés 
4 - apt-get upgrade
# nettoyer le cache des vieux paquets
apt-get autoclean

Passer à la distribution Sarge vers Etch ?

1 - éditer le fichier sources et y remplacer stable par etch
2 - mise à jour de la base locale avec les paquets "etch"
# mise a jours dans le système du fichier /etc/apt/sources.list
3 - apt-get update
# faire la mise a jour de la distribution 
4 - apt-get dist-upgrade
# faire la mise a jour des paquets installés 
5 - apt-get upgrade
# nettoyer le cache des vieux paquets
apt-get autoclean

ATTENTION Je ne peux garantir le bon fonctionnement d'une distribution qui est en production vers une version supérieure, il est en effet préférable d'effectuer ces manipulations lorsque votre serveur est vierge et sans applicatif présent. Dans la majorité des cas cela se passe sans trop de soucis, mais il peut arriver que le nombre de soucis présent puisse forcer la ré installation du système, n'oubliez pas en effet que vous effectuer un changement mageur à votre serveur ce n'est pas comme l'installation du paquet 'screen'.

De plus, il est 'théoriquement' possible de revenir en arrière en rechutant de version, mais selon l'expérience que l'on en a, cela n'est pas toujours fonctionnel et vous laisse un système bancal.

Passer à la distribution testing ?

1 - éditer le fichier sources et y remplacer stable par testing 
2 - mise à jour de la base locale avec les paquets "testing"
# mise a jours dans le système du fichier /etc/apt/sources.list
3 - apt-get update 
# faire la mise a jour de votre distribution 
4 - apt-get dist-upgrade
# nettoyer le cache des vieux paquets
apt-get autoclean

Pourquoi décider de passer en testing? Car votre applicatif requiert une version précise d'un logiciel, que vous désirez tester, ou tout simplement parce que vous êtes fou :-) Cependant il est important que je ( nous ) ne conseillons pas de passer en testing pour un serveur qui est en production, en effet il n'y a aucune assurance de suivi de bug, de stabilité, il peut y avoir des pertes de données, et autres.

Un peu de technique

Comment se passe la mise à jours d'un paquet, ou est-ce que apt-cache search va chercher ses informations, toutes les informations sont dans le /var/lib/apt à toutes les fois que vous effectuer un apt-get update ces fichiers sont mis à jours par les dernières versions disponibles.

Mais je crois qu'un exemple est plus parlant, voici la description du paquet screen dans le fichier ftp.proxad.net_mirrors_ftp.debian.org_dists_sarge_main_binary-i386_Packages

nomad:/var/lib/apt/lists# cat ftp.proxad.net_mirrors_ftp.debian.org_dists_sarge_main_binary-i386_Packages

Package: screen
Priority: optional
Section: misc
Installed-Size: 980
Maintainer: Adam Lazur <zal@debian.org>
Architecture: i386
Version: 4.0.2-4.1sarge1
Depends: libc6 (>= 2.3.2.ds1-21), libncursesw5 (>= 5.4-1), libpam0g (>= 0.76), base-passwd (>= 2.0.3.4), passwd (>= 1:4.0.3-10)
Pre-Depends: debconf (>= 0.2.17)
Conflicts: suidmanager (<< 0.52)
Filename: pool/main/s/screen/screen_4.0.2-4.1sarge1_i386.deb
Size: 581822
MD5sum: 0d04f818e84bba320ae7af77463a83f3
SHA1: b8ad0203bc9c144c4090f37b864e1bcd7ca65585
SHA256: a5e47f0d0215be56b39225285f7a156b258818f42f040541383e5d8c8950824e
Description: a terminal multiplexor with VT100/ANSI terminal emulation
 screen is a terminal multiplexor that runs several separate "screens" on a
 single physical character-based terminal.  Each virtual terminal emulates a
DEC VT100 plus several ANSI X3.64 and ISO 2022 functions.  Screen sessions can be detached 
and resumed later on a different terminal.
.
Screen also supports a whole slew of other features.  Some of these are:
configurable input and output translation, serial port support, configurable
logging, multi-user support, and utf8 charset support.

Remarquez qu'il s'agit du même contenu qu'un apt-cache show

nomad:/etc/apt# apt-cache show screen

Package: screen
Priority: optional
Section: misc
Installed-Size: 980
Maintainer: Adam Lazur <zal@debian.org>
Architecture: i386
Version: 4.0.2-4.1sarge1
Depends: libc6 (>= 2.3.2.ds1-21), libncursesw5 (>= 5.4-1), libpam0g (>= 0.76), base-passwd (>= 2.0.3.4), passwd (>= 1:4.0.3-10)
Pre-Depends: debconf (>= 0.2.17)
Conflicts: suidmanager (<< 0.52)
Filename: pool/main/s/screen/screen_4.0.2-4.1sarge1_i386.deb
Size: 581822
MD5sum: 0d04f818e84bba320ae7af77463a83f3
SHA1: b8ad0203bc9c144c4090f37b864e1bcd7ca65585
SHA256: a5e47f0d0215be56b39225285f7a156b258818f42f040541383e5d8c8950824e
Description: a terminal multiplexor with VT100/ANSI terminal emulation
 screen is a terminal multiplexor that runs several separate "screens" on a
 single physical character-based terminal.  Each virtual terminal emulates a
 DEC VT100 plus several ANSI X3.64 and ISO 2022 functions.  Screen sessions
 can be detached and resumed later on a different terminal.
 .
 Screen also supports a whole slew of other features.  Some of these are:
 configurable input and output translation, serial port support, configurable
 logging, multi-user support, and utf8 charset support.

Vous y remarquerez que les différentes dépendances y sont listés ( vous vous souvenez du paquet de fichier qui furent installé en même temps qu'apache en début de document, c'est ce fichier qui en fait la demande. Si jamais vous rencontrez un problème il est possible d'effectuer la commande suivante:

nomad:/etc/apt#apt-get -o Debug::pkgProblemResolver=yes upgrade 'paquet'

Reading Package Lists... Done
Building Dependency Tree... Done
Calculating Upgrade... Starting
Starting 2

I nvestigating python1.5

Package python1.5 has broken dep on python1.5-base
  Considering python1.5-base 0 as a solution to python1.5 0
 Holding Back python1.5 rather than change python1.5-base
Investigating python1.5-dev 
Package python1.5-dev has broken dep on python1.5
 Considering python1.5 0 as a solution to python1.5-dev 0
 Holding Back python1.5-dev rather than change python1.5
Try to Re-Instate python1.5-dev
Done
Done
The following packages have been kept back
 gs python1.5-dev
0 packages upgraded, 0 newly installed, 0 to remove and 2  not upgraded.

On peut remarquer que le paquet python1.5-dev ne peut pas être installé à cause de dépendances non satisfaites :

    python1.5.

Mais avec apt tout semble plus facile, il vous est possible de connaitres les différentes librairies sans devoir fouiller dans le fichier, sans risque de l'instller, l'utilitaire apt-cache sert à ça comme dans le cas actuel ou l'on sait les dépendance que screen installera :

nomad:/etc/apt# apt-cache showpkg screen

Package: screen
Versions: 4.0.2-4.1sarge1(/var/lib/apt/lists/ftp.proxad.net_mirrors_ftp.debian.org_dists_sarge_main_binary-i386_Packages ... )

Reverse Depends: 
  surfraw,screen
  naim,screen
Dependencies: 
4.0.2-4.1sarge1 - libc6 (2 2.3.2.ds1-21) libncursesw5 (2 5.4-1) libpam0g (2 0.76) base-passwd (2 2.0.3.4) passwd (2 1:4.0.3-10) debconf (2 0.2.17) suidmanager (3 0.52) 
Provides: 
4.0.2-4.1sarge1 - 
Reverse Provides:

Ou comme ceci :

nomad:/etc/apt# apt-cache depends screen screen

 Depends: libc6
 Depends: libncursesw5
 Depends: libpam0g
 Depends: base-passwd
 Depends: passwd
 PreDepends: debconf

Une des solutions pour localiser le nom d'un paquet est de connaître le nom d'un fichier important trouvé dans le paquet. Par exemple, pour trouver le paquet qui fournit un fichier `« .h »' particulier dont vous avez besoin pour compiler, vous pouvez lancer :

# dpkg -S stdio.h
libc6-dev: /usr/include/stdio.h
libc6-dev: /usr/include/bits/stdio.h
perl: /usr/lib/perl/5.6.0/CORE/nostdio.h

Erreurs courantes

Des erreurs arriveront souvent, la plupart d'entre elles causées par les utilisateurs qui ne font pas attention. Ce qui suit est une liste des erreurs les plus fréquemment rapportées et comment les traiter.

Suite à : apt-get install 'paquet'

Reading Package Lists... Done Building Dependency Tree... Done W: Couldn't stat source package list

Executer : apt-get update Il est en effet important d'effectuer un update régulièrement lorsque vous apportez des modification au fichier : '/etc/apt/sources.list'.

Si l'erreur ressemble à :

E: Could not open lock file /var/lib/dpkg/lock - open (13 Permission denied) E: Unable to lock the administration directory (/var/lib/dpkg/), are you root?

Soyez sur d'effectuer ces manipulations en étant sous l'uid '0' soit plus souvent ROOT

Il en est de même si vous tentez d'éxécuter deux apt simultanément, il y a un fichier lock qui se crée

Si une installation s'interrompt au milieu du processus et que vous ne pouvez plus installer ou supprimer de paquets, essayez d'exécuter ces deux commandes :

  1. apt-get -f install
  2. dpkg --configure -a

Si vous rencontrez l'erreur « E: Dynamic MMap ran out of room » en lançant `apt-get update', ajoutez la ligne suivante dans /etc/apt/apt.conf

APT::Cache-Limit 10000000;

Si lorsque vous tentez de faire un apt-get upgrade vous rencontrez l'erreur suivante :

E: dpkg was interrupted, you must manually run 'dpkg --configure -a' to correct the problem.

Il se peut qu'il y ait un fichier de présent dans ce répertoire : ' /var/lib/dpkg/updates/ ' Celui-ci étant normalement vide.

Références

http://www.debian.org/doc/manuals/apt-howto/ch-apt-get.fr.html
http://www.debian.org/doc/manuals/debian-faq/ch-pkgtools.fr.html
http://www.linux-pour-lesnuls.com/commande-debian.php
http://pwet.fr/man/linux/formats/apt_preferences
http://www.debian.org/doc/manuals/apt-howto/apt-howto.fr.txt

Allez sur cela, je vais reposer mes doigts endoloris.

Amicalement

-- Nomad