Linux制作deb包的方法详解

 更新时间:2024年12月11日 10:59:42   作者:飘飘燃雪  
为了方便管理一些程序或脚本,可以将这些程序以及脚本都制作在一个deb包中, 本文主要为大家介绍了如何制作一个deb包,有需要的小伙伴可以参考下

为了方便管理一些程序或脚本,可以将这些程序以及脚本都制作在一个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包的资料请关注脚本之家其它相关文章!

相关文章

  • 关于Linux搭建RabbitMQ集群环境图文详解

    关于Linux搭建RabbitMQ集群环境图文详解

    这篇文章主要介绍了关于Linux搭建RabbitMQ集群环境图文详解,RabbitMQ天然支持集群,集群是保证可靠性的一种方式,同时可以通过水平扩展以达到增加消息吞吐量能力的目的,需要的朋友可以参考下
    2023-05-05
  • linux下查看yum/rpm/dpkg某软件是否已安装的方法

    linux下查看yum/rpm/dpkg某软件是否已安装的方法

    这篇文章主要介绍了在linux下查看yum/rpm/dpkg某软件是否已安装的方法,文中给出了详细的示例代码,对大家具有一定的参考价值,需要的朋友们下面来一起看看吧。
    2017-03-03
  • Linux下apache如何限制并发连接和下载速度

    Linux下apache如何限制并发连接和下载速度

    在Linux下限值Apache的并发连接数和下载速度需要用到一款Apache的扩展模块mod_limitipconn,下面我们就来讨论mod_limitipconn的安装使用方法
    2014-11-11
  • Linux下如何对端口流量进行统计

    Linux下如何对端口流量进行统计

    本篇文章主要介绍了Linux下如何对端口流量进行统计,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • linux环境安装node.js开发环境搭建图文教程

    linux环境安装node.js开发环境搭建图文教程

    这篇文章主要介绍了 linux环境安装node.js开发环境搭建图文教程的相关资料,需要的朋友可以参考下
    2016-10-10
  • 如何利用多核CPU来加速你的Linux命令(GNU Parallel)

    如何利用多核CPU来加速你的Linux命令(GNU Parallel)

    这篇文章主要介绍了如何利用多核CPU来加速你的Linux命令(GNU Parallel),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-01-01
  • Linux之CentOS7下如何关闭SELINUX

    Linux之CentOS7下如何关闭SELINUX

    这篇文章主要介绍了Linux之CentOS7下如何关闭SELINUX问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-02-02
  • CentOS7下GitLab跨大版本升级的方法

    CentOS7下GitLab跨大版本升级的方法

    这篇文章主要介绍了CentOS7下GitLab跨大版本升级的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • 详解bash中的脚本调试机制

    详解bash中的脚本调试机制

    这篇文章主要介绍了bash中的脚本调试机制,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • 记一次linux服务器入侵应急响应(小结)

    记一次linux服务器入侵应急响应(小结)

    这篇文章主要介绍了记一次linux服务器入侵应急响应,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-08-08

最新评论