當前位置: 首頁>>技術教程>>正文


在Ubuntu上的MySQL腳本安裝

, , ,

問題描述

我需要編寫一個腳本,該腳本將通過全新的Ubuntu服務器安裝來構建服務器。在諸如Apache和PHP之類的東西中,它需要安裝MySQL。唯一的問題是,當我使用apt-get安裝MySQL時,安裝有時會彈出一個對話框,允許我鍵入root密碼。即,需要人與人之間的互動。

如何在安裝過程中繞過此屏幕並在仍然使用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和類似係統在企業環境中很有幫助(並且他應該了解它們),但不幸的是,它們並不是萬靈藥。

例如,如果他在遠程機器上工作,可能是托管,租用的服務器,沒有受信任或專用網絡的托管服務器,或者是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告訴您的內容。它會告訴您那裏的警告和錯誤。

第三種回答

如果您需要重建多個服務器,強烈建議您查看類似Puppet的內容,而不是編寫Shell腳本。 Puppet具有描述性語言,因此您可以定義係統的外觀,而不是係統的外觀。程序包類型具有responsefile選項,該選項使您可以在Steven的答案中定義debconf答案。

參考資料

本文由Ubuntu問答整理, 博文地址: https://ubuntuqa.com/zh-tw/article/9734.html,未經允許,請勿轉載。