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