Скриптовая установка MySQL на Ubuntu

Скриптовая установка MySQL на Ubuntu

Мне нужно написать скрипт, который создаст мой сервер из свежей установки сервера Ubuntu. Помимо таких вещей, как Apache и PHP, ему нужно установить MySQL. Единственная проблема здесь в том, что когда я устанавливаю MySQL с помощью apt-get, в какой-то момент установки появится диалоговое окно, позволяющее мне ввести пароль root. То есть требуется человеческое взаимодействие.

Как обойти этот экран во время установки и избежать взаимодействия с человеком, продолжая использовать apt-get для установки MySQL?

решение1

Вам необходимо предварительно настроить базу данных debconf. Перед тем как попытаться это сделать, необходимо установить debconf.

Версии mysql и ubuntu могут изменить строку:

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

Например, вам нужно сделать это вместо этого:

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

решение2

Хотя FAI и подобные системы полезны в корпоративной среде (и он должен знать о них), к сожалению, они не являются панацеей.

Например, что, если он работает на удаленных машинах, возможно, на хостинговых, арендованных серверах, размещенных серверах без доверенной или выделенной сети или в облачной среде типа EC2? Никакой сетевой PXE-загрузчик там не сработает. Однако Puppet и Chef кажутся более универсальными инструментами, которые могли бы ему помочь.

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

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

Вы можете получить правильные значения из базы данных debconf в системе, которая уже настроена. Этот метод позволяет вам втиснуть все это в один скрипт оболочки. Например, из /var/cache/debconf/passwords.dat (обратите внимание на возможность работы как с 5.0 на Debian, так и с 5.1 и Ubuntu, дополнительные записи ничему не повредят):

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

Другой метод, возможно, более простой: (соберите ответы из debconf-get-selections или debconf-show из пакета 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

После запуска debconf-set-selections проверьте свои ответы: cat /var/cache/debconf/passwords.dat

И во время тестирования обязательно удалите и очистите все базы данных (особенно базу данных mysql, где это хранится) и исправьте базу данных конфигурации на случай, если они были повреждены:

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

Несколько советов по этому поводу: 1) У вас ДОЛЖЕН быть флаг seen и пароль _again. 2) Вы НЕ ДОЛЖНЫ заключать пароль в кавычки. Он войдет в запрос MySQL без кавычек, поэтому вам придется заключать его в кавычки самостоятельно, если это необходимо. Это также означает отсутствие пробелов (я думаю) 3) Если у вас возникли проблемы, выполните preseeding вручную, а затем запустите установку MySQL напрямую (в обычном терминале/tty) и посмотрите, что вам скажет debconf. Он сообщит вам о предупреждениях и ошибках.

решение3

Если у вас есть несколько серверов, которые нужно перестроить, я настоятельно рекомендую вам взглянуть на что-то вродеКукольныйвместо написания скрипта оболочки. Puppet имеет описательный язык, поэтому вы определяете, как должна выглядеть система, а не как ее туда получить. У типа пакета есть опция responsefile, которая позволяет вам определять ответы debconf в ответе Стивена.

решение4

Связанный контент