Gestion de paquets

De Justine's wiki
Aller à la navigation Aller à la recherche

Gestion de paquets sous Linux

DPKG

dpkg est l’outil utilisé pour installer des paquets, directement ou non. C’est lui qui se cache derrière apt. Il peut être utilisé offline. Il n’installe jamais de dépendances. Utilisation :

# dpkg -i man-db_2.7.0.2-5_amd64.deb
(Reading database ... 86425 files and directories currently installed.)
Preparing to unpack man-db_2.7.0.2-5_amd64.deb …
Unpacking man-db (2.7.0.2-5) over (2.7.0.2-4) …
Setting up man-db (2.7.0.2-5) …
Updating database of manual pages …
Processing triggers for mime-support (3.58)

L’option -i se contente de décompresser et lancer les scripts d’install. On peut le faire manuellement avec –unpack et –configure.

# dpkg --unpack man-db_2.7.0.2-5_amd64.deb
(Reading database ... 86425 files and directories currently installed.)
Preparing to unpack man-db_2.7.0.2-5_amd64.deb …
Unpacking man-db (2.7.0.2-5) over (2.7.0.2-5) …
Processing triggers for mime-support (3.58) …
# dpkg --configure man-db
Setting up man-db (2.7.0.2-5) …
Updating database of manual pages ...

La ligne « Processing Triggers » fait référence au code qui est autmatiquement exécuté lorsqu’un paquet ajoute, enleve, modifie des fichiers dans certains dossiers qui sont surveillés. dpkg peut renvoyer des erreurs, qui peuvent être ignorées avec des options du type –-force-* , comme lorsque l’on a une collision de fichiers ; c’est aussi utile lors des problèmes de dépendances.

On peut inspecter des paquets avec par exemple dpkg : ci dessous, dpkg avec -L nous donne la liste des fichiers modifiés par un paquet (dpkg stocke tout ça dans sa BDD, située en /var/lib/dpkg) :

$ dpkg -L base-passwd
/.
/usr
/usr/sbin
/usr/sbin/update-passwd
/usr/share
/usr/share/lintian
/usr/share/lintian/overrides
/usr/share/lintian/overrides/base-passwd
/usr/share/doc-base
/usr/share/doc-base/users-and-groups
/usr/share/base-passwd
/usr/share/base-passwd/group.master
/usr/share/base-passwd/passwd.master
/usr/share/man
/usr/share/man/pl
/usr/share/man/pl/man8
/usr/share/man/pl/man8/update-passwd.8.gz
[...]
/usr/share/doc
/usr/share/doc/base-passwd
/usr/share/doc/base-passwd/users-and-groups.txt.gz
/usr/share/doc/base-passwd/changelog.gz
/usr/share/doc/base-passwd/copyright
/usr/share/doc/base-passwd/README
/usr/share/doc/base-passwd/users-and-groups.html

 

D'autres commandes :

dpkg -S  /bin/paquet #Recherche un paquet contenant l’argument (chemin ou fichier)
dpkg -s paquet #affiche les headers du paquet
dpkg -l #Affiche la liste des paquets connus du système
dpkg -c paquet.deb #Affiche le contenu du .deb
dpkg -I # Affiche les headers d’un .deb
dpkg --compare-versions 1.2-3 {gt, lt, eq, ne, ge} 1.1-4 #Compare les versions

 


APT

Réinstaller un paquet :apt --reinstall

Modification de apt :
Le dossier apt.conf.d peut recevoir des fichiers destinés à modifier son comportement avec différentes option (comme tous les .d sous debian), par convention appellé local ou 99local, en y mettant des lignes de config :

APT::AutoRemove::RecommendsImportant "false";
APT::AutoRemove::SuggestsImportant "false";


Les paquets on des valeurs de priorité pour savoir depuis quelle source apt va l’installer :

  • P > 1000

Le paquet sera installé même si APT est forcé d'installer une version plus ancienne que la version actuelle. Cette opération n'est pas sans risque.
    • 990 < P ≤ 1000
Le paquet sera installé sauf si une version plus récente est déjà installée.
    • 500 < P ≤ 990
Le paquet ne sera installé qu'à défaut de version plus récente installée ou disponible dans la distribution cible.
    • 100 < P ≤ 500
Le paquet ne sera installé que s'il n'en existe aucune version plus récente, installée ou disponible dans une autre branche.
    • 0 < P ≤ 100
Le paquet ne sera installé que si aucune autre version du paquet n'est installée.
    • P < 0
Différents type de dépots ont différentes priorités par défaut, avec les dépots rolling ou stable ayant la plus haute. On peut modifier ces priorités par paquets dans le fichier .../apt/preferences :

Package: perl
Pin: version 5.22*
Pin-Priority: 1001
#Ici, on priorise la version 5.22*

Voire même modifier la priorité d’un dépôt :

Package: *
Pin: release a=kali-bleeding-edge
Pin-Priority: 500


NB : pour installer un paquet issu du dépôt unstable par exemple : apt install paquet/unstable
NB2 : apt-cache policy sert à voir toutes les priorités des paquets et des sources
Les repos sont signés avec des clefs gpg stockées dans trusted.gpg.d. La commande apt-key gère le tout. En cas de suspicion on peut vérifier les clefs avec apt-key fingerprint.

Pour avoir des informations sur les version disponibles d'un paquet avec les priorités:

sudo apt-cache policy paquet

Pour rollback un paquet:

sudo apt install paquet=version

Télécharger le .deb d'un appli et de toute ses dépendences

<source lang="bash"> apt-get install --download-only mariadb-server-10.2

  1. Tout va dans le dossier /var/cache/apt/archives/

</source>

Ajouter des repos archives sur de vieilles distros

Parfois, on se retrouve avec de vieilles distros non maintenues; ici, je part de Debian 6 (!).

On commence par récupérer des adresses de ftp d'archives, puis on les ajoute :

<syntaxhighlight lang="bash"> $ sudo vim /etc/apt/source.list.d/archive.list

  1. Contenu

deb http://archive.debian.org/debian squeeze main deb http://archive.debian.org/debian squeeze-lts main

  1. Ensuite, il faut désactiver la vérification de l'age, notre repo etant tres vieux...
  2. Modifier ou creer le fichier

$ sudo echo "Acquire::Check-Valid-Until false;" >> /etc/apt/apt.conf </syntaxhighlight>

Upgrade et full-upgrade

apt upgrade

L'option apt upgrade installe les dernières mises à jour sans supprimer de paquets installés : ainsi, mes paquets déjà installés auront la dernière version, et les dépendances nécessaires seront installées avec. C'est la méthode de mise à jour la moins risquée.

apt full-upgrade

Cette option fait la même chose qu'un upgrade, mais supprime des paquets si elle en a besoin. Elle est donc plus risquée.

apt dist-upgrade

C'est un alias de full-upgrade, si j'ai bien compris ? (2021)

Le terme "dist" ne fait plus référence à la distribution, et ne devrait plus utilisé car il est confus (d'où l'utilisation du terme "full"). Cependant, cette commande est malgré tout utilisée lors d'un changement de version majeure de Debian (après une modification des source.list).