Instalação com script do MySQL no Ubuntu

23

Preciso escrever um script que construa 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 instalo o MySQL com o apt-get, em algum momento a instalação abre uma caixa de diálogo que permite digitar minha senha root. Ou seja, é necessária a interação humana.

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

Luke
fonte
Veja também stackoverflow.com/questions/1202347/…
Jamieson Becker

Respostas:

31

Você precisa preseed 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ê precisa 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
Steven
fonte
Sim, funciona, mas depois de instalado, não consigo entrar no mysql (mysql -u root, exibe permissão negada).
Samnang
3
Como sobremysql -u root -p
PhilT 16/04/2012
Também é necessário o sinalizador 'visto' como mostrado abaixo para desativar a exibição do prompt de senha ou você será solicitado a fornecer a senha novamente.
21714 Jamieson Becker
5

Embora a FAI e sistemas similares sejam úteis em um ambiente corporativo (e ele deve saber sobre eles), infelizmente eles não são uma panacéia.

Por exemplo, e se ele estiver trabalhando em máquinas remotas, talvez hospedadas, servidores alugados, servidores colocados sem uma rede confiável ou dedicada ou um ambiente em nuvem como o EC2? Nenhum tipo de inicialização via rede PXE funcionará lá. No entanto, Puppet e Chef parecem ser ferramentas de uso 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 no banco de dados debconf em um sistema que já foi configurado. Essa técnica permite colocar a coisa toda 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 do 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 o teste, certifique-se de remover e limpar todos os bancos de dados (especialmente o banco de dados mysql, onde este está armazenado) e corrija o banco de dados de configuração caso eles estejam corrompidos:

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

Algumas dicas com isso: 1) Você DEVE ter a bandeira vista e a senha _again. 2) Você NÃO deve colocar aspas na senha. Ele irá para uma consulta MySQL sem aspas, então você deve citá-la, se necessário. Isso também significa que não há espaços (eu acho) 3) Se você tiver problemas, faça a pré-configuração manualmente e execute a instalação do MySQL diretamente você mesmo (em um terminal / tty normal) e veja o que o debconf lhe diz. Ele informará avisos e erros lá.

Jamieson Becker
fonte
3

Se você possui vários servidores que precisa reconstruir, recomendo que você veja algo como Puppet, em vez de escrever um shell script. O Puppet possui uma linguagem descritiva, então você define como deseja que o sistema seja, e não como chegar lá. O tipo de pacote possui uma opção responsefile que permite definir as respostas do debconf na resposta de Steven.

David Pashley
fonte
1

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

FAIAtualmente, a possui perfis para instalar a maioria dos principais sistemas baseados em Debian, incluindo o Ubuntu, a partir da rede. É claro que isso é apenas uma extensão da resposta do fantoche, que é uma extensão da resposta do debconf.

A combinação de teste da FAI, em seguida, personalizando com puppet em funções de servidor (onde o puppet usará as ferramentas apropriadas para o seu sistema, como debconf para Debian (-likes) bastante automaticamente)), é bastante popular hoje em dia e não deve ser muito difícil encontrar exemplos que correspondam ao que você deseja fazer de perto.

Um grande benefício adicional de ter um servidor de temporariedade / configuração é que também é um local lógico para manter sua configuração controlada por versão, por exemplo, com git (que tem o benefício de nomear estados do repositório por soma de verificação, para que você esteja seguro contra corrupção, pois desde que você anote as somas de verificação corretas), para um processo realmente limpo e reproduzível.

Bernd Haug
fonte