
我需要編寫一個腳本來從新安裝的 Ubuntu 伺服器建立我的伺服器。其中Apache和PHP等需要安裝MySQL。這裡唯一的問題是,當我使用 apt-get 安裝 MySQL 時,安裝過程有時會彈出一個對話框,讓我輸入 root 密碼。即,需要人際互動。
如何在安裝過程中繞過此螢幕並避免人機交互,同時仍使用 apt-get 安裝 MySQL?
答案1
您需要預置 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
答案2
雖然 FAI 和類似的系統在企業環境中很有幫助(他應該了解它們),但不幸的是它們並不是萬靈藥。
例如,如果他正在遠端電腦上工作,可能是託管、租用伺服器、沒有可信任或專用網路的託管伺服器,或者像 EC2 這樣的雲端環境,該怎麼辦?任何 PXE 網路引導都無法在那裡工作。然而,Puppet 和 Chef 似乎是更通用的工具,可以幫助他。
cat << EOF | DEBIAN_FRONTEND=noninteractive DEBCONF_DB_FALLBACK=Pipe /usr/bin/apt-get install somepackage
Name: ...
Template: ...
Value: ...
Owners: ...
Variables:
....
....
EOF
您可以從已設定的系統上的 debconf DB 取得正確的值。這種技術可以讓您將整個事情放在一個 shell 腳本中。例如,來自 /var/cache/debconf/passwords.dat (注意可以在 Debian 上使用 5.0,也可以在 5.1 和 Ubuntu 上使用,額外的條目不會造成任何損害):
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) 您必須擁有 saw 標誌和 _again 密碼。 2) 不得在密碼兩邊加上引號。它將進入不含引號的 MySQL 查詢,因此如果需要,您必須自己引用它。這也意味著沒有空格(我認為) 3)如果您遇到麻煩,請手動進行預置,然後直接自行執行 MySQL 安裝(在普通終端/tty 中)並查看 debconf 告訴您什麼。它會告訴您那裡的警告和錯誤。
答案3
如果您有多個伺服器需要重建,我強烈建議您查看類似的內容木偶而不是編寫 shell 腳本。 Puppet 有一種描述性語言,因此您可以定義系統的外觀,而不是如何實現它。套件類型有一個responsefile選項,允許您在Steven的答案中定義debconf答案。