以程序名 linker 为例,你可以替换成你自己的
1、创建目录
my-package
├── control
│ ├── control //控制文件
│ ├── postinst //安装后脚本
│ ├── prerm //卸载前脚本
├── data
└── usr
└── bin
└──linker //这里文件夹名随意,一般是你的程序名
└──//下面放你的程序文件
etc
└── init.d
└──linker //服务文件,名称随意,一般是你的程序名
2、编写control文件内容
Depends 是你的程序依赖那些包,多个包使用逗号+空格间隔
特别注意,control文件必须是LF格式,且文件内容最后必须有一个空行
windows下编辑默认是CRLF格式,可以用vscode什么的修改为LF,也可以在linux下使用sed -i ‘s/\r$//’ control 将control文件修改为LF
Package: linker
Version: 版本
Architecture: all
Maintainer: 你的名字 <邮箱>
Section: utils
Description: linker
Depends: libc, libstdcpp, zlib, bash, libopenssl, libopenssl-legacy, iptables
3、编写postinst文件内容
#!/bin/sh
# 安装后执行的脚本
/etc/init.d/linker enable
/etc/init.d/linker start
echo "linker installed successfully!"
exit 0
4、编写prerm文件内容
#!/bin/sh
# 卸载前执行的脚本
echo "removing linker..."
/etc/init.d/linker stop
/etc/init.d/linker disable
exit 0
5、编写服务文件
就是 data/etc/init.d/linker 这个文件
#!/bin/sh /etc/rc.common
START=99 #服务启动优先级(数字越大,启动越晚)
STOP=10 #服务停止优先级(数字越小,停止越早)
USE_PROCD=1
PROG=/usr/bin/linker/linker #程序,就是创建的那个目录不包含data文件夹
WORKDIR=/usr/bin/linker # 指定工作目录
start_service() {
procd_open_instance
procd_set_param command "$PROG"
procd_set_param respawn # 自动重启
procd_set_param stdout 0 # 重定向标准输出到日志
procd_set_param stderr 1 # 重定向标准错误到日志
procd_set_param cwd "$WORKDIR" # 设置工作目录
procd_close_instance
}
stop_service() {
killall linker
}
restart() {
stop
start
}
status() {
if pgrep -f "$PROG" > /dev/null; then
echo "linker is running."
return 0
else
echo "linker is not running."
return 1
fi
}
6、打包ipk
大概就是将 control目录下的所有文件打一个包,将data目录下的所有文件打一个包,然后创建一个debian-binary文件,内容为2.0,然后将这几个打包成一个ipk就可以了
cd my-package
tar -czf data.tar.gz -C data/ .
tar -czf control.tar.gz -C control/ .
echo "2.0" > debian-binary
tar -czf linker.ipk debian-binary data.tar.gz control.tar.gz