Installation scriptée de MySQL sur Ubuntu

23

J'ai besoin d'écrire un script qui construira mon serveur à partir d'une nouvelle installation de serveur Ubuntu. Entre autres choses comme Apache et PHP, il doit installer MySQL. Le seul problème ici est que lorsque j'installe MySQL avec apt-get, à un moment donné, l'installation fera apparaître une boîte de dialogue qui me permet de taper mon mot de passe root. C'est-à-dire qu'une interaction humaine est requise.

Comment puis-je contourner cet écran pendant l'installation et éviter toute interaction humaine tout en utilisant apt-get pour installer MySQL?

Luc
la source
Voir aussi stackoverflow.com/questions/1202347/…
Jamieson Becker

Réponses:

31

Vous devez préconfigurer la base de données debconf. debconf doit d'abord être installé avant d'essayer.

La version de mysql et ubuntu pourrait changer la ligne:

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

Par exemple, vous avez plutôt eu besoin de ceci:

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
la source
Oui, cela fonctionne, mais après l'installation, je ne peux pas me connecter à mysql (mysql -u root, il affiche l'autorisation refusée).
Samnang
3
Que diriez-vousmysql -u root -p
PhilT
Vous devez également avoir le drapeau «vu» comme indiqué ci-dessous pour désactiver l'affichage de l'invite de mot de passe ou vous serez de nouveau invité à entrer le mot de passe.
Jamieson Becker
5

Bien que FAI et les systèmes similaires soient utiles dans un environnement d'entreprise (et il devrait les connaître), ils ne sont malheureusement pas une panacée.

Par exemple, que faire s'il travaille sur des machines distantes, peut-être des serveurs hébergés, loués, des serveurs colocalisés sans réseau de confiance ou dédié, ou un environnement cloud comme EC2? Aucune sorte de netboot PXE ne fonctionnera là-bas. Puppet and Chef semblent être des outils à usage plus général qui pourraient toutefois l'aider.

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

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

Vous pouvez obtenir les valeurs correctes de la base de données debconf sur un système qui a déjà été configuré. Cette technique vous permet de coller le tout dans un seul script shell. Par exemple, depuis /var/cache/debconf/passwords.dat (notez la possibilité de travailler avec 5.0 sur Debian et 5.1 et Ubuntu, les entrées supplémentaires ne font rien de mal):

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

Une autre méthode, peut-être plus simple: (rassemblez les réponses de debconf-get-selections ou debconf-show du paquet 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

Après avoir exécuté debconf-set-selections, vérifiez vos réponses: cat /var/cache/debconf/passwords.dat

Et, pendant les tests, assurez-vous de supprimer et de purger toutes les bases de données (en particulier la base de données mysql, où elles sont stockées) et de corriger votre base de données de configuration au cas où elles seraient corrompues:

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

Quelques conseils avec ceci: 1) Vous DEVEZ avoir le drapeau vu et le mot de passe _à nouveau. 2) Vous NE DEVEZ PAS mettre de guillemets autour du mot de passe. Il ira dans une requête MySQL sans guillemets, vous devez donc le citer vous-même si nécessaire. Cela signifie également qu'il n'y a pas d'espace (je pense) 3) Si vous avez des problèmes, faites la préconfiguration à la main, puis exécutez directement l'installation MySQL (dans un terminal / tty normal) et voyez ce que debconf vous dit. Il vous indiquera des avertissements et des erreurs.

Jamieson Becker
la source
3

Si vous avez plusieurs serveurs que vous devez reconstruire, je vous recommande fortement de regarder quelque chose comme Puppet au lieu d'écrire un script shell. Puppet a un langage descriptif, vous définissez donc à quoi vous voulez que le système ressemble, pas comment y arriver. Le type de package a une option de fichier de réponses qui vous permet de définir les réponses debconf dans la réponse de Steven.

David Pashley
la source
1

Puis-je également vous suggérer d'automatiser le processus de transfert du serveur à partir du fer brut?

FAI a de nos jours des profils pour installer la plupart des principaux systèmes basés sur Debian, y compris Ubuntu, à partir du réseau. Bien sûr, ce n'est qu'une extension de la réponse fantoche, qui est une extension de la réponse debconf.

La combinaison de la mise en scène à partir de FAI, puis de la personnalisation avec marionnette en rôles de serveur (où la marionnette utilisera les outils appropriés pour votre système, comme debconf pour Debian (-likes) plutôt automatiquement), est plutôt populaire de nos jours et cela ne devrait pas être trop difficile de trouver des exemples qui correspondent à ce que vous voulez faire de près.

Un avantage supplémentaire majeur d'avoir un serveur de transfert / configuration est qu'il est également un endroit logique pour garder votre configuration contrôlée par la version, par exemple avec git (qui a l'avantage de nommer les états du référentiel par somme de contrôle, de sorte que vous êtes à l'abri de la corruption comme tant que vous notez les bons sommes de contrôle), pour un processus vraiment propre et reproductible.

Bernd Haug
la source