一.制作环境的准备
[shell]# yum -y install anaconda repodata createrepo mkisofs
[shell]# yum -y install anaconda-runtime createrepo yum-utils anacondaanaconda-help busybox-anaconda mkisofs
由于方便制作,我们可以在VMware、vbox、xen等虚拟环境中进行安装,这里我们选用了VMware作为制作环境。
(1)在官方网站上下载CentOS-6.0-x86_64-bin-DVD.iso镜像文件
Wgethttp://mirrors.loosefoot.com/centos/6.0/isos/x86_64/CentOS-6.0-x86_64-bin-DVD1.iso
Wgethttp://mirrors.loosefoot.com/centos/6.0/isos/x86_64/CentOS-6.0-x86_64-bin-DVD2.iso
二.创建定制系统(MediaCentOS基于 CentOS6.0-64 Base server)
*isolinux目录存放光盘启动时的安装界面信息
*images目录包括了必要的启动映像文件
*Packages目录存放安装软件包及信息
*.discinfo文件是安装价质的识别信息
MediaCentOS目录存放媒体中心安装包
Repodata目录存放rpm包依赖信息
[shell]# mkdir /disk
[shell]# mkdir /mnt/cdrom
[shell]# mount –o loop /dev/cdrom /mnt/cdrom
[shell]# cd /mnt/cdrom
[shell]# ls -a .|grep –v “Packages”|xargs -i cp -rp {} /disk
//将所有文件和文件夹拷贝到/disk,除了Packages目录
[shell]# mkdir -p /disk/Packages
[shell]# mkdir –p /disk/MediaCentOS
a.从Base server模式下安装CentOS6.0-64系统root目录下拷贝anaconda-ks.cfg,install.log到定制系统主机 disk 目录下
b. [shell]#cd /disk; awk '/Installing/{print $2}' install.log | xargs –i cp /mnt/cdrom/Packages/{}.rpm Packages/.
5.定制安装控制文件ks.cfg
ks文件主要分为三个部分:
a)系统安装及配置
b)自定义安装准备(%post --nochroot)
c)用户自定义安装(%post)
系统安装及配置一般写在ks.cfg文件最前面,系统安装设置以%post --nochroot为结束标志,接着是用户自定义安装准备部分,以“%post --nochroot”作为开始,以“%post”作为结束,自定义安装部分以“%post”作为开始。一般方便可以直接由root下面的 anaconda-ks.cfg修改。
可用vim直接进行修改也可以用system-config-kickstart图形化工具进行修改
[shell]# vim ks.cfg
修改后内容如下
#platform=x86, AMD64,或 Intel EM64T
#version=DEVEL
# Firewall configuration关闭防火墙
firewall --disabled
# Install OS instead of upgrade覆盖安装
install
# Use CDROM installation media从光驱安装
cdrom
repo --name="CentOS" --baseurl=file:///mnt/source --cost=100
# Root password
rootpw --iscrypted $1$Ro9DjGl8$6bU7DsgPlc9YSAjs1Jj4s1
# System authorization information
auth --useshadow --passalgo=sha512 --enablefingerprint
# Use graphical mode install //图形化安装
graphical
firstboot --disable
# System keyboard //美式键盘
keyboard us
# System language //美式英语
lang en_US
# SELinux configuration //关闭SELinux
selinux --disabled
# Installation logging level
logging --level=info
# Reboot after installation //安装完成后重启
reboot
# System timezone //时区
timezone America/New_York
# Network information设置静态ip
network --bootproto=static --device=eth0 --gateway=192.168.1.1 --ip=192.168.1.2 --netmask=255.255.255.0 --onboot=on
# System bootloader configuration
bootloader --location=mbr --append="crashkernel=auto rhgb quiet"
# Clear the Master Boot Record清除mbr
zerombr
# Partition clearing information //删除所有分区 初始化卷标
clearpart --all --initlabel
# Disk partitioning information系统分区
part /boot --asprimary --fstype="ext4" --ondisk=sda --size=100
part swap --asprimary --fstype="swap" --ondisk=sda --size=2048
part / --asprimary --fstype="ext4" --grow --ondisk=sda --size=1
part /var --fstype="ext4" --ondisk=sda --size=20480
#安装后运行脚本
%post
#RecData格式化硬盘并挂载到/RecData目录下
disk_num=`parted -l | grep "Disk /dev/" | wc -l`
disk1=`parted -l | awk '/Disk \/dev/{print $2}'|sed 's/://g'|sed -n '1p'`
disk2=`parted -l | awk '/Disk \/dev/{print $2}'|sed 's/://g'|sed -n '2p'`
sda_num=`parted $disk1 -s print | awk '/^ /{print $1}'| wc -l`
sdb_num=`parted $disk2 -s print | awk '/^ /{print $1}'| wc -l`
if [ "$disk_num" -gt 1 ]; then
if [ "$sda_num" -eq 0 ]; then
parted $disk1 -s mklabel gpt
parted $disk1 -s -- mkpart primary 0 -1
mkfs.ext4 ${disk1}1
sda_num=1
fi
if [ "$sdb_num" -eq 0 ]; then
parted $disk2 -s mklabel gpt
parted $disk2 -s -- mkpart primary 0 -1
mkfs.ext4 ${disk2}1
sdb_num=1
fi
if [ "$sda_num" -eq 1 ]; then
uuid=`blkid ${disk1}1 | awk '/dev/{print $2}'|sed 's/"//g'`
if [ -z "$uuid" ]; then
uuid=${disk1}1
fsck.ext4 -y ${disk1}1 &
sleep 60
killall -9 fsck.ext4
fi
mkdir -p /RecData
mount ${disk1}1 /RecData
mkdir -p /RecData/{Rec,RecN}
echo "$uuid /RecData ext4 defaults 0 0" >> /etc/fstab
fi
if [ "$sdb_num" -eq 1 ]; then
uuid=`blkid ${disk2}1 | awk '/dev/{print $2}'|sed 's/"//g'`
if [ -z "$uuid" ]; then
uuid=${disk2}1
fsck.ext4 -y ${disk2}1 &
sleep 60
killall -9 fsck.ext4
fi
mkdir -p /RecData
mount ${disk2}1 /RecData
mkdir -p /RecData/{Rec,RecN}
echo "$uuid /RecData ext4 defaults 0 0" >> /etc/fstab
fi
fi
#mount cdrom挂载光驱
mkdir -p /media/cdrom
mount -o loop /dev/cdrom /media/cdrom
#install media center从光碟拷贝媒体中心安装包并进行安装
cp -rf /media/cdrom/MediaCentOS/MediaCenterInstall*.tar.gz /opt/.
cd /opt
chmod 755 -R *
tar xfv MediaCenterInstall*.tar.gz
cd /opt/MediaCenterInstall*/MediaCenter
sh install.sh
cd /opt/MediaCenterInstall*/LiveNode
sh install.sh
rm -rf /opt/MediaCenterInstall*
#boot echo定制系统启动信息(将CentOS字样替换成MediaCentOS)
echo "MediaCentOS Linux release 6.0 (Based on CentOS 6.0)" > /etc/centos-release
sed -i 's/CentOS Linux release 6.0 (Final)/MediaCentOS Linux release 6.0 (Based on CentOS 6.0)/g' /etc/issue
sed -i 's/CentOS Linux release 6.0 (Final)/MediaCentOS Linux release 6.0 (Based on CentOS 6.0)/g' /etc/issue.net
sed -i 's/localhost.localdomain/MediaCentOS/g' /etc/sysconfig/network
sed -i 's/CentOS/MediaCentOS/g' /etc/rc.d/rc.sysinit
sed -i 's/rhgb/ /g' /boot/grub/grub.conf
#close cdrom安装完成弹出光碟
eject
#reboot一切执行完毕后重启
reboot -f
%end
#安装包信息
%packages
@base
@console-internet
@core
@debugging
@directory-client
@hardware-monitoring
@java-platform
@large-systems
@network-file-system-client
@performance
@perl-runtime
@server-platform
@server-policy
certmonger
krb5-workstation
nscd
nss-pam-ldapd
oddjob
pam_krb5
pam_ldap
pax
perl-DBD-SQLite
sgpio
%end
6.修改isolinux.cfg文件
将/Disk/isolinu/目录下的isolinux.cfg修改如下:
default vesamenu.c32
#prompt 1
timeout 600
display boot.msg
menu background splash.jpg
menu title Welcome to MediaCentOS 6.0!
menu color border 0 #ffffffff #00000000
menu color sel 7 #ffffffff #ff000000
menu color title 0 #ffffffff #00000000
menu color tabmsg 0 #ffffffff #00000000
menu color unsel 0 #ffffffff #00000000
menu color hotsel 0 #ff000000 #ffffffff
menu color hotkey 7 #ffffffff #ff000000
menu color scrollbar 0 #ffffffff #00000000
label linux
menu label ^Install an existing system
kernel vmlinuz
append initrd=initrd.img ks=cdrom:/ks.cfg
label Manually
menu label Manually set ^partition install an existing system
kernel vmlinuz
append initrd=initrd.img ks=cdrom:/mks.cfg
label USB
menu label ^Use the U dish to install an existing system
kernel vmlinuz
append initrd=initrd.img ks=hd:sda1:/mks.cfg
label rescue
menu label ^Rescue installed system
kernel vmlinuz
append initrd=initrd.img rescue
label local
menu label Boot from ^local drive
menu default
localboot 0xffff
label memtest86
menu label ^Memory test
kernel memtest
append –
这里我们可以去掉安装过程中的CentOS字样,在安装光盘里面有两个.buildstamp文件,一个位于stage2.img中,一个位于 initrd.img中,安装光盘运行时读取的是initrd.img中的那个.buildstamp文件,所以只要把initrd.img文件改了就可以了。
(1)解压initrd.img文件
2.6内核中的initrd.img采用cpio压缩,不再是2.4内核使用的ext2格式,无法使用mount-o loop挂载。需要使用gunzip解压缩,然后再利用cpio给img解包。
# cd /disk/isolinux/
# cp initrd.img /tmp/initrd.img.gz
# cd /tmp
# gunzip initrd.img.gz
# mkdir initrd
# mv initrd.img initrd
# cd initrd
# cpio -ivmd < initrd.img
# rm –f initrd.img
这是网上流传的方法,可能有问题,如果在执行“# gunzip initrd.img.gz”这个命令时出现:gzip: initrd.img.gz: not in gzip format
请使用:# xz -dc initrd.img | cpio -id 解压
然后修改.buildstamp文件,将CentOS改为MediaCentOS即可.
(2)制作initrd.img文件
假设当前目录位于准备好的initrd文件系统的根目录下;
# find . | cpio -c -o | xz -9 --format=lzma > initrd.img
# cp initrd.img /disk/isolinux/
8.修改安装光盘背景图片
1.grub 背景图片为/disk/isolinux/splash.jpg
2.安装rpm包时背景图片在/disk/images/install.img镜像文件中
A.建立install.img镜像挂载目录
# mkdir /media/intall
B.挂载install.img镜像
# mount –o loop /disk/images/install.img /media/intall
C.拷贝/media/intall目录到/tmp目录下
# rsync –av /media/intall /tmp
D.修改背景图
/tmp/install/usr/share/anaconda/pixmaps/progress_first.png
E. install.img封装并替换/disk/images/install.img
#cd /tmp
# mksquashfs install install.img
#cp –fv install.img /disk/images/
comps.xml文件中包含了安装时用户所见到的与rpm相关的所有内容,它会检查Packages下的RPM包的依赖关系,安装时如果缺少依赖包,它会提示您哪个RPM包需要哪些依赖库。同时它的角色就是相当于图形安装时选择软件包那个环节。主要由三部分组成,首先是组列表,它描述了在安装过程中需要的不同的组(或组件),包括组名、组的描述和包含的RPM包;其次是组的层次结构,它将组分成不同的类,并定义了组的一个顺序,从而可以决定哪些组需要先安装;最后为一系列RPM包以及它们之间的依赖关系。
下面先进入/disk/repodata目录,将“*-x86_64-comps.xml”文件改为“comps.xml”,并且将其他文件删除。由于centos6.0下的comps.xml文件名很长,这里“*”为省略符,实际操作时输入完整文件名。
[shell]# cd /disk/ repodata
[shell]# mv *-comps.xml comps.xml
[shell]# ls .|grep -v “comps.xml”|xargs -i rm -f {}
然后返回到/disk根目录,就可以重新开始生成comps.xml文件了。
[shell]# cd /disk/
[shell]# createrepo -g repodata/comps.xml ./
[shell]# declare -x discinfo=`head -1 .discinfo`
[shell]# createrepo -u "media://$discinfo" -g repodata/comps.xml /disk/
到这里,comps.xml文件和其他相关联的文件已被重新生成到repodata目录下。
Tips2:如果你新增或删除了Packages目录的RPM包,请重新生成comps.xml文件。
10.将媒体中心安装包拷贝到/disk/ MediaCentOS/下
到了这一步,实际定制配置系统的工作已经完成了。下面就是生成一个ISO镜像文件,便于刻录到光盘中进行安装。
[shell]# cd /disk/
[shell]# mkisofs -o MediaCentOS.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -R -J -v -T /disk/ .
/disk/ 目录下产生的MediaCentOS.iso是生成的ISO文件。我们可以测试这个iso的正确性,通过VM的iso镜像安装即可测试定制系统的正确性,如果没问题就可以进行光盘刻录。