systemd システムで Debconf エラーが発生しました。

systemd システムで Debconf エラーが発生しました。

debconfインストール中にUbuntu 16.04で構成パッケージを使用中に、次の問題が発生しました。

より正確には、このパッケージはdebconf構成ファイルを保存してからpostinstスクリプトからサービスを開始するために使用されます。さらに、サービスはdebconfモジュールを使用して前の手順で保存した設定をロードします。

ただし、次のエラーによりサービスがsystemd開始されません。

debconf: DbDriver "config": /var/cache/debconf/config.dat is locked by another process: Resource temporarily unavailable

私が知っている限り、このファイルはdpkgまだフロントエンドを使用してアクセスされており、debconfサービスが別のフロントエンドを起動しようとすると競合が発生します(環境変数はDEBIAN_HAS_FRONTENDサービスに渡されません)。DEBIAN_HAS_FRONTENDスクリプトでenv変数を強制的に適用しようとしましたが、他のエラーが発生しました。

dpkgプロセスが終了してdebconf完了したら、デーモンを強制的に起動する必要があると思います。どんなアイデアがありますか?

答え1

それで、ついに問題を見つけて、後で誰かに役立つかどうかを投稿します。

前述のように、postinstスクリプトでサービスを開始しようとしていますが、サービスがいくつかの構成パラメータを取得しようとしていますが、すでに実行中のインスタンスがあるため、debconfigエラーが発生します(すべての構成がファイルにあるにもかかわらず)。 、ファイルではありません)。debconfconfigpostinst

当時の問題は、スクリプトdebconfの実行中にpostinst私が使用していないフロントエンドが有効になっていることでしたdebconf。しかし、ロードされた行に注釈を付けましたconfmodue

# . /usr/share/debconf/confmodule

確かに、dpkg-reconfigure(私も推測していますdpkg。)ファイル(、、および)の "confmodule"文字列と一致するconfmoduleとロードされると見なされます。したがって、confmoduleを効果的にロードしていない間、dpkg-reconfigureはフロントエンドを解放しなかったため、サービスは他のインスタンスを起動できませんでした。解決策は単に行を削除することです。configpostinstprermdebconf

答え2

まず、スタンドアロンプ​​ログラムでdebconfを使用するのは間違っているようです。man debconf-devel他のスクリプトセクションの引用:

他のスタンドアロンプ​​ログラムでもdebconfを使用できます。ここで注目すべき問題は、debconfが意図されておらず、レジストリとして使用できないことです。これは最終的にUnixであり、プログラムはあいまいなdebconfデータベース(とにかくキャッシュだけであり、おそらく飛ぶでしょう)ではなく/ etcのファイルで構成されています。したがって、スタンドアロンプ​​ログラムでdebconfを使用する前に慎重に考えてください。

同じマニュアルページは、前のセクション(POSTINST SCRIPT)の実際の問題を解決するのにも役立ちます。

postinstがデーモンを起動する場合は、debconfに最後に停止するように指示する必要があります。 debconfはpostinstが完了した時点で少し混乱する可能性があるためです。

つまり、db_stopデーモンを起動する前に問題を発行してください(debconf自体を使用しなくても)。

関連情報