Mi binario depende de estas bibliotecas de impulso y sus respectivos paquetes:
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
Entonces me gustaría definir una lista de paquetes:
boostlibnames="libboost-serialization1.55.0 libboost-thread1.55.0 libboost-date-time1.55.0 libboost-signals1.55.0"
Y ahora me gustaría comprobar si están todos instalados y solo si se ejecutan apt-get install
. Sé que apt verificará automáticamente si los paquetes ya están instalados, pero me gustaría indicarle al usuario si desea instalar las bibliotecas faltantes antes de hacerlo.
Entonces, ¿hay una buena manera de verificar si están instaladas todas las bibliotecas enumeradas (en la variable anterior)?
Respuestas:
El
dpkg -s
comando devuelve el estado de los paquetes instalados. Por ejemplo, en mi sistema, si lo ejecuto parafirefox
cuál está instalado ynedit
cuál no, obtengo:Entonces, puede usar ese comando para verificar si un paquete está instalado:
fuente
installed = installed || isInstalled(libArray[i])
. De manera similar, me gustaría poner falso en una variable si no se instalaron uno o más. Creo que puedo hacer estoif
, pero eso es mucho código para nada.apt-get install
. Los que estén instalados simplemente serán ignorados. Déjame saber lo que quieres y lo editaré. Básicamente, necesitará cambiar el|| echo ...
to|| installed=1
o algo.if
declaración fea , pero se preferiría la variable. Planeo envolverlo en una función.dpkg -s
puedo buscar varios paquetes a la vez.Hice esta función para un sistema CentOS hoy.
Bueno, modifiqué ligeramente la función. Más rápido y ya no necesita un bucle.
La contraparte de Debian / Ubuntu:
fuente
Lo siguiente le dará una lista de todos los paquetes relevantes que no están instalados:
Esto omite
dpkg -l
las líneas de encabezado y luego imprime las líneas donde dpkg-query se queja de un paquete desconocido, Y las líneas que no comienzan conhi
oii
(Hold Inst o Install Inst).Por lo general, me gustaría hacer algo parecido
awk 'NR<=5 {next} ; ...'
osed -e '1,5d'
para deshacerse dedpkg -l
's líneas de cabecera, pero en este caso estamos redireccionamiento stderr a stdout con el fin de quejas de captura pordpkg-query
, así comodpkg -l
' s de salida, por lo que no se puede simplemente eliminar la primera 5 lineas.Esto mostrará los paquetes que nunca se instalaron, eliminaron, purgaron o donde la instalación falló / se completó parcialmente debido a un error.
fuente
Utilizo el siguiente código en mi trabajo llamado Easy Bash , que ayuda a instalar los paquetes más populares rápidamente en los servidores Ubuntu. Este código verificará los paquetes listados instalados o no.
Resultado:
fuente
fuente