将Shell脚本打包为DEB安装包的完整教程

将Shell脚本打包为DEB安装包的完整教程原文链接 链接 在企业运维 国产化适配或内网部署场景中 经常有脚本需要部署到多个终端 例如 拷贝脚本到指定目录设置执行权限修改系统配置或写入日志启用 systemd 服务注册菜单或创建快捷方式如果每次都靠 sh install

大家好,欢迎来到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 包中,安装即完成上述部署!

将Shell脚本打包为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
将Shell脚本打包为DEB安装包的完整教程

三、创建工作目录

pdsyw@pdsyw1024:~/Desktop$ mkdir -p myapp/DEBIAN pdsyw@pdsyw1024:~/Desktop$ mkdir -p myapp/usr/local/bin pdsyw@pdsyw1024:~/Desktop$ mkdir -p myapp/etc/myapp
将Shell脚本打包为DEB安装包的完整教程

四、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 工具脚本
将Shell脚本打包为DEB安装包的完整教程

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 
将Shell脚本打包为DEB安装包的完整教程

六、卸载清理逻辑(可选)

你还可以定义:

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
将Shell脚本打包为DEB安装包的完整教程

七、编辑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
将Shell脚本打包为DEB安装包的完整教程

八、编辑config.ini

pdsyw@pdsyw1024:~/Desktop$ cp config.ini myapp/etc/myapp/ pdsyw@pdsyw1024:~/Desktop$ cat myapp/etc/myapp/config.ini pdsyw=pdsyw1024
将Shell脚本打包为DEB安装包的完整教程

九、一键打包构建

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
将Shell脚本打包为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
将Shell脚本打包为DEB安装包的完整教程

pdsyw@pdsyw1024:~/Desktop$ sudo dpkg -P myapp pdsyw@pdsyw1024:~/Desktop$ myapp bash: myapp:未找到命令 pdsyw@pdsyw1024:~/Desktop$ ls -ltr /etc/myapp ls: 无法访问'/etc/myapp': 没有那个文件或目录
将Shell脚本打包为DEB安装包的完整教程

十一、进阶建议(可选)

功能

方法

启用 systemd 服务

在 postinst 中运行 systemctl enable

启用桌面快捷方式

安装 .desktop 文件到 /usr/share/applications

设置文件权限/所有权

使用 postinst 中的 chmod 和 chown

防止重复软链接或配置覆盖

判断文件是否存在,避免覆盖

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/186337.html

(0)
上一篇 2025-08-22 10:20
下一篇 2025-08-22 10:26

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信