Linux
chef

対話形式のスクリプトに自動応答する方法

More than 5 years have passed since last update.

例えばパッケージ化されていないアプリケーションの対話形式のインストーラをChefで扱いたいときにこの方法は役に立ちます。なおChefでこの方法を使うときはインストール後に作られる実行ファイルの有無などで冪等性を保つ必要があります。

使用するコマンド

  • expect
  • autoexpect

これらのコマンド自体はさして新しいものや珍しいものではありません。

expect

指定したスクリプトの内容で対話形式のプログラムに自動応答します。

autoexpect

expectのスクリプトを作成するのに使います。expectのスクリプトは手作業で作成することが可能ですが、何度もテストしながら作るのが結構な手間になったり、思い通りに動かないこともしばしばあります。autoexpectからインストーラを呼び出して実際にインストールを実行すると、同じパラメータでexpectのスクリプトが作成されます。

使い方

環境準備

インストールされていなかったら、yum installapt-getしましょう。

$ sudo yum install expect autoexpect

expectスクリプト作成

$ autoexpect sudo ./<インストーラ>

インストーラが起動しますので、そのままインストールを続け、完了させます。インストーラのプログラムが終了するとautoexpectも終了し、デフォルトでscript.expという名前でexpectスクリプトが作成されます。

自動インストール

目的のプログラムがまだインストールされていない環境にインストーラと上述のscript.expを持ってきて実行します。インストールするプログラムによっては管理者権限が必要になるでしょう。また必要に応じて実行権限もつけておきましょう。

$ chmod +x script.exp
$ sudo ./script.exp

以上。