Linux构建一个deb软件安装包

系列文章推荐

Linux文件系统目录结构
Linux必备基础

前言

本文主要来自正点原子、野火Linux教程及本人理解,若有侵权请及时联系本人删除。如果本篇对您有帮助的话希望能一键三连,万分感谢。

正文

Linux软件包

软件包管理工具

在这里插入图片描述

了解Linux软件包的组成

在这里插入图片描述

Linux软件包分类

源码包
优点:开源免费;自由裁剪功能;修改源代码
缺点:安装步骤繁琐;编译时间长;新手无法解决编译问题

二进制包
优点:简单易用;安装速度快
缺点:无法阅读修改源码;无法裁剪功能;依赖性强

二进制包分类

deb包:Debian、Ubuntu、Deepin等Linux发行版的软件安装包。
rpm包:RedHat,Fedora,Centos等Linux发行版的软件安装包。

dpkg工具

底层的包管理工具,主要用于对已下载到本地和已经安装的deb包进行管理。dpkg用于所有源自Debian的linux发行版,如Ubuntu、Knoppix等,用于离线安装软件。

常用命令
安装软件:dpkg -i xxxx.deb
查看安装目录:dpkg -L xxxx
显示版本:dpkg -l xxxx
详细信息:dpkg -s xxxx
罗列内容:dpkg -c xxxx.deb
卸载软件:dpkg -r xxxx
deb包文件结构分析
  • DEBIAN目录:
    • control文件:(必须需要)
      • Package:软件名称
      • Version:版本
      • Section:软件类别
      • Priority:对系统的重要性
      • Architecture:支持的硬件平台
      • Maintainer:软件包的维护者
      • Description:对软件的描述
    • preinst文件 : 安装之前执行的shell脚本(可选)
    • postinst文件 : 安装之后执行的shell脚本(可选)
    • prerm文件:卸载之前执行的shell脚本(可选)
    • postrm文件: 卸载之后执行的shell脚本(可选)
    • copyright文件:版权声明(可选)
    • changlog文件: 修改记录(可选)
  • 软件具体安装目录:
    • 视实际需求

构建一个helloworld的deb包

演示:dpkg -b
其他:
dpkg-buildpackage
checkinstall

build_deb.sh构建脚本

通过该脚本帮我们自动创建deb包的文件结构

野火build_deb.sh构建脚本

#!/bin/bash

version="0.1.2"
author="Emdebfire"
package_name="$2"
package_dir="$1"

mkdir -p ./$package_dir/DEBIAN/

cat <<EOF > ./$package_dir/DEBIAN/changelog
AUTHOR:$author
VERSION:$version 
DATE:$(date -R)
EOF

cat <<EOF > ./$package_dir/DEBIAN/copyright
******************************************************************
  * @attention
  *
  * 实验平台:野火  i.MX6ULL开发板 
  * 公司    :http://www.embedfire.com
  * 论坛    :http://www.firebbs.cn
  * 淘宝    :https://fire-stm32.taobao.com
  *
* * ******************************************************************
EOF

cat <<EOF > ./$package_dir/DEBIAN/control
Source:embedfire
Package:${package_name%.*}
Version:$version
Section: debug
Priority: optional
Architecture: amd64
Maintainer:$author 
Description: Embedfire Tools
EOF

cat <<EOF > ./$package_dir/DEBIAN/control
Source:embedfire
Package:${package_name%.*}
Version:$version
Section: debug
Priority: optional
Architecture: amd64
Maintainer:$author 
Description: Embedfire Tools
EOF

cat <<EOF > ./$package_dir/DEBIAN/postinst
#!/bin/sh
echo "******************************************************************"
echo "welcome to use $package_name!"
echo "******************************************************************"
EOF

sudo chmod 775 ./$package_dir/DEBIAN/postinst

dpkg -b $package_dir $package_name

试验过程

首先在build_deb.sh脚本同级目录下创建helloworld文件夹并进入
在这里插入图片描述
在helloworld文件夹下创建usr/bin文件夹,接着在usr/bin文件夹下面创建helloworld.sh脚本
在这里插入图片描述
修改helloworld.sh脚本执行权限,到这里软件包的安装目录构建好了,之所以在helloworld目录下构建usr/bin,是因为我希望helloworld安装包一旦被安装到系统中后,helloworld.sh脚本就能被放到系统的/usr/bin目录下面,也就是说deb包的路径在安装后相当于系统的根目录/usr/bin
在这里插入图片描述
回到build_deb.sh脚本同级目录test/下,修改build_deb.sh脚本执行权限
在这里插入图片描述
接着就可以使用build_deb.sh脚本来将helloworld文件夹打包成一个deb包,但是运行后报错,如下,试了一下别的脚本可以运行
在这里插入图片描述
出现问题场景
执行xxx.sh脚本时,报错 "xxx.sh /bin/bash^M: 坏的解释器:没有那个文件或目录”
问题产生原因
因为xxx.sh脚本文件是从windows拷贝过来的,所以多了\r,如果脚本文件是在Windows 下编辑过,在Windows下每一行结尾是\n\r,而Linux下则是\n,所以才会有多出来的\r。所以执行命令将\r换成空白去掉即可。从Windows复制代码过来要相当注意
解决办法
执行如下所示命令即可:

sed -i 's/\r$//' xxx.sh

在这里插入图片描述
最后使用dpkg命令安装这个deb包就可以了

关于dpkg的常用命令。可以参考Linux必备基础

sudo dpkg -i helloworld1.deb

在这里插入图片描述
这样helloworld.sh就成为了一个外部命令
在这里插入图片描述

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一只嵌入式爱好者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值