构建deb软件安装包
Linux软件包的组成
文件类型 | 保存目录 |
---|---|
普通程序 | /usr/bin |
root权限程序 | /usr/sbin |
程序配置文件 | /etc |
日志文件 | /var/log |
文档文件 | /usr/share/doc |
Linux软件包
源码包
优点:
-
开源免费
-
自由裁剪功能
-
修改源代码
缺点:
- 安装步骤繁琐
- 编译时间长
- 新手无法解决编译问题
二进制包
优点:
- 简单易用
- 安装速度快
缺点:
- 无法阅读修改源码
- 无法裁剪功能
- 依赖性强
deb包
概念
Debian、Ubuntu、Deepin等Linux发行版的软件安装包。
rpm包
概念
RedHat,Fedora,Centos等Linux发行版的软件安装包。
dpkg工具
概念
底层的包管理工具,主要用于对已下载到本地和已经安装的deb包进行管理
常用命令
安装软件: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包
- 在自己创建的目录mywork下创建一个helloworld目录
mkdir helloworld
- 在helloworld目录下创建./usr/bin目录
mkdir -p usr/bin
- 在bin目录下创建helloworld.sh文件,文件中输出helloworld
#!/bin/bash
echo "hello world!"
- 返回目录mywork,使用构建deb包脚本构建目录,在这里使用野火示例脚本 build.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/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
#$package_dir 参数为构建deb包的目录
#$package_name 参数为构建deb包的名称
-
在目录mywork下执行: sudo ./build.sh helloworld helloworld.deb,之后生成helloworld.deb,如下:
这一步的注意事项:
一、直接从win下复制到虚拟机中的build.sh文件没有执行权限,要先压缩放入再解压,并且要修改文件权限(直接复制文件再修改权限似乎也不能成功);
二、自己在虚拟机下创建的文件只要修改文件权限为可执行文件就行。三、修改权限可能需要重新开一个新线程(也可能是我误操作了)。
① 没有执行权限的情况:
② 成功构建软件包的情况:
-
输入 sudo dpkg -i helloworld.deb 安装deb包,如下显示安装成功
-
输入helloworld.sh成功执行
- 输入sudo dpkg -r helloworld便可以卸载该deb包,不能再执行helloworld.sh命令
apt命令和apt-get命令
- apt是新版的包管理工具
- 解决apt-get命令过于分散的问题
- apt默认属性对用户友好(进度条、提示升级包数)