Debian

postinst 維護者腳本阻止 systemd 單元文件在安裝時自動啟動

  • December 3, 2019

我正在創建一個小型 Debian 包來安裝 systemd 單元文件,特別是*.service文件。

我的包裹看起來像:

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 提供程序的小型 vagrant box。我正在使用ubuntu-xenial64 Vagrant box。不確定這種環境是否會影響這一點。

您需要將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片段添加到您的維護者腳本中。當您根本沒有 apostinst時,它只會生成整個腳本;但如果您有自己的版本,它只會更改佔位符。

引用自:https://unix.stackexchange.com/questions/423069