Instalação com script do MySQL no Ubuntu

23

Eu preciso escrever um script que irá construir o meu servidor a partir de uma nova instalação do servidor Ubuntu. Entre coisas como Apache e PHP, ele precisa instalar o MySQL. O único problema aqui é que, quando eu instalo o MySQL com o apt-get, em algum momento a instalação irá abrir um diálogo que me permite digitar minha senha root. Ou seja, a interação humana é necessária.

Como posso ignorar esta tela durante a instalação e evitar interação humana enquanto ainda estiver usando o apt-get para instalar o MySQL?

    
por Luke 04.06.2009 / 04:28

5 respostas

31

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 pode 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ê fez isso em vez 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
    
por 04.06.2009 / 05:48
5

Embora FAI e sistemas similares sejam úteis em um ambiente corporativo, (e ele deve saber sobre eles), 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 alocados sem uma rede confiável ou dedicada ou um ambiente de nuvem como o EC2? Nenhum tipo de netboot PXE funcionará lá. O Puppet e o Chef parecem ser ferramentas mais gerais que poderiam ajudá-lo, no entanto.

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 debconf DB 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 o 5.0 no Debian e com o 5.1 e o Ubuntu, entradas extras não causam 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: (coletar 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 o debconf-set-selections, verifique suas respostas:     cat /var/cache/debconf/passwords.dat

E, durante os testes, remova e limpe todos os bancos de dados (especialmente o banco de dados mysql, onde ele está armazenado) e corrija 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 com isso: 1) Você DEVE ter o sinalizador visto e a senha de acesso. 2) Você não deve colocar aspas em torno da senha. Ele irá para uma consulta MySQL não-citada, então você mesmo deve citar 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 normal / tty) e veja o que o debconf lhe diz. Ele vai te dizer avisos e erros lá.

    
por 30.07.2010 / 17:17
3

Se você tiver vários servidores que precisa recriar, recomendo que procure algo como Puppet em vez de escrever um shell roteiro. Puppet tem uma linguagem descritiva, então você define como quer que o sistema apareça, não como chegar lá. O tipo de pacote tem uma opção responsefile que permite definir as respostas debconf na resposta de Steven.

    
por 04.06.2009 / 09:06
1

Posso também sugerir que você automatize o processo de preparação do servidor a partir do ferro bruto?

FAI atualmente possui perfis para instalar a maioria dos principais sistemas baseados em Debian, incluindo o Ubuntu, da rede. Isto, obviamente, é apenas uma extensão da resposta dos fantoches, que é uma extensão da resposta do debconf.

A combinação de estadiamento da FAI, em seguida, personalizar com fantoches em funções de servidor (onde o fantoche usará as ferramentas adequadas para o seu sistema, como debconf para o Debian (-aicos) de forma bastante automática) é bastante popular atualmente. Não seja muito difícil encontrar exemplos que correspondam ao que você deseja fazer bem de perto.

Um grande benefício adicional de ter um servidor intermediário / de configuração é que também é um lugar lógico para manter sua configuração controlada por versão, por exemplo, com git (que tem o benefício de nomear os estados do repositório por checksum, para que você está seguro contra a corrupção, desde que você anote os checksums certos), para um processo verdadeiramente limpo e reproduzível.

    
por 04.06.2009 / 12:11
1

Veja também:

link

    
por 30.07.2010 / 18:00