1,安装制作需要的包yum install -y pump-devel gtk2-devel booty bogl-devel bogl-bterm elfutils-devel beecrypt-devel dietlibc anaconda anaconda-runtime busybox-anaconda
2.制作ltos源文件夹
# mkdir /ltos
# mkdir /mnt/cdrom
# mount -t iso9660 -o loop /dev/cdrom /mnt/cdrom/ 挂载光盘镜像
或者挂载ISO文件到/mnt/cdrom
# mount -t iso9660 -o loop centos.xxx.iso /mnt/cdrom 将CentOS的ISO文件挂载到/mnt/cdrom目录
# cd /mnt/cdrom
# tar -cf - . | ( cd /ltos ; tar -xvpf - ) //将/mnt/cdrom里的文件利用tar全部拷贝到/ltsos这个目录下.
#cd /ltos //进入此目录删除一些无关的文件,仍后进入后面的工作.
[root@server ltos]# ls -al
total 88
drwxr-xr-x 6 root root 4096 Apr 11 21:00 .
drwxr-xr-x 27 root root 4096 Apr 12 05:26 ..
drwxr-xr-x 2 root root 36864 Apr 8 16:06 CentOS
-rw-r--r-- 1 root root 97 Apr 8 16:43 .discinfo
drwxr-xr-x 4 root root 4096 Mar 21 23:04 images
drwxr-xr-x 2 root root 4096 Apr 12 00:00 isolinux
-rw-r--r-- 1 root root 14371 Apr 11 23:16 lemp.tar.gz //这个软件包是我们后面要建立的,读者可以分析一下后面的ks.cfg脚本就可以明白他的用途.
drwxr-xr-x 2 root root 4096 Apr 11 21:00 repodata
-r--r--r-- 1 root root 7048 Mar 21 23:05 TRANS.TBL
3.定制package.list软件包清单
# cat install.log | grep Installing | sed 's/Installing //g'|sed 's/^[0-9]\+://g' > packages.list
#mkdir /ltos/CentOS 建立存放rpm包的目录.
创建自动提取相关rpm脚本:
#!/bin/bash
#cprpm.sh
FILE='/root/packages.txt'
DEST_DIR='/root/iso/Packages'
SRC_DIR='/mnt/Packages'
while read LINE
do
cp $SRC_DIR/$LINE.rpm $DEST_DIR || echo "$LINE coyp is error">>cperr.txt
done<$FILE
执行以上脚本将定制ltos必要的rpm复制到/ltos/CentOS目录
返回到/ltos目录下,执行createrepo程序生成repodata下的comps.xml文件
################################################################
5.让系统从kickstart配置启动 ks.cfg
#platform=86, AMD64, or Intel EM64T
# System authorization information
auth --useshadow --enablemd5
# Use text mode install
text
# Firewall configuration
firewall --enabled --port=smtp:tcp,ssh:tcp,https:tcp,http:tcp,110:tcp,143:tcp,8443:tcp,53:udp
firstboot --disable
# System keyboard
keyboard us
# System language
lang en_US
# Root password
rootpw --iscrypted $1$u6Bvfxoq$hqz18gPxaG1V2TBfk60Il/
# SELinux configuration
selinux --disabled
# Do not configure the X Window System
skipx
# Install OS instead of upgrade
install
# Use CDROM installation media
cdrom
# Network information
network --bootproto=static --device=eth0 --gateway=192.168.1.1 --ip=192.168.1.118 --nameserver=192.168.1.1 --netmask=255.255.255.0 --onboot=on
# System timezone
timezone Asia/Shanghai
reboot
%include /tmp/partitions
%packages
#@core
screen
jre
rrdtool
net-snmp
net-snmp-libs
net-snmp-utils
mysql
mysql-server
sysstat
pcre
haproxy
daemontools
ucspi-tcp
djbdns
cluster-glue
heartbeat
dos2unix
telnet
nc
ruby
facter
puppet
ntp
%pre
DISK=""
REGEXP01="'[hs]d[a-z]( |$)'"
REGEXP02="'cciss/c[0-9]d[0-9]( |$)'"
for regexp in `set | grep ^REGEXP | cut -d= -f1`
do
eval EXPR=`eval "echo \$\{\$regexp\}"`
CMD="egrep ${EXPR} /proc/partitions"
DISK="`eval "$CMD"|
awk 'NR==1 {print $4}'`"
if [ -n "${DISK}" ]
then
echo surfos will install on $DISK
break
fi
done
cat <<EOF > /tmp/partitions
# System bootloader configuration
bootloader --append="rhgb quiet" --location=mbr --driveorder=${DISK}
# Partition clearing information
clearpart --all --drives=${DISK}
# Disk partitioning information
part /boot --fstype="ext3" --size=100 --ondisk=${DISK}
part swap --fstype="swap" --size=1024 --ondisk=${DISK}
part / --fstype="ext3" --size=3072 --ondisk=${DISK}
part /opt --fstype="ext3" --grow --size=1 --ondisk=${DISK}
EOF
%post --nochroot
mkdir -p /mnt/cdrom
mount /tmp/cdrom /mnt/cdrom
cp -f /mnt/cdrom/isolinux/splash.xpm.gz /mnt/sysimage/boot/grub/splash.xpm.gz >/dev/null
cp -f /mnt/source/isolinux/splash.xpm.gz /mnt/sysimage/boot/grub/splash.xpm.gz >/dev/null
umount /mnt/cdrom
%post
mkdir /root/.ssh
chmod 700 /root/.ssh
echo "ssh-dss AAAAB3NzaC1kc3MAAACBAO3YUmVa8RXPWNZRQTGp+GnYFd4l0VYNk9Zyl4eBPV81qjT7zEjZtYgYp161Ti+WwbNHV0EIosopFkInGLAMTi8NOGbhD5YGyM16C2uNXtuJR4wYA5Z9hVggtpo7Em1MgHNRv30I9Tzaht0vAdLYnPp9PsWUZeMRZd2fK7+MLnOlAAAAFQCfy31GG0ZyNDKw398vpV69mGiTrQAAAIBUMSF5mv/eb8hCE3O+mScHxTwEL0B+u2dr1age2QcrIugOqRN9dbTYmKYIyWfjMG8Yir09TITB4Xo+Cje5dSJeI3d28muPulX5BA0R/j65x9BHTMRwZ/DvRL1ra6IvOQ6UeebW7EGbxsAm2LXzk1J6nRvGPnIPHKoT7qDIaAOV6gAAAIEAj+UCnsvHUc1VVMvfiPCPTplgFYx5HdkSJClPeNZbxFHcZykTFJWCT172qTve9NA437dNIvh8q43pKgP/d/kxsYSRQ1AAo/7lIomiVDg1E684UsFj6Q3sYAFdOWp+akjSQI8ayxZ82lb177oO7+KiZ5mNtEJZUFhUFoPlYf/gQEQ= qingshan@qingshan-laptop" > /root/.ssh/authorized_keys
exit 0
#############################################
二.个性化定制你的系统(问答形式)
1.如何定制安装开机画面:
启动画面用的是一种比较奇怪的格式lss16,它限制图片使用16种颜色,除去前景和背景色只能有14种颜色。我们需要ppmtolss16 giftopnm等程序,系统一般默认都安装了。
一般用gimp生成一个index模式的gif图形,颜色限制为14, 然后通过如下的办法进行转:
安装yum -y install syslinux
giftopnm < splash.gif | ppmtolss16 > splash.lss
另外你还需要修改isolinux/boot.msg文件,做一些个性化的提示.
?如何生成高质量的图。
先用photoshop打开任何一张图片,然后在文件的下拉菜单里,保存的时候选择“保存为WEB和设备使用格式“,再然后选择gif再选择16色保存就OK.
仍后利用giftopnm < splash.gif | ppmtolss16 > splash.lss 转换即可.
2.如何生成GRUP的xpm文件?
(1) 将备一张640 x 480 16色图片,档案类型为JPG的格式
(2)convert grub.gif -colors 14 -geometry 640x480! splash.xpm && gzip -9 splash.xpm
(3) 直接替换/boot/grup/splash.xpm.gz 文件即可.
? 利用上面方法生成的图片可能无法显示,或者质量不高,如何生成高质量的grub图片呢.
利用文中后面我提供的ltospackl.tar.gz里面的grubtool.exe即可在windows平台将jpg,bmp图生成为.xpm.gz格式的文件,直接替换/boot/grup下的文件即可.
3.如何去掉安装过程中的CentOS字样?
在安装光盘里面有两个.buildstamp文件,一个位于stage2.img中,一个位于initrd.img中,
安装光盘运行时读取的是initrd.img中的那个.buildstamp文件,所以只要把initrd.img文件改了就可以了。
如何解压initr.dimg文件:
2.6内核中的initrd.img采用cpio压缩,不再是2.4内核使用的ext2格式,无法使用mount -o loop 挂载。需要使用gunzip解压缩,然后再使用
利用cpio给img解包
# cd /ltos/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
仍后修改.buildstamp文件,将CentOS改为LTOS即可.
如何制作initrd.img文件:
#假设当前目录位于准备好的initrd文件系统的根目录下
# find . | cpio -c -o > ../initrd.img
# gzip ../initrd.img
# mv initrd.img.gz initrd.img
# cp initrd.img /ltos/isolinux/
仍后将initrd.img复制到/ltos/isolinux/
4. 如何替换安装以后的grub ?
在安装光盘里的ks.cfg文件里写好替换splash.xpm.gz文件即可.
5. 如何去掉启动过程中的"CentOS release 5 (Final)"
在安装光盘里的ks.cfg文件里写好脚本,直接替换/etc/redhat-release即可.
别忘记修改centos-release-6-0.el6.centos.5.src.rpm (修改里面的xxxx.spec文件然后从新生成rpm包替换安装目录的文件)
执行命令:
declare -x discinfo='head -l .discinfo';
createrepo -u "media://$discinfo" -g repodata/comps.xml . ;
mkisofs -R -J -T -r -l -d -allow-multidot -allow-leading-dots -no-bak -o /tmp/GOS.iso -b isolinux/isolinux.bin -c isolinux/boot.cat ;
-no-emul-boot -boot-load-size 4 -boot-info-table . ;