文档编 |
定制系统自动安装
环境准备
1. 安装CentOS 6.3,安装时选择最小化安装,安装过程与普通的CentOS安装相同.
2. 安装后进入系统,配置好网络,安装必需的软件.
yum -y installcreaterepo mkisofs isomd5sum rsync
各个软件功能请参考网络.
3. 根据当前系统已安装的软件包生成安装系统所需要的rpm列表
awk'/Installing/{print $2}' install.log |sed 's/^[0-9]*://g'>/root/packages.list
4. 建立定制所需要的目录并把除Packages目录以外的文件复制到新的系统目录
mkdir /mnt/cdrom
mkdir -p /data/OS
mount /dev/cdrom/mnt/cdrom/
rsync -a--exclude=Packages /mnt/cdrom/ /data/OS/
mkdir/data/OS/Packages
5. 使用脚本自动复制所需要的RPM包到新建立的光盘目录中Packages
脚本名称cprpms.sh,内容如下:
#!/bin/bash
SRC_RPMS=/mnt/cdrom/Packages
DST_RPMS=/data/OS/Packages
packages_list=/root/packages.list
number_of_packages=`cat$packages_list | wc -l`
i=1
while [ $i -le$number_of_packages ] ;
do
name=`head -n $i $packages_list | tail -n-1`
echo "cp $SRC_RPMS/$name*$DST_RPMS/"
cp $SRC_RPMS/$name* $DST_RPMS/
i=`expr $i + 1`
done
6. 执行脚本拷贝已系统的rpm包到将定制系统目录
sh cprpms.sh
7. 提供的自动化安装的Kickstart文件ks.cfg
文件位置/data/OS/isolinux/ks.cfg
文件内容如下:
# Install OSinstead of upgrade
install
# Use CDROMinstallation media
cdrom
# Root passworddefault is "root123" 来此/etc/shadow
rootpw --iscrypted $6$AYQ0CQIkO9i/iilX$FSLr3Q/O1xNG.J08Z705x5gl8yD3.JBHxBNx6KaG3KmQrKdh6Qfu3V5CIIYPOikf6TJxjiPv0POA5qyS3JzNx0
# Systemauthorization information
auth --useshadow--passalgo=md5
# Use text modeinstall
text
firstboot--disable
# Systemkeyboard
keyboard us
# Systemlanguage
lang en_US
# SELinuxconfiguration
selinux--disabled
# Do notconfigure the X Window System
skipx
# Installationlogging level
logging--level=info
# Reboot afterinstallation
reboot
# Systemtimezone
timezone Asia/Shanghai
# Systembootloader configuration
bootloader--location=mbr
# Clear theMaster Boot Record mbr
zerombr
# Partitionclearing information
clearpart --all--initlabel
%packages
@core
@server-policy
%post
# Mount CDROM
mkdir -p/mnt/cdrom
mount -r -tiso9660 /dev/cdrom /mnt/cdrom
# Copy ourfiles, extract it ,then move to right locations
cd/mnt/cdrom/software
cp/mnt/cdrom/software/limaolin.tar.gz /root/limaolin.tar.gz> /dev/null
cp/mnt/cdrom/software/Kimchi.tar.gz /root/Kimchi.tar.gz> /dev/null
cp/mnt/cdrom/software/AgentPackages.tar.gz /root/AgentPackages.tar.gz>/dev/null
cd /root/
tar -zxvflimaolin.tar.gz > /dev/null
tar -zxvfKimchi.tar.gz > /dev/null
tar -zxvfAgentPackages.tar.gz > /dev/null
cd/root/limaolin
sh issue.sh
sh release.sh
sh sysinit.sh
sh grub.sh
cd/root/AgentPackages
shcloudagent-install.sh
cd/root/Kimchi/initd
sh install.sh
cd /root
rm -rflimaolin.tar.gz Kimchi.tar.gz AgentPackages.tar.gz limaolin KimchiAgentPackages
# Umount CDROM
umount/mnt/cdrom
eject
%end
8. 修改/data/OS/isolinux/isolinux.cfg文件,告诉Linux的安装管理程序Kickstart提供的自动化安装.
文件内容见下:
defaultvesamenu.c32
#prompt 1
timeout 600
display boot.msg
menu backgroundsplash.jpg
menu titleWelcome to vServer 2.1!
menu colorborder 0 #ffffffff #00000000
menu color sel 7#ffffffff #ff000000
menu color title0 #ffffffff #00000000
menu colortabmsg 0 #ffffffff #00000000
menu color unsel0 #ffffffff #00000000
menu colorhotsel 0 #ff000000 #ffffffff
menu colorhotkey 7 #ffffffff #ff000000
menu colorscrollbar 0 #ffffffff #00000000
label linux
menu label ^Install or upgrade an existingsystem
menu default
kernel vmlinuz
append ks=cdrom:/isolinux/ks.cfginitrd=initrd.img
label vesa
menu label Install system with ^basic videodriver
kernel vmlinuz
append initrd=initrd.img xdriver=vesanomodeset
label rescue
menu label ^Rescue installed system
kernel vmlinuz
append initrd=initrd.img rescue
label local
menu label Boot from ^local drive
localboot 0xffff
label memtest86
menu label ^Memory test
kernel memtest
append -
9. 放置我们自己开发的虚拟化软件及脚本压缩包,使之能在调用Kickstart文件自动化安装操作系统安装后,安装我们的平台于操作系统之上.
cd /data/OS/
mkdir software
把AgentPackages.tar.gz Kimchi.tar.gz limaolin.tar.gz拷到software目录
其中AgentPackages.tar.gz Kimchi.tar.gz为我们自己开发的虚拟化软件
limaolin.tar.gz为提供定制部分系统文字图片的脚本压缩包,详见3定制系统文字图片.
3定制系统文字图片
3.1定制系统图片
1.安装选项的背景图片
由美工提供640*480图片
参考https://fedoraproject.org/w/index.php?title=How_to_create_a_custom_syslinux_splash&oldid=197023修改图片为系统识别图片.
把图片替换为/data/OS/isolinux/splash.jpg
2. 安装过程中的背景图片
(1).安装squashfs-tools工具:
yum -y install squashfs-tools
(2).创建installold文件夹,将镜像目录的images/install.img文件拷贝到installold文件夹中:
mkdir installold
cp -av /data/OS/image/install.img~/installold/
cd ~/installold
ls
install.img
(3).打开install.img文件:
mkdir /mnt/install
mount -o loop -t squashfs~/installold/install.img /mnt/install
ls /mnt/install/
etc firmware lib lib64 modules proc usr var
cp -av /mnt/install ~/installnew
(4).根据情况替换图形安装过程中的背景图片
cd installnew/usr/share/anaconda/pixmaps/
ls
about-to-install.png gnome-lock.png partscheme-freespace.png splash.png
anaconda_header.png gnome-mouse.png partscheme-replace.png syslinux-splash.png
checkMark.png install.png partscheme-shrink.png upgrade.png
config-language.png network.png progress_first-lowres.png
done.png partscheme-all.png progress_first.png
filter-menu.png partscheme-custom.png root-password.png
(5).install.img打包压缩
cd ~/
mksquashfs installnew install.img
3.2 定制系统文字
1.修改欢迎文字
修改/data/OS/isolinux/isolinux.cfg
修改后如下
default vesamenu.c32
#prompt 1
timeout 600
display boot.msg
menu background splash.jpg
menu title Welcome to vServer 2.1!
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 or upgrade an existing system
menu default
kernel vmlinuz
append ks=cdrom:/isolinux/ks.cfg initrd=initrd.img
label vesa
menu label Install system with ^basic video driver
kernel vmlinuz
append initrd=initrd.img xdriver=vesa nomodeset
label rescue
menu label ^Rescue installed system
kernel vmlinuz
append initrd=initrd.img rescue
label local
menu label Boot from ^local drive
localboot 0xffff
label memtest86
menu label ^Memory test
kernel memtest
append -
2. 修改安装过程中的文字显示
修改方法:
(1)安装xz用于解压initrd.img镜像:
yum -y install xz
(2)创建initrddir文件夹,将镜像目录的isolinux/initrd.img文件拷贝到initrddir文件夹中:
mkdir initrddir
cp -av /data/OS/isolinux/initrd.img~/initrddir/
cd ~/initrddir
ls
initrd.img
(3)解压initrd.img文件
xz -dc initrd.img | cpio -id
(4)修改.buildstamp文件
vi .buildstamp
201207061011.x86_64
CentOS
6.3
FINAL=YES
http://bug.centos.org/
将内容改为:
201207061011.x86_64
vServer
2.1
FINAL=YES
http://bug.centos.org/
保存退出;
(5)initrd.img打包压缩
cd到initrddir文件夹执行如下操作:
rm -rf initrd.img
find . | cpio -c -o | xz -6--format=lzma > ../initrd.img
cd ..
rm -rf initrddir
cp initrd.img /data/OS/isolinux/
3.需要通过脚本修改的
脚本release.sh, sysinit.sh内容如下,打包在limaolin.tar.gz
release.sh
#!/bin/bash
echo -n "" >/etc/system-release
cat >> /etc/system-release<< EOF
vServer release 2.1 (Final)
EOF
sysinit.sh
#!/bin/bash
sed -i"s/CentOS/vServer/" /etc/rc.d/rc.sysinit
脚本issue.sh内容如下,打包在limaolin.tar.gz
#!/bin/bash
echo -n "" > /etc/issue
cat >> /etc/issue << EOF
vServer release 2.1 (Final)
Kernel \r on an \m
EOF
4更深入的定制系统
4.1 更深入的定制
虚拟化裁剪定制的系统安装盘涉及很多方面,最彻底最深入的定制即LFS(LinuxFrom Scratch),但此方法需要费时费力研究.
对于一般的情况,上述2,3即可以完成,更深入的可以根据情况分析Anaconda.
Anaconda是Linux的安装管理程序。它提供文本、图形等安装管理方式,并支持Kickstart等脚本提供自动安装的功能。还支持许多启动参数。该程序的功能是把位于光盘或其他源上的数据包,根据设置安装到主机上。为实现该定制安装,它提供一个定制界面,可以实现交互式界面供用户选择配置。Anaconda的大部分模块用Python编写,有少许的载入模块用C编写。
Anaconda程序封装在images/install.img中
解压出来后
除了主执行体/usr/bin/anaconda,其它安装脚本模块均在/usr/lib/anaconda主目录下。
/usr/bin/anaconda: 主程序,是python脚本。
/usr/lib/anaconda/installclasses:定义了在安装过程中用户可选择的安装类型。每个安装类型描述文件根据相应安装类型的特点,分别对安装步骤、分区策略以及安装包的取舍给出了不同的方案。
/usr/lib/anaconda/iw: 图形安装模式的模块。
/usr/lib/anaconda/storage: 存储配置的响应目录。
/usr/lib/anaconda/textw: 文本安装模式的模块。和iw子目录含义是一致的,只是包含的是文本安装模式的前端字符用户界面类所在的模块,每个字符用户界面对应一个类,负责与用户的交互。
/usr/lib/anaconda-runtime: 有init和loader程序。这是两个静态编译的程序,不依赖其他库。
/usr/anaconda主目录:如果说用户界面类是处理安装程序外观的话,则anaconda主目录下的各python模块执行每个安装界面背后具体的安装行为,包括那些无用户界面安装步骤的安装操作。
由此可见,主执行体/usr/bin/anaconda调用的大量例程分布在/usr/lib/anaconda目录下,安装过程要用到的资源文件(例如背景图片)则分布在/usr/share/anaconda目录下。
5制作虚拟化系统安装盘
5.1 最终制作
完成以上所有准备工作后,制作最终的虚拟化系统安装盘
cd /data/OS/
cp/mnt/cdrom/repodata/*-comps.xml /data/OS/repodata/comps.xml
createrepo -grepodata/comps.xml /data/OS/
declare -xdiscinfo=`head -1 .discinfo`
createrepo -u"media://$discinfo" -g repodata/comps.xml /data/OS/
cd /data/OS/
mkisofs -R -J-T -r -l -d -joliet-long -allow-multidot \
-allow-leading-dots -no-bak -o/data/base2.2.iso \
-b isolinux/isolinux.bin -c isolinux/boot.cat-no-emul-boot \
-boot-load-size 4 -boot-info-table /data/OS
在/data/OS目录取虚拟化系统安装盘base2.2.iso