web-dev-qa-db-ja.com

CLIでプロンプトが表示されるパラメーターを使用したパッケージのインストール

dpkg -iを使用してパッケージをインストールする必要があるとします。これは、ユーザー名やパスワードなどの値をユーザーに要求します。

ターミナルから簡単に実行でき、インストールを続行できます。

しかし、この計画では、インストールを自動化することはできません。たとえば、パラメーターを対話的に受け取るパッケージのインストール用のスクリプトを作成する場合です。

だから、対話型(ユーザー名とパスワードの入力を求める)でありながら、スクリプトから起動してインストールプロセスを自動化できるdpkgインストールプランが必要です。

これについてどうすればいいですか?代替手段はありますか?

3
user207475

そのようなことのために、expectスクリプトを書くことができます。処理はそれほど難しくありません。

まず、インタープリターをインストールする必要があります。

apt-get install expect

次に、たとえば次のように記述できます。

#!/usr/bin/expect -f
set timeout 30
set password "pass"
set username "user"

#run the command
spawn dpkg -i package.deb

# Look for username Prompt
expect "*?sername:*" #<--- this statement is important it wait's for a Prompt "username:"
send "$username\r"

# Look for passwod Prompt
expect "*?assword:*" #<--- the same with the "password:" Prompt
send "$password\r"

#dpkg -i continues

もちろん、スクリプトは実行可能でなければなりません。 Expect は、スクリプト(ssh、ftp、...)を介した対話型ターミナルプログラムの制御に最適です。

3
chaos

Debconf-utilsパッケージのツールを使用して、事前設定ファイルを作成できます。次を使用して、事前構成ファイルを手動で作成できます。

<owner> <question> <type> <value> 

または例として:

my-package username string Bob
my-package password string I$aN1ceGuy

より簡単にあなたのマシンにインストールして実行する:

debconf-get-selections | grep my-package

出力を使用してファイルを作成します。

ファイルを入手したら、次を使用します。

debconf-set-selections <filename>.  
dpkg -i my-package

Filenameにリストされた選択がデフォルトで使用され、パッケージはサイレントインストールされます。

http://www.debian.org/releases/stable/i386/apbs03.html.en

3