大家好,欢迎来到IT知识分享网。
在企业运维、国产化适配或内网部署场景中,经常有脚本需要部署到多个终端,例如:
拷贝脚本到指定目录
设置执行权限
修改系统配置或写入日志
启用 systemd 服务
注册菜单或创建快捷方式
如果每次都靠 sh install.sh 执行部署脚本,不仅易错、不可管理,还不支持版本控制或卸载清理。更专业的方式:将这些操作封装进 .deb 安装包,用户只需 dpkg -i 即可完成完整部署流程!
一、目标:让脚本操作“自动化安装”而不是“单独执行”
举例:你原来的 install.sh 做了如下事:
pdsyw@pdsyw1024:~/Desktop$ vim install.sh pdsyw@pdsyw1024:~/Desktop$ cat install.sh #!/bin/bash cp myapp.sh /usr/local/bin/myapp chmod +x /usr/local/bin/myapp mkdir -p /etc/myapp cp config.ini /etc/myapp/ echo "Installed successfully."
现在的目标是:将这些步骤融入到 .deb 包中,安装即完成上述部署!

二、目录结构设计(推荐标准)
原 install.sh 操作 |
替代方法 |
cp myapp.sh /usr/… |
包内直接包含目标路径文件 |
chmod +x |
写入 postinst |
mkdir -p + cp |
包含完整 etc 结构或在 postinst 中处理 |
软链接、输出提示 |
postinst 中实现 |
卸载时清理文件 |
用 prerm 或 postrm |
pdsyw@pdsyw1024:~/Desktop$ tree myapp myapp ├── DEBIAN │ ├── control │ ├── postinst │ └── prerm ├── etc │ └── myapp │ └── config.ini └── usr └── local └── bin └── myapp.sh 6 directories, 5 files

三、创建工作目录
pdsyw@pdsyw1024:~/Desktop$ mkdir -p myapp/DEBIAN pdsyw@pdsyw1024:~/Desktop$ mkdir -p myapp/usr/local/bin pdsyw@pdsyw1024:~/Desktop$ mkdir -p myapp/etc/myapp

四、control 文件详解
DEBIAN/control 是 .deb 的元信息中心,示例如下:
pdsyw@pdsyw1024:~/Desktop$ vim myapp/DEBIAN/control pdsyw@pdsyw1024:~/Desktop$ cat myapp/DEBIAN/control Package: myapp Version: 1.0.0 Section: utils Priority: optional Architecture: all Maintainer: 运维工具团队 <> Depends: bash Description: MyApp 工具脚本

MyApp 是一个自动化工具,安装后可在终端使用 myapp 命令直接运行。
关键字段解释:
字段 |
含义 |
Package |
包名,卸载时使用 |
Version |
版本号 |
Architecture |
all 表示无架构依赖(纯脚本) |
Depends |
安装依赖,例如 bash、coreutils |
Description |
第一行简述,第二行开始需缩进一个空格 |
五、postinst:脚本操作迁移入口
路径:DEBIAN/postinst,记得赋予执行权限 chmod +x postinst
这是 .deb 安装完成后自动执行的脚本,可将 install.sh 中的行为搬到这里:
pdsyw@pdsyw1024:~/Desktop$ vim myapp/DEBIAN/postinst pdsyw@pdsyw1024:~/Desktop$ cat myapp/DEBIAN/postinst #!/bin/bash # 设置执行权限 chmod +x /usr/local/bin/myapp.sh # 创建命令别名(软链接) ln -sf /usr/local/bin/myapp.sh /usr/local/bin/myapp # 创建默认配置文件(如果未存在) if [ ! -f /etc/myapp/config.ini ]; then cp /etc/myapp/config.ini.default /etc/myapp/config.ini fi # 输出提示 echo "MyApp 安装完成,可通过 myapp 命令运行。" pdsyw@pdsyw1024:~/Desktop$ chmod +x myapp/DEBIAN/postinst

六、卸载清理逻辑(可选)
你还可以定义:
prerm:卸载前执行(适合停止服务)
postrm:卸载后执行(适合删除残留文件)
示例 prerm:
pdsyw@pdsyw1024:~/Desktop$ vim myapp/DEBIAN/prerm pdsyw@pdsyw1024:~/Desktop$ cat myapp/DEBIAN/prerm #!/bin/bash # 删除命令软链接 rm -f /usr/local/bin/myapp pdsyw@pdsyw1024:~/Desktop$ chmod +x myapp/DEBIAN/prerm

七、编辑myapp.sh
pdsyw@pdsyw1024:~/Desktop$ cp myapp.sh myapp/usr/local/bin/ pdsyw@pdsyw1024:~/Desktop$ cat myapp/usr/local/bin/myapp.sh #!/bin/bash echo hello

八、编辑config.ini
pdsyw@pdsyw1024:~/Desktop$ cp config.ini myapp/etc/myapp/ pdsyw@pdsyw1024:~/Desktop$ cat myapp/etc/myapp/config.ini pdsyw=pdsyw1024

九、一键打包构建
pdsyw@pdsyw1024:~/Desktop$ dpkg-deb -b myapp myapp_1.0.0_all.deb dpkg-deb: 正在 'myapp_1.0.0_all.deb' 中构建软件包 'myapp'。 pdsyw@pdsyw1024:~/Desktop$ ls -ltr myapp_1.0.0_all.deb -rw-r--r-- 1 pdsyw pdsyw 1176 7月 8 16:44 myapp_1.0.0_all.deb

十、测试安装卸载流程
pdsyw@pdsyw1024:~/Desktop$ sudo dpkg -i myapp_1.0.0_all.deb pdsyw@pdsyw1024:~/Desktop$ myapp hello pdsyw@pdsyw1024:~/Desktop$ cat /etc/myapp/config.ini pdsyw=pdsyw1024

pdsyw@pdsyw1024:~/Desktop$ sudo dpkg -P myapp pdsyw@pdsyw1024:~/Desktop$ myapp bash: myapp:未找到命令 pdsyw@pdsyw1024:~/Desktop$ ls -ltr /etc/myapp ls: 无法访问'/etc/myapp': 没有那个文件或目录

十一、进阶建议(可选)
功能 |
方法 |
启用 systemd 服务 |
在 postinst 中运行 systemctl enable |
启用桌面快捷方式 |
安装 .desktop 文件到 /usr/share/applications |
设置文件权限/所有权 |
使用 postinst 中的 chmod 和 chown |
防止重复软链接或配置覆盖 |
判断文件是否存在,避免覆盖 |
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/186337.html