制作 deb 安装包
使用 dpkg 制作 deb 安装包。
介绍
deb 是 ubuntu/debian 的格式,是 debian 发行版的软件包,ubuntu 是基于 debian 发行的所以可以用。
dpkg 是 Debian Package 的简写,是为D ebian 专门开发的套件管理系统,方便软件的安装、更新及移除。所有源自 Debian 的 Linux 发行版都使用dpkg,例如 Ubuntu、Knoppix 等。
包结构
参考下面的目录结构:
jerry@jerry-Standard-PC-Q35-ICH9-2009:~/Code/DeepLink$ tree ./mydeb/
./mydeb/
├── DEBIAN
│ ├── control
│ ├── postinst
│ ├── postrm
│ ├── preinst
│ └── prerm
├── opt
│ └── deeplink
│ ├── deeplink
│ └── deeplink_ui
└── usr
└── share
└── applications
└── deeplink.desktop
6 directories, 8 files
这里除了 DEBIAN
文件夹,其余都是应用程序文件,这里其余部分的目录模拟了安装目录(看起来和安装完成后根目录里面对应内容结构一致),这是因为 deb 安装包安装就是把内容释放到了根目录 /
下。
deeplink
和 deeplink_ui
即需要安装的应用程序,将被安装在 /opt/deeplink/
目录下。
/usr/share/applications/deeplink.desktop
是创建桌面快捷方式需要的文件。
DEBIAN
文件夹中必须有 control
文件,表示安装包基本信息。
还可能有 postinst(postinstallation)、postrm(postremove)、preinst(preinstallation)、prerm(preremove)、copyright (版权)、changlog (修订记录)和 conffiles 等。
preinst
软件安装之前会执行的脚本postinst
软件安装完成后执行的脚本prerm
软件卸载前会执行的脚本postrm
软件卸载后会执行的脚本
这四个脚本非必须,如果有,这四个脚本文件必须要有可执行权限。
control
文件可能会有以下字段:
- Package
:包名
- Version
:版本号
- Description
:对包的描述
- Section
:申明软件的类别,常见的有utils
,net
,mail
,text
,devel
等
- Architecture
:软件包结构,如基于i386
,amd64
,m68k
,sparc
,alpha
,powerpc
等
- Priority
:申明软件对于系统的重要程度,如required
,standard
,optional
,extra
等
- Essential
:申明是否是系统最基本的软件包(选项为yes
或者no
),如果是的话,这就表明该软件是维持系统稳定和正常运行的软件包,不允许任何形式的卸载(除非进行强制性的卸载)
- Installed-Size
:安装的包大小
- Maintainer
:包的制作者,联系方式等
- Depends
:软件所依赖的其他软件包和库文件。如果是依赖多个软件包和库文件,彼此之间采用逗号隔开
- Pre-Depends
:软件安装前必须安装、配置依赖性的软件包和库文件,它常常用于必须的预运行脚本需求
- Recommends
:这个字段表明推荐安装的其他软件包和库文件
- Suggests
:建议安装的其他软件包和库文件
示例
control
文件内容如下:
Package: DeepLink
Version: 1.0.1.2
Section: utils
Priority: optional
Architecture: amd64
Installed-Size: 128000
Maintainer: jerry<jerry@congtu.cloud>
Provides: DEEPCLOUDX
Description: https://www.deeplink.cloud/
注意,很多博客都说 control
文件最末尾必须保留一个空行,否则打包会报错。但是我没有空行,打包也没报错。
preinst
文件内容如下:
#!/bin/sh
echo "prepare to install deeplink"
postinst
文件内容如下:
#!/bin/sh
echo "post install..."
/opt/deeplink/deeplink -i
echo "install deeplink service ok"
/opt/deeplink/deeplink_ui --init
echo "initialize deeplink configuration ok"
echo "successfully installed"
echo "official url of https://www.deeplink.cloud/"
prerm
文件内容如下:
#!/bin/sh
echo "prepare to remove deeplink"
/opt/deeplink/deeplink -t
echo "stop deeplink service ok"
/opt/deeplink/deeplink -u
echo "uninstall deeplink service ok"
/opt/deeplink/deeplink_ui --terminate
echo "terminate deeplink ui process ok"
/opt/deeplink/deeplink_ui --clear_cache
echo "clear deeplink cache ok"
postrm
文件内容如下:
#!/bin/sh
echo "deeplink successfully removed from your computer."
deeplink.desktop
文件内容如下:
[Desktop Entry]
Name=DeepLink
Version=1.0.1.2
Exec=/opt/deeplink/deeplink_ui
Path=/opt/deeplink
Icon=/opt/deeplink/deeplink_ui
Terminal=false
Type=Application
Categories=Network;Utility
StartupNotify=true
dpkg
使用 dpkg
命令将 mydeb/
目录打包生成 deeplink.deb
:
dpkg -b mydeb/ deeplink.deb
除此之外,dpkg
命令还有很多用法:
dpkg -c xxx.deb // 安装前根据 deb 文件查看
dpkg -L debname // 安装后根据包名查看
dpkg -i xxx.deb // 安装 deb 包,如果提示错误,可以加参数 —force-all 强制安装,但不推荐这样做
dpkg -r debname // 移除卸载 deb 包
dpkg -S filepath // 查看某个文件属于哪个 deb 包
dpkg -X xxx.deb dirname // 释放安装内容到 dirname 目录中
dpkg -e xxx.deb // 释放控制信息到当前目录下的 DEBIAN 子目录中