diff --git a/README.md b/README.md index eb3553f..8692c30 100644 --- a/README.md +++ b/README.md @@ -9,3 +9,5 @@ ## [操作系统版本以及对应光盘版本说明](OS-version-node.md) ## ## [linx6.0.42.41新版发布实现说明](release_stable.md) ## + +## [applications.git库介绍](intro-applications-repository.md) ## diff --git a/filter/builddir.png b/filter/builddir.png new file mode 100644 index 0000000..d20d267 Binary files /dev/null and b/filter/builddir.png differ diff --git a/filter/filter-rule.png b/filter/filter-rule.png new file mode 100644 index 0000000..8678c31 Binary files /dev/null and b/filter/filter-rule.png differ diff --git a/filter/filter.md b/filter/filter.md new file mode 100644 index 0000000..3502957 --- /dev/null +++ b/filter/filter.md @@ -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)。** \ No newline at end of file diff --git a/filter/filter.png b/filter/filter.png new file mode 100644 index 0000000..3153e60 Binary files /dev/null and b/filter/filter.png differ diff --git a/filter/inner.png b/filter/inner.png new file mode 100644 index 0000000..c64b560 Binary files /dev/null and b/filter/inner.png differ diff --git a/filter/select-dir.png b/filter/select-dir.png new file mode 100644 index 0000000..89b3653 Binary files /dev/null and b/filter/select-dir.png differ diff --git a/intro-4.2-iso/intro-iso.md b/intro-4.2-iso/intro-iso.md new file mode 100644 index 0000000..04b4798 --- /dev/null +++ b/intro-4.2-iso/intro-iso.md @@ -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操作系统》华清远见嵌入式学院 曹忠明 程姚根 编著 \ No newline at end of file diff --git a/intro-4.2-iso/tool-tree.png b/intro-4.2-iso/tool-tree.png new file mode 100644 index 0000000..3019527 Binary files /dev/null and b/intro-4.2-iso/tool-tree.png differ diff --git a/intro-applications-repository.md b/intro-applications-repository.md new file mode 100644 index 0000000..db03048 --- /dev/null +++ b/intro-applications-repository.md @@ -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)的区别,就我目前的理解,我认为在哪个目录下初始化了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目录的结构和内容进行介绍。 + +## 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目录就是。 \ No newline at end of file diff --git a/workflow/attachment1.png b/workflow/attachment1.png new file mode 100644 index 0000000..852fc32 Binary files /dev/null and b/workflow/attachment1.png differ diff --git a/workflow/attachment2.png b/workflow/attachment2.png new file mode 100644 index 0000000..9bb3694 Binary files /dev/null and b/workflow/attachment2.png differ diff --git a/workflow/merge1.png b/workflow/merge1.png new file mode 100644 index 0000000..a94b940 Binary files /dev/null and b/workflow/merge1.png differ diff --git a/workflow/merge2.png b/workflow/merge2.png new file mode 100644 index 0000000..17827a2 Binary files /dev/null and b/workflow/merge2.png differ diff --git a/workflow/workflow.md b/workflow/workflow.md new file mode 100644 index 0000000..38c166e --- /dev/null +++ b/workflow/workflow.md @@ -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“,完成合并请求的创建。 \ No newline at end of file diff --git a/workflow/workflow.png b/workflow/workflow.png new file mode 100644 index 0000000..4aa7f5f Binary files /dev/null and b/workflow/workflow.png differ