
新規の Ubuntu サーバーのインストールからサーバーを構築するスクリプトを作成する必要があります。Apache や PHP などのほかに、MySQL をインストールする必要があります。ここでの唯一の問題は、apt-get を使用して MySQL をインストールすると、インストール中にルート パスワードを入力できるダイアログが表示されることです。つまり、人間による操作が必要です。
インストール中にこの画面をバイパスし、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 から正しい値を取得できます。このテクニックを使用すると、すべてを 1 つのシェル スクリプトにまとめることができます。たとえば、/var/cache/debconf/passwords.dat から (Debian の 5.0 と Ubuntu の 5.1 の両方で動作することに注目してください。追加のエントリがあっても問題はありません)。
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 データベース) を削除して消去し、破損している場合は構成 DB を修正してください。
apt-get --purge remove mysql-server*; /usr/share/debconf/fix_db.pl
これに関するヒントをいくつか紹介します。1) 必ず seen フラグと _again パスワードが必要です。2) パスワードを引用符で囲んではなりません。パスワードは引用符なしで MySQL クエリに入るため、必要に応じて自分で引用符で囲む必要があります。つまり、スペースも入れないということです (私の考えでは)。3) 問題がある場合は、手動で preseed してから、MySQL インストールを直接自分で実行し (通常のターミナル/tty で)、debconf が何を表示するかを確認します。警告とエラーが表示されます。
答え3
再構築が必要なサーバーが複数ある場合は、次のようなものを検討することを強くお勧めします。傀儡シェル スクリプトを書く代わりに、Puppet には記述言語があるため、システムをどのように表示するかを定義するのではなく、システムをどのように表示するかを定義します。パッケージ タイプには、Steven の回答にある debconf の回答を定義できる responsefile オプションがあります。