bash 스크립트와 systemd 서비스에서 데비안 패키지를 빌드하는 방법은 무엇입니까?
.deb
성공적으로 설치되면 시작/중지를 통해 제어 스크립트에서 systemd 서비스를 사용할 수 있습니다. 웹 검색에는 단일 파일(python, shell, ruby...script)을 .deb
.
답변1
쉘 스크립트 및 관련 서비스를 설치하는 최소 소스 패키지입니다.
트리는 다음과 같습니다.
minpackage
├── debian
│ ├── changelog
│ ├── control
│ ├── install
│ ├── minpackage.service
│ ├── rules
│ └── source
│ └── format
└── script
script
이는 권한이 755인 스크립트입니다 debian/minpackage.service
.
debian/changelog
처럼 보일 필요가
minpackage (1.0) unstable; urgency=medium
* Initial release.
-- GAD3R <[email protected]> Tue, 05 Jan 2021 21:08:35 +0100
debian/control
포함해야합니다
Source: minpackage
Section: admin
Priority: optional
Maintainer: GAD3R <[email protected]>
Build-Depends: debhelper-compat (= 13)
Standards-Version: 4.5.1
Rules-Requires-Root: no
Package: minpackage
Architecture: all
Depends: ${misc:Depends}
Description: My super package
debian/rules
포함해야합니다
#!/usr/bin/make -f
%:
dh $@
( Tab이전에 진짜가 있었어요 dh
).
나머지 파일은 다음과 같이 생성할 수 있습니다.
mkdir -p debian/source
echo "3.0 (native)" > debian/source/format
echo script usr/bin > debian/install
패키지를 빌드하려면 다음을 실행하세요.
dpkg-buildpackage -uc -us
minpackage
디렉토리 에 .
이는 minpackage_1.0_all.deb
상위 디렉터리에 생성됩니다. 또한 시스템 관리자 스크립트를 처리하므로 패키지가 설치될 때 서비스가 자동으로 활성화되고 데비안에서 사용할 수 있는 다양한 재정의 메커니즘을 지원합니다.
답변2
다음과 같은 트리 구조를 배포 myservice.service
하고 싶다고 가정해 보겠습니다 .myscript
$ tree
.
├── DEBIAN
│ ├── control
│ ├── postinst
│ ├── postrm
│ └── prerm
├── lib
│ └── systemd
│ └── system
│ └── myservice.service
└── usr
└── bin
└── myscript
./DEBIAN/
포함해야합니다제어 파일메타데이터 및 배포를 위한 유지관리자 스크립트입니다.
이것은 기본 제어 파일입니다.
Package: mypackage
Version: 0.1
Architecture: all
Maintainer: GAD3R <[email protected]>
Description: This is my package!
dh_installsystemd(1)일반적으로 서비스를 관리하기 위해 관리자 스크립트에 기본 코드를 추가하는 데 사용됩니다. 당신의 모습은 다음과 같습니다:
우편:
#!/bin/sh
set -e
# Automatically added by dh_installsystemd/13.2
if [ "$1" = "configure" ] || [ "$1" = "abort-upgrade" ] || [ "$1" = "abort-deconfigure" ] || [ "$1" = "abort-remove" ] ; then
# This will only remove masks created by d-s-h on package removal.
deb-systemd-helper unmask 'myservice.service' >/dev/null || true
# was-enabled defaults to true, so new installations run enable.
if deb-systemd-helper --quiet was-enabled 'myservice.service'; then
# Enables the unit on first installation, creates new
# symlinks on upgrades if the unit file has changed.
deb-systemd-helper enable 'myservice.service' >/dev/null || true
else
# Update the statefile to add new symlinks (if any), which need to be
# cleaned up on purge. Also remove old symlinks.
deb-systemd-helper update-state 'myservice.service' >/dev/null || true
fi
fi
# End automatically added section
# Automatically added by dh_installsystemd/13.2
if [ "$1" = "configure" ] || [ "$1" = "abort-upgrade" ] || [ "$1" = "abort-deconfigure" ] || [ "$1" = "abort-remove" ] ; then
if [ -d /run/systemd/system ]; then
systemctl --system daemon-reload >/dev/null || true
if [ -n "$2" ]; then
_dh_action=restart
else
_dh_action=start
fi
deb-systemd-invoke $_dh_action 'myservice.service' >/dev/null || true
fi
fi
# End automatically added section
이후 단계:
#!/bin/sh
set -e
# Automatically added by dh_installsystemd/13.2
if [ -d /run/systemd/system ]; then
systemctl --system daemon-reload >/dev/null || true
fi
# End automatically added section
# Automatically added by dh_installsystemd/13.2
if [ "$1" = "remove" ]; then
if [ -x "/usr/bin/deb-systemd-helper" ]; then
deb-systemd-helper mask 'myservice.service' >/dev/null || true
fi
fi
if [ "$1" = "purge" ]; then
if [ -x "/usr/bin/deb-systemd-helper" ]; then
deb-systemd-helper purge 'myservice.service' >/dev/null || true
deb-systemd-helper unmask 'myservice.service' >/dev/null || true
fi
fi
# End automatically added section
재판 전:
#!/bin/sh
set -e
# Automatically added by dh_installsystemd/13.2
if [ -d /run/systemd/system ] && [ "$1" = remove ]; then
deb-systemd-invoke stop 'myservice.service' >/dev/null || true
fi
# End automatically added section
그런 다음 함께 정리하십시오.
dpkg-deb -b . mypackage.deb