Merge branch '4.2/2480' into 'master'

4.2/2480

applications介绍文档

See merge request !7
This commit is contained in:
徐顺选
2015-11-17 17:12:32 +08:00
16 changed files with 489 additions and 0 deletions

View File

@@ -9,3 +9,5 @@
## [操作系统版本以及对应光盘版本说明](OS-version-node.md) ##
## [linx6.0.42.41新版发布实现说明](release_stable.md) ##
## [applications.git库介绍](intro-applications-repository.md) ##

BIN
filter/builddir.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

BIN
filter/filter-rule.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

39
filter/filter.md Normal file
View File

@@ -0,0 +1,39 @@
# 使用过滤器管理邮件
## 1. 概述
邮件过滤器可以使您设置 Thunderbird 实现自动管理邮件的功能。过滤器可以移动邮件到文件夹,删除邮件,转发邮件至其他电子邮箱,等等。
## 2. 创建邮件过滤器
2.1. 在*菜单栏*,点击*工具*,然后点击*消息过滤器*,出现如图所示对话框:
![filter](filter.png)
2.2. 点击*新建*,会出现一个*过滤器规则*对话框。
2.3. 在“过滤器名称”一栏,给过滤器输入一个名字。
2.4. 在下面的“执行过滤器,当”一栏,勾选其中一项或两项。
:zap: 注意:大多数情况下,您不需要更改“手动运行”和“正在获取新邮件:”这两个选现的默认设置。
2.5. 在“正在获取新邮件:”选项的下拉菜单中,选择*在垃圾邮件分级之前过滤*或*在垃圾邮件分级之后过滤*。
2.6. 为你想要应用的规则选择*属性**检验*和*值*
* 主题:是邮件的某一元素活特征,例如“主题”或”发件人“
* 包含:是属性的可选项,例如“包含”或“在我的通讯录中”
* 值:是匹配检验的具体细节,比如电子邮件地址或关键字
2.7. 为邮件选择符合这些标准的一个或多个*执行动作*。
![filter-rule](filter-rule.png)
:zap: 注意:如果要添加另一条规则,在上一条规则的最后,点击添加按钮`+`。如果要删除一条规则,点击删除按钮`-`删除规则。
2.8. 点击“确定”。
2.9. 过滤器会自动应用于新收到的邮件。如果你想对已经收到的邮件应用规则,在“消息过滤器”对话框,首先选择好邮件的存放目录,然后点击*立即执行*。
## 3.过滤器举例
编写此文档时,我收到来自张国栋、徐顺选和刘锦利的邮件最多,因此分别给他们建立一个邮件存放目录;给公司内部其他人员共同件一个邮件存放目录;给其他类型的邮件建立一个存放目录。可以按顺序**打开Thunderbird--->选中“收件箱”,右击--->新建文件夹**,弹出如图所示对话框:
![builddir](builddir.png)
输入目录名称,完成目录的创建。
创建完存放邮件的目录后,按照“创建邮件过滤器“的步骤进行操作。如图所示,为我编辑的应用规则,你可以根据实际需要进行编辑。
![inner](inner.png)
点击确定即可。
:zap: 注意创建完规则后原先收到的邮件依然存放在原来的目录需要按照2.9的步骤来应用创建的规则,这时别忘了选择正确的目录,如图所示:
![select-dir](select-dir.png)
需要对哪个邮件存放目录执行规则,选中该邮件存放目录即可。
**本文档内容参考[原始文档,点击查看](https://support.mozilla.org/zh-CN/kb/%E4%BD%BF%E7%94%A8%E8%BF%87%E6%BB%A4%E5%99%A8%E7%AE%A1%E7%90%86%E9%82%AE%E4%BB%B6)。**

BIN
filter/filter.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

BIN
filter/inner.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

BIN
filter/select-dir.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

191
intro-4.2-iso/intro-iso.md Normal file
View File

@@ -0,0 +1,191 @@
# linx6.0.42镜像文件介绍
## 1. 概述
本文档通过介绍rocky6.0.42.41-x86_64-security-20150911.iso镜像文件中所包含的内容介绍linx6.0.42的镜像文件。该文档通过阅读自动出盘工具中的mk_iso脚本文件编写而成这里先假设已经搭建好了自动出盘工具运行所需的环境然后把自动出盘工具运行所需要的环境(主要是提前创建的各个目录和mk_iso运行过程中创建的目录)通过目录树的形式展现出来这样可以对自动出盘工具的工作过程更加直观地进行跟踪在阅读mk_iso脚本时能够知道每个步骤在哪个目录下做什么工作从而弄清楚光盘环境下的各个目录是什么时候、由谁创建的。
## 2. 相关概念
### 2.1 什么是镜像文件
将多种数据或文件以特定的方式存储在同一个文件中,该文件内部一般具有文件系统的特征,这样的文件可被称为镜像文件。
在liunx系统中“一切皆文件”包括磁盘和磁盘分区都是以文件方式处理的。通过对磁盘分区建立文件系统分区可被挂载到目录上使用挂载的对象就是磁盘分区所对应的设备文件同样也可以对一个普通文件按照磁盘分区的方式创建文件系统然后进行挂载。“镜像文件(Image)“就是这类文件的代称。
这里介绍的镜像文件是常见镜像文件中的一种它使用的文件系统是ISO9660格式这种文件系统通常用在光盘上所以这种镜像文件就是光盘的镜像文件常以“.iso“作为后缀名。
### 2.2 回环设备(Loop Device)
回环设备是一种将文件模拟成块设备来使用的驱动,通过该驱动的支持,可以将光盘、磁盘中的数据以普通文件的形式存放,并被模拟成光盘或者磁盘来使用。
回环设备也要通过mount命令来挂载。挂载镜像文件时通过“-o loop“指定文件用回环设备模拟磁盘设备来挂载。
### 2.3 怎么查看一个镜像文件的内容
要查看镜像文件的内容首先要将该镜像文件以回环设备的形式进行挂载以将rocky6.0.42.41-x86_64-security-20150911.iso挂载到/mnt目录为例
```
yczhu@Linx:~$ sudo mount -o loop Download/rocky6.0.42.41-x86_64-security-20150911.iso /mnt/
```
挂载完成之后,以查看目录内容的方式即可浏览该镜像文件中的内容:
```
yczhu@Linx:~$ ls /mnt/
bin dev hdautoconf lib64 newvar ramdisk root.bak sys usr
boot etc home mnt opt Rocky sbin tag var
cdrom floppy lib newetc proc root share tmp
```
:zap: 注意:光盘镜像文件(.iso文件)的内容是只读的,不要试图去修改它。
### 2.4 镜像文件是怎么来的
制作镜像文件可以使用dd命令使用方法为
dd if=<输入文件名> of=<输出文件名> bs=<每次读取的大小> count=<读取次数>
其中if指定的是文件数据的来源该文件必须是真实存在的of指定生成的文件名。下面建立一个全新的文件用于建立镜像文件使用命令
```
linx:~ # dd if=/dev/zero of=new.img bs=10M count=10
记录了10+0 的读入
记录了10+0 的写出
104857600字节(105 MB)已复制0.0992505 秒1.1 GB/秒
```
该文件将生成一个100M大小的名为new.img的文件然后可以对该文件建立ext3类型的文件系统命令为
```
linx:~ # mkfs.ext3 new.img
mke2fs 1.41.12 (17-May-2010)
new.img is not a block special device.
无论如何也要继续? (y,n) y
文件系统标签=
操作系统:Linux
块大小=1024 (log=0)
分块大小=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
25688 inodes, 102400 blocks
5120 blocks (5.00%) reserved for the super user
第一个数据块=1
Maximum filesystem blocks=67371008
13 block groups
8192 blocks per group, 8192 fragments per group
1976 inodes per group
Superblock backups stored on blocks:
8193, 24577, 40961, 57345, 73729
正在写入inode表: 完成
Creating journal (4096 blocks): 完成
Writing superblocks and filesystem accounting information: 完成
This filesystem will be automatically checked every 36 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
```
将生成的镜像文件可以挂载到/mnt目录下查看其中的内容命令为
```
linx:~ # mount -o loop new.img /mnt/
linx:~ # ls /mnt/
lost+found
```
使用dd新建镜像文件并不适合所有类型的文件系统只有块设备的磁盘文件系统才适合使用dd命令。对于光盘的ISO9660的文件系统需要使用专用的命令mkisofs命令。下面创建一个简单的.iso类型的文件。我这里有个名为sg3_utils的目录把它做成一个.iso文件可以使用命令
```
linx:~ # mkisofs -R -o mylivecd.iso sg3_utils
```
该命令执行完成生成一个名为mylivecd.iso的镜像文件其内部文件系统类型为ISO9660可通过如下命令查看
```
linx:~ # file mylivecd.iso
mylivecd.iso: ISO 9660 CD-ROM filesystem data 'CDROM
```
以挂载回环设备的方法将其挂载到/mnt目录下并查看其中的内容
```
linx:~ # mount -o loop mylivecd.iso /mnt/
linx:~ # ls /mnt/
Pkgfile sg3_utils-1.41.tar.xz work
Pkgfile~ sg3_utils#1.41-x86_64-linx-Rocky4.2.pkg.tar.gz
```
:zap: 注意这里制作镜像文件是在rocky6.0.42.41(2015-09-11)系统上完成的。
### 2.5 光盘系统的启动过程
为了使光盘可以启动系统,需要在光盘的特定位置上放入启动器(如GRUB)代码。将计算机的BIOS设置为从光驱设备启动BIOS的装载程序将会把光盘特定位置的信息载入内存并执行而这个特定位置中存放了启动器程序。启动器获得计算机的控制权后根据配置或用户的选择将光盘上的Linux内核装载到内存中再载入辅助系统。
启动镜像文件采用Initramfs时直接把文件内容还原到内核的根文件系统中。内核在自身启动完成后运行辅助系统中的/init程序文件内核启动结束。/init要完成以下几项功能
* 测试当前计算机的配置,主要是光驱设备,对光驱进行驱动;
* 查找当前启动光盘所在光驱设备文件并进行挂载;
* 将光盘中的最终系统挂载到内存中,一般是挂载到辅助系统的某个目录;
* 对最终系统进行使用前的处理,如创建必要的文件和目录;
* 将光盘的最终系统切换到根文件系统上,并执行根文件系统中的/sbin/init文件。
/sbin/init将根据/etc/inittab文件的配置来完成系统的启动过程系统启动完成后进入用户操作模式。
## 3. 自动出盘工具运行环境的目录树
这里画出了mk_iso脚本运行时需要的环境(主要是一些目录)和该脚本运行过程中会创建出的目录主要目的是在阅读mk_iso脚本的过程中随时跟此目录树进行对比以便理清脚本工作的过程。通过阅读脚本可以了解镜像文件中的各个目录的都是怎么得来的。
![tool-tree](tool-tree.png)
## 4. 各目录的生成
在阅读mk_iso脚本过程中会注意到在制作光盘环境时该脚本会通过函数deal_isodate()“按照既定规则从软件包池中获取软件包”,拷贝到.../iso_env/x86_64/packages目录下
```
cp $src_dir/$pkg $dest_dir/packages
```
然后函数install_envpkgs()中会把该目录下的软件包都解压缩:
```
for pkg in $iso_env_pkglist
do
tar -C $ISO_DIR -zxf ${ISOENV_WORKDIR}/${ARCH}/packages/$pkg
done
```
完成这一步后会在iso_dir目录下创建出软件包解压后会生成的各种目录(比如usr目录),目的是把为下一步“安装光盘环境软件包”作准备:
```
for pkg in $iso_env_pkglist
do
pkgadd -f ${ISOENV_WORKDIR}/${ARCH}/packages/$pkg --root $ISO_DIR
done
pkgadd -u -f ${ISOENV_WORKDIR}/${ARCH}/packages/glibc#*.pkg.tar.gz --root $ISO_DIR
```
将软件包以root身份安装到iso_dir目录下就会生成/bin、/sbin、/dev、/lib、/lib64、/opt和/var等跟通常在磁盘系统的根目录中可见的目录下一样的目录。这是因为当光盘系统运行起来之后光盘目录就是运行系统的根目录所以在镜像文件中见到的这些目录作用与磁盘系统中的目录一样。
光盘镜像文件的作用是启动系统用的,之所以能启动系统是因为有/boot目录在mk_iso脚本中可见该目录是从.../iso_env/x86_64/cfg/boot拷贝来的
```
cp -ar ${ISO_ENV_PATH}/${ARCH}/cfg/boot ${ISO_DIR}/
```
然后往其中添加额外的.ko文件。该目录中存放了与关盘引导系统相关的所有文件包括引导器GRUB的配置文件和辅助系统initrd.img等。
系统启动过程中的配置文件存放目录/etc是从.../iso_env/x86/cfg/etc拷贝来的脚本mk_iso中完成该工作的函数为process_init()其中的代码为:
```
cp -ar ${ISO_ENV_PATH}/${ARCH}/cfg/etc ${ISO_DIR}/
```
光盘系统以initrd.img方式提供辅助系统时会用到内核中的内存磁盘系统即ramdiskfs镜像文件中可以看到有一个名为ramdisk的目录该目录是由mk_iso脚本中的process_ramdisk()函数创建的:
```
process_ramdisk() {
echo "info: 配置Process ramdisk文件"
pushd .
cd $ISO_DIR
mkdir -vp $ISO_DIR/ramdisk
mkdir -vp $ISO_DIR/newetc
mkdir -vp $ISO_DIR/newvar
... ...
}
```
可见该函数同时还创建了newetc目录和newvar目录。
## 5. 目录的介绍
将镜像文件rocky6.0.42.41-x86_64-security-20150911.iso以块设备的方式挂载到一个目录下列出其中的内容
```
yczhu@Linx:~$ ls rocky/
bin dev hdautoconf lib64 newvar ramdisk root.bak sys usr
boot etc home mnt opt Rocky sbin tag var
cdrom floppy lib newetc proc root share tmp
```
可以看到,其中的大多数目录与我们硬盘上的系统根目录下的目录相同,我们称之为“常见的目录”;有一部分是我们硬盘上的系统根目录下所没有的,我们称之为”不常见的目录“。下面分成这两类进行介绍:
### 5.1 常见的目录
bin: 该目录包含二进制文件的可执行程序许多Linux命令就是放在该目录下的可执行程序如ls、mkdir、tar等命令
boot: 该目录存放系统启动时所需的各种文件,如内核的镜像文件,引导加载器使用的文件等;
cdroom: 用来挂载光驱的目录,光盘系统启动后,光驱文件系统将挂载在该目录下;
dev: 该目录下是一些称为设备文件的特殊文件,用于访问系统资源或设备,如软盘、硬盘、系统内存等;
etc: Linux系统的很多配置文件就在该目录下Linux系统正是靠这些文件才得以正常地运行
floppy: 用于挂载软盘的目录,现在已经不常用了;
home: 用户主目录的默认位置,系统的所有用户的数据保存在其主目录下;
lib: 标准程序设计库,又称为动态链接共享库;
lib64: 作用与lib一样不过该目录下是基于64位系统的
mnt: 该目录用来为其他文件系统提供安装点;
opt: 用于存放一些比较大,也比较独立的软件;
proc: 用于存放Linux内核的PROC文件系统这个目录是固定的许多程序会使用该目录中的文件来查询内核的一些状态需要注意的是PROC文件系统并不保存在系统的硬盘中操作系统在内核中创建这一文件系统目录是虚拟的目录即系统内存的映射
root: root用户的主目录
sbin: 与bin目录类似存放系统编译后的可执行文件、命令如常用到的fsck、lsusb等通常只有root用户才有运行的权限
sys: 用于存放Linux内核的SYS文件系统这个目录名是固定的许多程序会使用该目录中的文件来查询内核的一些状态
tmp: 用于存放临时文件,该目录可以被任何用户使用;
usr: usr是最庞大的目录该目录中包含一般不需要修改的命令程序文件、程序库、手册和其他文档等。Linux内核的源代码就放在/usr/src/linux中
var: 该目录中包含一些经常变化的文件,如,打印机、邮件、新闻等的脱机目录、日志文件,以及临时文件等。
### 5.2 不常见的目录
hdautoconf: 该目录是由mk_iso中的install_envpkgs()函数创建的,是用于磁盘自动安装的目录;
newetc: 该目录由mk_iso脚本中的process_ramdisk()函数创建,与内存磁盘相关;
newvar: 同上;
ramdisk: 同newvar
Rocky: 由mk_iso脚本中的preppare_env_dir()函数创建,安装系统时所有用到的软件包都存放在该目录下;
tag: 是一个ASCII文件记录了光盘的版本号。
## 6. 参考资料
《手把手教你构建自己的Linux系统》孙海勇 编著
《从实践中学嵌入式Linux操作系统》华清远见嵌入式学院 曹忠明 程姚根 编著

BIN
intro-4.2-iso/tool-tree.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 MiB

View File

@@ -0,0 +1,170 @@
# applications.git库介绍
本文档主要用来介绍applications目录的结构各个子目录以及其中包含的各种文件的用途。预期达到的效果是让首次将applications.git库克隆到本地的用户能够通过阅读此文档对applications目录的结构和内容有个总体的了解。
我们知道applications.git是gitlab上的一个git库具体存放位置[点击这里查看](http://gitlab.rd.in.linx/linx6.0.42/applications.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的软件包,至于为什么会这样,可以阅读另一篇文档[点击这里查看](http://gitlab.rd.in.linx/linx6.0.42/documents/blob/master/workflow.md),或许有一定的帮助。
在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文件的介绍[点击这里查看](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\*:每个源码包目录下都有这一系列的文件,只不过会基于不同的计算机体系结构会呈现出不同的文件名。此文件名的结构为,`.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目录就是。

BIN
workflow/attachment1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

BIN
workflow/attachment2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

BIN
workflow/merge1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

BIN
workflow/merge2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

87
workflow/workflow.md Normal file
View File

@@ -0,0 +1,87 @@
# 维护linx 6.0.42.41的流程
## 1. 概述
本文档首先给出了维护linx 6.0.42.41的工作流程图,然后对工作流程中比较复杂的操作步骤进行详细描述。其中有些步骤已经有了详细的描述文档,这里会给出相关文档的链接,以方便查阅。
## 2. 工作流程图
![workflow](workflow.png)
## 3. 比较复杂的操作步骤
### 3.1注册bugzilla账号
关于怎样注册bugzilla账号这里有指导文档[点击查看](http://gitlab.rd.in.linx/document/maintainer-howto/wikis/create-a-new-Bugzilla-account)。
### 3.2提交bug
关于怎样提交bug[点击查看指导文档](http://gitlab.rd.in.linx/document/maintainer-howto/wikis/submit-bug)。
选择故障类型的时候,需要根据具体的情况作出选择,当你不能决定故障类型时,要跟大家进行讨论。
:zap: 注意组长给某个组员分配了bug该组员会收到邮件通知在有些情况下会先有问题的描述然后组长会让某个组员提交bug再把这个bug分给这个组员自己此时提交bug并得到bug任务的组员不会收到邮件通知需要该组员记住自己提交的bug号再去解决问题。
### 3.3 注册gitlab账号
关于怎样创建gitlab账号[点击查看指导文档](http://gitlab.rd.in.linx/document/maintainer-howto/wikis/create-an-account)。
注册完账号后要能够上传代码还需要添加SSH Key[点击查看指导文档](http://gitlab.rd.in.linx/document/maintainer-howto/wikis/add-SSH-keys)。
### 3.4 将applications.git库克隆到你的计算机上
使用命令
```
git clone git@gitlab.rd.in.linx:linx6.0.42/applications.git
```
有关applications的详细情况[点击查看介绍文档](http://gitlab.rd.in.linx/linx6.0.42/documents/blob/4.2/2480/intro-applications-repository.md)。
### 3.5 在applications工作区创建分支并切换到新创建的分支
使用命令
```
git checkout -b 4.2/XXXX
```
这里的XXXX是提交bug时生成的bug号。
:zap: 注意创建并切换分支前一定要确保你当前的分支在4.2/daily-build下。
用命令
```
git branch
```
查看。
在你新创建的分支上完成对bug的修改。
### 3.6 提交修改
完成了修改后首先要将修改添加到本地的git库再进行提交有关提交信息的填写规范[点击查看指导文档](http://gitlab.rd.in.linx/document/maintainer-howto/wikis/Instructions-on-adding-Bugzila-when-you-commit))。这些动作按顺序通过下列命令来完成:
```
git add .
git commit -s
```
### 3.7 将修改push到gitlab上
使用命令
```
git push origin 4.2/XXXX:4.2/XXXX
```
有关git命令的介绍[点击查看介绍文档](http://rd-server.rd.in.linx/dokuwiki/doku.php?id=%E6%96%87%E6%A1%A3:git_%E7%9A%84%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4)。
### 3.8 在bugzilla中提交评审
首先进入到新提交的bug页面找到Add an attachment (proposed patch, testcase, etc.),如图所示:
![attachment1.png](attachment1.png)
点击Add an attachment进入到提交评审页面如图所示
![attachment](attachment2.png)
* 在File下面的文本框中填入你提交的分支的地址
* 在Description下的文本框中对你的工作进行简短的描述
* 勾选path前面的选择框;
* inspection后边是个选择条你把它选成“?”时,后边才会有文本框,其中填入评审你工作结果的人的邮箱地址,如果有多个人评审,可以填入多个人的邮件地址,中间用逗号分开;
* 点击下边的submit按钮完成提交评审。
### 3.9 在gitlab上创建merge request
如果你的提交通过了评审下一步就是创建“合并请求”merge request。在gitlab页面上找到你创建的分支如图所示
![merge](merge1.png)
点击绿色的“+Create Merge Request“进入到填写评审信息的页面如图所示
![merge](merge2.png)
这里只需要从“Assign to“的下拉列表中选择有权利合并分支的人即可然后点击绿色的“Submit new merge request“完成合并请求的创建。

BIN
workflow/workflow.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 MiB