在Ubuntu上以脚本方式安装MySQL


23

我需要编写一个脚本,该脚本将通过全新的Ubuntu服务器安装来构建服务器。在诸如Apache和PHP之类的东西中,它需要安装MySQL。唯一的问题是,当我使用apt-get安装MySQL时,安装有时会弹出一个对话框,允许我输入root密码。即,需要人与人之间的互动。

如何在安装过程中绕过此屏幕并在仍然使用apt-get安装MySQL时避免人为干预?


Answers:


31

您需要预先配置debconf数据库。尝试此操作之前,需要先安装debconf。

mysql和ubuntu的版本可能会改变这一行:

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

例如,您需要使用它:

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

是的,它可以工作,但是安装后我无法登录mysql(mysql -u root,它显示权限被拒绝)。
Samnang

3
怎么样mysql -u root -p
PhilT

还需要如下所示的“ seen”标志以禁用显示密码提示,否则将再次提示您输入密码。
Jamieson Becker 2014年

5

尽管FAI和类似系统在企业环境中很有用(并且他应该了解它们),但不幸的是,它们并不是万灵药。

例如,如果他在远程计算机上工作,可能是托管,租用的服务器,没有受信任或专用网络的托管服务器,或者是EC2之类的云环境,该怎么办?没有任何一种PXE netboot可以在那里工作。但是,Puppet和Chef似乎是可以帮助他的更通用的工具。

cat << EOF | DEBIAN_FRONTEND=noninteractive DEBCONF_DB_FALLBACK=Pipe /usr/bin/apt-get install somepackage

Name: ...
Template: ...
Value: ...
Owners: ...
Variables:
   ....
   ....
EOF

您可以从已经设置的系统上的debconf数据库中获取正确的值。这种技术使您可以将整个过程粘贴在单个shell脚本中。例如,在/var/cache/debconf/passwords.dat中(请注意,在Debian,5.1和Ubuntu上均可使用5.0,额外的输入不会对您造成任何伤害):

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

另一种方法,可能更简单:(从debconf-utils包中收集来自debconf-get-selections或debconf-show的答案):

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

运行debconf-set-selections后,检查您的答案:cat /var/cache/debconf/passwords.dat

并且,在测试时,请确保删除并清除所有数据库(尤其是存储该数据库的mysql数据库),并修复配置数据库,以防它们损坏:

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

有关此问题的一些提示:1)您必须具有seeed标志和_again密码。2)您不得在密码前后加上引号。它将在MySQL查询中不加引号,因此如果需要,您必须自己将其引号。这也意味着没有空格(我认为)3)如果遇到问题,请手动进行预播,然后亲自(在常规终端/ tty中)直接运行MySQL安装,然后查看debconf告诉您的内容。它会告诉您警告和错误。


3

如果您有多个服务器需要重建,我强烈建议您查看类似Puppet的内容,而不要编写Shell脚本。Puppet具有描述性语言,因此您可以定义系统的外观,而不是系统的外观。程序包类型具有responsefile选项,该选项使您可以在Steven的答案中定义debconf答案。


1

我是否也可以建议您使用原始设备自动执行服务器登台过程?

如今,FAI拥有用于从网络上安装大多数主要的基于Debian的系统(包括Ubuntu)的配置文件。当然,这只是木偶答案的扩展,这是debconf答案的扩展。

从FAI升级到使用puppet定制服务器角色(puppet将使用适合您系统的适当工具,例如自动使用Debconf for Debian(-likes))的组合,如今已经很流行了,应该不会太过流行很难找到与您想做的事情非常接近的示例。

拥有登台/配置服务器的另一个主要好处是,它也是使配置版本受控制的逻辑位置,例如,使用git(它具有通过校验和命名存储库状态的好处,因此可以安全地防止损坏只要您记下正确的校验和),就可以进行真正干净且可重复的过程。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.