Мне нужно написать сценарий, который построит мой сервер из новой установки сервера Ubuntu. Среди таких вещей, как Apache и PHP, необходимо установить MySQL. Единственная проблема здесь заключается в том, что когда я устанавливаю MySQL с помощью apt-get, в какой-то момент при установке появляется диалоговое окно, в котором я могу ввести свой пароль root. То есть требуется человеческое взаимодействие.
Как я могу обойти этот экран во время установки и избежать вмешательства человека, продолжая использовать apt-get для установки MySQL?
Вам необходимо предварительно установить базу данных 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
Хотя 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) У вас ДОЛЖЕН быть флаг See и пароль _again. 2) Вы НЕ ДОЛЖНЫ заключать пароль в кавычки. Он войдет в запрос MySQL без кавычек, поэтому при необходимости вы должны указать его самостоятельно. Это также означает отсутствие пробелов (я думаю). 3) Если у вас возникли проблемы, выполните предварительную настройку вручную, а затем запустите установку MySQL непосредственно (в обычном терминале / tty) и посмотрите, что вам скажет debconf. Там вы увидите предупреждения и ошибки.
Если у вас есть несколько серверов, которые вам нужно перестроить, я настоятельно рекомендую вам взглянуть на что-то вроде Кукольный вместо написания сценария оболочки. Puppet имеет описательный язык, поэтому вы определяете, как должна выглядеть система, а не как ее получить. Тип пакета имеет параметр responsefile, который позволяет вам определять ответы debconf в ответе Стивена.
Могу я также предложить вам автоматизировать процесс постановки сервера из сырого железа?
FAI в настоящее время есть профили для установки большинства основных систем на основе Debian, включая Ubuntu, из сети. Это, конечно, просто расширение марионеточного ответа, которое является расширением ответа debconf.
Комбинация постановки из FAI с последующей настройкой с помощью puppet на роли сервера (где puppet будет использовать соответствующие инструменты для вашей системы, такие как debconf для Debian (-likes) скорее автоматически), довольно популярна в наши дни и не должна быть слишком трудно найти примеры, которые достаточно близко соответствуют тому, что вы хотите сделать.
Основным дополнительным преимуществом наличия промежуточного / конфигурационного сервера является то, что он также является логическим местом для управления версиями вашей конфигурации, например с участием мерзавец (который имеет преимущество именования состояний репозитория контрольной суммой, чтобы вы были защищены от коррупции, пока вы записываете правильные контрольные суммы), для действительно чистого и воспроизводимого процесса.