设为首页收藏本站

LinuxTone | 运维专家网论坛 - 最棒的Linux运维与开源架构技术交流社区!

 找回密码
 注册

QQ登录

只需一步,快速开始

#公告#抱歉,网站将关闭,不再开放。由于PC时代已远逝 。在这个后移动互联网时代,我们继续携手前行,保持对技术的热情。共同构建linuxtone知识星球欢迎加入,一起讨论技术、招聘人才、分享资源。请新老linuxtone人 扫码移步到 知识星球:linuxtone

学习是一种信仰!分享是一种快乐!能力= 心态 * 沟通 * 知识 (你的每一天需要正能量!)

 网站的发展需要你贡献一份力量!希望你能每天坚持看贴1小时,并回答网友的问题!祝你在浏览论坛的过程中取得进步!谢谢!linuxtone加油!大家加油! 友情提示: 你今天学习了吗?你今天进步了吗?少一点抱怨!多一点进步!Life is short ! Why not linuxtone ?  

网站的发展、感谢每位坛友的努力!

查看: 8957|回复: 10

独辟蹊径网络安装系列之Redhat衍生版重构初探 [复制链接]

LT管理团队

向Linuxsir的哈密瓜大哥看齐 ...

Rank: 9Rank: 9Rank: 9

签到
520
注册时间
2008-6-5
最后登录
2019-1-23
在线时间
1828 小时
阅读权限
200
积分
63902
帖子
715
主题
199
精华
4
UID
46

LT同学

发表于 2009-4-9 09:44:13 |显示全部楼层
GNU/Linux开源,这个意义实在是非常的广泛,目前在distrowatch上表现活跃的300个发行版代表了GNU/Linux的主流,然而细心的Linux爱好者会发现CentOS-based distribution designed based on Slackware Linuxa distribution built from source software packages for Red Hat Enterprise Linuxa user-friendly Ubuntu-based distributionan Debian-based distribution等关键词汇,目前大多数的发行版基本上都是源于RedhatDebian/UbuntuSuseSlackware等版本的衍生态,而构建Based Distribution的目的有很多,不乏有技术交流、功能完善、以及管理、更新Bug软件包等需求,同样这些Based Distribution也为Linux爱好者构建自己的Linux发行版本提供了很好的参照。本文作为独辟蹊径的系列文章,将带领大家初探基于Cenotos 5.2Linux发行版构建方式,为进一步深入研究提供一个基础。
要实现基于CentosLinux发行版本的构建,首先需要了解一下Linux启动过程以及Linux启动文件相关的了解,同时要对Linux发行版本的光盘结构以及软件包的结构进行了解分析。从主机加电到系统服务加载运行,Linux的启动(Linux安装的过程雷同)大致需要经历如下的过程:
第一阶段:
加载bios的硬件信息,并获取第一个启动的设备的代号;读取第一个启动设备的mbr的引导加载程序(lilogrub)的启动信息;加载核心操作系统的核心信息,核心开始解压缩,并且尝试驱动所有硬件设备;
分析此阶段是很有价值的,即便是Linux系统的安装也需要加载内核并解压内核、加载各类外设的驱动信息,构建一个最小化的Linux的文件系统以执行第二阶段的进程。
第二阶段:
核心执行init程序并获取运行信息;init执行/etc/rc.d/rc.sysinit文件;启动核心的外挂模块(/etc/modprobe.conf)init执行运行的各个批处理文件(Scripts);init执行/etc/rc.d/rc.local文件;执行/bin/login程序,等待用户登陆;登陆之后开始以shell控制主机。
通俗的一个说法,Linux的光盘安装就是在第一阶段由stage2.img 构建产生的最小化的Linux文件系统之上运行anaconda之类的安装程序,完成Linux系统的安装过程。在Linux安装过程中第二阶段就是运行anaconda并配合系统安装预设选项完成对系统安装。
构建Base Centos DistributionLinux发行版可以简单分为两种方式,第一种是通过结合Kickstart安装预配置文件对Centos系统安装的软件包并结合Kickstartpostpre的脚本对安装的系统进行初始化的配置;第二种方式是通过添加修改stage2.img所生成的Linux文件系统达到定制内核、在安装过程添加定义的向导信息等。第一种方式实现便捷、KickstartX界面工具操作也相对简单,如要略去光盘中不安装不需要的软件包,并添加第三方的rpm或者tar.gz源码包,就需要深入研究repodata中的comps.xml的基于yum的软件包依赖关系的定义,并能够有基本的shell脚本的累加能力,将要安装的软件包及设置通过脚本实现。相对第二种方式的不足之处就是还是使用Centos的系统并没有对内核或其他参数做明确的发布调整,故此第二种方式就深入修改stage2.imganaconda相关的配置实现,以达到发布独立有别于Base Centos DistributionLinux版本。
基于CenotosLinux发行版的目的是为了在系统中能够快速,正确地建立Linux系统环境。实现的方式以分析Centos的安装光盘为起点,在掌握对应的技巧方法,同时建立相应的测试环境。
centos 5.2DVD介质为例,光盘中包含的主要与定制相关的目录如下:
  1. isolinux目录存放光盘启动时的安装界面信息
  2. repodata目录是与RPM包安装相关的依赖信息
  3. images目录包括了必要启动映像文件
  4. CentOS目录存放安装软件包信息.
  5. discinfo文件是安装介质的识别信息,此文件不可缺少。
复制代码
下面将重点剖析一下imagesisolinux的目录中的文件及其作用,相对Centosrepodata的目录在深度定制时的意义要大得多。
images文件夹包含了引导启动的映像文件,主要的为boot.iso文件其中包含信息如下:
  1. |----vmlinuz Linux内核
  2. |----ldlinux.sys 引导Linux的系统文件
  3. |----syslinux.cfg Linux内核引导参数配置文件
  4. |----initrd.img 内存虚拟文件系统映像文件
  5. |----*.msg文件 引导时的各种提示信息文件
  6. 其中,initrd.img为Linux ext2文件系统,构成如下:

  7. initrd.img
  8. |----/bin
  9. |----/dev
  10. |----/etc
  11. |----/module
  12. |----/sbin ------ loader
  13. 安装程序装载器
  14. |----/tmp
  15. |----/var
  16. 可执行文件/sbin/loader的任务是判断安装介质的有效性,并从中执行安装程序。
复制代码
在系统启动时被执行后在内存建立起了Linux内核,并根据配置文件syslinux.cfg装载虚拟文件系统,形成了完整的Linux 系统,为后续的工作提供了必要的操作系统环境。可以通过如下命令查看boot.iso中的文件:
  1. #mount -o loop boot.iso /mnt
  2. #cd /mnt
  3. ## tree
  4. .
  5. |-- TRANS.TBL
  6. |-- isolinux
  7. |-- TRANS.TBL
  8. |-- boot.cat
  9. |-- boot.msg
  10. |-- general.msg
  11. |-- initrd.img
  12. |-- isolinux.bin
  13. |-- isolinux.cfg
  14. |-- memtest
  15. |-- options.msg
  16. |-- param.msg
  17. |-- rescue.msg
  18. |-- splash.lss
  19. |-- vmlinuz
复制代码
images文件夹的stage2.img 是当安装介质为CD-ROM时的安装程序映像文件。
这里主要讨论stage2.img的内容
  1. stage2.img        
  2.   |----/etc
  3.         |----/modules
  4.         |----/proc
  5.         |----/usr----/bin----anaconda        
  6. 安装程序主执行文件
  7.         |
  8.         |------/lib-----/anaconda               
  9. 安装程序脚本文件目录
  10.      |          |----/installclasses        
  11.         |          |----/iw
  12.         |          |----/texttw               
  13.          |          |----*.py
  14.         |
  15.         |------/share---/anaconda               
  16. 安装程序资源文件目录
  17.          |         |----/help
  18.         |                   |----/pixmaps
  19. 安装引导图形资源目录,包括安装过程中使用到的所有位图,图标,可以通过GMIP等工具修改
复制代码
stage2.img映像文件中的主要部分是安装程序anaconda,它的主执行体是/usr/bin下的anaconda,由其调用的大量例程分布在/usr/lib/anaconda下,而安装过程中要用到的资源文件分布在/usr/share/anaconda下。可以通过执行如下命令具体查看stage2.img中的内容:
  1. #mount -o loop -t squashfs stage2.img /mnt
  2. #cd /mnt
  3. #ls
  4. etc lib modules proc usr var
复制代码
顺带说一下anaconda安装程序,主要用Python语言写成,它是一种解释性的,面向对象的脚本语言,在其源码目录中有很多py的文件就是。要全面完成基于CentosLinux发行版,使用和学习shellPython是很有必要的,:-D
  1. anaconda
  2.   |-------------------/bootdisk
  3. 启动盘目录
  4.   |-------------------/docs
  5. 文档目录
  6.   |-------------------/help
  7. 安装过程帮助系统目录
  8.   |-------------------/installclasses
  9. 安装类型分类目录,常由四个文件workstation.py , server.py , laptop.py和custom.py来描述workstation(工作站)安装类型,server(服务器)安装类型,laptop(膝上型电脑)安装类型和custom(自定义)安装类型。
  10.   |-------------------/iw
  11. 安装各步骤响应目录,子目录中各文件定义了在图形界面安装状态时各步骤对Next和Prev的响应函数。
  12.   |-------------------/loader
  13. 安装程序装载器目录
  14.   |-------------------/pixmap
  15. 图形资源目录,包括安装过程中使用到的所有位图,图标。
  16.   |-------------------/utils
  17. 安装程序实用工具目录
  18.   |-------------------*.py
  19. 各Python脚本文件
复制代码
1.gif

图:基于CentosLinux发行版构建流程
通过上面的内容分析,接下俩具体定制一个基于CentosLinux发行版本的实践过程,并通过脚本安装openvpn
一、导入Centos yum源的验证密码信息,并安装必要的软件包
#rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY*
#yum -y install anaconda anaconda-runtime
#yum -y install createrepo
二、将Centos DVD光盘镜像文件复制到硬盘Centos5制作目录中
#mkdir /CentOS5
#mount -o loop /home/CentOS-5.2-i386-bin-DVD.iso /mnt
#cp -ar /mnt/* . 操作结束需要检查.discinfo是否复制
#tar -cf - .|(cd /CentOS5; tar -xvpf -)
三、依据完整的安装日志 /root/install.log记录的软件包信息,结合shell脚本将rpm软件包复制到构建目录CentOS中,通过createrepo 生成comps.xml
根据目标主机的install.log文件生成package.list软件包清单
#cat install.log | grep Installing | sed 's/Installing //g' > packages.list
建立RPM目录,临时存放复制需要rpm软件包,
#mkdir /RPM
cprpm.sh脚本清单
#cat cprpm.sh
  1. #!/bin/bash
  2. DEBUG=0
  3. DVD_CD=/mnt
  4. ALL_RPMS_DIR=/mnt/CentOS
  5. DVD_RPMS_DIR=/RPM
  6. packages_list=/root/packages.list
  7. number_of_packages=`cat $packages_list | wc -l`
  8. i=1
  9. while [ $i -le $number_of_packages ] ; do
  10. line=`head -n $i $packages_list | tail -n -1`
  11. name=`echo $line | awk '{print $1}'`
  12. version=`echo $line | awk '{print $3}' | cut -f 2 -d :`
  13. if [ $DEBUG -eq "1" ] ; then
  14. echo $i: $line
  15. echo $name
  16. echo $version
  17. fi
  18. if [ $DEBUG -eq "1" ] ; then
  19. ls $ALL_RPMS_DIR/$name-$version*
  20. if [ $? -ne 0 ] ; then
  21. echo "cp $ALL_RPMS_DIR/$name-$version* "
  22. fi
  23. else
  24. echo "cp $ALL_RPMS_DIR/$name-$version* $DVD_RPMS_DIR/"
  25. cp $ALL_RPMS_DIR/$name-$version* $DVD_RPMS_DIR/
  26. # in case the copy failed
  27. if [ $? -ne 0 ] ; then
  28. echo "cp $ALL_RPMS_DIR/$name-$version* "
  29. cp $ALL_RPMS_DIR/$name* $DVD_RPMS_DIR/
  30. fi
  31. fi
  32. i=`expr $i + 1`
  33. done
复制代码
执行脚本将目标系统必要的rpm复制到/Centos5/CentOS目录
#rm -rf /CentOS5/CentOS
#cp -a /myRPM/* /CentOS5/CentOS
返回到/CentOS5 目录下,执行createrepo程序生成repodata下的comps.xml文件
#cd /CentOS5
#createrepo -g repodata/comps.xml .
四、使用Kickstart,创建一个包含自动应答信息的典型的安装配置脚本。结合使用Kickstart文件中的%post安装后的脚本,可以通过默认的shell脚本语法实现文件的下载、软件包的编译等工作,进一步达到发布定制的需求。
建立Kickstart文件并命名为ks1483.cfg
  1. # Kickstart file automatically generated by anaconda.

  2. install
  3. cdrom
  4. lang en_US.UTF-8
  5. keyboard us
  6. network
  7. --device eth0 --bootproto static --ip 172.16.1.148 --netmask
  8. 255.255.0.0 --gateway 172.16.1.9 --nameserver 172.16.1.9 --hostname
  9. trs.lvs.local
  10. reboot
  11. rootpw --iscrypted $1$t5sWRB7u$MJAcDD0IBMivcTMP65YBC.
  12. firewall --enabled --port=22:tcp
  13. authconfig --enableshadow --enablemd5
  14. selinux --enforcing
  15. timezone --utc Asia/Shanghai
  16. bootloader --location=mbr --driveorder=sda
  17. # The following is the partition information you requested
  18. # Note that any partitions you deleted are not expressed
  19. # here so unless you clear all partitions first, this is
  20. # not guaranteed to work
  21. zerombr yes
  22. clearpart --all --drives=sda
  23. part /boot --fstype ext3 --size=100 --ondisk=sda
  24. part pv.2 --size=0 --grow --ondisk=sda
  25. volgroup VolGroup00 --pesize=32768 pv.2
  26. logvol swap --fstype swap --name=LogVol01 --vgname=VolGroup00 --size=1000 --grow --maxsize=1984
  27. logvol / --fstype ext3 --name=LogVol00 --vgname=VolGroup00 --size=1024 --grow

  28. %packages
  29. @editors
  30. @text-internet
  31. @core
  32. @base
  33. @development-libs
  34. @development-tools
  35. device-mapper-multipath
  36. -sysreport
  37. %post
  38. mount /dev/cdrom /mnt
  39. cp -rf /mnt/lvsheat /usr/local/src
  40. cd /usr/local/src/lvsheat
  41. tar zxvf lzo-2.03.tar.gz -C /usr/src
  42. cd /usr/src/lzo-2.03
  43. ./configure && make && make install
  44. cd -
  45. tar zxvf openvpn-2.0.9.tar.gz -C /usr/src
  46. cd /usr/src/openvpn-2.0.9
  47. ./configure && make && make install
复制代码
将光盘中的lvsheat目录中的openvpn编译需要的软件包通过脚本复制到系统的/usr/local/src/lvsheat目录并解压编译对应的源码包,完成对openvpn的编译安装操作。
ks1483.cfg添加进入到isolinux.cfg,已实现定制的Kickstart脚本能够被正确的执行。
#cat isolinux.cfg
  1. default auto
  2. prompt 1
  3. timeout 600
  4. display boot.msg
  5. F1 boot.msg
  6. F2 options.msg
  7. F3 general.msg
  8. F4 param.msg
  9. F5 rescue.msg
  10. label linux
  11. kernel vmlinuz
  12. append initrd=initrd.img
  13. label text
  14. kernel vmlinuz
  15. append initrd=initrd.img text
  16. label auto
  17. kernel vmlinuz
  18. append ks=cdrom:/isolinux/ks1483.cfg initrd=initrd.img
  19. label ks
  20. kernel vmlinuz
  21. append ks initrd=initrd.img
  22. label local
  23. localboot 1
  24. label memtest86
  25. kernel memtest
  26. append -
复制代码
五、制作生成ISO文件
#cd /CentOS5/
#mkisofs-R -J -T -r -l -d -allow-multidot -allow-leading-dots -no-bak -o../home/CentOS.iso -b isolinux/isolinux.bin -c isolinux/boot.cat-no-emul-boot -boot-load-size 4 -boot-info-table .
扩展方式:
1、关于修改anaconda中的资源如定义安装界面的方式
安装yum install squashfs-tools
anaconda资源修改:
加载anaconda文件
#mkdir /mnt/anaconda
#mount -o loop -t squashfs stage2.img /mnt/anaconda
然后进入到/mnt/anaconda中修改定制具体的文件。
打包anaconda文件
#mkfs.cramfs /mnt/anaconda stage2.img
或者执行
#mksquashfs /mnt/anaconda /tmp/stage2.img.new -all-root -no-fragments
2.jpg

图:简单定制的安装过程背景图
2、定制开机启动界面方式
启动画面用的是一种比较奇怪的格式lss16,它限制图片使用16种颜色,除去前景和背景色只能有14种颜色。我们需要ppmtolss16 giftopnm等程序,系统一般默认都安装了。
一般用gimp生成一个index模式的gif图形,颜色限制为14, 然后通过如下的办法进行转:
安装yum -y install syslinux
giftopnm < splash.gif | ppmtolss16 > splash.lss
如果要编辑一个lss文件先用lsstoppm转成ppm格式,然后用gimp进行编辑.
另外你还需要修改isolinux/boot.msg文件如下
  1. ^L
  2. ^Xsplash.lss

  3. -  Babel Com Australia Fedora Core Linux installer.

  4. -  Use the function keys listed below for more information.

  5. ^O02[F1-Main] [F2-Options] [F3-General] [F4-Kernel] [F5-Rescue]^O07
复制代码
3.jpg

图:简单修改的开机启动画面
六、测试制作的安装光盘,通VMwareXENVirtualBox虚拟机测试如果没有出现问题,在PC上就可以顺利的安装。
4.jpg

图:安装后的目录信息
后记:本文讨论的是一个实现Base Centos Linux发行版的实现方法,同时再次提醒奔放是基于Centos 5.2的实现方式。也欢迎爱好Linux发行版实现探究的朋友一起来交流。
作者简介:CU网友kns1024wh,目前从事Linux群集方面的具体工作,之前做过多年的IT技术支持、MCT讲师、及REDFLAG的技术合作,技术专长群集、unix主机、AD部署等,您可以通过电子邮件lvsheat@qq.com或者Chinaunix社区与他取得联系。

---------------------------------------------------------------------------
来源:http://linux.chinaunix.net/ebook/doc/2009/04/02/1095757.shtml
已有 1 人评分积分 收起 理由
linuxtone + 12

总评分: 积分 + 12   查看全部评分

哈密瓜!一个热爱linux的水果!
gtalk/msn:hamgua@gmail.com
sina微博:http://weibo.com/hamgua
LTmail:hamgua@linuxtone.org
是雄鹰就有展翅飞翔的时候,不是雄鹰要制造展翅飞翔的时候!

LT管理团队

社区首席勤杂工

Rank: 9Rank: 9Rank: 9

注册时间
2008-5-19
最后登录
2019-5-23
在线时间
1945 小时
阅读权限
200
积分
59165
帖子
2551
主题
1209
精华
25
UID
1

LT总司令

发表于 2009-4-9 10:13:02 |显示全部楼层
好文章!
&amp;lt;-sina_sign,1762622645,2a5b1a59,10-&amp;gt;感谢大家对linuxtone的支持!&amp;lt;/strong&amp;gt;

使用道具 举报

Rank: 7Rank: 7Rank: 7

注册时间
2008-11-27
最后登录
2019-3-21
在线时间
208 小时
阅读权限
100
积分
6501
帖子
772
主题
367
精华
4
UID
632

LT同学

发表于 2009-4-14 22:41:13 |显示全部楼层
这篇真好,
http://hi.baidu.com/ytjwt/

使用道具 举报

LT资深版主

犯强汉者,虽远必诛!

Rank: 8Rank: 8

注册时间
2009-2-1
最后登录
2016-2-19
在线时间
548 小时
阅读权限
150
积分
7434
帖子
824
主题
88
精华
3
UID
1215

LT同学

发表于 2009-4-14 23:15:36 |显示全部楼层
非常不错!
<-sina_sign,1836665025,1->

使用道具 举报

LT资深版主

醉了星星·醉月亮

Rank: 8Rank: 8

注册时间
2009-3-2
最后登录
2018-1-29
在线时间
331 小时
阅读权限
150
积分
10053
帖子
440
主题
59
精华
1
UID
1656

LT同学

发表于 2009-5-19 12:40:41 |显示全部楼层
说明得非常详细,赞>

使用道具 举报

Rank: 1

注册时间
2009-7-27
最后登录
2010-5-13
在线时间
2 小时
阅读权限
1
积分
1
帖子
1
主题
0
精华
0
UID
4440
发表于 2009-7-27 13:22:51 |显示全部楼层
这么详细的文档没人顶?  辜负了搂住一篇红心了

非常感谢!~

使用道具 举报

论坛元老

神马头衔

Rank: 8Rank: 8

注册时间
2009-6-5
最后登录
2019-4-24
在线时间
152 小时
阅读权限
90
积分
23995
帖子
112
主题
13
精华
0
UID
3418
发表于 2011-1-30 10:16:54 |显示全部楼层
很有用的东西东:D:D

使用道具 举报

Rank: 8Rank: 8

注册时间
2010-9-19
最后登录
2019-7-15
在线时间
2934 小时
阅读权限
90
积分
28659
帖子
1325
主题
1149
精华
0
UID
10420
发表于 2011-4-22 11:24:32 |显示全部楼层
有人试过  能用吗

使用道具 举报

Rank: 6Rank: 6

注册时间
2012-6-17
最后登录
2012-8-25
在线时间
9 小时
阅读权限
70
积分
2807
帖子
9
主题
5
精华
0
UID
24268
发表于 2012-6-18 17:58:48 |显示全部楼层
不知道REDFLAG 用上面的方法能否实现

使用道具 举报

Rank: 4

注册时间
2010-7-12
最后登录
2019-7-15
在线时间
2 小时
阅读权限
50
积分
865
帖子
3
主题
1
精华
0
UID
9772
发表于 2012-7-4 09:22:22 |显示全部楼层
不知道有人试过木有,大部分没问题的,我想知道一下diskinfo这个文件的意义

使用道具 举报

论坛元老

深呼吸

Rank: 8Rank: 8

注册时间
2011-6-30
最后登录
2014-5-11
在线时间
112 小时
阅读权限
90
积分
34853
帖子
190
主题
3
精华
0
UID
14772
发表于 2014-1-11 14:13:08 |显示全部楼层
支持,顶起,有空就去看看
<-sina_sign,2469594384,dc5f828b,1->

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

IT运维专家网感谢您的支持

合作联系: QQ:67888954/MSN:cnseek@msn.com/mail:netseek@linuxtone.org

Archiver|手机版|感谢所有关心和支持过LinuxTone的朋友们 转载本站内容请注明原作者名及出处 ( 京ICP备08103151 )   |

GMT+8, 2019-7-16 22:42 , Processed in 0.052179 second(s), 17 queries , Apc On.

Powered by Discuz! X2 Licensed

© 2001-2011 Comsenz Inc.

回顶部