License: Attribution-NonCommercial-ShareAlike 4.0 International
本文出自 Suzf Blog。 如未注明,均为 SUZF.NET 原创。
转载请注明:http://suzf.net/post/99
俗话说一瘦遮三丑,一胖全没有。原生的系统过于庞大和臃肿,工作中有很多组件和安装包根本是用不到的,只安装我们需要的组件,并实现自动安装,这样在产线批量布署服务器的时候,显的效率非常高。
a.在VM安装linux系统
b.安装定制工具anaconda repodata createrepo mkisofs
c.关联太多采用yum安装 定制过程需要产生comps.xml文件以及生成iso
1、定制安装系统,选择常用的组件
2、安装制作发行版所需的基本软件包
yum install -y createrepo genisoimage
#genisoimage 提供/usr/bin/mkisofs 命令用于重新生成iso
3、生成安装系统所需的rpm文件列表
awk '/Installing/{print $2}' install.log |sed 's/^[0-9]*://g' >/root/packages.list
#生成后,需要仔细看该文件,一般会在某些文件开始部分如“1:”这样的字符,需要删除这些字符,否在后面执行copy动作会报错
4、创建定制工作目录
mkdir -p /mnt/cdrom
mkdir -p /data/OS
mount /dev/cdrom /mnt/cdrom
rsync -a --exclude=Packages /mnt/cdrom/* /data/OS #将源系统镜像除packages目录所有文件拷贝到/data/OS
mkdir /data/OS/Packages
查看是否有.discinfo文件,如果没有将光盘里的文件拷贝到/data/OS;若无此文件安装的时候将会出现disk not found.
5、复制精简后的RPM包
vi /data/cprmps.sh #创建自动复制RPM包脚本
#!/bin/bash
DEBUG=0
CentOS_DVD=/mnt/cdrom
ALL_RPMS_DIR=/mnt/cdrom/Packages
KOS_RPMS_DIR=/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
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* $KOS_RPMS_DIR/"
cp $ALL_RPMS_DIR/$name-$version* $KOS_RPMS_DIR/
# in case the copy failed
if [ $? -ne 0 ] ; then
echo "cp $ALL_RPMS_DIR/$name-$version* "
cp $ALL_RPMS_DIR/$name* $KOS_RPMS_DIR/
fi
fi
i=`expr $i + 1`
done
#执行脚本
sh /data/cprmps.sh
6、配置kickstart脚本
ks文件主要分为三个部分
a、系统安装及配置
b、自定义安装准备(%post --nochroot)
c、用户自定义安装(%post)
系统安装及配置一般写在ks.cfg文件最前面,定义系统安装设置,以%post –nochroot为结束标志,接着是用户自定义安装准备部分,以“%post --nochroot”作为开始,以“%post”作为结束,
自定义安装部分以“%post”作为开始。
一般方便可以直接由root下面的anaconda-ks.cfg修改
vi /data/OS/isolinux/jeffery.cfg
#platform=x86, AMD64, or Intel EM64T
#version=DEVEL
# Firewall configuration
firewall --disabled
# Install OS instead of upgrade
install
# Use network installation
cdrom
# Root password jeffery
rootpw --iscrypted $1$HaJb7jcC$Hg.5DlmP2uheGxf88BdQ3.
# System authorization information
auth --useshadow --passalgo=md5
# Use graphical install
#graphical
# Use text mode install
text
firstboot --disable
# System keyboard
keyboard us
# System language
lang en_US
# SELinux configuration
selinux --disabled
# Installation logging level
logging --level=info
# Reboot after installation
reboot
# System timezone
timezone Asia/Shanghai
# Network information
network --bootproto=dhcp --device=eth0 --onboot=on
# System bootloader configuration
bootloader --location=mbr
# Clear the Master Boot Record
zerombr
# Partition clearing information
clearpart --all --initlabel
# Disk partitioning information
part /boot --fstype="ext4" --size=100
part swap --fstype="swap" --size=1500
part / --fstype="ext4" --grow --size=1
%packages
@security-tools
aide
amtu
hmaccalc
openscap
openscap-utils
tpm-tools
trousers
%end
7、生成仓库文件comps.xml
cd /data/OS
createrepo -g repodata/*-comps.xml /data/OS/
8、让系统从kickstart配置启动安装
vi /data/OS/isolinux/isolinux.cfg
自定义启动界面
在isolinux里面有三个文件和自定义安装界面有关
boot.msg是定义启动界面如何显示
isolinux.cfg决定如何处理用户的输入,并执行对应的安装过程
splash.lss是启动界面的背景图片
9、生成ISO文件
cd /data/OS
mkisofs -o /root/Jeffery_CentOS.6.5_x86.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -joliet-long -R -J -v -T /data/OS/
如果出现下面 基本上就定制成功了
10、生成MD5检验码
11、测试
新建一台机器 使用定制的iso
FAQ:
要把光盘中的“.discinfo”文件拷贝过来,如果没有拷贝此文件,在用光盘安装时
会提示如下错误:“The CentOS CD was not found in any of your CDROM drives.
Please insert the CentOS CD and press OK to retry.”