五、构建deb软件安装包
构建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/bashversion="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)
EOFcat <<EOF> ./$package_dir/DEBIAN/copyright
******************************************************************* @attention** 实验平台:野火 i.MX6ULL开发板 * 公司 :http://www.embedfire.com* 论坛 :http://www.firebbs.cn* 淘宝 :https://fire-stm32.taobao.com*
* * ******************************************************************
EOFcat <<EOF> ./$package_dir/DEBIAN/control
Source:embedfire
Package:${package_name%.*}
Version:$version
Section: debug
Priority: optional
Architecture: amd64
Maintainer:$author
Description: Embedfire Tools
EOFcat <<EOF> ./$package_dir/DEBIAN/postinst
#!/bin/sh
echo "******************************************************************"
echo "welcome to use $package_name!"
echo "******************************************************************"
EOFsudo chmod 775 ./$package_dir/DEBIAN/postinstdpkg -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默认属性对用户友好(进度条、提示升级包数)
五、构建deb软件安装包相关推荐
- cydia软件路径_在Cydia中提取Deb格式安装包文件
大家都知道越狱后可以安装deb格式的文件包了,并且我们经常看到一些大神在论坛分享一些deb格式的文件或插件,他们是如何提取出来的呢?本文就给大家介绍一下在Cydia中提取Deb格式安装包文件教程. C ...
- ubuntu下载软件安装包
apt-get -d download xxx ubuntu下载软件安装包命令.仅仅下载deb格式的安装包,不安装. xxx是待下载的安装包. 转载于:https://www.cnblogs.com/ ...
- 专业的软件安装包可以这样做!
C/S客户端开发完成,需要将程序交付给用户,直接压缩发给用户是可以的(只是有点不专业),如果能有一个比较好看的安装界面,那档次就不一样了. 本文介绍怎么使用Adanced Installer 17.9 ...
- Pocket PC/Smartphone软件安装包之制作DIY
Pocket PC/Smartphone软件安装包之制作DIY<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:of ...
- 资料汇总更新|软件安装包、书籍、源码、技术文档、手册……
大侠好,欢迎来到FPGA技术江湖,江湖偌大,相见即是缘分.大侠可以关注FPGA技术江湖,在"闯荡江湖"."行侠仗义"栏里获取其他感兴趣的资源,或者一起煮酒言欢. ...
- 程序的安装——软件安装包的制作、软件仓库的使用
读书笔记 -- <嵌入式C语言自我修养> 软件安装 linux 安装包的制作 编译 软件安装包路径 使用dpkg命令来制作安装包 及 安装包的卸载 软件仓库 更新源 查看具体需要更 ...
- 超详细的软件安装包制作打包流程(C/S客户端)
C/S客户端开发完成,需要将程序交付给用户,直接压缩发给用户是可以的(只是有点不专业),如果能有一个比较好看的安装界面,那档次就不一样了. 本文介绍怎么使用Adanced Installer 17.9 ...
- Studio One Pro5软件安装包下载及安装教程
Studio One Pro5软件安装包下载及安装教程 PreSonus Studio One是PreSonus出品的一款功能强大的音乐创作软件 Studio One Pro5下载地址: 百度网盘 百 ...
- Advanced Installer软件安装包制作
从创建项目开始,一步一步按流程往下走 我是选择制作Release版本的安装包,Debug版本也可以 最好全选 没有许可协议,直接下一步 添加图标 构建 确认dll文件,如果有少了,记得要手动添加 有出 ...
- haiyang457 原创软件安装包代表作集合电子书
http://pan.baidu.com/s/1c1CsMy8 haiyang457原创软件安装包集合电子书 转载于:https://blog.51cto.com/haiyang457/1873461
最新文章
- 无监督学习之RBM和AutoEncoder
- 解决AttributeError: XXX instance has no attribute ‘xxx‘的问题(新手必备)
- 自定义mysql8.0安装路径
- Spring的自动装配方法
- OpenCV小部件的姿势Pose of a widget
- postman模拟post请求的四种请求体
- SQL学习之使用视图
- 关于本地共享文件夹会话连接时间
- 6大设计原则之开闭原则
- 13个美国大学生最常用的社交网络
- AVL树(Java实现)
- 「职业生涯规划」真的有必要做吗?
- 本地语音控制模块 | 带语音识别的智能家居方案
- 牛腩新闻发布系统错误总结
- scratch积木编程-[微进阶]纯画笔时钟[单角色]
- swot分析模板_学生个人生涯规划报告模板
- Chromium源码中 media::VideoFrame 的3个属性(coded_size, visible_rect, natual_size)的理解
- 更简单的方法实现el-calendar日历组件中点击上个月、今天、下个月按钮时的点击事件
- python字符串加双引号是什么意思_python字符串表示什么?
- python超级大脑游戏代码_Super Brain超级大脑
热门文章
- 微信公众开发 表情开发php,微信公众帐号开发教程第9篇-QQ表情的发送与接收_PHP教程...
- 一篇文章带您秒懂地理标志商标注册
- Akamai 宣布收购 IaaS 提供商 Linode
- 因为高考是最相对公平的一次竞争和选拔
- Android中onTouch方法的执行过程以及和onClick执行发生冲突的解决办法
- 推荐几个选择时间.日期的免费插件 js
- 数学竞赛辅导陈启浩pdf_【优秀论文】第九届MathorCup高校数学建模挑战赛(B题)...
- 全国大学生英语竞赛总结
- Vim快捷键汇总 - Jeffery Lee的专栏 - CSDNBlog
- ReiBoot(iOS系统修复工具)v6.9.5.0官方版