Fork me on GitHub
Suzf  Blog

DIY精简CentOS自动安装ISO

俗话说一瘦遮三丑,一胖全没有。原生的系统过于庞大和臃肿,工作中有很多组件和安装包根本是用不到的,只安装我们需要的组件,并实现自动安装,这样在产线批量布署服务器的时候,显的效率非常高。
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.”