我需要编写一个脚本,从一个新的Ubuntu服务器安装构build我的服务器。 在诸如Apache和PHP之类的东西中,需要安装MySQL。 这里唯一的问题是,当我使用apt-get来安装MySQL的时候,安装程序会popup一个对话框,允许我inputroot密码。 也就是说,人际互动是必需的。
安装过程中如何绕过这个屏幕,避免人为干扰,同时仍然使用apt-get安装MySQL?
您需要预先设置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
虽然FAI和类似的系统在企业环境中是有帮助的(而且他应该知道这些),但不幸的是他们不是万能的。
例如,如果他在远程机器上工作,可能托pipe,租用服务器,没有可信或专用networking的共同服务器,或EC2等云环境? 没有一种PXEnetworking引导将在那里工作。 木偶和厨师似乎是更多的通用工具,可以帮助他,但是。
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-get-selections收集答案或从debconf-utils包中收集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
而且,在testing时,一定要删除并清除所有数据库(尤其是存储这个数据库的mysql数据库),并修复你的configuration数据库,以防万一它们被损坏:
apt-get --purge remove mysql-server*; /usr/share/debconf/fix_db.pl
一些提示:1)你必须有看到的标志和_again密码。 2)你不能在密码周围加引号。 它将进入MySQL查询引用,所以你必须引用它自己,如果需要的话。 这也意味着没有空间(我认为)3)如果你有麻烦,做手动预置,然后直接运行MySQL自己安装(在普通的terminal/ tty),看看什么debconf告诉你。 它会告诉你那里的警告和错误。
如果你有多个服务器需要重build,我强烈build议你看看Puppet,而不是编写一个shell脚本。 木偶有一个描述性的语言,所以你定义你想要的系统,而不是如何得到它。 包types有一个响应文件选项,允许你在Steven的答案中定义debconf的答案。
我也可以build议你从生铁自动化服务器分段过程?
现在, FAI已经有了从networking上安装包括Ubuntu在内的大多数主要的基于Debian的系统的configuration文件。 这当然只是傀儡回答的延伸,这是对debconf回答的扩展。
将FAI升级,然后用puppet定制到服务器angular色中(puppet将会使用适合你系统的工具,比如Debian(而不是自动)的debconf),这些日子相当stream行,它不应该太很难find符合你想做的事情的例子。
有一个分段/configuration服务器的一个主要的附加好处是,它也是一个合理的地方来保持你的configuration版本控制,例如与git (这有利于命名库状态的校验和,以便您可以安全地防止腐败只要你注意到正确的校验和),一个真正的清洁和可重复的过程。