
Мне нужно написать скрипт, который создаст мой сервер из свежей установки сервера 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 в ответе Стивена.