dpkg -s
utilisation programmatique avec installation automatique
J'aime dpkg -s
car il se termine avec le statut 1
si aucun des packages n'est installé, ce qui facilite l'automatisation:
pkgs='qemu-user pandoc'
if ! dpkg -s $pkgs >/dev/null 2>&1; then
sudo apt-get install $pkgs
fi
man dpkg
ne documente malheureusement pas le statut de sortie, mais je pense qu'il devrait être raisonnablement sûr de s'y fier:
-s, --status package-name...
Report status of specified package.
Une chose à noter est que l'exécution:
sudo apt remove <package-name>
ne supprime pas nécessairement tous les fichiers immédiatement pour certains packages (mais le fait pour d'autres, vous ne savez pas pourquoi?), et marque simplement le package pour la suppression.
Dans cet état, le package semble être encore utilisable, et comme ses fichiers sont toujours présents, mais il est marqué pour suppression plus tard.
Par exemple, si vous exécutez:
pkg=certbot
sudo apt install -y "$pkg"
dpkg -s "$pkg"
echo $?
sudo apt remove -y "$pkg"
dpkg -s "$pkg"
echo $?
ls -l /usr/lib/python3/dist-packages/certbot/reporter.py
sudo apt remove --purge certbot
dpkg -s "$pkg"
echo $?
ls -l /usr/lib/python3/dist-packages/certbot/reporter.py
puis:
les deux premières echo $?
sorties 0
, seule la troisième sort1
la sortie du premier dpkg -s certbot
contient:
Status: deinstall ok installed
tandis que le second dit:
Status: deinstall ok config-files
et il ne disparaît qu'après purge:
dpkg-query: package 'certbot' is not installed and no information is available
le fichier /etc/logrotate.d/certbot
est toujours présent dans le système après apt remove
, mais pas après --purge
.
Cependant, le fichier /usr/lib/python3/dist-packages/certbot/reporter.py
est toujours présent même après --purge
.
Je ne comprends pas pourquoi, mais avec le hello
package le deuxième dpkg
après apt remove
montre qu'il a déjà été supprimé sans --purge
:
dpkg-query: package 'hello' is not installed and no information is available
Les documentations sont également très peu claires, par exemple:
sudo apt dselect-upgrade
n'a pas supprimé certbot
quand il a été marqué comme deinstall
, même si cela man apt-get
semble indiquer que:
dselect-upgrade
est utilisé en conjonction avec le frontal traditionnel de l’emballage Debian, dselect (1). dselect-upgrade suit les modifications apportées par dselect (1) au champ État des packages disponibles et effectue les actions nécessaires pour réaliser cet état (par exemple, la suppression des anciens et l'installation de nouveaux packages).
Voir également:
Testé sur Ubuntu 19.10.
apt
Paquet Python
Il existe un package Python 3 préinstallé appelé apt
dans Ubuntu 18.04 qui expose une interface apt Python!
Un script qui vérifie si un package est installé et l'installe sinon peut être vu à: Comment installer un package à l'aide de l'API python-apt
Voici une copie pour référence:
#!/usr/bin/env python
# aptinstall.py
import apt
import sys
pkg_name = "libjs-yui-doc"
cache = apt.cache.Cache()
cache.update()
cache.open()
pkg = cache[pkg_name]
if pkg.is_installed:
print "{pkg_name} already installed".format(pkg_name=pkg_name)
else:
pkg.mark_install()
try:
cache.commit()
except Exception, arg:
print >> sys.stderr, "Sorry, package installation failed [{err}]".format(err=str(arg))
Vérifiez si un exécutable est à la PATH
place
Voir: Comment puis-je vérifier si un programme existe à partir d'un script Bash?