Linuxパッケージのインストール時に出る承諾画面を飛ばす方法

シェルスクリプトとかを使ったバッチ処理でパッケージのインストールをしていると、ポストインストール画面でライセンス承諾を求められると処理が止まってしまう。

f:id:horimislime:20130907144844p:plain

yumやaptで-yオプションを付けてY/n 入力を飛ばすように、このような承諾入力もパスするやり方をしらべてみた。

手順

今回試した環境はUbuntu12.04。
まずDEBIAN_FRONTEND という名前で環境変数をセットする。

# export DEBIAN_FRONTEND=noninteractive

変数をセットした状態で承諾画面の出るパッケージをインストールしてみる。

# apt-get install -y oracle-java7-installer
....
oracle-license-v1-1 license could not be presented
try 'dpkg-reconfigure debconf' to select a frontend other than noninteractive

dpkg: error processing /var/cache/apt/archives/oracle-java7-installer_7u25-0~webupd8~1_all.deb (--unpack):
 subprocess new pre-installation script returned error exit status 2
Errors were encountered while processing:
 /var/cache/apt/archives/oracle-java7-installer_7u25-0~webupd8~1_all.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)

こんな感じのエラーが出る。noninteractiveで承諾の入力は飛ばしたけど、デフォルトの選択が「No」になっているためにインストールが中断されたらしい。

そこで次にデフォルトの選択がYesになるよう設定を変えてみる。 以下のスレッドが参考になった。
Installing Java Automatically (With Silent Option) - Ask Ubuntu

まずapt-get install dpkg-utils して、debconf-get-selectionsを実行。

# debconf-get-selections | grep shared/accepted-oracle-license
oracle-java7-installer  shared/accepted-oracle-license-v1-1 boolean false

今回失敗したoracleのライセンス承諾画面は、shared/accepted-oracle-license-v1-1 というキーで初期値がfalse(Noを選択)にセットされているのが分かった。

初期値をtrueにすれば大丈夫のはずなので、値を書き換えてみる。

# debconf-get-selections | grep shared/accepted-oracle-license
oracle-java7-installer  shared/accepted-oracle-license-v1-1 boolean false
# echo "oracle-java7-installer shared/accepted-oracle-license-v1-1 boolean true" | debconf-set-selections
# debconf-get-selections | grep shared/accepted-oracle-license
oracle-java7-installer  shared/accepted-oracle-license-v1-1 boolean true

もう一度apt-get install すると、無事画面が出ずにインストールも完了した。

結論

Chef使おう