2009-07-29 16 views

risposta

2

considerare di usare expect

Può essere utilizzato per automatizzare le sessioni più interattive, anche se non vorrei usare una password di root

1

aspettare è probabilmente eccessivo. Guarda uno dei forum di amministrazione Debian o Ubuntu: cose come FAI e altri hanno già utilizzato per la preconfigurazione le domande di debconf. Dovresti essere in grado di usarlo anche qui.

Infine, probabilmente potresti anche utilizzare apt-get stesso o altri front-end.

12

Grazie per il suggerimento. Non sono riuscito a trovare nulla cercando i forum di amministrazione di Ubuntu quindi mi sono aspettato. Come puoi vedere dal timestamp di questo post, mi ci sono volute 3 ore per farlo funzionare. Ecco il codice, spero che possa aiutare qualcuno:

#!/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 
4

Il modo più semplice per farlo è quello di utilizzare la variabile d'ambiente DEBIAN_FRONTEND e la q attitudine e le bandiere -y:

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

Or più genericamente, assumendo la password sudo è stato organizzato per alcuni-how:

#!/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 
+1

ho provato l'approccio 'expect', ma continuò a correre in questione citando sottile S. Il trucco "DEBIAN_FRONTEND = noninteractive' era esattamente quello che stavo cercando. Seguilo con una 'mysqladmin -u root password YOUR_DB_PASSWORD' e sei a casa in un batter d'occhio. –

+0

+1 per qualcosa che in realtà funziona su insatll pulita di Ubuntu 12.04 – Automatico

7

Questo è un estratto dal mio script di installazione per i nuovi server. Dovresti riuscire a copiarlo parola per parola ad eccezione della password.

Avrete bisogno di eseguire questo utilizzando sudo se non sei già 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." 

altre risposte hanno utilizzato il -y che rende apt-get sempre rispondere sì a domande. Il -q nasconde alcuni indicatori di progresso in modo da poter inviare l'output a un log. Puoi anche usare -qq, che ti dà automaticamente un -y. Questo è nella pagina man di apt-get.

<<EOSQL è una sintassi di heredoc bash per la leggibilità.

ho ottenuto la parte heredoc di questa soluzione da questo ragazzo: http://padwasabimasala.posterous.com/non-interactive-scripted-mysql-install-on-ubu

La cosa da ricordare con l'heredoc è che spazio prima della stringa di chiusura rompe. Quindi non indentare quella riga. Ecco una pagina sulla sintassi di heredoc: http://tldp.org/LDP/abs/html/here-docs.html

+0

questo dà 'ERROR 1698 (28000): Accesso negato per l'utente 'root' @ 'localhost'' – user1623521

+0

forse c'era già una password di root set? Questo script non si autentica con una password perché mysql non ha una password già impostata. È possibile aggiungere il -p al prompt o -p $ PASS per fornirlo sulla riga di comando. – Mnebuerquo

+0

Non c'era, ho provato con una VM pulita. Immagino che mysql non accetti una password per essere vuota. – user1623521

15

Questo è molto più facile ..

install mysql on ubuntu without password prompt

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 

Se la shell non supporta here-strings (zsh, ksh93 e bash li sostengono), l'uso:

echo ... | sudo debconf-set-selections 
+0

Questo è in realtà il metodo consigliato per fare questo. Aspettatevi sceneggiature o aspettando/dormendo sono solo delle scemenze che si infrangono nei momenti più sfortunati. –

+2

Non sono riuscito a trovare la documentazione per i nomi delle impostazioni che dovevo sovrascrivere. Ma ho installato il pacchetto in modo interattivo una volta e ho usato 'sudo debconf-show MyPkg' per elencare le variabili che erano state impostate. Guardando quella lista, era abbastanza ovvio quali fossero i due nomi delle variabili delle password per il mio pacchetto. –

2

Questo script ha avuto successo quando ha lanciato come superutente:

#!/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 
Problemi correlati