Как передать пароль из bash script в aptitude для установки mysql?

Я пишу простой bash script для установки MySQL на Ubuntu.

#!/bin/bash
apt-get update

# Install MySQL5 
aptitude -y install mysql-server mysql-client libmysqlclient15-dev

Однако MySQL запрашивает пароль и подтверждение. Как передать пароль root. Есть ли эхо, которое я могу использовать?

Ответ 1

Это намного проще.

установить mysql на ubuntu без приглашения пароля

sudo debconf-set-selections <<< 'mysql-server-5.1 mysql-server/root_password password your_password'
sudo debconf-set-selections <<< 'mysql-server-5.1 mysql-server/root_password_again password your_password'
sudo apt-get -y install mysql-server

Если ваша оболочка не поддерживает here-strings (zsh, ksh93 и bash поддерживает их), используйте:

echo ... | sudo debconf-set-selections 

Ответ 2

Благодарим вас за отзыв. Я не мог найти ничего, просматривая форумы администратора Ubuntu, поэтому я пошел с ожиданием. Как вы можете видеть по метке этой записи, мне потребовалось 3 часа, чтобы заставить ее работать. Вот код, я надеюсь, что он может кому-то помочь:

#!/bin/bash
apt-get update
apt-get install expect

VAR=$(expect -c '
spawn apt-get -y install mysql-server
expect "New password for the MySQL \"root\" user:"
send "PasswordHere\r"
expect "Repeat password for the MySQL \"root\" user:"
send "PasswordHere\r"
expect eof
')

echo "$VAR"

apt-get -y install mysql-client libmysqlclient15-dev   

#For some reason important to restart - otherwise possible errors

/etc/init.d/mysql stop
/etc/init.d/mysql start

Ответ 3

Это отрывок из моей установки script для новых серверов. Вы должны иметь возможность скопировать его до слова, кроме пароля.

Вам нужно запустить это, используя sudo, если вы еще не root.

#!/bin/bash
export DEBIAN_FRONTEND=noninteractive
apt-get -q -y install mysql-server
echo "Give mysql server time to start up before we try to set a password..."
sleep 5
mysql -uroot -e <<EOSQL "UPDATE mysql.user SET Password=PASSWORD('yourpasswordhere') WHERE User='root'; FLUSH PRIVILEGES;"
EOSQL
echo "Done setting mysql password."

В других ответах используется -y, который позволяет apt-get всегда отвечать да на вопросы. -q скрывает некоторые индикаторы прогресса, поэтому вы можете отправить вывод в журнал. Вы также можете использовать -qq, который автоматически дает вам -y. Это находится на странице man для apt-get.

<<EOSQL представляет собой синтаксис bash heredoc для удобочитаемости.

Я получил часть heredoc этого решения от этого парня: http://padwasabimasala.posterous.com/non-interactive-scripted-mysql-install-on-ubu

Вещь, которую следует помнить с помощью heredoc, состоит в том, что пробелы перед закрывающей строкой прерывают ее. Так что не отступайте от этой линии. Вот страница о синтаксисе heredoc: http://tldp.org/LDP/abs/html/here-docs.html

Ответ 4

Самый простой способ сделать это - использовать переменную среды DEBIAN_FRONTEND и флаги aptitude -q и -y:

sudo DEBIAN_FRONTEND=noninteractive aptitude install -q -y mysql-server

В более общем случае, если пароль sudo был удовлетворен для некоторых способов:

#!/bin/bash
INSTALLER_LOG=/var/log/my-installer.log

installnoninteractive(){
  sudo bash -c "DEBIAN_FRONTEND=noninteractive aptitude install -q -y $* >> $INSTALLER_LOG"
}

installnoninteractive mysql-server

Ответ 5

просмотрите expect

Он может использоваться для автоматизации большинства интерактивных сеансов, хотя я бы не использовал пароль root

Ответ 6

Этот script был успешным при запуске в качестве суперпользователя:

#!/bin/bash

export temp_mysql_password="**********"
export DEBIAN_FRONTEND=noninteractive 

debconf-set-selections <<< "mysql-server mysql-server/root_password password $temp_mysql_password"
debconf-set-selections <<< "mysql-server mysql-server/root_password_again password $temp_mysql_password"
debconf-set-selections <<< "mysql-server-5.6 mysql-server/root_password password $temp_mysql_password"
debconf-set-selections <<< "mysql-server-5.6 mysql-server/root_password_again password $temp_mysql_password"

apt-get update
apt-get -y upgrade
apt-get -y install mysql-server

Ответ 7

Ожидайте, наверное, слишком много. Посмотрите на один из форумов администрирования Debian или Ubuntu - такие вещи, как FAI и др., Давно используют предпосылки для debconf вопросов. Вы также сможете использовать это здесь.

Наконец, вы, вероятно, также можете использовать apt-get или другие интерфейсы.