当前位置: 代码网 > 服务器>服务器>Linux > Linux制作deb包的方法详解

Linux制作deb包的方法详解

2024年12月12日 Linux 我要评论
为了方便管理一些程序或脚本,可以将这些程序以及脚本都制作在一个deb包中, 本章节将介绍如何制作一个deb包, 制作deb的方式很多,如使用dpkg-deb方式、使用checkinstall方式、使用

为了方便管理一些程序或脚本,可以将这些程序以及脚本都制作在一个deb包中, 本章节将介绍如何制作一个deb包, 制作deb的方式很多,如使用dpkg-deb方式、使用checkinstall方式、使用dh_make方式及修改原有的deb包, 本章将介绍如何从零制作一个自己的deb包,以及修改原有的deb包。

什么是deb包

deb包是在linux系统下的一种安装包,有时我们在网上下载的linux软件安装包也会以deb包的形式出现, 由于它是基于tar包的,所以同样会记录着文件的权限信息(读、写、可执行)、所有者、用户组等。

我们可以使用命令:dpkg -l 来查看系统以及安装了哪些deb包

deb包的组成结构

安装的内容,这部分类似linux的根目录,表示需要将软件安装到linux系统上的文件目录。

控制信息(放在debian目录下),通常debian目录下有如下几个文件。

changelog: 文件记录了deb包的作者、版本以及最后一次更新日期等信息;

control: 文件记录了包名、版本号、架构、维护者及描述等信息;

copyright: 文件记录了一些版权信息;

preinst安装之前调用

# !/bin/bash
echo '准备安装<你的文件名>'
#执行安装之前的准备命令,可以省略
你的命令

postinst安装完成调用

# !/bin/bash
#更新桌面图标数据库
update-desktop-database /usr/share/applications || true
#获取当前的用户名
username=`getent passwd \`who\` | head -n 1 | cut -d : -f 1`
#判断桌面文件夹是否存在
if [ -d "/home/${username}/desktop" ]; then
echo 'desktop exist'
#将你的桌面文件复制到桌面
cp 你的.desktop文件 /home/${username}/desktop
else
echo '桌面文件夹存在'
#中文系统自动复制到中文桌面
cp 你的.desktop文件 /home/${username}/桌面
fi

postrm:卸载完成调用

# !/bin/bash
#可以省略
rm -rf 你创建的软链接文件
echo '已经卸载<你的文件名>'

prerm:卸载之前调用

# !/bin/bash
echo '准备卸载<你的文件名>'
#执行卸载之前的准备命令,可以省略
你的命令

其中control、postinst、postrm为必要文件。

从零开始创建自己的deb包

sudo apt-get install build-essential debhelper make autoconf automake dpkg-dev fakeroot pbuilder gnupg -y

my-package/
├── debian
│   ├── control
│   ├── preinst (可选)
│   ├──postinst (可选)
│   ├── prerm (可选)
│   └── postrm (可选)
└── usr
└── share
└── my-package
└── my-script.sh

在hello_deb目录下创建debian及opt/hello_deb目录,debian目录下包含控制信息文件, 而在opt/hello_deb目录下创建hello_deb.sh文件则表示我们需要将hello_deb.sh文件安装到 linux系统的opt/hello_deb目录下。

然后分别给予postinst、postrm、hello_deb.sh文件可执行权限,postinst和postrm的权限必须>=0555且<=0775。

hello_deb/debian/control

package: test-deb
version: 1.0.0
architecture: arm64
maintainer: your name <your.email@example.com>
description: a sample package
 this is a sample package to demonstrate how to create a deb package.

control文件的末尾需添加一个空行,否则会报错“缺失结尾的换行符”

若以后想升级这个deb包,可以修改该包的版本号version,值得注意的是architecture, 前面我们也有讲到,就是该deb包所支持的处理器架构,因为最终要将该deb包安装到arm64处理器的板卡上, 所以我们应该在architecture中填入arm64属性,大家可根据自己的需求做相应修改即可, 如果不知道你的处理器架可以通过dpkg -l命令来查看已安装的deb包持支的架构, 或者输入lscpu查看处理器信息,aarch64就是arm64架构。若想支持所有架构,可以填入all属性, 如果architecture属性与当前处理器架构属性不匹配的话,deb包将无法成功安装, 且control的属性信息必须以字母或者数字开头,不然可能导致打包出错。

hello_deb/debian/postinst

#!/bin/bash
echo "deb installing"

当安装了该deb包以后,系统会默认执行postinst脚本, 通常我们利用该脚本来搭建一些为软件执行的环境(如创建目录、修改权限等), 值得注意的是该文件需具有可执行权限。 这里写的比较简单,判断第一个参数,仅供参考。

最后我们来看下真正的程序主体,为了简单起见,此处以一个简单的脚本为例。

hello_deb/opt/hello_deb/hello_deb.sh

#! /bin/bash

echo hello deb!
echo this is a test script!!!

脚本仅仅是打印两句信息,用户可自行设置需要执行的程序。

构建打包

万事俱备,只欠东风,当备齐了制作deb包的基本原材料之后我们便可以开始制作属于自己的deb包了, 进入hello_deb目录下,也就是debian及home文件夹所在的目录,接着输入如下命令来构建软件包。

sudo dpkg-deb -b ../hello_deb ../hello_deb_1.0.0_arm64.deb

其中dpkg-deb是构建deb包命令,-b参数表示要构建一个deb包, …/hello_deb参数表示要构建deb包原材料的路径, …/hello_deb_1.0.0_arm64.deb参数表示将该deb包构建在当前目录的上级目录中, 一般我们构建deb包的名字都会遵循这么一个原则, 其命名方式为:软件名称+软件版本号+该软件所支持的处理器架构, 如软件名为hello_deb,版本号为1.0.0,所支持的处理器架构为arm64。

打包成功后会输出如下信息,并可在上级目录查看到deb安装包

#命令
dpkg -c  hello_deb_1.0.0_arm64.deb

#打印信息
drwxrwxr-x jiawen/jiawen     0 2022-10-12 09:27 ./
drwxrwxr-x jiawen/jiawen     0 2022-10-12 09:28 ./opt/
drwxrwxr-x jiawen/jiawen     0 2022-10-12 09:28 ./opt/hello_deb/
-rwxrwxrwx jiawen/jiawen    59 2022-10-12 09:41 ./opt/hello_deb/hello_deb.sh

也可使用如下命令查看deb包信息:

#命令
dpkg --info  hello_deb_1.0.0_arm64.deb

#打印信息
new debian package, version 2.0.
size 976 bytes: control archive=496 bytes.
    190 字节,    9 行      control
    100 字节,    4 行   *  postinst             #!/bin/bash
    138 字节,    7 行   *  postrm               #!/bin/bash
package: hello-deb
version: 1.0.0
section: free
priority: optional
essential: no
architecture: arm64
maintainer: embedfire <embedfire@embedfire.com>
provides: hell_deb
description: deb test

输入“sudo dpkg -i hello_deb_1.0.0_arm64.deb”命令即可安装, 其中-i 参数表示安装软件,即install

解包

新建一个update_deb目录,使用 dpkg -x 命令将deb包解压到update_deb目录中。

$ ls
desktop    downloads  pictures  templates  hello_deb_1.0.0_arm64.deb
documents  music      public    videos
$ mkdir update_deb
$ sudo dpkg -x  hello_deb_1.0.0_arm64.deb  update_deb/
./
./opt/
./opt/hello_deb/
./opt/hello_deb/hello_deb.sh
$

进入update_deb目录下可看到并没debian相关目录,在update_deb目录下使用 dpkg -e 解压出控制文件相关信息。

~/update_deb$ ls
opt
~/update_deb$ sudo dpkg -e ../hello_deb_1.0.0_arm64.deb
~/update_deb$ ls -al
total 16
drwxrwxr-x  4 1001 1001 4096 oct 12 13:37 .
drwxr-xr-x 15 cat  cat  4096 oct 12 13:35 ..
drwxr-xr-x  2 root root 4096 oct 12 09:28 debian
drwxrwxr-x  3 1001 1001 4096 oct 12 09:28 opt

~/update_deb$ tree
.
|-- debian
|   |-- control
|   |-- postinst
|   `-- postrm
`-- opt
    `-- hello_deb
        `-- hello_deb.sh

3 directories, 4 files

此时就可以对程序主体进行修改了

以上就是linux制作deb包的方法详解的详细内容,更多关于linux制作deb包的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com