Comment savoir si le paquet est déjà présent ?

Bonjour,

Je programme un peu, et je souhaite savoir comment savoir si le paquet est présent, pour que mon programme ne l’installe pas.

Salut,

aptitude search <le_paquet> | grep ^i même si le nom du paquet est incomplet :slightly_smiling:

Edit : Complété par le grep :slightly_smiling:

Avec [mono]apt-cache policy paquet | grep *[/mono] tu peux peut-être arriver à ce que tu cherches.

paquet installé :

dave@HAL9000:~$ apt-cache policy dpkg | grep \* *** 1.17.9 0
paquet non-installé :

(pas de retour)


Voila ce qui me paraît être une base exploitable :

[code]dave@HAL9000:~$ export PAQUET=dpkg
dave@HAL9000:~$ if [ -n “$(apt-cache policy $PAQUET | grep *)” ]

then echo "paquet installé"
else echo "paquet à installer"
fi
paquet installé
dave@HAL9000:~$ export PAQUET=gnome
dave@HAL9000:~$ if [ -n “$(apt-cache policy $PAQUET | grep *)” ]
then echo "paquet installé"
else echo "paquet à installer"
fi
paquet à installer[/code]

Même simplement [mono]apt-cache policy le_paquet[/mono] suffit à renseigner sur l’état et les possibilités :

[code]ricardo@ordibureau:~$ apt-cache policy baobab

baobab:
Installé : (aucun)
Candidat : 3.12.1-1
Table de version :
3.12.1-1 0
985 http://ftp.debian.org/debian/ testing/main amd64 Packages
990 http://ftp.debian.org/debian/ sid/main amd64 Packages
3.4.1-1 0
980 http://ftp.fr.debian.org/debian/ wheezy/main amd64 Packages
[/code]

ricardo :
Tout à fait.
Si j’ai rajouté un [mono]grep[/mono] derrière c’est parce que je suppose que Creaprog va vouloir intégrer tout ça à un script sans intervention de la part de l’utilisateur.

Pour donner une solution disons plus bas niveau il y a :

Plus propre à implémenter en autre chose que tu shell.

Merci pour vos réponses.

system("apt-cache policy le_paquet"); if le_paquet non présent { system("apt-get install le_paquet"); } else { suite ; } return (0);

Comment faire pour que mon programme sache que le_paquet est présent oui ou non ?

Quel langage ? PHP ?

C,Python. Mon exemple était pour le C. Si j’arrive à comprendre avec le C je pourrai faire de même pour le Python.

Tu as des bibliothèques toutes faites pour ça en C++ et en python.

Ce que l’on a montré au dessus :
[ul]
[li][mono]grep -A1 -e “Package: ${pkg}” /var/lib/dpkg/status | grep -Fq ‘Status: install’[/mono]
Tu ouvre le fichier /var/lib/dpkg/status tu le lis, ligne par ligne et tu recherche la ligne qui représente ton paquet, tu regarde dans la ligne qui suit si le paquet est bien installé ;[/li]
[li][mono]apt-cache policy paquet | grep *[/mono]
Tu lance la commande [mono]apt-cache policy paquet[/mono] et te regarde dans le résultat de la commande s’il contient une ligne contenant « * ».[/li][/ul]

Je me faderais pas de réécrire ce qui a déjà était écris en shell.