Skryptowana instalacja MySQL na Ubuntu

23

Muszę napisać skrypt, który zbuduje mój serwer z nowej instalacji serwera Ubuntu. Wśród rzeczy takich jak Apache i PHP musi zainstalować MySQL. Jedynym problemem jest to, że kiedy instaluję MySQL za pomocą apt-get, w pewnym momencie instalacja wyświetli okno dialogowe, które pozwala mi wpisać hasło roota. Tzn. Wymagana jest interakcja człowieka.

Jak mogę ominąć ten ekran podczas instalacji i uniknąć interakcji ludzi podczas używania programu apt-get do instalacji MySQL?

Luke
źródło
Zobacz także stackoverflow.com/questions/1202347/…
Jamieson Becker

Odpowiedzi:

31

Musisz wstępnie sprawdzić bazę danych debconf. debconf musi zostać zainstalowany przed wypróbowaniem tego.

Wersja mysql i ubuntu może zmienić linię:

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

Na przykład musisz to zrobić zamiast tego:

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
źródło
Tak, działa, ale po zainstalowaniu nie mogę zalogować się do mysql (root mysql -u, wyświetla odmowę uprawnień).
Samnang,
3
Co powiesz namysql -u root -p
PhilT
Potrzebuję także flagi „widoczny”, jak pokazano poniżej, aby wyłączyć wyświetlanie monitu o podanie hasła. W przeciwnym razie pojawi się monit o podanie hasła.
Jamieson Becker
5

Chociaż FAI i podobne systemy są pomocne w środowisku przedsiębiorstwa (i powinien o nich wiedzieć), niestety nie są panaceum.

Na przykład, co jeśli pracuje na zdalnych komputerach, być może hostowanych, wynajmowanych, kolokowanych serwerach bez zaufanej lub dedykowanej sieci lub środowisku chmurowym, takim jak EC2? Nie będzie tam działał żaden rodzaj netboota PXE. Jednak Puppet i Chef wydają się być bardziej uniwersalnymi narzędziami, które mogą mu pomóc.

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

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

Prawidłowe wartości można uzyskać z bazy danych debconf w systemie, który został już skonfigurowany. Ta technika pozwala ci umieścić całość w jednym skrypcie powłoki. Na przykład z /var/cache/debconf/passwords.dat (zwróć uwagę na możliwość pracy zarówno z 5.0 na Debianie, jak i 5.1 oraz Ubuntu, dodatkowe wpisy nic nie zaszkodzą):

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

Inna metoda, być może łatwiejsza: (zbierz odpowiedzi z debconf-get-selections lub debconf-show z pakietu 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

Po uruchomieniu selekcji zestawu debconf sprawdź swoje odpowiedzi: cat /var/cache/debconf/passwords.dat

Podczas testowania pamiętaj o usunięciu i wyczyszczeniu wszystkich baz danych (zwłaszcza bazy danych mysql, w której jest ona przechowywana) i napraw konfigurację DB na wypadek ich uszkodzenia:

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

Kilka wskazówek z tym: 1) MUSISZ mieć widoczną flagę i _ponowne hasło. 2) NIE WOLNO umieszczać cudzysłowów wokół hasła. Przejdzie do zapytania MySQL bez cudzysłowu, więc w razie potrzeby musisz go zacytować. Oznacza to również brak spacji (tak myślę) 3) Jeśli masz problemy, zrób ręczne przetwarzanie, a następnie uruchom instalację MySQL bezpośrednio (w normalnym terminalu / tty) i zobacz, co mówi ci debconf. Znajdziesz tam ostrzeżenia i błędy.

Jamieson Becker
źródło
3

Jeśli masz wiele serwerów, które musisz odbudować, zdecydowanie polecam spojrzenie na coś takiego jak Puppet zamiast pisania skryptu powłoki. Puppet ma opisowy język, więc określasz, jak chcesz wyglądać system, a nie jak go tam dostać. Typ pakietu ma opcję pliku odpowiedzi, która pozwala zdefiniować odpowiedzi debconf w odpowiedzi Stevena.

David Pashley
źródło
1

Czy mogę również zasugerować zautomatyzowanie procesu przemieszczania serwera z surowego żelaza?

FAI ma obecnie profile do instalacji większości głównych systemów opartych na Debianie, w tym Ubuntu, z sieci. To oczywiście jest tylko rozszerzenie odpowiedzi kukiełkowej, która jest rozszerzeniem odpowiedzi debconf.

Kombinacja inscenizacji z FAI, a następnie dostosowywanie za pomocą kukiełki do ról serwera (gdzie kukiełka użyje odpowiednich narzędzi dla twojego systemu, takich jak debconf dla Debiana (-podobnych) raczej automatycznie), jest obecnie dość popularna i nie powinna być zbyt duża ciężko znaleźć przykłady, które pasują do tego, co chcesz zrobić raczej ściśle.

Główną dodatkową zaletą posiadania serwera pomostowego / konfiguracyjnego jest to, że jest to również logiczne miejsce, aby kontrolować konfigurację wersji, np. Za pomocą git (co ma tę zaletę, że nazywanie stanów repozytorium przez sumę kontrolną, abyś był bezpieczny przed korupcją jako pod warunkiem, że spadną odpowiednie sumy kontrolne), aby zapewnić naprawdę czysty i powtarzalny proces.

Bernd Haug
źródło