
Preciso escrever um script que construa meu servidor a partir de uma nova instalação do servidor Ubuntu. Entre coisas como Apache e PHP é necessário instalar o MySQL. O único problema aqui é que quando eu instalo o MySQL com o apt-get, em algum momento a instalação abrirá uma caixa de diálogo que me permite digitar minha senha de root. Ou seja, a interação humana é necessária.
Como posso ignorar esta tela durante a instalação e evitar a interação humana enquanto ainda uso o apt-get para instalar o MySQL?
Responder1
Você precisa pré-configurar o banco de dados debconf. O debconf precisa ser instalado primeiro antes de você tentar isso.
A versão do mysql e do ubuntu poderia mudar a linha:
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
Por exemplo, você precisou disso:
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
Responder2
Embora o FAI e sistemas similares sejam úteis em um ambiente empresarial (e ele deveria saber sobre eles), infelizmente não são uma panacéia.
Por exemplo, e se ele estiver trabalhando em máquinas remotas, talvez servidores hospedados e alugados, servidores colocalizados sem uma rede confiável ou dedicada, ou em um ambiente de nuvem como o EC2? Nenhum tipo de netboot PXE funcionará lá. No entanto, Puppet e Chef parecem ser ferramentas de uso mais geral que podem ajudá-lo.
cat << EOF | DEBIAN_FRONTEND=noninteractive DEBCONF_DB_FALLBACK=Pipe /usr/bin/apt-get install somepackage
Name: ...
Template: ...
Value: ...
Owners: ...
Variables:
....
....
EOF
Você pode obter os valores corretos do banco de dados debconf em um sistema que já foi configurado. Essa técnica permite que você coloque tudo em um único script de shell. Por exemplo, em /var/cache/debconf/passwords.dat (observe a capacidade de trabalhar com 5.0 no Debian e 5.1 e Ubuntu, entradas extras não prejudicam nada):
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
Outro método, talvez mais fácil: (reúna respostas de debconf-get-selections ou debconf-show do pacote 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
Depois de executar debconf-set-selections, verifique suas respostas: cat /var/cache/debconf/passwords.dat
E, durante o teste, certifique-se de remover e limpar todos os bancos de dados (especialmente o banco de dados mysql, onde está armazenado) e corrigir seu banco de dados de configuração caso eles sejam corrompidos:
apt-get --purge remove mysql-server*; /usr/share/debconf/fix_db.pl
Algumas dicas sobre isso: 1) Você DEVE ter o sinalizador visto e a senha _again. 2) Você não DEVE colocar aspas na senha. Ele entrará em uma consulta MySQL sem aspas, então você mesmo deverá citá-lo, se necessário. Isso também significa sem espaços (eu acho) 3) Se você tiver problemas, faça a pré-configuração manualmente e então execute a instalação do MySQL diretamente (em um terminal/tty normal) e veja o que o debconf lhe diz. Ele mostrará avisos e erros.
Responder3
Se você tiver vários servidores que precisa reconstruir, recomendo fortemente que você veja algo comoFantocheem vez de escrever um script de shell. O Puppet possui uma linguagem descritiva, então você define como deseja que o sistema seja, não como chegar lá. O tipo de pacote possui uma opção de arquivo de resposta que permite definir as respostas do debconf na resposta de Steven.