Me gustaría escribir un script bash de instalación, donde me gustaría instalar el servidor MySQL.
En Linux Mint había seguido el código:
apt-get -y --force-yes install mysql-server-5.6
pero instalé el nuevo Debian 8 y no hay mysql-server
, en su lugar lo hay mariadb
.
¿Cómo puedo saber si el paquete existe?
Solo sé que hay lo dpkg -s
que debería decir si un paquete está instalado.
--force-yes
desactiva toda la seguridad, por lo que realmente podría romper su sistema hasta el punto de no repararlo. También:--force-yes
anula (desactiva)-y
. donde esta última podría ser la opción de elección: una forma larga de-y
es--assume-yes
, y eso es lo que hace; Decir que sí hasta que pueda ponerse realmente feo, con el riesgo de estragos entre los elementos centrales, los fundamentos, etc.,--force
anula la seguridad (lo aprendí de la manera difícil)--simulate
opción paraapt-get
, por si--dry-run
acaso , hacer una , por/etc/apt/sources.list
, ¿no?Respuestas:
(el siguiente es de Ubuntu, pero la misma técnica obviamente también funciona en Debian)
Si el paquete existe, se mostrará la información. Si no, verás algo como:
Además, el código de salida de
apt-cache
será distinto de cero si no se encuentran paquetes coincidentes.Nota adicional: si está utilizando
apt-cache show package
donde el paquete es virtual (uno que no existe, pero que, por ejemplo, hace referencia a otros paquetes), obtendrá:El
exit code
de esto es cero (que es un poco engañoso en mi opinión).fuente
sources.list
con este comando:apt-cache search *searchstring*
. Ese comando también buscará la descripción de los paquetes y podría ayudarlo a encontrar paquetes donde no sepa el nombre exacto del paquete.apt-cache search ...
devuelve cualquier tipo de coincidencias y la aplicación. devuelve 0 incluso si no se encuentra nada, lo que no es práctico en un script bash.Me gustaría utilizar
dpkg -l mysql-server &> /dev/null && echo "mysql-server is installed"
.Verificará si el
mysql-server
paquete está instalado y, de ser así, imprime este hecho en la pantalla. Una solución más sofisticada sería, en bash (no probado):Entonces uno puede hacer en un script:
fuente
En una sola línea:
apt-cache pkgnames | grep -q "\<$your_package_name\>"
sale con 0 si está presente, 1 si no.
Bonificación: verificación eficiente para múltiples paquetes, enumerados en el archivo "packages_we_want", uno por línea, ordenados con
sort
:apt-cache --no-generate pkgnames | sort | comm -13 - packages_we_want
enumera todos los paquetes que desea, pero que no existen en los repositorios.apt-cache --no-generate pkgnames | sort | comm -12 - packages_we_want
enumera todos los paquetes que desea y existen en los repositorios.fuente