Debian パッケージングによる条件付きシステムファイルの有効化

Debian パッケージングによる条件付きシステムファイルの有効化

デップサービスパッケージをインストールします。

組み込みデバイスでは、このパッケージが自動的にサービスを有効にしたいと思います。私たちの開発者ワークステーションでは、開発者は手動で作業を実行したいsystemctl start foo(重いサービスなので、デスクトップ環境で常に実行されている場合はリソースのみを消費します)。

この段階でユーザーに決定を下すように依頼するにはどうすればよいですかapt-get。これが最善の解決策ですか?

私はdh_makeこのパッケージを使用して作成しましたdebhelper

%:
    dh $@ --with=systemd

override_dh_systemd_enable:
    dh_systemd_enable --name=foo foo.service

答え1

あなたはそれを使用することができますシステムデフォルトインストール中にsystemdサービスがデフォルトで有効または無効になっているかどうかに影響します。

/etc/systemd/system-preset/80-foo.presetDebianプリセットはインストール時にデフォルトですべてのサービスを有効にするため、次の行を含むファイルなどのファイルを送信して、開発ワークステーション(デフォルトの動作が本番で望むものと一致する場合)に簡単にプリセットを送信できます。

disable foo.service

Puppet、Chef、Ansibleなどのシステムを使用して開発者ワークステーションを管理する場合は、これらのシステムプリセット構成を提供して、本番マシンではなく開発者ワークステーションにのみポリシーを簡単に適用できます。

.deb パッケージはsystemctl preset事前設定された構成に従うため、このコマンドを使用してサービスを有効にする必要があります。

〜のように@JdeBPそして@ソースジェディdeb-helpers の Debian マクロが既にこれを行っており、デフォルトで使用されているマクロを呼び出すことをdh_systemd_enable指摘しました (パッケージを削除 (ただしクリーンアップしない))、再インストールする場合、小さな注意あり)。プリセットファイルを削除してもサービスは有効になりません。)をご覧ください。deb-systemd-helpersystemctl presetdeb-systemd-helperenableこのコメントは実際に機能しています。:

    # We use 'systemctl preset' on the initial installation only.
    # On upgrade, we manually add the missing symlinks only if the
    # service already has some links installed. Using 'systemctl
    # preset' allows administrators and downstreams to alter the
    # enable policy using systemd-native tools.

事前設定されたシステム機能の詳細については、マニュアルページを参照してください。システムデフォルトそして命令を出すsystemctl presetそれを達成しました。

答え2

インストール中にユーザーにメッセージを表示するには使用する必要がありますdebconf。 Debian ポリシー関連の環境でなくても、ここには多くの利点があります。一貫したエンドユーザー体験を提供し、さまざまなフロントエンドをサポートし、事前シードをサポートします。あらかじめ設定するとは、パッケージを事前設定できることを意味し、この場合、メッセージはまったく表示されません。レベルが異なるということは、特定の状況でのみ表示されるようにプロンプ​​トを設定できることを意味します。その後、デフォルトで(組み込みターゲットの場合)プロンプトなしでパッケージをインストールし、開発者にプロンプ​​トを表示するようにフロントエンドを適切に設定するように指示できます。

ただし、可能であればプロンプトを完全に表示しないのが最善だと思います。これは、エンドユーザーの設定を処理する他の方法があるサービスの場合に特に当てはまります。ユーザー設定を処理すると、メンテナンススクリプトが複雑になります(すでに詳細を処理するパッケージから生成されたスクリプトを参照してください。deb-systemd-helper- すべてコピーする必要があります)、優先処理を最初に設定してください。

開発者がサービスの実行を必要としない場合、パッケージをインストールする前にサービスをブロックしてもサービスはアクティブになりません。

sudo systemctl mask foo

開発者が時々サービスを実行するためにsystemdデバイスを使用する必要がある場合は、パッケージを最初にインストールした後にそれを無効にすることができます。

sudo apt install foo
sudo systemctl disable --now foo

このサービスはデフォルトで有効になっています。

関連情報