diff --git a/intro-applications-repository.md b/intro-applications-repository.md new file mode 100644 index 0000000..af085e7 --- /dev/null +++ b/intro-applications-repository.md @@ -0,0 +1,136 @@ +# applications介绍 + +本文档主要用来介绍applications目录的结构,各个子目录,以及其中包含的各种文件的用途。预期达到的效果是,让首次将applications.git库克隆到本地的用户能够通过阅读此文档,对applications目录的内容有个总体的了解。 + +咱们知道,applications.git是gitlab上的一个git库,具体存放位置[点击这里查看](git@gitlab.rd.in.linx:linx6.0.42/applications.git)。当咱们通过git clone这条命令,将这个版本库克隆到本地机器上的时候,同时会创建出此git库的工作区,在本地机器上的表现形式就是创建了一个applications目录,本文档的介绍也就是从这里开始的。 + +:zap:注意:在这篇文档中,我在刻意强调git工作区(git workspace)和git库(git repository)的区别,就我目前的理解,我认为在哪个目录下初始化了git(git 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的软件包,至于为什么会这样,可以阅读另一篇文档[点击这里查看](http://gitlab.rd.in.linx/linx6.0.42/documents/blob/master/workflow.md),或许有一定的帮助。 + +在applications目录下还有另外一个子目录build,这个是在rocky6.0.42.41以前的OS生成镜像文件时用到的目录,现在已经不再使用了,所以可以不用管它。下面将会对applications的packages子目录进行介绍。 + +## 2.applications的组织结构 + +将git库克隆到本地机器后,会创建出维护rocky6.0.42.41的工作区,即applications目录,所以这里就以介绍这个目录里的内容为中心展开,包括各个目录,子目录,目录中的文件,以及它们的作用,但是由于目前已经不再使用build子目录中的内容,所以不再介绍这个目录。 + +### 2.1 applications的目录树结构 + +下面是通过“tree applications”命令显示出来的applications目录的结构,其中省略了大量的子目录。当你用ls查看一下你本地的工作区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 +``` +当你浏览了你本地机器上的applications工作区之后,你会发现,所有子目录下的文件无外乎就这么几种:源码包、Pkgfile文件,这是每一个软件包目录下必有的;post_mk.sh文件、post_add.sh文件、补丁文件,这几个文件,你会发现,有些软件包目录下有,有些软件包目录下没有。下面分别进行介绍。 + +### 2.2 分述各个目录和文件的作用 + +浏览applications工作区,首先看到两个目录:build和packages。 +* build是rocky6.0.42.41以前的版本在生成镜像文件时用到的目录,现在已经不再使用,所以不用管这个目录。 +* packages目录下存放着构建rocky6.0.42.41用到的所有源码包。 + +浏览packages目录,可以看到它有`以26个英文字母命名的子目录`。再浏览这些子目录(任意选中一个进行浏览),发现这个目录下依然是一些目录,不过`这里的目录名全是以一些软件包的名字命名的,并且这些软件包名的首字母就是它所在的目录`。继续往下,才发现了源码包和Pkgfile文件,或许还有其他的一些文件。 + +看到这里,想必你已经理解了,这里也是运用了计算机技术中大量使用的“分层技术”,通过不断划分层次来对源代码包和与其相关的文件进行归类。不管你认不认同这种处理方法,它已经这样做了。不过,在我看来划分层次在这里还是起到了非常好的效果,至少找一个软件包非常容易了。 + +再看软件包名目录下的内容,因为每个软件包名目录下的内容都大同小异,所以这里咱们只会整体上介绍文件包名目录下的文件种类,不会也不可能介绍每一个软件包名目录。 + +* 源码包:从网络上下载的源代码包; +* Pkgfile:编译rocky6.0.42.41上的二进制包时用到的文件,关于Pkgfile文件的介绍[点击这里查看](http://gitlab.rd.in.linx/linx6.0.42/documents/blob/master/Pkgfile-yczhu.md)。 +* 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\*:如果以ls -a浏览软件包名目录里的内容,会发现这一系列的文件有.footprint、.footprint_base、.footprint_ia64_sec、.footprint_ppc64_base、.footprint_x86_64_base、.footprint_x86_64_sec。打开其中任意一个查看其内容,发现这个文件的每一行包含三个字段,结尾处是一个目录名或者文件名。第一个字段描述这一行结尾处文件或目录的属性,第二个字段是这个目录或文件的属主、属组,第三个字段是这个文件或目录的存放路径。这些目录和文件正是在编译二进制包时,会在pkg目录下创建的目录和文件。这个文件也有记录编包过程的作用,如果改动了Pkgfile,导致重新编出的包与上一次编出的包目录或文件有变化,那么pkgmk将会报错。这时候,如果想要更新此.footprint文件,可以用命令pkgmk加上-uf参数来实现。文件名中的ia64、x86_64等表示不同的计算机体系结构,base表示基本包,sec表示的是安全包。 +* .md5sum:很明显,这就是md5校验和文件。查看这个文件的内容,会发现这个文件的每一行分为两个字段,第一个字段是一个校验和,第二个字段是这个校验和对应的文件名。实际上,每一个在Pkgfile的source=()中列出的文件,都会有一个校验和存放到这个文件中,当这些文件被改动后,如果不更新被改动文件的校验和,pkgmk命令将会报错,这时可以用pkgmk命令加上-um参数来更新文件的校验和。 + +最后,还有一点跟软件包名目录下的内容相关的问题。由于历史的原因:smile:,有些目录下会有各种不同的源码包,以及这些源码包需要的补丁文件等,例如上面的示例中列出的firefox目录就是;后来有了新的规则,不再将多余的内容放在软件包名目录下,只放本次编译二进制包用到的文件,这让软件包名目录下的内容显得精炼了不少,例如上面示例中的acct目录就是。