Files
documents/intro-applications-repository.md
2015-12-24 10:16:06 +08:00

11 KiB
Raw Blame History

applications.git库介绍

本文档主要用来介绍applications目录的结构各个子目录以及其中包含的各种文件的用途。预期达到的效果是让首次将applications.git库克隆到本地的用户能够通过阅读此文档对applications目录的结构和内容有个总体的了解。
我们知道applications.git是gitlab上的一个git库具体存放位置点击这里查看。通过

git clone git@gitlab.rd.in.linx:linx6.0.42/applications.git

这条命令将这个版本库克隆到本地机器上的时候就会在本地创建出此git库的工作区在本地机器上的表现形式就是创建了一个applications目录本文档的介绍也就是从这里开始的。
:zap:注意在这篇文档中我在刻意强调git工作区git workspace)和git库git repository)的区别就我目前的理解我认为在哪个目录下初始化了gitgit init哪里就是git工作区而git库是在工作区中的隐藏目录.git文档的编写基于这样的概念展开。

1.applications的用途

GNU/Linux操作系统GNU/Linux OS本身是由linux内核和特定GNU应用软件组成的所以一个特定版本的OS对应着很多软件包我们可以称之为软件仓库。怎么样才能有效地管理这个软件仓库对GNU/Linux OS的维护者而言是非常值得研究的问题解决好了这个问题会在很大程度上降低管理大量软件包的繁琐程度给OS维护人员带来方便提高维护人员的工作效率。
管理rocky6.0.42.41这个OS的软件仓库时用的是git这版本控制个工具远程git库的管理用的是gitlab这样的一个基础架构决定了我们需要克隆applications.git库需要了解applications工作区。
所以说本地的applications目录就是维护rocky6.0.42.41的工作区。在它的子目录packages下存放的是rocky6.0.42.41用到的所有软件包维护rocky6.0.42.41的工作基本上都是在这个目录里进行的升级或者更换了packages目录下的软件包就等于是升级或者更换了rocky6.0.42.41的软件包,至于为什么会这样,可以阅读另一篇文档点击这里查看,或许有一定的帮助。
在applications目录下还有另外一个子目录build这个是在rocky6.0.42.41以前的OS生成镜像文件时用到的目录现在已经不再使用了所以可以不用管它。下面将会对本地applications目录的结构和内容进行介绍。

2.applications的组织结构

将git库克隆到本地机器后会创建出维护rocky6.0.42.41的工作区即applications目录所以这里就以介绍这个目录里的内容为中心展开包括各个目录子目录目录中的文件以及它们的作用由于目前已经不再使用build子目录中的内容所以这里不再介绍这个目录。

2.1 applications的目录树结构

在applications目录的父目录里通过命令

tree applications

可以显示出applications目录的树型结构。下图中省略了大量的子目录因为浏览工作区applications时你会发现工作区的目录层级结构是非常简单的很容易看清楚。所以省略的这些子目录对于本文档的预期目标是无关紧要的。这里列出几个具有代表性的目录其中包含了所有子目录中将会出现的文件。

applications/
├── build
└── packages
    ├── a
    │   ├── acct
    │      ├── acct-6.3.5.tar.gz
    │      ├── acct-cap.conf
    │      ├── Pkgfile
    │      ├── post_add.sh
    │      └── post_mk.sh
    │  
    ├── b
    │ 
    ├── c
    │   ├── cairo
    │      ├── cairo-1.10.2.tar.gz
    │      ├── cairo-1.2.6.tar.gz
    │      └── Pkgfile
    │  
    ├── d
    │   ├── db
    │      ├── db-4.3.27.tar.gz
    │      ├── db-4.5.20.tar.gz
    │      ├── patch.4.5.20.1
    │      ├── patch.4.5.20.2
    │      └── Pkgfile
    ├── e
    │
    ├── f
    │   ├── firefox
    │      ├── firefox.1
    │      ├── firefox-2.0.0.11-l10n.tar.bz2
    │      ├── firefox-2.0.0.11-source.tar.bz2
    │      ├── firefox-2.0.0.1-l10n.tar.bz2
    │      ├── firefox-2.0.0.1-source.tar.bz2
    │      ├── firefox-2.0.0.3-l10n.tar.bz2
    │      ├── firefox-2.0.0.3-source.tar.bz2
    │      ├── firefox-2.0.0.8-l10n.tar.bz2
    │      ├── firefox-2.0.0.8-source.tar.bz2
    │      ├── firefox-2.0.0.9-l10n.tar.bz2
    │      ├── firefox-2.0.0.9-source.tar.bz2
    │      ├── firefox-3.0.3-l10n.tar.bz2
    │      ├── firefox-3.0.3-source.tar.bz2
    │      ├── firefox.desktop
    │      ├── firefox.png
    │      ├── mozconfig
    │      ├── Pkgfile
    │      └── prefix
    ├── g
    ├── h
    ├── j
    ├── k
    ├── l
    ├── m
    ├── n
    ├── o
    ├── p
    ├── q
    ├── r
    ├── s
    ├── t
    ├── u
    ├── v
    ├── w
    ├── x
    ├── y
    └── z

每个源码包目录下的文件:

  • 必有的文件源码包、Pkgfile文件
  • 可能会有的文件post_mk.sh、post_add.sh、*.patch、*.conf这几个文件有些软件包目录下有有些软件包目录下没有
  • 隐藏文件:.footprint*、md5sum。
    下面分别进行介绍。

2.2 分述各个目录和文件的作用

浏览applications工作区首先看到两个目录build和packages。

  • build是rocky6.0.42.41以前的版本在生成镜像文件时会用到的目录,现在已经不再使用,所以不用管这个目录。
  • packages目录下存放着构建rocky6.0.42.41用到的所有源码包。
    • packages的子目录以26个英文字母命名;
    • 每个字母目录下存放的是所有包名以这个字母开头的源码包。
      再源码包目录下的内容,因为每个源码包目录下的内容都大同小异,所以这里只会整体上介绍源码包目录下的文件种类,不会也不可能介绍每一个源码包目录下的内容。
  • 源码包:从网络上下载的源代码包;
  • Pkgfile编译rocky6.0.42.41的二进制包时用到的文件关于Pkgfile文件的介绍点击这里查看
  • post_mk.sh、post_add.sh这是两个shell脚本在执行pkgmk命令时加上-pm、-pa参数将会在编译二进制包时执行这两个文件详细介绍见《pkg 命令说明文档V0.2.odt》。
  • *.patch文件、*.conf文件软件包的补丁文件和编译软件包的相关配置文件根据不同的需求会在编译软件包时加入这两个文件。

2.3 关于隐藏文件和隐藏目录

在applications工作区下有隐藏目录.git和隐藏文件.gitignore

  • .git初始化git时创建的隐藏目录这里就是git版本库git是一个版本控制工具
  • .gitignore是git的一个配置文件所有在这里列出了名字的文件将会被git忽略掉不跟踪这些文件。例如在applications工作区下有这么一些文件将不被git跟踪
cat applications/.gitignore

.footprint.diff
.footprint.orig
.md5sum.diff
.md5sum.orig
*.pyc
*.o
*.so.*

源码包目录下的隐藏文件有.footprint*.md5sum

  • .footprint*:每个源码包目录下都有这一系列的文件,只不过会基于不同的计算机体系结构会呈现出不同的文件名。此文件名的结构为,.footprint_计算机体系结构_二进制包的类型,下面分别进行介绍每个字段:
    • .footprint这是此文件名中通用的字段每个文件都会有
    • 计算机体系结构编写此文档时最常见的是x86_64。有些源码包目录下也许会有ia64、ppc_64等类型的体系结构
    • 二进制包类型rocky6.0.42.41的二进制包分为安全包这个字段为sec和基本包这个字段为base。编包时给pkgmk加上选项-s编出来的就是安全包不加就是基本包。详细介绍见《pkg 命令说明文档V0.2.odt》。
      以在x86_64体系结构的计算机上编译acct二进制安全包时生成的.footprint_x86_64_sec为例来介绍此系列文件的内容
cat .footprint_x86_64_sec

drwxr-xr-x	sys/sys	usr/
drwxr-xr-x	sys/sys	usr/bin/
-rwxr-xr-x	sys/sys	usr/bin/ac
... 此处省略若干行...
drwxr-xr-x	root/root	var/lib/pkginfo/
-rw-r--r--	root/root	var/lib/pkginfo/acct.md5sum

发现这个文件的每一行包含三个字段,结尾处是一个目录名或者文件名。
* 第一个字段描述这一行结尾处文件或目录的属性;
* 第二个字段是这个目录或文件的属主、属组; * 第三个字段是这个文件或目录的存放路径。 这些目录和文件在编译二进制包时会在pkg目录下创建出来。首次编译rocky6.0.42.41的二进制包时,没有.footprint*系列的文件编译过程中会生成。如果以后改动了Pkgfile文件导致重新编出的二进制包与上一次编出的二进制包的摆放目录或文件有所不同那么pkgmk将会报错。这时候如果想要更新此.footprint文件可以用命令pkgmk加上-uf参数来实现。

  • .md5sum这是md5校验和文件。以applications/packages/b/binutils下的.md5sum文件为例查看这个文件的内容
cat .md5sum

d77fa789b4cae8b1ef7bc10e6220a529  binutils-2.18-GCC43-1.patch
83877c299e3e3080952214e479396f23  binutils-2.18-configure-1.patch
9d22ee4dafa3a194457caf4706f9cf01  binutils-2.18.tar.bz2

会发现这个文件的每一行分为两个字段, * 第一个字段是一个校验和; * 第二个字段是这个校验和对应的文件名。 实际上每一个在Pkgfile的source=()中列出的文件都会有一个校验和存放到这个文件中当这些文件被改动后如果不更新被改动文件的校验和pkgmk命令将会报错这时可以用pkgmk命令加上-um参数来更新文件的校验和。

最后,还有一点跟源码包目录下的内容相关的问题。由于历史的原因:smile:有些源码包目录下会有各种不同版本号的源码包以及这些源码包各自需要的补丁文件等例如上面的目录树示例中列出的firefox目录。其实没必要将所有用过的不同版本的源码包以及这些源码包用到的文件都保留下来每个源码包目录下只需要放置最近一次使用的源码包和它所需要的文件即可。所以在写作本文档的时候编包不再将多余的内容放在软件包名目录下只放本次编译二进制包用到的文件这让软件包名目录下的内容显得精炼了不少例如上面示例中的acct目录就是。