Linuxパッケージのインストール時に出る承諾画面を飛ばす方法
シェルスクリプトとかを使ったバッチ処理でパッケージのインストールをしていると、ポストインストール画面でライセンス承諾を求められると処理が止まってしまう。
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使おう