非対話型の方法でdpkg-reconfigureに入力値をフィードする
On 2月 18, 2021 by admindpkg-reconfigureを介してubuntuパッケージを構成し、すべての値を非対話型で提供したいインタラクティブモード(スクリプト内)。
実際、私の場合はfirebirdの構成です( http://www.firebirdsql.org/manual/ubusetup.html )、コマンドを使用する場合:
sudo dpkg-reconfigure firebird2.5-superclassic -freadline
2つの値を求められます。答えは「Y」と「newpwd」です。
出力例は次のようになります:
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
次のようなbashスクリプトを介してhere strings
を試しました。
sudo dpkg-reconfigure firebird2.5-superclassic -f readline << EOF Y newpwd EOF
しかし、これは何らかの理由で機能せず、値を指定するように求められました。
フィード方法に関するアイデアスクリプトに必要な値は?
回答
。以前は実際に使用したことがないため、ここにコードを追加することはできませんが、一般的な使用例です。
更新:
[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の問題の可能性には注意しますが、"家庭で使用する場合"これは安全のようです。
回答
Debianパッケージは debconf を使用して、インストール時の設定を収集します。 Debconfは、ユーザーに値の入力を求める複数のフロントエンドをサポートしています。 dpkg-reconfigure
の-f
オプションは、使用するdebconfフロントエンドを選択します。
readline
フロントエンドはインタラクティブに使用できるように設計されています。自動スクリプトでは使用しないでください。
デフォルト値で問題ない場合は、noninteractive
フロントエンドを使用してください。
If異なる値を指定する場合は、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
よりも優先されます)現在の設定を含むファイルを引数として受け取り、そのファイルを必要な設定で上書きするプログラムに。
コメント
- いいえ
/var/cache/debconf/config.dat
を自分で解析する必要があります。debconf-utils
パッケージのdebconf-get-selections
を使用できます。たとえば、これを参照してください。 - また、'プレシードがここにぴったりです。 '
dpkg-reconfigure
の実行について話しているのですが、' OPが望んでいると思います'頻繁に行うため自動化してください。 - ヒントをありがとうございます。期待スクリプトに行くことにしました。 'ここでは詳しく調査しませんでした。
- @JosephR。確かに、
debconf-get-selections
はここで役立つ可能性があります。 Peterがこれを頻繁に異なる値で実行したい場合は、config.dat
を動的に生成する必要があります('は単純な形式です)。これはexpect
よりも簡単です。expect
は絶望の道です。たとえば、パッケージの新しいバージョンで新しい質問が導入された場合(または、はるかに高度なスクリプトが必要な場合)、'が故障します。 - @投稿したプレシードに関するリンクが機能しなくなったJosephR: zacks.eu/debian-preseed
回答
debconf-set-selections
コマンドを使用して、debconfデータベースに新しい値を挿入します(/var/cache/debconf/config.dat
)。
Eliの回答は私にはわかりませんでしたので、段階的に説明します。ステップ。
最初に行うことは、パッケージをインタラクティブにインストールし、選択した選択肢を取得することです(firebird
をパッケージ名に変更します):
sudo debconf-get-selections | grep ^firebird
または:
grep -C2 firebird /var/cache/debconf/config.dat
次に、例:
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
を確認してください。
別の方法は次のとおりです。 キックスタートを使用するには。
コメント
- debconf-set-selectionsは' tはすべての場合に有効になるようです。例:exim。
- debconf-set-selectionsは、変更するdebパッケージに組み込まれている構成スクリプトを実行しません。 ing。パッケージが要求している選択を設定するだけで、パッケージの最初の部分だけです。 dpkg-reconfigureは両方の部分を実行します。
- これがこの質問の正解です。
回答
私は”このソリューションを1つのライナーに凝縮しようとして、約1時間突っ込んでいましたが、ついにそれを見つけました: debconf-set -selections
echo "debconf debconf/frontend select noninteractive" | sudo debconf-set-selections
これにより、debconfはデフォルトを使用し、バグは発生しません。Debianパッケージの構成のデフォルトを設定することもできます。 詳細については、マンページを参照してください。
コメント
- Isn '
sudo dpkg-reconfigure debconf -f noninteractive
またはexport DEBIAN_FRONTEND=noninteractive
と同じですか?
回答
debconf-get-selections / set-を使用してLDAP設定(ldap-auth-configパッケージ)のスクリプトによる再構成を試みました上記のselectionsメソッドは、このパッケージがdebcoの設定を無視していることを確認するためだけのものです初期インストール後のnf。 debconfを使用して、インストール前にプレシードすることができますが、インストール後、ldap-auth-configは、管理するシステム構成ファイルに設定されているものでdebconf設定を上書きすることを好みます。パッケージpam-auth-configの動作は同じです。
この場合、ldap-auth-configがさまざまな質問のセットに対して複数回呼び出すため、EDITOR / VISUALメカニズムを使用することも困難です。これは、expectスクリプトを使用するか、システム構成ファイルを直接変更することで、より簡単に処理できます。そのため、期待に反することを避けるのは必ずしも簡単ではありません!
回答
import pexpect import os os.environ["DEBIAN_FRONTEND"]= "readline" child = pexpect.spawnu("dpkg -i arangodb3_3.6.2-1_amd64.deb") child.expect("user:") child.sendline("defg") child.expect("user:") child.sendline("defg") child.expect("Automatically upgrade database files") child.sendline("yes") child.expect("Database storage engine") child.sendline("1") child.expect("Backup database files before upgrading") child.sendline("no") child.expect(pexpect.EOF)
コメントを残す