script run query from example commands mysql bash ubuntu installation debian

run - ¿Cómo puedo pasar una contraseña de un script de bash a aptitude para instalar mysql?



mysql shell commands (7)

Esperar es probablemente una exageración. Busque en uno de los foros de administración de Debian o Ubuntu: cosas como FAI et al. Han usado durante mucho tiempo la preselección para las preguntas debconf. Deberías poder usar eso aquí también.

Por último, probablemente también podría usar apt-get en sí mismo o en otras interfaces.

Estoy escribiendo un simple script bash para instalar MySQL en Ubuntu.

#!/bin/bash apt-get update # Install MySQL5 aptitude -y install mysql-server mysql-client libmysqlclient15-dev

Sin embargo, MySQL solicita una contraseña y confirmación. ¿Cómo paso una contraseña de root? ¿Hay un eco que pueda usar?


Este es un extracto de mi script de configuración para nuevos servidores. Debería poder copiarlo palabra por palabra, excepto la contraseña.

Tendrás que ejecutar esto usando sudo si aún no eres root.

#!/bin/bash export DEBIAN_FRONTEND=noninteractive apt-get -q -y install mysql-server echo "Give mysql server time to start up before we try to set a password..." sleep 5 mysql -uroot -e <<EOSQL "UPDATE mysql.user SET Password=PASSWORD(''yourpasswordhere'') WHERE User=''root''; FLUSH PRIVILEGES;" EOSQL echo "Done setting mysql password."

Otras respuestas han utilizado el -y que hace que apt-get siempre responda sí a las preguntas. El -q oculta algunos indicadores de progreso para que pueda enviar la salida a un registro. También puedes usar -qq, que automáticamente te da un -y. Esto está en la página del manual para apt-get.

El <<EOSQL es una sintaxis heredoc de bash para <<EOSQL lectura.

Obtuve la parte heredoc de esta solución de este tipo: http://padwasabimasala.posterous.com/non-interactive-scripted-mysql-install-on-ubu

Lo que hay que recordar con el heredoc es que el espacio en blanco antes de que la cadena de cierre lo rompa. Así que no hagas sangría en esa línea. Aquí hay una página sobre la sintaxis heredoc: http://tldp.org/LDP/abs/html/here-docs.html


Este script fue exitoso cuando se lanzó como superusuario:

#!/bin/bash export temp_mysql_password="**********" export DEBIAN_FRONTEND=noninteractive debconf-set-selections <<< "mysql-server mysql-server/root_password password $temp_mysql_password" debconf-set-selections <<< "mysql-server mysql-server/root_password_again password $temp_mysql_password" debconf-set-selections <<< "mysql-server-5.6 mysql-server/root_password password $temp_mysql_password" debconf-set-selections <<< "mysql-server-5.6 mysql-server/root_password_again password $temp_mysql_password" apt-get update apt-get -y upgrade apt-get -y install mysql-server


Esto es mucho más fácil ..

instalar mysql en ubuntu sin solicitud de contraseña

sudo debconf-set-selections <<< ''mysql-server-5.1 mysql-server/root_password password your_password'' sudo debconf-set-selections <<< ''mysql-server-5.1 mysql-server/root_password_again password your_password'' sudo apt-get -y install mysql-server

Si su shell no es compatible here-strings (zsh, ksh93 y bash las admiten), use:

echo ... | sudo debconf-set-selections


Gracias por el consejo de esperar. No pude encontrar nada buscando en los foros de administración de Ubuntu, así que fui con esperar. Como puede ver por la marca de tiempo de esta publicación, me tomó 3 horas para que funcione. Aquí está el código, espero que pueda ayudar a alguien:

#!/bin/bash apt-get update apt-get install expect VAR=$(expect -c '' spawn apt-get -y install mysql-server expect "New password for the MySQL /"root/" user:" send "PasswordHere/r" expect "Repeat password for the MySQL /"root/" user:" send "PasswordHere/r" expect eof '') echo "$VAR" apt-get -y install mysql-client libmysqlclient15-dev #For some reason important to restart - otherwise possible errors /etc/init.d/mysql stop /etc/init.d/mysql start


La forma más fácil de hacer esto es usar la variable de entorno DEBIAN_FRONTEND y los indicadores de aptitud -q y -y:

sudo DEBIAN_FRONTEND=noninteractive aptitude install -q -y mysql-server

O más genéricamente, asumiendo que la contraseña de sudo ha sido atendida de alguna manera:

#!/bin/bash INSTALLER_LOG=/var/log/my-installer.log installnoninteractive(){ sudo bash -c "DEBIAN_FRONTEND=noninteractive aptitude install -q -y $* >> $INSTALLER_LOG" } installnoninteractive mysql-server


mirar en usar expect

Se puede usar para automatizar la mayoría de las sesiones interactivas, aunque no usaría una contraseña de root