
Ich muss ein Skript schreiben, das meinen Server aus einer neuen Ubuntu-Serverinstallation erstellt. Neben Dingen wie Apache und PHP muss MySQL installiert werden. Das einzige Problem dabei ist, dass, wenn ich MySQL mit apt-get installiere, irgendwann während der Installation ein Dialogfeld angezeigt wird, in dem ich mein Root-Passwort eingeben kann. D. h., menschliche Interaktion ist erforderlich.
Wie kann ich diesen Bildschirm während der Installation umgehen und menschliche Interaktion vermeiden, während ich weiterhin apt-get zur Installation von MySQL verwende?
Antwort1
Sie müssen die Debconf-Datenbank vorab einrichten. Bevor Sie dies versuchen, muss Debconf zuerst installiert werden.
Die Version von MySQL und Ubuntu könnte die Zeile ändern:
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
Beispielsweise hätten Sie stattdessen Folgendes benötigt:
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
Antwort2
Obwohl FAI und ähnliche Systeme in einer Unternehmensumgebung hilfreich sind (und er sollte davon wissen), sind sie leider kein Allheilmittel.
Was ist beispielsweise, wenn er an Remote-Rechnern arbeitet, vielleicht gehosteten, gemieteten Servern, Colocation-Servern ohne vertrauenswürdiges oder dediziertes Netzwerk oder einer Cloud-Umgebung wie EC2? Kein PXE-Netboot funktioniert dort. Puppet und Chef scheinen jedoch allgemeinere Tools zu sein, die ihm helfen könnten.
cat << EOF | DEBIAN_FRONTEND=noninteractive DEBCONF_DB_FALLBACK=Pipe /usr/bin/apt-get install somepackage
Name: ...
Template: ...
Value: ...
Owners: ...
Variables:
....
....
EOF
Sie können die korrekten Werte aus der Debconf-Datenbank auf einem bereits eingerichteten System abrufen. Mit dieser Technik können Sie das Ganze in ein einziges Shell-Skript packen. Zum Beispiel aus /var/cache/debconf/passwords.dat (beachten Sie die Möglichkeit, sowohl mit 5.0 unter Debian als auch mit 5.1 und Ubuntu zu arbeiten, zusätzliche Einträge schaden nicht):
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
Eine andere, möglicherweise einfachere Methode: (Sammeln Sie Antworten von debconf-get-selections oder debconf-show aus dem debconf-utils-Paket):
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
Nachdem Sie debconf-set-selections ausgeführt haben, überprüfen Sie Ihre Antworten: cat /var/cache/debconf/passwords.dat
Achten Sie während des Tests darauf, alle Datenbanken zu entfernen und zu bereinigen (insbesondere die MySQL-Datenbank, in der dies gespeichert ist) und Ihre Konfigurationsdatenbank zu reparieren, falls sie beschädigt wurde:
apt-get --purge remove mysql-server*; /usr/share/debconf/fix_db.pl
Dazu ein paar Tipps: 1) Sie MÜSSEN das Flag „gesehen“ und das Passwort „_again“ haben. 2) Sie DÜRFEN das Passwort nicht in Anführungszeichen setzen. Es wird ohne Anführungszeichen in eine MySQL-Abfrage eingefügt, Sie müssen es also bei Bedarf selbst in Anführungszeichen setzen. Das bedeutet auch keine Leerzeichen (glaube ich) 3) Wenn Sie Probleme haben, führen Sie die Voreinstellung manuell durch und führen Sie die MySQL-Installation dann direkt selbst aus (in einem normalen Terminal/TTY) und sehen Sie, was Debconf Ihnen sagt. Es wird Ihnen dort Warnungen und Fehler anzeigen.
Antwort3
Wenn Sie mehrere Server neu aufbauen müssen, empfehle ich Ihnen dringend, sich etwas wie Folgendes anzusehen:Marionetteanstatt ein Shell-Skript zu schreiben. Puppet hat eine beschreibende Sprache, Sie definieren also, wie das System aussehen soll, nicht, wie Sie es dorthin bringen. Der Pakettyp hat eine Antwortdateioption, mit der Sie die Debconf-Antworten in Stevens Antwort definieren können.