システムユーザーサービスを有効にするDEB postinstスクリプトを作成するには?

システムユーザーサービスを有効にするDEB postinstスクリプトを作成するには?

systemdユーザーサービスをインストールするためにDEBファイルを生成し、インストール後にpostinstスクリプトを使用してサービスを有効にしてみました。これは私のpostinstスクリプトです。

#!/bin/bash

set -e
systemctl --user enable myservice.service

DEB() をインストールすると、dpkg --install mypackage.debpostinst スクリプトが実行され、次のエラーメッセージが返されます。

バスに接続できません。そのファイルやディレクトリはありません。

システムサービスも利用できず、パッケージも公開されないため、どのパッケージング標準も気にしません。これを行うために私ができることはありますか?

これが不可能な場合は、起動するたびにアクティブになるようにinitスクリプトに追加します。しかし、可能であればこれを避けたいと思います。

ベストアンサー1

あなたがやろうとしていることはうまくいきません。インストールを実行しているユーザーにsystemdサービスをインストールすることはあまり役に立ちません。そのユーザーは常にルートだからです。したがって、サービスをすべてのユーザーのシステム全体のサービスとしてインストールする規則に従う必要があります。これを行う標準的な方法は次のとおりです。


最近、ほとんどのパッケージはdebhelperを使用しています。これはプロセスを大幅に簡素化します。次の手順に従って始めてください。よりDebian Wikiのシステムパッケージングガイドより多くの情報を知りたいです。

dh_systemdを有効にする

debhelper compat レベル 10 (Build-Depends合計部分の確認) を使用すると、dh-systemd が自動的に有効になり、この部分をスキップできます。以前の debhelper 互換性レベルの場合は、次の手順に従って有効にする必要があります。debian/controldebian/compat

  • dh-systemd (>=1.5)に追加してください。Build-Dependsdebian/control
  • --with systemdに追加してください。dh $@debian/rules

dh_systemdの使用

debian/インストールできるように、システムデバイスファイルをここに挿入してください。 Debhelperはパッケージのインストール中に自動的に検出して有効にします。

postinst注:とスクリプトpostrmに何も追加する必要はありません。 debhelperは自動的にこれらのタスクを処理します。また、手動の方法はsystemctl実行可能ファイルに依存しているため、ユーザーがパッケージをインストールするときにsystemdがインストールされているシステムでのみ機能することに注意してください。 debhelper メソッドは、systemd がインストールされていない場合でも systemd サービスを有効にします。ユーザーが後で systemd に切り替えると、サービスはすでに有効になっています。 debhelper アプローチは、パッケージが以前の Sys-V スタイル初期化スクリプトと systemd 単位ファイルで提供されている場合でもうまく機能します。

あらかじめご利用ください

特別な要件がある場合(複数のユニットファイルをインストールしますが、それらの一部のみを有効にするなど)のターゲットをオーバーライドし、追加のパラメータをdh_systemd_enable指定できます。よりdh_systemd_startdebian/rulesdh_systemd_enable のマニュアルページそしてdh_systemd_startもっと学ぶ。

おすすめ記事