web-dev-qa-db-fra.com

Installation scriptée de MySQL sur Ubuntu

Je dois écrire un script qui construira mon serveur à partir d'une installation de serveur d'Ubuntu frais. Parmi des 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 apportera une boîte de dialogue qui me permettra de Tapez mon mot de passe root. IE, une interaction humaine est requise.

Comment puis-je contourner cet écran lors de l'installation et éviter les interactions humaines tout en utilisant APT-HAND pour installer MySQL?

23
Luke

Vous devez prélever la base de données DEBCONF. Debconf doit être installé avant d'essayer ceci.

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 fait cela besoin de cela:

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
31
Steven

Bien que la FAI et les systèmes similaires soient utiles dans un environnement d'entreprise (et il devrait savoir à leur sujet), ce n'est malheureusement pas une panacée.

Par exemple, si il travaille sur des machines distantes, peut-être des serveurs loués, des serveurs colocatés, sans réseau de confiance ni dédié, ni un environnement nuageux comme EC2? Aucune sorte de Netboot PXE ne fonctionnera là-bas. La marionnette et le chef semblent être des outils plus généraux qui pourraient l'aider, cependant.

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 à partir du DB debconf sur un système déjà mis en place. Cette technique vous permet de coller le tout dans un seul script shell. Par exemple, de /var/cache/debconf/passwords.dat (notez la capacité de fonctionner 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 facile: (rassembler des réponses de DEBCONF-GET-SELECTIONS OU DEBCONF-Show du package 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é les sélections de Debconf-Set, vérifiez vos réponses: Cat /var/cache/debconf/passwords.dat

Et, tout en testant, veillez à supprimer et à purger toutes les bases de données (en particulier à la base de données MySQL, où elle est stockée) et corrigez votre DB de configuration au cas où ils se sont corrompus:

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 _again. 2) Vous ne devez pas mettre des citations autour du mot de passe. Il ira dans une requête mysql non cotée, vous devez donc la citer vous-même si nécessaire. Cela signifie aussi aucun espaces (je pense) 3) Si vous avez des problèmes, faites-le émerger, puis exécutez la mySQL installez-vous directement vous-même (dans un terminal normal/TTY) et voyez ce que DEBCONF vous dit. Il vous dira des avertissements et des erreurs là-bas.

5
Jamieson Becker

Si vous avez plusieurs serveurs, vous devez reconstruire, je vous recommande vivement de regarder quelque chose comme Puppet au lieu d'écrire un script shell. La marionnette a une langue descriptive, vous définissez donc la manière dont vous voulez que le système ait l'air, et non comment l'obtenir là-bas. Le type de package a une option de réponseFILE qui vous permet de définir les réponses DEBCONF dans la réponse de Steven.

3
David Pashley
1
Jamieson Becker

Puis-je également vous suggérer d'automatiser le processus de mise en scène du serveur à partir du fer cru?

[~ # ~] FAI [~ # ~ ~] Nowadataways a des profils pour installer la plupart des principaux systèmes de Debian, y compris Ubuntu, du réseau. Ceci est bien sûr juste une extension de la réponse de la marionnette, qui est une extension de la réponse debconf.

La combinaison de la mise en scène de FAI, puis de personnaliser avec la marionnette dans des 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 ces jours-ci et cela ne devrait pas être trop difficile de trouver des exemples qui correspondent à ce que vous voulez faire de manière plutôt étroite.

Un avantage majeur ajouté d'avoir un serveur de mise en scène/de configuration est qu'il s'agit également d'un endroit logique pour conserver votre configuration contrôlée par E.G. Avec Git (qui bénéficie des États du référentiel de dénomination par checksum, de sorte que vous êtes en sécurité contre la corruption tant que vous notez les bonnes checksums), pour un processus vraiment propre et reproductible.

1
Bernd Haug