Вопрос по ubuntu, installation, bash, debian, mysql – Как я могу передать пароль от bash-скрипта в aptitude для установки mysql?

22

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

#!/bin/bash
apt-get update

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

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

Ваш Ответ

7   ответов
12

Спасибо за совет, ожидайте. Я ничего не смог найти, выполнив поиск по форумам администраторов 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
7

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

Вам нужно будет запустить это с помощью 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 для удобства чтения

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

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

Не было, я пробовал с чистой ВМ. Я предполагаю, что mysql не принимает пароль пустым.
Следующее мое предположение заключается в том, что вы не являетесь пользователем root @ localhost в зависимости от того, как вы подключаетесь:stackoverflow.com/questions/19712307/mysql-localhost-127-0-0-1
это даетERROR 1698 (28000): Access denied for user 'root'@'localhost'
Может быть, уже был установлен пароль пользователя root? Этот сценарий не аутентифицируется паролем, потому что у mysql пароль не был уже установлен. Вы можете добавить -p для запроса или -p $ PASS, чтобы указать его в командной строке.
1

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

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

15

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

установить 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 
На самом деле это рекомендуемый способ сделать это. Ожидаемые сценарии или ожидание / сон - это просто клуджи, которые сломаются в самые неудачные моменты.
Я не смог найти документацию для того, какие имена настроек мне нужно было перезаписать. Но я установил пакет в интерактивном режиме один раз и использовалsudo debconf-show MyPkg перечислить переменные, которые были установлены. Глядя на этот список, было совершенно очевидно, какие имена переменных паролей были для моего пакета.
2

смотреть на использованиеожидать

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

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
+1 за то, что на самом деле работает на чистой insatll из Ubuntu 12.04
Я попробовалexpect подход, но продолжал сталкиваться с тонкими проблемами цитирования.DEBIAN_FRONTEND=noninteractive трюк был именно то, что я искал. Следовать сmysqladmin -u root password YOUR_DB_PASSWORD и ты дома в один миг.
2

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

#!/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

Похожие вопросы