postinstメンテナンススクリプトは、インストール時にシステム単位のファイルが自動的に起動するのを防ぎます。

postinstメンテナンススクリプトは、インストール時にシステム単位のファイルが自動的に起動するのを防ぎます。

私はシステム単位のファイル、特に*.serviceファイルをインストールするための小さなDebianパッケージを作成しています。

私のパッケージは次のとおりです。

myservice
      | 
      |--debian
            |- comapat
            |- preinst
            |- postinst
            |- rules
            |- myservice.service

パッケージをインストールすると、systemdサービスは自動的に無効になり、起動しません。

インストール後すぐにsystemctl status myservice表示

root@ubuntu-xenial:~# systemctl status myservice
  ● myservice.service - My Service - echos output and says when it started
  Loaded: loaded (/lib/systemd/system/myservice.service; disabled; vendor preset: enabled)
  Active: inactive (dead)

ただし、パッケージをインストールするときpostinstスクリプトなし、systemdサービスは自動的に有効になり、インストール後に開始されます。

root@ubuntu-xenial:~# systemctl status myservice
● myservice.service - MyService - echos output and says when it started
Loaded: loaded (/lib/systemd/system/myservice.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2018-02-09 15:06:36 UTC; 10s ago
Main PID: 5024 (sh)
Tasks: 2
Memory: 172.0K
  CPU: 1ms
CGroup: /system.slice/myservice.service
       ├─5024 /bin/sh -c echo 'myservice.service started' && echo $(date +%s) && sleep infinity
       └─5026 sleep infinity

私のpostinstが「小さくて愚かな」ので、混乱しています。

#!/bin/sh -e
# POSTINST script for myservice
set -e

echo "\033[36m HI I'M A POSTINST SCRIPT `date +"%s"` \033[39m"

postinstがあると、systemdサービスの「自動起動と起動」が無視されるのはなぜですか?

debhelperのどの部分がこれを処理し、何が欠けていますか?

またはpostinstインストール時にサービスを開始して実行するには、管理者スクリプトに何を追加する必要がありますか?


注:私の環境は、virtualboxプロバイダがある小さな放浪箱です。使っていますubuntu-xenial64 失われた箱。環境がこれに影響するかどうかはわかりません。

答え1

debhelper次にプレースホルダを追加する必要がありますpostinst

#DEBHELPER#

だからあなたはpostinst次のようにする必要があります

#!/bin/sh
# POSTINST script for intera
set -e

echo "\033[36m HI I'M A POSTINST SCRIPT `date +"%s"` \033[39m"

#DEBHELPER#

exit 0

含めないと、debhelper自動生成されたpostinstフラグメントは管理者スクリプトに追加されません。スクリプトがまったくない場合はpostinstスクリプト全体が生成されますが、独自のバージョンがある場合はプレースホルダーのみが変更されます。

関連情報