1.认识deb包

deb是Unix系统(其实主要是Linux)下的安装包,基于 tar 包,因此本身会记录文
件的权限(读/写/可执行)以及所有者/用户组。
由于 Unix 类系统对权限、所有者、组的严格要求,而 deb 格式安装包又经常会涉
及到系统比较底层的操作,所以权限等的设置尤其重要

2.使用deb包

  • 查看deb包含有哪些文件(不安装)
dpkg -c xxx.deb // 安装前根据deb文件查看
dpkg -L debname // 安装后根据包名查看
  • 安装deb包
dpkg -i xxx.deb

注意,如果提示错误,可以加参数—force-all强制安装,但不推荐这样做

  • 移除deb包
dpkg -r debname
  • 查看某个文件属于哪个deb包
dpkg -S filepath
  • 释放安装内容到dirname目录中
dpkg -X xxx.deb dirname
  • 释放控制信息到当前目录下的DEBIAN子目录中
dpkg -e xxx.deb

3.deb包的组成结构

deb包本身有三部分组成:数据包,包含实际安装的程序数据,文件名为 data.tar.XXX;data.tar.gz包含的是实际安装的程序数据,而在安装过程中,该包里的数据会被直接解压到根目录(即 / ),因此在打包之前需要根据文件所在位置设置好相应的文件/目录树。安装信息及控制脚本包, 包含deb的安装说明,标识,脚本等,文件名为 control.tar.gz;control.tar.gz则包含了一个 deb 安装的时候所需要的控制信息.最后一个是deb文件的一些二进制数据,包括文件头等信息,一般看不到,在某些软件中打开可以看到。

control.tar.gz

4.制作deb包

4.1 最基础的方式dpkg-deb

首先了解一下deb包的文件结构:
deb 软件包里面的结构:它具有DEBIAN和软件具体安装目录(如etc, usr,
opt, tmp等)。在DEBIAN目录中起码具有control文件,其次还可能具有
postinst(postinstallation)、 postrm(postremove)、
preinst(preinstallation)、prerm(preremove)、copyright (版
权)、changlog (修订记录)和conffiles等。
control: 这个文件主要描述软件包的名称(Package),版本(Version)以
及描述(Description)等,是deb包必须具备的描述性文件,以便于软件的安装
管理和索引。同时为了能将软件包进行充分的管理,可能还具有以下字段:
Section: 这个字段申明软件的类别,常见的有`utils’, `net’, `mail’,
`text’, `x11′ 等;Priority: 这个字段申明软件对于系统的重要程度,如
`required’, `standard’, `optional’, `extra’ 等;
Essential: 这个字段申明是否是系统最基本的软件包(选项为yes/no),如果
是的话,这就表明该软件是维持系统稳定和正常运行的软件包,不允许任何形式的
卸载(除非进行强制性的卸载)Architecture:申明软件包结构,如基于`i386′
, ‘amd64’,`m68k’, `sparc’, `alpha’, `powerpc’ 等;
Source: 软件包的源代码名称;
Depends: 软件所依赖的其他软件包和库文件。如果是依赖多个软件包和库文件,
彼此之间采用逗号隔开;
Pre-Depends: 软件安装前必须安装、配置依赖性的软件包和库文件,它常常用
于必须的预运行脚本需求;
Recommends: 这个字段表明推荐的安装的其他软件包和库文件;
Suggests: 建议安装的其他软件包和库文件。
对于control,这里有一个完整的例子:
Package: bioinfoserv-arb
Version: 2007_14_08
Section: BioInfoServ
Priority: optional
Depends: bioinfoserv-base-directories (>= 1.0-1), xviewg
(>= 3.2p1.4), xfig (>= 1:3), libstdc++2.10-glibc2.2
Suggests: fig2ps
Architecture: i386
Installed-Size: 26104
Maintainer: Mingwei Liu <lmingwei@gmail.com>
Provides: bioinfoserv-arb
Description: The ARB software is a graphically oriented
package comprising various tools for sequence database
handling and data analysis.
If you want to print your graphs you probably need to
install the suggested fig2ps package.preinst: 这个文件是软件安
装前所要进行的工作,工作执行会依据其中脚本进行;
postinst这个文件包含了软件在进行正常目录文件拷贝到系统后,所需要执行的配置工作。
prerm :软件卸载前需要执行的脚本
postrm: 软件卸载后需要执行的脚本现在来看看如何修订一个已有的deb包软件
debian制作DEB包(在root权限下),打包位置随意。
#建立要打包软件文件夹,如
mkdir Cydia
cd   Cydia#依据程序的安装路径建立文件夹,并将相应程序添加到文件夹。如
mkdir Applications
mkdir var/mobile/Documents (游戏类需要这个目录,其他也有可能需要)
mkdir *** (要依据程序要求来添加)#建立DEBIAN文件夹
mkdir DEBIAN#在DEBIAN目录下创建一个control文件,并加入相关内容。
touch DEBIAN/control(也可以直接使用vim DEBIAN/control编辑保存)
#编辑control
vim DEBIAN/control#相关内容(注意结尾必须空一行):
Package: soft (程序名称)
Version: 1.0.1 (版本)
Section: utils (程序类别)
Architecture: iphoneos-arm   (程序格式)
Installed-Size: 512   (大小)
Maintainer: your    (打包人和联系方式)
Description: soft package (程序说明)(此处必须空一行再结束)#在DEBIAN里还可以根据需要设置脚本文件
preinst
在Deb包文件解包之前,将会运行该脚本。许多“preinst”脚本的任务是停止作用于待升级软件包的服务,直到软件包安装或升级完成。
postinst
该脚本的主要任务是完成安装包时的配置工作。许多“postinst”脚本负责执行有关命令为新安装或升级的软件重启服务。
prerm
该脚本负责停止与软件包相关联的daemon服务。它在删除软件包关联文件之前执行。
postrm
该脚本负责修改软件包链接或文件关联,或删除由它创建的文件。#postinst 如:
#!/bin/sh
if [ "$1" = "configure" ]; then
/Applications/MobileLog.app/MobileLog -install
/bin/launchctl load -wF /System/Library/LaunchDaemons/com.iXtension.MobileLogDaemon.plist
fi#prerm 如:
#!/bin/sh
if [[ $1 == remove ]]; then
/Applications/MobileLog.app/MobileLog -uninstall
/bin/launchctl unload -wF /System/Library/LaunchDaemons/com.iXtension.MobileLogDaemon.plist
fi#如果DEBIAN目录中含有postinst 、prerm等执行文件
chmod -R 755 DEBIAN#退出打包软件文件夹,生成DEB
dpkg-deb --build Cydia
下面为实践内容:
所有的目录以及文件:
mydeb|----DEBIAN|-------control|-------postinst|-------postrm|----boot|----- initrd-vstools.img在任意目录下创建如上所示的目录以及文件
# mkdir   -p /root/mydeb   # 在该目录下存放生成deb包的文件以及目录
# mkdir -p /root/mydeb/DEBIAN           #目录名必须大写
# mkdir -p /root/mydeb/boot    # 将文件安装到/boot目录下
# touch /root/mydeb/DEBIAN/control    # 必须要有该文件
# touch /root/mydeb/DEBIAN/postinst # 软件安装完后,执行该Shell脚本
# touch /root/mydeb/DEBIAN/postrm  #软件卸载后,执行该Shell脚本
# touch /root/mydeb/boot/initrd-vstools.img    # 所谓的“软件”程序,这里就只是一个空文件control文件内容:
Package: my-deb   (软件名称,中间不能有空格)
Version: 1                  (软件版本)
Section: utils            (软件类别)
Priority: optional        (软件对于系统的重要程度)
Architecture: amd64   (软件所支持的平台架构)
Maintainer: xxxxxx <> (打包人和联系方式)
Description: my first deb (对软件所的描述)postinst文件内容( 软件安装完后,执行该Shell脚本,一般用来配置软件执行
环境,必须以“#!/bin/sh”为首行,然后给该脚本赋予可执行权限:chmod +x postinst):
#!/bin/sh
echo "my deb" > /root/mydeb.logpostrm文件内容( 软件卸载后,执行该Shell脚本,一般作为清理收尾工作,必
须以“#!/bin/sh”为首行,然后给该脚本赋予可执行权限:chmod +x postrm):
#!/bin/sh
rm -rf /root/mydeb.log给mydeb目录打包:
# dpkg -b   mydeb   mydeb-1.deb
# 第一个参数为将要打包的目录名,
# 第二个参数为生成包的名称。安装deb包:
# dpkg -i   mydeb-1.deb
# 将initrd-vstools.img复制到/boot目录下后,执行postinst,
# postinst脚本在/root目录下生成一个含有"my deb"字符的mydeb.log文件卸载deb包:
# dpkg -r   my-deb
# 这里要卸载的包名为control文件Package字段所定义的 my-deb 。
# 将/boot目录下initrd-vstools.img删除后,执行posrm,
# postrm脚本将/root目录下的mydeb.log文件删除查看deb包是否安装:
# dpkg -s   my-deb
# 这里要卸载的包名为control文件Package字段所定义的 my-deb查看deb包文件内容:
# dpkg   -c   mydeb-1.deb查看当前目录某个deb包的信息:
# dpkg --info mydeb-1.deb解压deb包中所要安装的文件
# dpkg -x   mydeb-1.deb   mydeb-1
# 第一个参数为所要解压的deb包,这里为 mydeb-1.deb
# 第二个参数为将deb包解压到指定的目录,这里为 mydeb-1解压deb包中DEBIAN目录下的文件(至少包含control文件)
# dpkg -e   mydeb-1.deb   mydeb-1/DEBIAN
# 第一个参数为所要解压的deb包,这里为 mydeb-1.deb
# 第二个参数为将deb包解压到指定的目录,这里为 mydeb-1/DEBIAN

Ubuntu下制作deb包的方法详解相关推荐

  1. Ubuntu16.04下制作deb包的方法详解

    CSDN GitHub Ubuntu下制作deb包的方法详解 AderXCoding/system/tools/build_deb 本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可 ...

  2. Ubuntu下安装deb包命令

    Ubuntu下安装deb包命令 原文地址:http://www.xitongzhijia.net/xtjc/20150206/37464.html 1.下载需要安装的deb包,输入以下命令安装: su ...

  3. Ubuntu下安装deb包的命令总结

    Ubuntu下安装deb包的命令总结 原文链接:https://blog.csdn.net/cui_shuang_xi/article/details/90904929 在Ubuntu下安装deb包需 ...

  4. 【Android 应用开发】Ubuntu 下 Android Studio 开发工具使用详解 (旧版本 | 仅作参考)

    . 基本上可以导入项目开始使用了 ... . 作者 : 万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/21035637 ...

  5. linux oracle 用户创建,LINUX下Oracle数据库用户创建方法详解

    本文实例分析了LINUX下Oracle数据库用户创建方法.分享给大家供大家参考,具体如下: 1)登录linux,以oracle用户登录(如果是root用户登录的,登录后用 su - oracle命令切 ...

  6. 下拉多选框 微信小程序_微信小程序下拉框组件使用方法详解

    本文实例为大家分享了微信小程序下拉框组件的使用方法,供大家参考,具体内容如下 适用场景 1.省市三级联动 2.出生日期选择 3.性别选择 4.一般性的下拉选择等 一.省市三级联动使用 注意mode = ...

  7. kill -9 进程号杀不死可以用下面的杀掉 Linux下强制杀死进程的方法详解

    常规篇: 首先,用ps查看进程,方法如下: $ ps -ef -- smx 1822 1 0 11:38 ? 00:00:49 gnome-terminal smx 1823 1822 0 11:38 ...

  8. Ubuntu下安装deb包和rpm包

    欢迎关注博主的公众号:happyGirl的异想世界.有更多干货还有技术讨论群哦~ deb包 可以双击选择安装,也可以用命令安装: 1.转到安装包所在目录 cd 目录名/... 2.用dpkg命令运行安 ...

  9. deb包格式实例详解

    本文简介及包格式部分内容节选自: deb_百度百科 一.简介 DEB是Debian软件包格式的文件扩展名,跟Debian的命名一样,DEB也是因Debra Murdock而得名,她是Debian创始人 ...

  10. Ubuntu下安装DEB包时出现错误的解救方法

    在Ubuntu下安装flashplayer的浏览器插件,采用dpkg -i的方法来安装,可能是因为文件依赖有问题,没有安装成功.出现如下错误: E: The package adobe-flashpl ...

最新文章

  1. Left,Right,Outer和Inner Joins有什么区别?
  2. VS2005 实用快捷键,迅速提高代码编写效率!
  3. 一口气,米哈游连告B站7次
  4. 分享 | 来看看阿里、华为、字节的PM是怎么工作的......
  5. NYOJ 358 取石子(五)
  6. Community Server系列之四:Ajax在CS2.0中的应用1
  7. 【ArcGIS遇上Python】窗体版Python批量处理地理数据--栅格裁剪
  8. 物联网思维导图_物联网将如何改变我们的思维方式
  9. 微信快速开发框架(二) -- 快速开发微信公众平台框架---简介
  10. 爱奇艺取消剧集超前点播
  11. 轻量应用服务器腾讯云,腾讯云轻量应用服务器 ECS云服务器使用对比
  12. 计算该年该月该日天数 一年中有 12 个月,而每个月的天数是不一样的。其中大月 31 天,分别为 1,3,5,7,8,10,12 月,小月 30 天,分别 为 4,6,9,11 月。
  13. 一回生,二回熟,三回巧
  14. 视频驱动V4L2子系统驱动架构-框架
  15. 懒汉式单例模式的多线程问题
  16. 未明学院:Tableau安装详细教程,带你攻克第一个学习难关!
  17. 匹兹堡大学申请条件计算机科学,匹兹堡大学计算机科学硕士专业入学要求及费用...
  18. 云通讯的下一个时代,需要的不只是AI
  19. 怎么运行python外星人入侵_python编程:从入门到实践 外星人入侵项目:武装飞船 代码运行不显示飞船...
  20. 如何把ppt转换成word文档

热门文章

  1. 【高数】高数第七章节——微分方程概念一阶微分方程高阶微分方程
  2. 干货!量子技术入门、进阶、行业专家观点、最新资讯!1000篇好文帮你揭开量子技术神秘面纱!...
  3. PTA:7-46 新浪微博热门话题 (30 分)
  4. 史上最全!20/21届春招/秋招 实习/校招 JAVA面试全攻略!复习回顾这一篇就够了!
  5. Springboot配置suffix指定mvc视图的后缀
  6. js数组对象重复的数据添加标识
  7. 股票实时l2数据接口多久刷新一次?
  8. 《如何有效阅读一本书》:读再多书,不如先学会如何读书
  9. 15000cd是多少流明_将lm换算为cd·sr (流明换算为cd·sr)
  10. STM32学习——直接存储器访问(DMA)