Как я могу передать пароль от bash-скрипта в aptitude для установки mysql? - PullRequest
22 голосов
/ 29 июля 2009

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

#!/bin/bash
apt-get update

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

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

Ответы [ 7 ]

14 голосов
/ 17 января 2012

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

установить 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 
12 голосов
/ 30 июля 2009

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

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

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

4 голосов
/ 20 ноября 2009

Самый простой способ сделать это - использовать переменную окружения 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
2 голосов
/ 14 марта 2016

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

#!/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
2 голосов
/ 29 июля 2009

изучите использование ожидайте

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

1 голос
/ 29 июля 2009

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

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

...