非対話方式での入力値のdpkg-reconfigureへの供給


23

dpkg-reconfigureを介してubuntuパッケージを、非インタラクティブモード(スクリプト内)を介して提供されるすべての値で構成したいと思います。

実際、私の場合はfirebirdの構成(http://www.firebirdsql.org/manual/ubusetup.html)であり、コマンドを使用する場合:

sudo dpkg-reconfigure firebird2.5-superclassic -freadline

答えが 'Y'と 'newpwd'になる2つの値を尋ねられます。

サンプル出力は次のようになります。

sudo dpkg-reconfigure firebird2.5-superclassic -freadline
 * Firebird 2.5 superclassic server not running
Configuring firebird2.5-superclassic
------------------------------------

Accept if you want Firebird server to start automatically.

If you only need the Firebird client and there are no databases that will be served by this host, decline.

Enable Firebird server? Y


Password for firebird 2.5
-------------------------

Firebird has a special user named SYSDBA, which is the user that has access to all databases. SYSDBA can also create new databases and users. Because of this, it 
is necessary to secure SYSDBA with a password.

The password is stored in /etc/firebird/2.5/SYSDBA.password (readable only by root). You may modify it there (don't forget to update the security database too, 
using the gsec utility), or you may use dpkg-reconfigure to update both.

To keep your existing password, leave this blank.

Password for SYSDBA: 


 * Starting Firebird 2.5 superclassic server...
   ...done.
 * Firebird 2.5 superclassic server already running

私は次のhere stringsようなbashスクリプトで試しました:

sudo dpkg-reconfigure firebird2.5-superclassic -f readline << EOF
Y
newpwd
EOF

しかし、これは何らかの理由で機能せず、値を提供するように要求しました。

必要な値をスクリプトに入力する方法はありますか?

回答:


11

いつでもexpect言語を使用して、での入力を予期するプロセスとの対話を自動化できttyます。以前は実際に使用したことがないため、ここにコードを追加することはできませんが、典型的な使用例です。

更新:

[Peter Butkovic]私をexpect正しい方向に向けることを検討します。このスクリプトは次のように終わりました:

#!/usr/bin/expect

spawn dpkg-reconfigure firebird2.5-superclassic -freadline
expect "Enable Firebird server?"
send "Y\r"

expect "Password for SYSDBA:"
send "newpwd\r"

# done
expect eof

正しい方向を教えてくれてありがとう。この答えは実装が簡単だったので、正しい答えだと思います。
ピーターブトコビッチ

i18nの問題の可能性には警戒しますが、「家庭での使用」ではこれは安全なようです。
ジェイセン

20

Debianパッケージは、debconfを使用してインストール時の設定を収集します。Debconfは、複数のフロントエンドをサポートして、ユーザーに値の入力を求めます。-fオプションdpkg-reconfigureを使用するフロントエンドのdebconf選択。

readlineフロントエンドは、対話的な使用のために設計されています。自動スクリプトでは使用しないでください。

デフォルト値で問題なければ、単にnoninteractiveフロントエンドを使用します。

異なる値を指定する場合、2つのオプションがあります。noninteractiveフロントエンドに固執し、debconfデータベースpreseedできます。これを行う最も簡単な方法は、1台のマシンにパッケージをインストールして対話形式で構成し、関連する部分を抽出し/var/cache/debconf/config.datてdebconfにこのファイルを提供することです。

DEBCONF_DB_OVERRIDE='File {/path/to/config.dat}' dpkg-reconfigure -fnoninteractive firebird2.5-superclassic

もう一つの方法は、使用することですeditorフロントエンドを、環境変数を設定VISUAL(またはEDITOR、しかしVISUALより優先持ってEDITOR必要な設定とファイルという引数として現在の設定を含むファイルを受け取りプログラム、および上書きすることが設定されている場合)。


6
/var/cache/debconf/config.dat自分で解析する必要はありません。パッケージdebconf-get-selectionsから使用できdebconf-utilsます。例についてはこちらをご覧ください。
ジョセフR.

また、ここにpreseedが適切かどうかもわかりません。実行について話しているのdpkg-reconfigureですが、OPは頻繁に実行するため、OPが自動化することを望んでいます。
ジョセフR.

ヒントをありがとう。スクリプトを期待することにしました。ここで詳細に調査しませんでした。
ピーターブトコビッチ

2
@JosephR。確かに、debconf-get-selectionsここで役立つ可能性があります。ピーターが異なる値でこれを頻繁に行いたい場合、彼はconfig.dat動的に生成する必要があります(単純な形式です)。これはより簡単ですexpectexpect絶望の道です。たとえば、パッケージの新しいバージョンで新しい質問が導入された場合(または、さらに洗練されたスクリプトが必要な場合)に分解されます。
ジル 'SO-悪であるのをやめる'

@JosephRあなたが投稿した事前シードに関するリンクは機能しなくなりました。これを試してください:zacks.eu/debian-preseed
cjohnson318

13

debconf-set-selectionsコマンドを使用して、新しい値をdebconfデータベースに挿入します(/var/cache/debconf/config.dat)。


エリの答えは私には明確ではなかったので、段階的に説明します。

最初に行うことは、パッケージを対話形式でインストールし、(firebirdパッケージ名を変更して)選択した選択を取得することです。

sudo debconf-get-selections | grep ^firebird

または:

grep -C2 firebird /var/cache/debconf/config.dat

次に、次のように、debconfデータベースに回答を事前にシードしますdebconf-set-selections

echo firebird2.5-superclassic shared/firebird/enabled boolean true | sudo debconf-set-selections -v
echo firebird2.5-superclassic shared/firebird/sysdba_password/new_password password foo | sudo debconf-set-selections -v

構文は次のとおりです。

echo foo-owner-package-name foo-template-name value-type value | debconf-set-selections

ttf-mscorefonts-installerパッケージの別の例を次に示します。

echo ttf-mscorefonts-installer msttcorefonts/accepted-mscorefonts-eula select true | sudo debconf-set-selections

注:入力選択は、標準入力またはファイルのどちらでもかまいません。

チェック:man debconf-set-selections詳細については。


別の方法はKickstartを使用することです。


debconf-set-selectionsは、すべての場合に有効になるわけではありません。例:exim。
ジェイセン

1
debconf-set-selectionsは、変更するdebパッケージに組み込まれている構成スクリプトを実行しません。パッケージが要求する選択を設定するのは、パッケージの最初の部分のみです。dpkg-reconfigureは両方の部分を実行します。
フレッド

4

私はこれの解決策をワンライナーに凝縮し​​ようとしてちょうど約1時間あちこち探していて、最終的にそれを見つけました:debconf-set-selections

echo "debconf debconf/frontend select noninteractive" | sudo debconf-set-selections

これにより、debconfはバグではなくデフォルトを使用するようになります。Debianパッケージの設定のデフォルトを設定することもできます。詳細については、マンページ参照してください。


sudo dpkg-reconfigure debconf -f noninteractiveまたはと同じではありませんかexport DEBIAN_FRONTEND=noninteractive
ケノーブ

0

上記のdebconf-get-selections / set-selectionsメソッドを使用して、LDAP設定(ldap-auth-configパッケージ)のスクリプト化された再構成を試みましたが、このパッケージは最初のインストール後にdebconfの設定を無視することがわかりました。debconfを使用してインストール前に事前シードできますが、インストール後、ldap-auth-configは管理するシステム構成ファイルに設定されているものでdebconf設定を上書きすることを好みます。パッケージpam-auth-configの動作は同じです。

この場合、EDITOR / VISUALメカニズムを使用することも困難です。これは、ldap-auth-configがさまざまな質問セットに対して複数回呼び出すためです。expectスクリプトを使用するか、システム構成ファイルを直接変更することで、より簡単に処理できます。そのため、期待に反することを避けるのは必ずしも簡単ではありません!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.