如何将密码从bash脚本传递给aptitude以安装mysql?

时间:2009-07-29 18:59:03

标签: mysql bash ubuntu installation debian

我正在编写一个简单的bash脚本来在Ubuntu上安装MySQL。

#!/bin/bash
apt-get update

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

然而,MySQL提示输入密码和确认。如何传递root密码。我可以使用回音吗?

7 个答案:

答案 0 :(得分:14)

这样容易得多......

install mysql on ubuntu without password prompt

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

如果你的shell不支持here-strings(zsh,ksh93和bash支持它们),请使用:

echo ... | sudo debconf-set-selections 

答案 1 :(得分: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

答案 2 :(得分:7)

这是我的新服务器安装脚本的摘录。您应该能够逐字复制,密码除外。

如果你还不是root用户,你需要使用sudo运行它。

#!/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。这是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

答案 3 :(得分: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

答案 4 :(得分:2)

了解使用expect

它可用于自动化大多数交互式会话,但我不会使用root密码

答案 5 :(得分:2)

以超级用户身份启动时,此脚本成功:

cd /usr/local
git fetch origin
git reset --hard origin/master

答案 6 :(得分:1)

期待可能是矫枉过正。查看Debian或Ubuntu管理论坛之一 - 像FAI等人一直在使用debconf问题的preseeding。你也应该可以在这里使用它。

最后,您可能也可以使用apt-get本身或其他前端。