收藏 分销(赏)

Redhat重构初探.doc

上传人:仙人****88 文档编号:12021418 上传时间:2025-08-28 格式:DOC 页数:13 大小:168KB 下载积分:10 金币
下载 相关 举报
Redhat重构初探.doc_第1页
第1页 / 共13页
Redhat重构初探.doc_第2页
第2页 / 共13页


点击查看更多>>
资源描述
Redhat 重构初探 简介 GNU/Linux开源,这个意义实在是非常的广泛,目前在distrowatch上表现活跃的300个发行版代表了GNU/Linux的主流,然而细心的Linux爱好者会发现CentOS-based distribution designed 、based on Slackware Linux、a distribution built from source software packages for Red Hat Enterprise Linux、a user-friendly Ubuntu-based distribution、an Debian-based distribution等关键词汇,目前大多数的发行版基本上都是源于Redhat、Debian/Ubuntu, Suse, Slackware等版本的衍生态,而构建Based Distribution的目的有很多,不乏有技术交流、功能完善、以及管理、更新Bug软件包等需求,同样这些Based Distribution也为Linux爱好者构建自己的Linux发行版本提供了很好的参照。本文作为独辟蹊径的系列文章,将带领大家初探基于Cenotos 5.2的Linux发行版构建方式,为进一步深入研究提供一个基础。 Linux 启动过程   要实现基于Centos的Linux发行版本的构建,首先需要了解一下Linux启动过程以及Linux启动文件相关的了解,同时要对Linux发行版本的光盘结构以及软件包的结构进行了解分析。从主机加电到系统服务加载运行,Linux的启动(Linux安装的过程雷同)大致需要经历如下的过程: 第一阶段: 加载bios的硬件信息,并获取第一个启动的设备的代号;读取第一个启动设备的mbr的引导加载程序(lilo或grub)的启动信息;加载核心操作系统的核心信息,核心开始解压缩,并且尝试驱动所有硬件设备; 分析此阶段是很有价值的,即便是Linux系统的安装也需要加载内核并解压内核、加载各类外设的驱动信息,构建一个最小化的Linux的文件系统以执行第二阶段的进程。 第二阶段: 核心执行init程序并获取运行信息;init执行/etc/rc.d/rc.sysinit文件;启动核心的外挂模块(/etc/modprobe.conf);init执行运行的各个批处理文件(Scripts);init执行/etc/rc.d/rc.local文件;执行/bin/login程序,等待用户登陆;登陆之后开始以shell控制主机。 Linux 安装程序架构 通俗的一个说法,Linux的光盘安装就是在第一阶段由stage2.img 构建产生的最小化的Linux文件系统之上运行anaconda之类的安装程序,完成Linux系统的安装过程。在Linux安装过程中第二阶段就是运行anaconda并配合系统安装预设选项完成对系统安装。   构建Base Centos Distribution的Linux发行版可以简单分为两种方式,第一种是通过结合Kickstart安装预配置文件对Centos系统安装的软件包并结合Kickstart的post及pre的脚本对安装的系统进行初始化的配置;第二种方式是通过添加修改stage2.img所生成的Linux文件系统达到定制内核、在安装过程添加定义的向导信息等。第一种方式实现便捷、Kickstart有X界面工具操作也相对简单,如要略去光盘中不安装不需要的软件包,并添加第三方的rpm或者tar.gz源码包,就需要深入研究repodata中的comps.xml的基于yum的软件包依赖关系的定义,并能够有基本的shell脚本的累加能力,将要安装的软件包及设置通过脚本实现。相对第二种方式的不足之处就是还是使用Centos的系统并没有对内核或其他参数做明确的发布调整,故此第二种方式就深入修改stage2.img及anaconda相关的配置实现,以达到发布独立有别于Base Centos Distribution的Linux版本。   基于Cenotos的Linux发行版的目的是为了在系统中能够快速,正确地建立Linux系统环境。实现的方式以分析Centos的安装光盘为起点,在掌握对应的技巧方法,同时建立相应的测试环境。 Centos 5.2 光盘架构 以centos 5.2的DVD介质为例,光盘中包含的主要与定制相关的目录如下: isolinux目录存放光盘启动时的安装界面信息 repodata目录是与RPM包安装相关的依赖信息 images目录包括了必要启动映像文件 CentOS目录存放安装软件包信息 .discinfo文件是安装介质的识别信息,此文件不可缺少。   下面将重点剖析一下images与isolinux的目录中的文件及其作用,相对Centos与repodata的目录在深度定制时的意义要大得多。 images文件夹包含了引导启动的映像文件,主要的为boot.iso文件其中包含信息如下: |----vmlinuz Linux内核 |----ldlinux.sys 引导Linux的系统文件 |----syslinux.cfg Linux内核引导参数配置文件 |----initrd.img 内存虚拟文件系统映像文件 |----*.msg文件 引导时的各种提示信息文件 其中,initrd.img为Linux ext2文件系统,构成如下: initrd.img |----/bin |----/dev |----/etc |----/module |----/sbin ------ loader 安装程序装载器 |----/tmp |----/var 可执行文件/sbin/loader的任务是判断安装介质的有效性,并从中执行安装程序。   在系统启动时被执行后在内存建立起了Linux内核,并根据配置文件syslinux.cfg装载虚拟文件系统,形成了完整的Linux 系统,为后续的工作提供了必要的操作系统环境。可以通过如下命令查看boot.iso中的文件: #mount -o loop boot.iso /mnt #cd /mnt ## tree . |-- TRANS.TBL `-- isolinux |-- TRANS.TBL |-- boot.cat |-- boot.msg |-- general.msg |-- initrd.img |-- isolinux.bin |-- isolinux.cfg |-- memtest |-- options.msg |-- param.msg |-- rescue.msg |-- splash.lss `-- vmlinuz images文件夹的stage2.img 是当安装介质为CD-ROM时的安装程序映像文件。 这里主要讨论stage2.img的内容 stage2.img           |----/etc         |----/modules         |----/proc         |----/usr----/bin----anaconda         安装程序主执行文件         |         |------/lib-----/anaconda                安装程序脚本文件目录      |          |----/installclasses                 |          |----/iw         |          |----/texttw                         |          |----*.py         |         |------/share---/anaconda                安装程序资源文件目录          |         |----/help         |                   |----/pixmaps 安装引导图形资源目录,包括安装过程中使用到的所有位图,图标,可以通过GMIP等工具修改   stage2.img映像文件中的主要部分是安装程序anaconda,它的主执行体是/usr/bin下的anaconda,由其调用的大量例程分布在/usr/lib/anaconda下,而安装过程中要用到的资源文件分布在/usr/share/anaconda下。可以通过执行如下命令具体查看stage2.img中的内容: #mount -o loop -t squashfs stage2.img /mnt #cd /mnt #ls etc lib modules proc usr var 顺带说一下anaconda安装程序,主要用Python语言写成,它是一种解释性的,面向对象的脚本语言,在其源码目录中有很多py的文件就是。要全面完成基于Centos的Linux发行版,使用和学习shell、Python是很有必要的,:-D anaconda   |-------------------/bootdisk 启动盘目录   |-------------------/docs 文档目录   |-------------------/help 安装过程帮助系统目录   |-------------------/installclasses 安装类型分类目录,常由四个文件workstation.py , server.py , laptop.py和custom.py来描述workstation(工作站)安装类型,server(服务器)安装类型,laptop(膝上型电脑)安装类型和custom(自定义)安装类型。   |-------------------/iw 安装各步骤响应目录,子目录中各文件定义了在图形界面安装状态时各步骤对Next和Prev的响应函数。   |-------------------/loader 安装程序装载器目录   |-------------------/pixmap 图形资源目录,包括安装过程中使用到的所有位图,图标。   |-------------------/utils 安装程序实用工具目录   |-------------------*.py 各Python脚本文件 基于Centos的Linux发行版构建流程 定制centos linux 发行版本实例(confernce安装盘) 通过上面的内容分析,接下来具体定制一个基于Centos的Linux发行版本的实践过程,并通过脚本安装Infowarelab conference。 第一步:导入yum原验证密码信息 导入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 -) 第三步:根据install.log生成comps.xml 依据完整的安装日志 /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软件包 建立RPM目录,临时存放复制需要rpm软件包, #mkdir /RPM cprpm.sh脚本清单 cat cprpm.sh #!/bin/bash DEBUG=0 DVD_CD=/mnt ALL_RPMS_DIR=/mnt/CentOS DVD_RPMS_DIR=/RPM packages_list=/root/packages.list number_of_packages=`cat $packages_list | wc -l` i=1 while [ $i -le $number_of_packages ] ; do line=`head -n $i $packages_list | tail -n -1` name=`echo $line | awk '{print $1}'` version=`echo $line | awk '{print $3}' | cut -f 2 -d :` if [ $DEBUG -eq "1" ] ; then echo $i: $line echo $name echo $version fi if [ $DEBUG -eq "1" ] ; then ls $ALL_RPMS_DIR/$name-$version* if [ $? -ne 0 ] ; then echo "cp $ALL_RPMS_DIR/$name-$version* " fi else echo "cp $ALL_RPMS_DIR/$name-$version* $DVD_RPMS_DIR/" cp $ALL_RPMS_DIR/$name-$version* $DVD_RPMS_DIR/ # in case the copy failed if [ $? -ne 0 ] ; then echo "cp $ALL_RPMS_DIR/$name-$version* " cp $ALL_RPMS_DIR/$name* $DVD_RPMS_DIR/ fi fi i=`expr $i + 1` 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,创建一个包含自动应答信息的典型的安装配置脚本。结合使用Kickstart文件中的%post安装后的脚本,可以通过默认的shell脚本语法实现文件的下载、软件包的编译等工作,进一步达到发布定制的需求。 建立Kickstart文件并命名为ks.cfg # Kickstart file automatically generated by anaconda. lang en_US langsupport zh_CN --default=en_US keyboard us mouse timezone --utc GMT rootpw a poweroff text install cdrom bootloader --location=mbr zerombr yes clearpart --all part /boot --fstype ext3 --size 100 --asprimary part / --fstype ext3 --size 10480 --asprimary part swap --size 2048 --asprimary part /ericsson --fstype ext3 --grow --size 1 --asprimary auth --useshadow --enablemd5 network --bootproto=static --ip=192.168.1.1 --netmask=255.255.255.0 --gateway=192.168.1.1 --nameserver=192.168.1.1 --device=eth0 --hostname localhost.localdomain firewall --disabled selinux --disabled skipx #Package install information %packages --ignoredeps --ignoremissing @ development-tools @ legacy-software-development @ chinese-support elinks emacs expect iptraf nmap ntp screen sysstat net-snmp net-snmp-libs net-snmp-utils vim-enhanced %post --log=/root/install-post.log /bin/mount /dev/cdrom /media /bin/sh /media/Conference/ConferenceInstall.sh /usr/bin/eject sleep 1 将confernce安装程序aConferenceinstall.sh放入光盘的conference目录, #!/bin/bash # #author : King.huang # #Version : box3.2-ericsson #Date : 2010-04-06 # # # [ -f /etc/profile ] && . /etc/profile [ -f ~/.bashrc ] && . ~/.bashrc BASEDIR=`dirname ${0}` OPENSSL=${BASEDIR}/pkts/openssl-0.9.7g.x86_64.tar.bz2 APR=${BASEDIR}/pkts/apr-1.2.7-x86_64.tar.bz2 APPDIR=${BASEDIR}/application.zip UPDATEIP=${BASEDIR}/scripts/ip.sh SCRIPT=${BASEDIR}/scripts PATCH=${BASEDIR}/patch # #step 1: unzip app package,copy scripts, set exec permission # unzip ${APPDIR} -d / >/root/.install_unzip 2>&1 rsync -av ${PATCH}/getlicense.sh /ericsson/webconsole/local/rt/ chmod +x /ericsson/webconsole/local/rt/getlicense.sh chmod -R +x /ericsson/webconsole/* chmod -R +x /ericsson/conference/* chmod -R +x /ericsson/scripts/* # #step 2: unzip sys package; # rpm -qa | grep "openssl-devel" | grep "0\.9\.7g" || rpm -e --nodeps openssl-devel [ -d /usr/local/openssl ] && rm -rf /usr/local/openssl tar -jxvf ${OPENSSL} -C / [ -d /usr/local/apr ] && rm -rf /usr/local/apr tar -jxvf ${APR} -C / [ -f /lib64/libssl.so.0.9.7 ] && rm -f libssl.so.0.9.7 ln -s /usr/local/openssl/lib/libssl.so.0.9.7 /lib64 [ -f /lib64/libcrypto.so.0.9.7 ] && rm -f /lib/libcrypto.so.0.9.7 ln -s /usr/local/openssl/lib/libcrypto.so.0.9.7 /lib64 # #update cronolog # rsync -av ${BASEDIR}/pkts/crono* /usr/local/sbin chmod +4755 /usr/local/sbin/crono* rsync -av ${BASEDIR}/pkts/boxcron /etc/cron.d/ # #add user for mysql # groupadd mysql && useradd -g mysql mysql rpm -ivh ${BASEDIR}/pkts/mysql-libs-5.0.68-1.el4_6.x86_64.rpm #install sun kerne rpm -ivh ${BASEDIR}/pkts/sun-pci-e-gigabit-kernel-7.6.5.1-1.src.rpm cd /usr/src/redhat/SOURCES/ tar zxf sun-pci-e-gigabit-kernel-7.6.5.1.tar.gz cd sun-pci-e-gigabit-kernel-7.6.5.1/src make make install cd - >/dev/null # #install usbdaemon # #interface rsync -av ${BASEDIR}/interface/libboxmenu.so /lib64 rsync -av ${BASEDIR}/interface/mingetty /sbin/ rsync -av ${BASEDIR}/interface/login /bin/ cat >>/root/.bashrc<<EOF export PATH=$PATH:/ericsson/scripts/ if tty | grep '\/tty' >/dev/null 2>&1; then cd /ericsson/interface/ && ./menu_gen cd fi alias vi='vim' EOF [ ! -d /root/.ssh/ ] && mkdir -p /root/.ssh rsync -av ${BASEDIR}/pkts/id_dsa* /root/.ssh/ chmod 600 /root/.ssh/id_dsa chmod 644 /root/.ssh/id_dsa.pub cat /root/.ssh/id_dsa.pub >/root/.ssh/authorized_keys cat >>/root/.bashrc<<EOF /ericsson/scripts/updatessh.sh EOF # # set mysql # groupadd mysql && useradd -g mysql mysql cp -a ${BASEDIR}/config_file/f /etc/ cp -a ${BASEDIR}/config_file/mysql /etc/init.d/ chmod +x /etc/init.d/mysql cd /ericsson/mysql chown -R root . chown -R mysql data chgrp -R mysql . [ -f /usr/bin/mysql ] && rm -f /usr/bin/mysql ln -s /ericsson/mysql/bin/mysql /usr/bin/ [ -f /usr/bin/mysqldump ] && rm -f /usr/bin/mysqldump ln -s /ericsson/mysql/bin/mysqldump /usr/bin/ # #step 4:enable auto start # chkconfig --level 345 mysql on # #update /etc/profile & /etc/hosts # cat >>/etc/hosts<<EOF 127.0.0.1 cem_commondb.infowarelab.mysql 127.0.0.1 branding.infowarelab.mysql 127.0.0.1 cem_meeting.infowarelab.mysql 127.0.0.1 cem_domaindb.infowarelab.mysql 127.0.0.1 billing_db.infowarelab.mysql 127.0.0.1 configdb.infowarelab.mysql 127.0.0.1 cemimdb.infowarelab.mysql 127.0.0.1 cem_cas.infowarelab.mysql 127.0.0.1 rtdb.infowarelab.mysql 127.0.0.1 etsvr.infowarelab.mysql EOF cat >>/etc/profile<<EOF export IWLAB_RT_HOME=/ericsson/conference export IWLAB_IM_HOME=/ericsson/conference EOF cat >>/usr/bin/boxmenu<<EOF cd /ericsson/interface/ && ./menu_gen cd EOF chmod +x /usr/bin/boxmenu # #change the resolution of console # sed -i '/^[[:blank:]]\{1,\}kernel/s/$/ vga=789/g' /boot/grub/menu.lst sed -i 's/^#UseDNS yes/UseDNS no/' /etc/ssh/sshd_config # #some patch # chmod +x /ericsson/webconsole/slim/*.sh # #install perlmodule modules="CompressRawZlib ArchiveZip ConfigIniFiles" for module in $modules do rsync -av ${BASEDIR}/pkts/$module /tmp cd /tmp/$module /usr/bin/perl Makefile.PL #>/dev/null 2>>/tmp/err.log /usr/bin/make #>/dev/null 2>>/tmp/err.log /usr/bin/make install #>/dev/null 2>>/tmp/err.log cd ->/dev/null done #add version file #add version file mkdir -p /ericsson/.version rsync -av ${BASEDIR}/version /ericsson/.version/version chmod 644 /ericsson/apache2/conf/passwd/passwords #copy file siteinfo.txt rsync -av ${BASEDIR}/config_file/siteinfo.txt /root #set open files echo "fs.file-max=10240" >>/etc/sysctl.conf echo "* - nofile 10240" >>/etc/security/limits.conf #install grub image [ -f /boot/grub/splash.xpm.gz ] && rm -f /boot/grub/splash.xpm.gz rsync -av ${BASEDIR}/pkts/splash.xpm.gz /boot/grub #finish # 第六步:isolinux.cfg 将ks.cfg添加进入到isolinux.cfg,已实现定制的Kickstart脚本能够被正确的执行。 default all prompt 1 #timeout 600 display boot.msg #F1 boot.msg #F2 options.msg #F3 general.msg #F4 param.msg #F5 rescue.msg #F7 snake.msg label all kernel vmlinuz append ks=cdrom:/ks.cfg initrd=initrd.img ramdisk_size=8192 label linux kernel vmlinuz append initrd=initrd.img ramdisk_size=8192 label text kernel vmlinuz append initrd=initrd.img text ramdisk_size=8192 label expert kernel vmlinuz append expert initrd=initrd.img ramdisk_size=8192 label lowres kernel vmlinuz append initrd=initrd.img lowres ramdisk_size=8192 label local localboot 1 label memtest86 kernel memtest append - 第七步:定制开机启动界面方式 启动画面用的是一种比较奇怪的格式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文件如下 splash.lss - Welcome to Conference System installation. - The installation will totally format hard disk. - Please backup all the important data before installation. - To install standalone node, Press 0b<ENTER>07 - To install PORTAL node, Press 0bPORTAL <ENTER>07 - To install MCU node , Press 0bMCU <ENTER>07 - To install CIS node, Press 0bCIS <ENTER>0 图:简单修改的开机启动画面 第八步:生成ISO 制作生成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 第九步:测试光盘 测试制作的安装光盘,通VMware、XEN、VirtualBox虚拟机测试如果没有出现问题,在PC上就可以顺利的安装。 图:安装后的目录信息 后记:本文讨论的是一个实现Base Centos Linux发行版的实现方法,同时再次提醒奔放是基于Centos 5.2的实现方式。
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服