用dpkg命令制作deb包方法总结_windows c# 开发deb文件_ermuzhi的博客-程序员秘密

技术标签: deb  脚本  shell  debian  processing  subprocess  

用dpkg命令制作deb包方法总结

如何制作Deb包和相应的软件仓库,其实这个很简单。这里推荐使用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 <>
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(也可以直接使用vi DEBIAN/control编辑保存)
#编辑control
vi DEBIAN/control

#相关内容(注意结尾必须空一行):
Package: soft (程序名称)
Version: 1.0.1 (版本)
Section: utils (程序类别)
Architecture: iphoneos-arm   (程序格式)
Installed-Size: 512   (大小)
Maintainer: your <[email protected]>   (打包人和联系方式)
Description: soft package (程序说明)
                                       (此处必须空一行再结束)
注:此文件也可以先在电脑上编辑(使用文本编辑就可以,完成后去掉.txt),再传到打包目录里。

#在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
=====================================================================
有时候安装自己打包的deb包时报如下错误:
Selecting previously deselected package initrd-deb.
(Reading database ... 71153 files and directories currently installed.)
Unpacking initrd-deb (from initrd-vstools_1.0_amd64.deb) ...
dpkg: error processing initrd-vstools_1.0_amd64.deb (--install):
trying to overwrite `/boot/initrd-vstools.img', which is also in package initrd-deb-2
dpkg-deb: subprocess paste killed by signal (Broken pipe)
Errors were encountered while processing:
initrd-vstools_1.0_amd64.deb
主要意思是说,已经有一个deb已经安装了相同的文件,所以默认退出安装,只要把原来安装的文件给卸载掉,再次进行安装就可以了。

下面为实践内容:

所有的目录以及文件:

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.log

postrm文件内容( 软件卸载后,执行该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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/ermuzhi/article/details/7817801

智能推荐

2. GDAL python教程(1)——用OGR读写矢量数据_ogr.oftstring_Prince_Treasure的博客-程序员秘密

本教程的讲义和源码都是取自Utah State University的openGIS课程相关资料,包括讲义、源码、数据样例,请从此处下载本人只是做点翻译,写写学习体会而已,版权属于原作者。欢迎转载,不过别忘了上面这段话。2.1. 为什么用open source?优点免费,适合个人和小公司 强大的开发工具,找bug更容易 跨平台,windows和linux都能用 ...

visio业务流程图教学_visio业务流程图怎么画_心中之光的博客-程序员秘密

用绘图工具一点点画www.51dongshi.com防采集。visio画流程图的方法:基本流程图基本流程图形状——动态连接线打开visio后,用 Visio 画流程图如下:首先,建立绘图,新建--&gt;选择绘图类型--&gt;基本流程图。添加流程图元素--进程,将图示进程框拖进右侧空白处。通常进程框显示为蓝色,将其改变为白色选择基本流程图形状,选择你喜欢的图形进行搭建,将图形拖到右边即可,,DF...

计算机科学丛书(2014-2018.Q1)_zitounik_GIS-Developer的博客-程序员秘密

ISBN 名称 作者 出版时间 978-7-111-53451-8 数学设计和计算机体系结构(原书第2版) (美) 戴维·莫尼·哈里斯, 莎拉 L. 哈里斯著   978-7-111-44075-8 嵌入式计算系统设计原理 (美) Marilyn Wolf著 1/1/2014 978-7-111-42604-2 计算机网络 ...

GSAA“研究生是怎样炼成的”系列讲座-工学院专场_香港科大商学院内地办事处的博客-程序员秘密

上一期的理学院专场讲座中,院长、教授们和在读研究生们风趣幽默地向大家介绍经验,与同学们热情互动答疑,同学们收获颇丰,讲座圆满落幕。GSAA“研究生是怎样炼成的”系列讲座第二场香港科技大学...

区块链求贤令_raylink666的博客-程序员秘密

一支穿云箭,千军万马来相见!从16年进去区块链的圈子,那时还非常小众,大家还讨论着私链,联盟链的可行性,公链很少人去谈,也是热火朝天的景象,但部分还是炒概念的阶段。直到经历了17年的热潮,币值暴涨,国内外大佬大谈区块链,让区块链被大众所熟知,各大公司也都立刻组建自己的区块链部门,像阿里,腾讯,众安科技布局的就比较早,京东,小米,美团,滴滴,顺丰,360,猎豹等等互联网公司也相继入局。开始抢人大战,...

lxde 的安装和卸载以及注意事项,lubuntu_dielucui7698的博客-程序员秘密

安装:$ sudo apt install lxde$ sudo apt install lxde-common安装完毕后,可能没法关机及logout,可以使用如下安装:$ sudo apt install lxsession-logout如果还是不能关机和logout,则用下面的试试:$ sudo apt install lxde-logou...

随便推点

Ubuntu安装搜狗拼音输入法-sogoupinyin_forester8888的博客-程序员秘密

伴随着Deepin 12.12 beta的发布,搜狗输入法也与我们见面了。在发布前几日Deepiner也通过各种途径向我们展示了搜狗Linux输入法,当然也掉足了胃口。来自官方的截图:当然令很多Ubuntu用户期待的是,搜狗输入法能否在Ubuntu上安装,现在我给大家介绍一个比较简单的方法安装搜狗输入法。1. 下载:  打开该地址:http://packages.l

Ubuntu 20.04 安装Chrome浏览器_这个人懒得名字都没写的博客-程序员秘密

Ubuntu 20.04 安装Chrome浏览器将selenium应用于爬虫并部署到服务器上运行的时候,可能会需要Chrome浏览器,这篇文章正是指导如何在服务器上安装Chrome浏览器。下载Chrome$ wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb安装$ sudo dpkg -i google-chrome-stable_current_amd64.deb报错$ sudo d

Maven命令_lifedayday的博客-程序员秘密

常用命令从某种意义上来说,软件是帮助不懂程序的人来操作计算机的,图形化界面尤其如此。在上个世纪,比尔盖茨之所以成为世界首富,微软之所以IT界的巨鳄,就是因为Windows开图形化操作之先河,并抢先占领了全球市场,笑傲江湖数十年,至今依然宝刀未老。诚然,现在几乎每种软件都有图形化界面,用鼠标点击几下就可以完成操作。Maven也不例外,在各类IDE中都有成熟的插件来简化操作。但是作为开发人...

android面试2021,Android学习路线指南,大厂内部资料_web大美女的博客-程序员秘密

有人问,为什么想要投递大厂,总结一下大概有这么几个出发点:1.追求高薪资相对小厂而言,大厂的薪资水平会更高不少。具体数字区间就不细说了,但是大厂整体会大方很多,只要你能够通过面试,30%甚至更高的涨薪都有机会拿到,更何况,大厂的年终奖也不会被“无良”老板随意克扣。2.追求稳定去年整体大环境不行,很多公司裁员,尤其是不太盈利的中小厂,比如某团、某滴。而对于大厂而言,裁员的概率会小很多,毕竟裁员带来的收益远比不上因此带来的负面效应和股价下跌。3.追求职业发展近两年很多发展快的企业以 double.

lol人物模型提取(八)_weixin_30856965的博客-程序员秘密

  今天顺风终于把包裹送到了北航新主楼自提柜,怀着激动喜悦的心情,我小心翼翼地将其取回。  到了晚上,是时候解开佐伊的封印了!  开了个小口,发现里面包得还挺严实的。  去掉了纸盒,里面还有一层气泡纸,卖家想得还挺周全的。  去掉了气泡纸,里面还有一层发泡布,激动人心的时刻马上就要到来了!  拆开发泡布,我略感失望:天呐,这吊坠怎么脱落了?!T_T  向淘宝客服咨询,他们说我...

bootstrap treeview 下拉树_HiGaga~的博客-程序员秘密

说明:数据一次性加载,适合数据量不是很大的场景引用文件:bootstrap treeview及其css,推荐下载地址:http://blog.csdn.net/qq812858143/article/details/68945157type="text/javascript" src="path%>/bootstrap/treeView/bootstrap-treeview.j

推荐文章

热门文章

相关标签