Ubuntu 10.04サーバーへのいくつかのパッケージのインストールを自動化するシェルスクリプトを作成しようとしていますが、proftpd-basicに問題があります。
コマンドラインを使用しています
apt-get -qy install proftpd-basic >/tmp/install.log
ほとんどのパッケージでは、このアプローチは問題なく機能しますが、proftpd-basicには何らかの対話が必要なようです(inetdインストールとスタンドアロンインストールのどちらを実行するかを尋ねられます)。
ユーザーがこの質問に煩わされることを望まないので、コマンドラインでこのオプションを事前に選択することは可能ですか? -情報については、重要な場合は、「スタンドアロン」オプションを選択したいと思います。
編集:
プロセスのインタラクティブな部分では、単純なy/n回答が必要なだけでなく、矢印キーを使用して目的のオプションに移動する必要があり、Enterキーを押して選択する必要があります。これは、この問題の解決に何らかの影響を与える可能性があります。
回答を「preseed」して、debconfがあなたがすでに質問に回答したことを確認し、再度質問する必要がないようにすることができます。
debconf-utils
パッケージのいくつかのツールが必要です。
Sudo apt-get install debconf-utils
プログラムをインストールし、手動で質問に1回答えます。次に、debconfにデータベースに何を保存したかを尋ねることができます。
debconf-get-selections | grep proftpd-basic
その情報はdebconf-set-selections
に入力できます(パイピングまたはファイルからの読み取りのいずれかによって)。
ワーナーの答えはよりクロスプラットフォームです(debconfはDebianであり、Debianのみのテクノロジーです)が、質問が変わった場合、バージョン間で常に機能するとは限りません。または、他のパッケージがインストールされている場合にのみ尋ねられるdebconfの質問がある場合。
このようなことには、さまざまな解決策があります。私はシェルスクリプトを好みますが、他の人は他の方法を好むかもしれません。
入力が必要で、回答を指定するフラグがないものと対話する場合は、入力をリダイレクトできます。このアプローチをとる前に、 apt-get manpage を読みます。これは、指定しようとしているものをネイティブでサポートしている可能性があるためです。例えば:
apt-get -qy install proftpd-basic <<**
RESPONSES GO HERE
**
expect のようなものを使用することもできます。一部のクライアントは、追加の作業なしに入力リダイレクトを常に処理するとは限りません。
ロギングには、 tee を使用して、メインスクリプトの実行時にSTDERRとSTDOUTをリダイレクトできます。例:
bash -x script.sh 2>&1 | tee script.log
set -x
でもbashを実行するのが好きです。ビルドスクリプトの場合、よりクリーンな出力よりも冗長性を優先します。