systemdユーザーサービスをインストールするためにDEBファイルを生成し、インストール後にpostinstスクリプトを使用してサービスを有効にしてみました。これは私のpostinstスクリプトです。
#!/bin/bash
set -e
systemctl --user enable myservice.service
DEB() をインストールすると、dpkg --install mypackage.deb
postinst スクリプトが実行され、次のエラーメッセージが返されます。
バスに接続できません。そのファイルやディレクトリはありません。
システムサービスも利用できず、パッケージも公開されないため、どのパッケージング標準も気にしません。これを行うために私ができることはありますか?
これが不可能な場合は、起動するたびにアクティブになるようにinitスクリプトに追加します。しかし、可能であればこれを避けたいと思います。
ベストアンサー1
あなたがやろうとしていることはうまくいきません。インストールを実行しているユーザーにsystemdサービスをインストールすることはあまり役に立ちません。そのユーザーは常にルートだからです。したがって、サービスをすべてのユーザーのシステム全体のサービスとしてインストールする規則に従う必要があります。これを行う標準的な方法は次のとおりです。
最近、ほとんどのパッケージはdebhelperを使用しています。これはプロセスを大幅に簡素化します。次の手順に従って始めてください。よりDebian Wikiのシステムパッケージングガイドより多くの情報を知りたいです。
dh_systemdを有効にする
debhelper compat レベル 10 (Build-Depends
合計部分の確認) を使用すると、dh-systemd が自動的に有効になり、この部分をスキップできます。以前の debhelper 互換性レベルの場合は、次の手順に従って有効にする必要があります。debian/control
debian/compat
dh-systemd (>=1.5)
に追加してください。Build-Depends
debian/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_start
debian/rules
dh_systemd_enable のマニュアルページそしてdh_systemd_startもっと学ぶ。