這邊以 simple http server 做為說明。下載下來後,檔案結構大致上可分為 service 與 debian package 打包兩類。
root@ab3cd464d509:/home/simplehttpserver# tree -L 1
.
|-- Makefile
|-- README.md
|-- debian
|-- simplehttpserver.py
`-- simplehttpserver.service
先安裝所需的 package ,接著在 simplehttpserver
目錄內執行 debuild 指令,就可以產生所需要的 debian package
root@ab3cd464d509:/home/# apt install debhelper devscriptsroot@ab3cd464d509:/home/simplehttpserver# debuild -uc -usroot@ab3cd464d509:/home/simplehttpserver# tree -L 2 ../
../
|-- simplehttpserver
| |-- Makefile
| |-- README.md
| |-- debian
| |-- simplehttpserver.py
| `-- simplehttpserver.service
|-- simplehttpserver_1.0.0.dsc
|-- simplehttpserver_1.0.0.tar.gz
|-- simplehttpserver_1.0.0_all.deb
|-- simplehttpserver_1.0.0_amd64.build
|-- simplehttpserver_1.0.0_amd64.buildinfo
`-- simplehttpserver_1.0.0_amd64.changes
1. Service
root@ab3cd464d509:/home/simplehttpserver# tree -L 1
.
|-- Makefile
|-- README.md
|-- debian
|-- simplehttpserver.py
`-- simplehttpserver.service
service 相關的檔案為
- simplehttpserver.py
為一個簡單的 http server。
- simplehttpserver.service
透過 systemd 去控制這個 http server 的 service file。
- Makefile
debian 打包時候會呼叫此 makefile 去進行編譯、安裝等等的動作。舉例來說,在打包 deb 的時候。debian/rules 會執行 dh_auto_install [1]。實際就是呼叫 make install 並挾帶 DESTDIR 變數。
* dh_auto_install usually executes the following if a Makefile exists with the install target (line folded for readability).
make install \
DESTDIR=/path/to/package_version-revision/debian/package
因此在 Makfile 就要使用 DESTDIR 作為安裝檔案的前綴路徑。
BIN_DIR := ${DESTDIR}/usr/bininstall:
mkdir -p ${BIN_DIR}
install -m 644 *.py ${BIN_DIR}/
由於要使用 debhelper 來幫助處理 service file。這邊直接安裝於 ./debian 目錄即可 [2][3]
install -m 644 simplehttpserver.service ./debian/
2. Debian 部分
root@ab3cd464d509:/home/simplehttpserver# tree debian/
debian/
|-- changelog
|-- compat
|-- control
|-- copyright
|-- postinst
|-- postrm
|-- preinst
`-- rules
這邊描述打包 debian 所需要的檔案
- debian/chagenlog[4]
描述 package 的版號、修改等資訊
simplehttpserver (1.0.0) unstable; urgency=medium* Releae 1.0.0
Thsi is an example for packing debian package-- Yi-Jyun Lin <abc@test.com> Mon, 1 Mar 2021 12:00:00 +0800
- debian/compat [5]
compat 檔案定義了 debhelper 的相容級別
10
- debian/control [6]
描述 source package 與 binary package 的資訊
Source: simplehttpserver
Maintainer: Yi-Jyun Lin <abc@test.com>
Section: utils
Priority: standard
Build-Depends: debhelper (>= 9)
Standards-Version: 1.0.0Package: simplehttpserver
Architecture: all
Section: utils
Priority: standard
Depends: ${shlibs:Depends}
Recommends:
Conflicts:
Description: This is sample for packing debian package
- debian/Copyright [7]
package 發布的許可證
- debina/rules [8]
簡單說就一個 makefile,定義了許多 recipe 來編譯、打包 package。若是想修改預設的 recipe,加上 override_xxxx 即可。以 dh_auto_install 來說就是 override_dh_auto_install。
#!/usr/bin/make -f
#export DH_VERBOSE = 1%:
dh $@
- preinst / postinst / postrm
deb package 安裝於系統時候,所會執行的 hook scripts。這邊若沒有建立相關的 script。debhelper 會自動產生。然而若是有自己的 script 。但是想使用 debhelper 所幫忙產生的 script 。便需在 script 加上 #DEBHELPER#
。這邊 debhelper 所產生的 script 才會被加進來。
# debian/postinst
#!/bin/bash#DEBHELPER#
這邊加上去的用意是為了把 debhelper 產生的 systemd 相關 script 給引用進來。