Instalación con script de MySQL en Ubuntu

23

Necesito escribir un script que construya mi servidor desde una nueva instalación del servidor Ubuntu. Entre cosas como Apache y PHP necesita instalar MySQL. El único problema aquí es que cuando instalo MySQL con apt-get, en algún momento la instalación mostrará un cuadro de diálogo que me permite escribir mi contraseña de root. Es decir, se requiere la interacción humana.

¿Cómo puedo pasar por alto esta pantalla durante la instalación y evitar la interacción humana mientras sigo usando apt-get para instalar MySQL?

Luke
fuente
Ver también stackoverflow.com/questions/1202347/…
Jamieson Becker

Respuestas:

31

Debe preseleccionar la base de datos debconf. Debconf debe instalarse primero antes de intentar esto.

La versión de mysql y ubuntu podría cambiar la línea:

echo mysql-server mysql-server/root_password select PASSWORD | debconf-set-selections
echo mysql-server mysql-server/root_password_again select PASSWORD | debconf-set-selections

Por ejemplo, hizo que necesitara esto en su lugar:

echo mysql-server-5.0 mysql-server/root_password password PASSWORD | debconf-set-selections
echo mysql-server-5.0 mysql-server/root_password_again password PASSWORD | debconf-set-selections
Steven
fuente
Sí, funciona, pero después de instalarlo no puedo iniciar sesión en mysql (mysql -u root, muestra permiso denegado).
Samnang
3
¿Qué talmysql -u root -p
PhilT
También necesita el indicador 'visto' como se muestra a continuación para deshabilitar la visualización de la solicitud de contraseña o se le solicitará la contraseña nuevamente.
Jamieson Becker
5

Si bien FAI y sistemas similares son útiles en un entorno empresarial, (y él debería saber sobre ellos), desafortunadamente no son una panacea.

Por ejemplo, ¿qué pasa si está trabajando en máquinas remotas, tal vez servidores alojados, alquilados, servidores ubicados sin una red confiable o dedicada, o un entorno en la nube como EC2? Ningún tipo de arranque de red PXE funcionará allí. Sin embargo, Puppet y Chef parecen ser herramientas de propósito más general que podrían ayudarlo.

cat << EOF | DEBIAN_FRONTEND=noninteractive DEBCONF_DB_FALLBACK=Pipe /usr/bin/apt-get install somepackage

Name: ...
Template: ...
Value: ...
Owners: ...
Variables:
   ....
   ....
EOF

Puede obtener los valores correctos de la base de datos de debconf en un sistema que ya se ha configurado. Esta técnica le permite pegar todo en un solo script de shell. Por ejemplo, desde /var/cache/debconf/passwords.dat (tenga en cuenta la capacidad de trabajar con 5.0 en Debian y 5.1 y Ubuntu, las entradas adicionales no hacen daño a nada):

cat << EOF | DEBIAN_FRONTEND=noninteractive DEBCONF_DB_FALLBACK=Pipe /usr/bin/apt-get -qq -y install mysql-server
Name: mysql-server/root_password
Template: mysql-server/root_password
Value: YOURPASSWORD
Owners: mysql-server-5.1
Flags: seen

Name: mysql-server/root_password_again
Template: mysql-server/root_password_again
Value: YOURPASSWORD
Owners: mysql-server-5.1
Flags: seen

Name: mysql-server/root_password
Template: mysql-server/root_password
Value: YOURPASSWORD
Owners: mysql-server-5.0
Flags: seen

Name: mysql-server/root_password_again
Template: mysql-server/root_password_again
Value: YOURPASSWORD
Owners: mysql-server-5.0
Flags: seen

EOF

Otro método, quizás más fácil: (recopile respuestas de debconf-get-selections o debconf-show del paquete debconf-utils):

echo "Installing MySQL 5.0.."
sudo apt-get install -qqy debconf-utils
cat << EOF | debconf-set-selections
mysql-server-5.0 mysql-server/root_password password YOURPASSWORD
mysql-server-5.0 mysql-server/root_password_again password YOURPASSWORD
mysql-server-5.0 mysql-server/root_password seen true
mysql-server-5.0 mysql-server/root_password_again seen true
EOF
/usr/bin/apt-get -y install mysql-server-5.0 mysql-server

Después de ejecutar debconf-set-selections, verifique sus respuestas: cat /var/cache/debconf/passwords.dat

Y, durante las pruebas, asegúrese de eliminar y purgar todas las bases de datos (especialmente la base de datos mysql, donde está almacenada) y corregir su base de datos de configuración en caso de que se corrompan:

apt-get --purge remove mysql-server*; /usr/share/debconf/fix_db.pl 

Algunos consejos con esto: 1) DEBE tener el indicador visto y la contraseña _again. 2) NO DEBE poner comillas alrededor de la contraseña. Se incluirá en una consulta MySQL sin comillas, por lo que debe citarlo usted mismo si es necesario. Eso también significa que no hay espacios (creo) 3) Si tiene problemas, realice la preselección a mano y luego ejecute la instalación de MySQL directamente usted mismo (en un terminal / tty normal) y vea qué le dice debconf. Le indicará advertencias y errores allí.

Jamieson Becker
fuente
3

Si tiene varios servidores que necesita reconstruir, le recomiendo que vea algo como Puppet en lugar de escribir un script de shell. Puppet tiene un lenguaje descriptivo, por lo que define cómo desea que se vea el sistema, no cómo llegar allí. El tipo de paquete tiene una opción de archivo de respuesta que le permite definir las respuestas de debconf en la respuesta de Steven.

David Pashley
fuente
1

¿Puedo sugerirle también que automatice el proceso de preparación del servidor desde el hierro en bruto?

FAI hoy en día tiene perfiles para instalar la mayoría de los principales sistemas basados ​​en Debian, incluido Ubuntu, desde la red. Por supuesto, esto es solo una extensión de la respuesta de la marioneta, que es una extensión de la respuesta de debconf.

La combinación de puesta en escena de FAI, luego personalizar con puppet en roles de servidor (donde puppet usará las herramientas adecuadas para su sistema, como debconf para Debian (-me gusta) bastante automáticamente), es bastante popular en estos días y no debería serlo también. Difícil de encontrar ejemplos que coincidan con lo que quieres hacer bastante de cerca

Un beneficio adicional importante de tener un servidor de preparación / configuración es que también es un lugar lógico para mantener su configuración controlada por la versión, por ejemplo, con git (que tiene el beneficio de nombrar estados de repositorio por suma de verificación, para que esté a salvo de la corrupción). siempre y cuando anote las sumas de verificación correctas), para un proceso verdaderamente limpio y reproducible.

Bernd Haug
fuente