裁剪都基于CentOS6.3 64位操作,以下是自己总结出的裁剪步骤:
- 最小化安装CentOS后,将最小化安装所使用RPM生成我们所需要的列表。
cat install.log |awk '{print $2}' | sed 's/^[0-9]\://g' | sed '$d' >> yy_install.list
- 创建我们需要挂载镜像的路径与生成镜像所需文件的路径
mkdir /mnt/iso/ /mnt/yyiso/
- 挂载CentOS镜像到/mnt/iso/后,将镜像文件夹里目录文件与结构都复制到/mnt/yyiso/下,除了Packages文件夹及其下的RPM
rsync -a --exclude “Packages” /mnt/iso /mnt/yyiso/
- 创建一个脚本,用于复制最小安装所需要的RPM,所需要的RPM参照第一步生成的yy_install.list文件。
#!/bin/sh
DEBUG=1
SOURCE_RPMS_DIR=/mnt/iso/Packages/
LOCAL_RPMS_DIR=/mnt/yyiso/Packages/
PACKAGES_LIST=/root/yy_install.list
NUMBER_RPMS=`cat $PACKAGES_LIST |wc -l`
while [ $DEBUG -le $NUMBER_RPMS ]
do
NOW_LINE=`head -n $DEBUG $PACKAGES_LIST | tail -n -1`
echo $NOW_LINE
NOW_NAME=`echo $NOW_LINE |awk -F "-" '{print $1}'`
echo $NOW_NAME
NOW_VERSION=`echo $NOW_LINE |awk -F "-" '{print $2 "-" $3}'`
echo $NOW_VERSION
ls $SOURCE_RPMS_DIR/$NOW_NAME-$NOW_VERSION*
if [ $? -eq 0 ]; then
echo "Now copy the RPM $NOW_NAME"
cp $SOURCE_RPMS_DIR/$NOW_NAME-$NOW_VERSION* $LOCAL_RPMS_DIR
else
echo "Now copy the RPMS $NOW_NAME"
cp $SOURCE_RPMS_DIR/$NOW_NAME* $LOCAL_RPMS_DIR
fi
DEBUG=`expr $DEBUG + 1`
done
- 将本地源配置好,使用yum安装之后需要使用的命令(分别用于创建comps.xml文件、生成镜像、解压特定压缩包Img)
yum -y install createrepo mkisofs xz
- 自动文本安装CentOS过程中,提示CentOS与6.3版本的地方,可通过修改隐藏文件.buildstamp,第一行命令用于解压,第二行命令用于压缩,压缩时间可能较长。
xz -dc initrd.img | cpio -id
find . | cpio -c -o | xz -9 --format=lzma > initrd.img
- 创建自动安装脚本,首先复制一个基本文件然后将其修改。
cp /root/anaconda-ks.cfg /mnt/yyiso/isolinux/ks.cfg
- 文件大致为以下内容(install-全新安装、cdrom-指定安装源、text-文本安装、lang-语言、keyboard-键盘、skipx-不对系统的X进入设置、network-网络、rootpw-root密码、firewall-防火墙、authconfig-认证方式、selinux-设置其状态、timeout-时区、bootloader-设置安装选项,如指定内核,启动顺序、clearpart-在建立新分区前清空系统上原有的分区表、zerombr-清除mbr信息与分区表)
# Kickstart file automatically generated by anaconda.
#version=DEVEL
install
cdrom
text
lang zh_CN.UTF-8
keyboard us
skipx
network --onboot no --device eth0 --bootproto dhcp --noipv6
rootpw --iscrypted $6$5Dr6AAjYpLJbGv5Q$HdWEtOdif6kcnc0ExLV6yqr/B46SrVvBbDHoS1a.TmRq6OtDvd5BacfIm5bZNCla243VMTb3CB4GPW.luYbXA0
firewall --service=ssh
authconfig --enableshadow --passalgo=sha512
selinux --enforcing
timezone --utc Asia/Shanghai
bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet"
clearpart --all --initlabel
zerombr yes
# The following is the partition information you requested
# Note that any partitions you deleted are not expressed
# here so unless you clear all partitions first, this is
# not guaranteed to work
part /boot --fstype=ext4 --size=200
part swap --recommended
part / --fstype=ext4 --size=20000
part /var --fstype=ext4 --size=10000 --grow
#repo --name="CentOS" --baseurl=cdrom:sr0 --cost=100
%packages
@chinese-support
@core
@server-policy
%end
- 修改开机选择菜单内容。需要先将isolinux.cfg文件添加上权限,修改后再将权限复原。其主要修改为以下内容,同样意义不作详解。
default linux
#prompt 1
timeout 600
display boot.msg
menu background splash.jpg
menu title Welcome to CentOS 6.3!
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
kernel vmlinuz
append ks=cdrom:/isolinux/ks.cfg initrd=initrd.img
label local
menu label Boot from ^local drive
localboot 0xffff
- 更新软件仓库。需要当前在/mnt/yyiso/目录下。其中comps.xml包含组列表、组层次、组结构、RPM包,相当于将RPM按组分类。
createrepo -g repodata/*comps.xml .
- 生成 iso镜像包。生成路径为/opt下
mkisofs -o /opt/yy.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-<span style="background-color: rgb(255, 255, 255);">y </span><span style="font-family: Arial, Helvetica, sans-serif;">boot -boot-load-size 4 -boot-info-table -joliet-long -R -J -v -T .</span>
其它:
- 如果ks.cfg文件中没有添加zerombr属性,安装过程中提示以下错误。
Error processing drive:
pci-0000:00:10-scsi-0:0:0:0
20480MB
VMware,VMware Virtual S
This device may need to be reinitialized.
REINITIALIZING WILL CAUSE ALL DATA TO BE LOST!
This action may also be applied to all other disks
needing reinitialization.
Device details:
pci-0000:00:10.0-scsi-0:0:0:0
- 如果已经执行了createrepo命令后,又修改ks.cfg文件,此时直接mkisofs会提示以下错误。(再次执行一次createrepo命令即可)
I: -input-charset not specified, using utf-8 (detected in locale settings)
genisoimage 1.1.9 (Linux)
Scanning .
genisoimage: Uh oh, I cant find the boot catalog directory 'isolinux'!
- umount某个目录下提示mount device is busy,可执行以下操作解决,大致为查找到使用这个device忙的进程并将其杀掉。
fuser -m -v /mnt/iso2
umount /mnt/iso2
- 查询某个命令所需要的RPM包。以giftopnm命令为例。
yum provides */bin/giftopnm
- 修改选择菜单时背景图片。将修改后的图片替换掉/mnt/yyiso/isolinux/下的splash.gif文件即可。
giftopnm < splash.gif | ppmtolss16 > splash.lss
- 裁剪后镜像自动安装流程
根据anaconda(安装管理程序)提供的文本模式或图形模式进行,交互或非交互安装(以上是根据启动参数ks.cfg文件配置来文本,非交互安装)