admin 管理员组文章数量: 887021
2024年2月6日发(作者:dockerfile重命名文件)
释放软件包方法1、ar-t查看deb包存档格式文件-x释放存档文件Debian包的ar存档格式由三个文件组成:Debian-binary:存档格式的版本Control文件:deb包的DEBIAN目录控制信息,这些脚本在软件包处理的不同的阶段被dpkg调用Data文件:deb包的数据信息,存档文件,执行文件等后面两个文件的压缩格式各种各样。这边不讨论。方法2、Dpkg-x解压程序文件-X解压程序文件(输出的标准输出)-e解压控制文件
软件包元信息Debian软件包不仅仅只是一些待安装的文件的存档,它是一个更大的结构的一部分,它描述与其它Debian软件包的关系(依赖、冲突、建议)。它还提供脚本供软件包的生命周期的不同阶段(安装、删除、升级)使用。这些供包管理工具使用的数据不是被打包的软件的一部分,但它们存在于软件包里,被称作“元信息”(关于其它信息的信息)。1、control文件Apt-cache工具show出的gcc的信息,这个推测是control文件中的内容下面这个是cat出的sogoupinyin_1.2.0.0042_软件包的control信息。
语法:field:value如果是多行value,需要空一个空格字段分析:1)、源码包中有control文件【debian/control】•Source(mandatory)•Maintainer(mandatory)•Uploaders•Section(recommended)•Priority(recommended)•Build-Dependsetal•Standards-Version(recommended)•Homepage•Vcs-Browser,Vcs-Git,etal.2)、二进制包中有control文件【DEBIAN/control】•Package(mandatory)•Source•Version(mandatory)•Section(recommended)•Priority(recommended)•Architecture(mandatory)
•Essential•Depends•Installed-Size•Maintainer(mandatory)•Description(mandatory)•Homepage•Built-Using3)、(强制的)源码包的名字e(强制的)二进制包的名字Packagenames(bothsourceandbinary,see‘Package’onthenextpage)mustconsistonlyoflowercaseletters(a-z),digits(0-9),plus(+)andminus(-)signs,andperiods(.).Theymustbeiner(mandatory)维护者维护者的名字在前面,后面用“<>”写上电子邮箱地址。ers维护者可选的字段,如果Maintainer只写了一个团队或者是一个团队的公共邮箱,那么这一字段可以写维护者(人)的名字和邮箱,语法和Maintainer字段一样。d-By维护者对这个版本的软件包修改过的维护者。格式同Maintainer字段。n节/部分这个字段指出软件包被维护者所分属的应用领域。目前,这个字段可以有下面这些关键字:Atpresent,theyare:admin,cli-mono,comm,database,debug,devel,doc,editors,education,electronics,embedded,fonts,games,gnome,gnu-r,gnustep,graphics,hamradio,haskell,httpd,interpreters,introspection,java,kde,kernel,libdevel,libs,lisp,localization,mail,math,metapackages,misc,net,news,ocaml,oldlibs,otherosfs,perl,php,python,ruby,science,shells,sound,tasks,tex,text,utils,vcs,video,web,x11,xfce,ties优先级这个字段标识软件包的优先级别,是维护者指定的优先级,在Debian系统中表示软件包的一种等级划分。在debian/control文件中,这个字段的的值应该和.change文件中的值一致。在目前的体系中,优先级分为五个等级:Required:这个优先级的软件包对于系统来说是必须的(dpkg功能是依赖这些软件包的)。移除required等级的软件包可能造成系统的破坏、无法运行,而且你还不能用dpkg返回刚刚的操作,所以除非你知道自己在做什么。Important:这个优先级的软件包是一些系统日常必备的东西,如果系统不具备这些软件,系统运行会非常不爽,让人无法接受,但这个优先级的软件不能太大,如VIM等。所以说是小的、必要的一些工具。Standard:这个优先级是一些缺省安装的软件包,这些软件包足够小,不一定只是工作在命令行下的,它不能包含一些大的软件。Optional:(在定义中,非required即为optional,但在这里不是),这个优先
级的很多软件你想安装但是你也不是特别的强烈需要这些软件。这个级别软件很多,想X-window系统、TeX等应用。Optional包不允许互相之间有冲突。Extra:不是required、important、standard、optional优先级的包都是这个优先级,这些包可能互相冲突(包括其他优先级),要安装的话除非你知道这些包是干什么用的。ecture架构取决于(依赖)上下文和control文件,该字段包含下面的四种格式:1、一个独特的单词(os-arch)指出适用的机器架构,os常常省略2、用通配符标识机器架构,“any”表示匹配所有的架构且常用3、“all”标识独立于机器架构的包4、“source”标识一个源代码包在终端使用“dpkg-architecture-L”命令查看os-arch有哪些值,看到有349个值注:在源码包的debian/control文件中,该字段可以包含“all”、“any”、或是os-arch,他们之间空格间隔。如果是出现“all”或者“any”,该值必须是全部部分,即只能有all或者any独立存在。大部分的包是“all”或“any”。指定的一个特定的os-arch架构list,则源码包将会建立一个依赖list表中架构的包。在Debian源码控制文件.dsc文件中,该字段包含一个architecturelist和架构的通配符,中间用空格隔开。当字段中包含通配符any时,只能同时存在all。源码包中只有“any”通配符,表示源码包不依赖于任何特定的架构,能编译适应任意架构的。能生成特定于当前体系的二进制包。源码包中只有“all”通配符,表示源码包仅仅生成独立于体系结构的包。源码包有“any”和“all”通配符,表示不依赖于任何特定的架构,生成的二进制包集合中包含至少一个依赖一种体系的包和一个独立于体系架构的包。在.changes文件中Architecture字段列出的是目前升级后的包对应的Architecture。如果源码包也升级了,特殊值“source”还是应该存在的。任意的独立于架构的包升级后“all”值也存在。架构通配符像“any”这些东西绝对不能出现在.changes文件的Architecture字段中。ial重要这是一个布尔变量的字段,yes|no,改变量只可能存在于二进制的包中,如果值是yes,则软件包管理系统则不能删除这个包(只能升级或者是取代)。如果值为no,可以省略不写。einterrelationshipfields依赖这个字段描述的是软件包和其他软件包的关系。Depends,Pre-Depends,
Recommends,Suggests,Breaks,Conflicts,Provides,Replaces,rds-Version标准版本最近的符合标准(政策文档和相关文档)的包。n版本软件包的版本号。ption描述在源代码包和二进制的control文件中都存在这个字段,它是对软件包的描述,包含两个部分,一个简洁和一个大段描述。这个一个多行的字段,格式如下:Description:
ums-ShalandChecksums-Sha256这是两个多行的字段,都是包含校验和、文件大小的文件列表。两个语法是相同的,不同之处在于其算法不同,Checksums-Sha1采用SHA-1算法,Checksums-Sha256采用SHA256算法。这个字段列出的文件必须和Files字段列出的文件一一对应。nControlSystem(VCS)fields版本控制系统(模糊的概念)Debiansourcepackages通过VCSs日益发展壮大。一下字段的目的是表明公开可获得的仓库的发展。Vcs-Browser仓库的web界面URLVcs-Arch,Vcs-Bzr(Bazaar),Vcs-Cvs,Vcs-Darcs,Vcs-Git,Vcs-Hg(Mercurial),Vcs-Mtn(Monotone),Vcs-Svn(Subversion)字段名标识VCS。字段值使用版本控制系统的传统语法来描述存储仓库的位置,也足够定位打包软件仓库的位置。e-List多行字段,列出源码包能生成的软件包,包括每一个架构的软件包。没一行包含name、type、section、priority,中间用空格间隔。e-Type简单的一个单词用来表明软件包类型:deb表明是二进制软件包,udeb表明是微小的二进制软件包xxii.2、依赖性declaringrelationshipsbetweenpackages语法:这些字段的语法是统一的。都是一个安装包名字的列表,中间用逗号隔开。Depends,Recommends,Suggests,Pre-Depends,Build-DependsandBuild-Depends-Indep这几个字段中,可能有可选项,中间使用|隔开,这种情况下,随便哪个包都可以满足依赖性。依赖关系允许使用<<,<=,=,>=,>>,这些符号用来表示小于,小于等于,等于,大于等于,大于的关系。这里不能使用<和>来表示关系。为保持一致性一般建议这么做,在版本关系前需要一个空格,在版本号后需要一个空格,每个逗号之后需要一个空格,在“|”符号两边都需要空格,还有每个左括号之前。Package:muttVersion:1.3.17-1Depends:libc6(>=2.2.1),exim|mail-transport-agent对于buildrelationship系列(Build-Depends,Build-Depends-Indep,Build-ConflictsandBuild-Conflicts-Indep)如果当前主机架构不在列表中并且没有!标记,或者有预感叹号,包名和相关的版本是目的性的忽略的。Source:glibcBuild-Depends-Indep:texinfoBuild-Depends:kernel-headers-2.2.10[!hurd-i386],
hurd-dev[hurd-i386],gnumach-dev[hurd-i386]上面这个例子意思是需要kernel-headers-2.2.10的所有架构而不需要hurd-i386架构,hurd-dev和gnumach-dev仅仅需要hurd-i386架构版本就可以了。依赖项:Depends:这个声明是绝对依赖的。一个安装包如果没有将Depends中列出的安装包正确配置,则这个安装包的配置项不能进行配置(能解包不能配置)。该字段的依赖包为安装包提供大量的功能。该字段为postinst脚本或者prerm脚本的运行提供了依赖。当postrm脚本运行清理安装包的时候,该字段也会被用到,这个时候并不会保证这些依赖项的可获得性,但是最好是可获得的。如果这些依赖项不满足也没关系,postrm脚本会跳过这个动作。Recommends:强烈依赖,但是不是必须要求的依赖项。Suggests:这个字段用来声明一个更好用的安装包。用这个字段告诉包管理系统和用户,这些列出的包能加强软件的可用性,当然不安装这些依赖项软件也是能完美运行的。Enhances:这个字段和Suggests字段差不多,但是作用刚好相反。声明这个安装包能增强哪些软件的功能。Pre-Depends:这个字段类似Depends字段,不同之处在于它强制dpkg在安装包开始安装之前就要完全安装这些依赖项(这写依赖项不满足的话都不能进行解包)。以上的五个依赖性等级,你应该根据需要声明的软件包对软件包的重要性来决定要选择依赖性的等级。Breaks:当一个二进制包声明Breaks另一个,dpkg将会拒绝在Breaks中声明的包进行解包,除非被破坏的包是第一次提取,并且拒绝被破坏包的重新配置。它标志着一个包的安装会将另外一个包(或者是特定版本)中断掉。通常而言,两个包之间的不兼容是短暂的,中断关系会特别指出那些不兼容的版本。(这个不太明白)Conflicts:这个字段声明的安装包,dpkg将会拒绝在系统中同时对他们解包。如果一个包被解包,另一个包必须首先卸载掉。如果被解包的包标记未replacing,则系统上的另一个、或者说是另一个被标记为deselected、或者两个包都被标记未Essential,dpkg将会自动的移除造成冲突的那个包。否则会安装失败。Provides:软件包包含了其他某些软件包,软件包提供了某些软件包的实现的功能。Replaces:该字段声明的包会覆盖某些文件,或者完全取代另一个包。Replaces控制字段有两个不同的目的。1、覆盖另一个包的一些文件2、取代整个包,强制删除3、conffiles文件最令人气愤的就是当你花费了大量的时间和精力去自定义一个软件的配置程序,却仅仅被一个小小的升级就破坏了你曾经做出的修改。Coffiles文件包含有关软件包配置文件的信息。Conffiles文件的作用就是在软件升级的时候,dpkg对这些文件做特殊的对待,系统会问你是否保存配置文件。如果不想被修改就把这些配置文件写到conffiles文件中。所以这些还是根据需要添加吧。4、Copyright每个软件包必须包含版权信息和发布证件,这些东西应该写在/usr/share/doc/package/copyright文件中。该文件会被安装到/usr/share/doc/package目录下或者是其他合适的目录下面。
5、不是Debian-native的软件包必须包含/usr/share/doc/package/的压缩文件,该文件是复制相对应源码包的debian/changelog文件压缩而成的。如果上游的changelog文件可获得,则软件包中应为的纯文本文件。如果上游的changelog是以html格式发布的,则软件包中应该为格式。如果上游只有一个单独的维护者(maintainer),没有changelog的更新日志,则debian的changelog文件命名为格式。6、Md5sums这个文件保存这软件包中各个文件的md5校验值,用来检测软件包的完整性。可以用下面这条命令生成md5sums文件7、软件的维护者脚本一个软件包可能会提供一些脚本给软件管理系统(dpkg)使用,用于软件的安装、升级、卸载。另外,这些维护者脚本都是可选的。这些脚本是控制信息文件preinst,postinst,prerm和postrm,这些文件都是以为#!而开头的。这些文件的执行权限是755,即所有用户都有读和执行的权限,但是只有root用户有写的权限。Preinst:Ddbian软件包解压之前需要执行的脚本,为正在被升级的包停止相关服务,直到升级或安装完成。Postinst:主要完成软件包安装完成后的配置工作。通常postinst脚本要求用户输入,和/或警告用户如果接受默认值,应该记得按照要求返回重新配置这个软件。一个软件包安装或升级完成后,postinst脚本驱动命令,启动或重启相应的服务。Prerm:停止一个软件包的相关进程,要卸载软件包的相关文件前执行。Postrm:修改相关文件或链接,和/或卸载软件包所创建的文件。当前系统中的所有配置文件都可以在/var/lib/dpkg/info目录下找到。8、rules文件rules必须是一个可执行文件(0755),而且rules必须以#!/usr/bin/make-f开头,这和写脚本是一样的。Debian/rules文件本质上是一个Makefile文件,这个Makefile文件定义了创建deb格式软件包的规则。打包工具按照rules文件指定的规则,完成编译,将软件安装到临时安装目录,清理编译目录等操作,并依据安装到临时目录的文件来生成deb格式的软件包。写rules文件至少要懂一些debhelper的相关知识。[1]/doc/debian-policy/[2]/browse/zh-CN/stable/[3]/doc/manuals/maint-guide/
版权声明:本文标题:DEB软件包结构分析 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/free/1707200655h512087.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论