2009-07-29 8 views

Répondre

2

regarder dans expect

Il peut être utilisé pour automatiser la plupart des sessions interactives, bien que je ne voudrais pas utiliser un mot de passe root

1

Attendez-vous est probablement exagéré. Regardez sur l'un des forums d'administration Debian ou Ubuntu - des choses comme FAI et al ont longtemps utilisé la préconfiguration pour les questions debconf. Vous devriez pouvoir l'utiliser ici aussi. Enfin, vous pourriez probablement aussi utiliser apt-get lui-même ou d'autres interfaces.

12

Merci pour le conseil sur attendre. Je n'ai rien trouvé en cherchant dans les forums d'admin Ubuntu, donc je suis parti avec expect. Comme vous pouvez le voir par l'horodatage de ce post, il m'a fallu 3 heures pour le faire fonctionner. Voici le code, je l'espère peut aider quelqu'un:

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

La meilleure façon de le faire est d'utiliser la variable d'environnement DEBIAN_FRONTEND et -q d'aptitude et drapeaux -y:

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

Ou plus génériquement, en supposant que le mot de passe a été sudo pris en charge quelques-uns-faire:

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

J'ai essayé l'approche 'expect', mais j'ai continué à courir dans le problème de soumission subtile s. Le tour 'DEBIAN_FRONTEND = noninteractive' était exactement ce que je cherchais. Suivez-le avec un 'mysqladmin -u mot de passe root YOUR_DB_PASSWORD' et vous êtes à la maison en un tournemain. –

+0

+1 pour quelque chose qui fonctionne réellement sur insatll propre d'Ubuntu 12.04 – Automatico

7

Voici un extrait de mon script d'installation de nouveaux serveurs. Vous devriez être capable de le copier mot à mot, sauf pour le mot de passe.

Vous devrez l'exécuter en utilisant sudo si vous n'êtes pas déjà 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." 

D'autres réponses ont utilisé le -y qui fait que apt-get répond toujours oui aux questions. Le paramètre -q cache certains indicateurs de progression afin que vous puissiez envoyer la sortie dans un journal. Vous pouvez aussi utiliser -qq, qui vous donne automatiquement un -y. C'est dans la page de manuel d'apt-get.

La <<EOSQL est une syntaxe bash heredoc pour la lisibilité.

J'ai eu le rôle heredoc de cette solution de ce type: http://padwasabimasala.posterous.com/non-interactive-scripted-mysql-install-on-ubu

La chose à retenir avec le heredoc est que les espaces avant la chaîne de fermeture, il se casse. Donc, ne pas indenter cette ligne. Voici une page sur la syntaxe heredoc: http://tldp.org/LDP/abs/html/here-docs.html

+0

cela donne 'ERROR 1698 (28000): Accès refusé pour l'utilisateur 'root' @ 'localhost'' – user1623521

+0

Peut-être y avait-il déjà un mot de passe root? Ce script ne s'authentifie pas avec un mot de passe car mysql n'a pas de mot de passe déjà défini. Vous pouvez ajouter le -p à l'invite ou -p $ PASS pour le fournir sur la ligne de commande. – Mnebuerquo

+0

Il n'y avait pas, j'ai essayé avec une machine virtuelle propre. Je suppose que mysql n'accepte pas de mot de passe pour être vide. – user1623521

15

C'est tellement plus 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 

Si votre shell ne supporte pas here-strings (zsh, bash et ksh93 les soutenir), utilisez:

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

Ceci est en fait la façon recommandée pour faire ça. Attendre des scripts ou attendre/dormir ne sont que des kludges qui se briseront dans les moments les plus malheureux. –

+2

Je n'ai pas trouvé de documentation pour les noms de paramètres que je devais écraser. Mais j'ai installé le paquet de façon interactive une fois et utilisé 'sudo debconf-show MyPkg' pour lister les variables qui ont été définies. En regardant cette liste, il était assez évident que les deux noms de variables de mot de passe étaient pour mon paquet. –

2

Ce script a réussi lors de son lancement en tant que super-utilisateur:

#!/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 
Questions connexes