Mon binaire dépend de ces bibliothèques de boost et des packages respectifs:
NAME | PACKAGE:
--------------------------------------+-----------------------------------
libboost_serialization.so.1.55.0 | libboost-serialization1.55.0
libboost_thread.so.1.55.0 | ibboost-thread1.55.0
libboost_date_time.so.1.55.0 | libboost-date-time1.55.0
libboost_signals.so.1.55.0 | libboost-signals1.55.0
Je voudrais donc définir une liste de packages:
boostlibnames="libboost-serialization1.55.0 libboost-thread1.55.0 libboost-date-time1.55.0 libboost-signals1.55.0"
Et maintenant, je voudrais vérifier si elles sont toutes installées et ensuite seulement s'exécuter apt-get install
. Je sais qu'apt vérifiera automatiquement si les packages sont déjà installés, mais je voudrais indiquer à l'utilisateur s'il souhaite installer les bibliothèques manquantes avant de le faire.
Existe-t-il donc un bon moyen de vérifier si toutes les bibliothèques listées (en variable comme ci-dessus) sont installées?
Réponses:
La
dpkg -s
commande renvoie l'état des packages installés. Par exemple, sur mon système, si je l'exécute pourfirefox
lequel est installé etnedit
lequel ne l'est pas, j'obtiens:Ainsi, vous pouvez utiliser cette commande pour vérifier si un package est installé:
la source
installed = installed || isInstalled(libArray[i])
. De même, j'aimerais mettre false dans une variable si un ou plusieurs n'étaient pas installés. Je pense que je peux le faire avecif
, mais c'est beaucoup de code pour rien.apt-get install
sur tous. Ceux qui sont installés seront simplement ignorés. Faites-moi savoir ce que vous voulez et je le modifierai. En gros, vous devrez changer le|| echo ...
pour|| installed=1
ou quelque chose.if
instruction laide , mais la variable serait préférée. Je prévois de l'envelopper dans une fonction.dpkg -s
peux vérifier plusieurs packages à la fois.J'ai fait cette fonction pour un système CentOS aujourd'hui.
Eh bien, j'ai légèrement modifié la fonction. Plus rapide et il n'a plus besoin de boucle.
L'homologue Debian / Ubuntu:
la source
Ce qui suit vous donnera une liste de tous les packages pertinents qui ne sont pas installés:
Cela ignore
dpkg -l
les lignes d'en-tête, puis imprime les lignes où dpkg-query se plaint d'un package inconnu, ET les lignes ne commençant pas parhi
ouii
(Hold Inst ou Install Inst).Habituellement, je ferais quelque chose comme
awk 'NR<=5 {next} ; ...'
oused -e '1,5d'
pour se débarrasser desdpkg -l
lignes d'en-tête de mais dans ce cas, nous redirigeons stderr vers stdout afin de détecter les plaintesdpkg-query
ainsi quedpkg -l
la sortie de, donc nous ne pouvons pas simplement supprimer la première 5 lignes.Cela montrera les packages jamais installés, supprimés, purgés ou où l'installation a échoué / partiellement terminée en raison d'une erreur.
la source
J'utilise le code suivant dans mon travail appelé Easy Bash , qui aide à installer rapidement les packages les plus populaires sur les serveurs Ubuntu. Ce code vérifiera les packages listés installés ou non.
Résultat:
la source
la source