基于CentOS6.0-64定制系统iso制作

一. 制作环境的准备
1. 安装制作发行版的工具:
[shell]# yum -y install anaconda repodata createrepo mkisofs
[shell]# yum -y install anaconda-runtime createrepo yum-utils anacondaanaconda-help busybox-anaconda mkisofs
2. 安装Centos6.0系统
由于方便制作,我们可以在VMware、vbox、xen等虚拟环境中进行安装,这里我们选用了VMware作为制作环境。
(1) 在官方网站上下载CentOS-6.0-x86_64-bin-DVD.iso镜像文件
Wget  http://mirrors.loosefoot.com/centos/6.0/isos/x86_64/CentOS-6.0-x86_64-bin-DVD1.iso
Wget  http://mirrors.loosefoot.com/centos/6.0/isos/x86_64/CentOS-6.0-x86_64-bin-DVD2.iso

二. 创建定制系统(MediaCentOS 基于 CentOS6.0-64 Base server)
1. 光盘主要结构及文件简介
*isolinux 目录存放光盘启动时的安装界面信息
*images 目录包括了必要的启动映像文件
*Packages 目录存放安装软件包及信息
*.discinfo 文件是安装价质的识别信息

MediaCentOS 目录存放媒体中心安装包
Repodata 目录存放rpm包依赖信息
2. 创建设/disk目录,挂载光盘
[shell]# mkdir /disk
[shell]# mkdir /mnt/cdrom
[shell]# mount–o loop /dev/cdrom /mnt/cdrom
3. 拷贝光盘目录
[shell]# cd /mnt/cdrom
[shell]# ls -a .|grep–v “Packages”|xargs -i cp -rp {} /disk
//将所有文件和文件夹拷贝到/disk,除了Packages目录
[shell]# mkdir -p /disk/Packages
[shell]# mkdir–p /disk/MediaCentOS
4. 拷贝 MediaCentOS系统所需rpm包
a.从Base server模式下安装CentOS6.0-64系统root目录下拷贝anaconda-ks.cfg , install.log 到定制系统主机 disk目录下
b. [shell]#cd /disk; awk '/Installing/{print $2}' install.log | xargs–i cp /mnt/cdrom/Packages/{}.rpm Packages/.

5. 定制安装控制文件ks.cfg
ks文件主要分为三个部分:
a) 系统安装及配置
b) 自定义安装准备(%post --nochroot)
c) 用户自定义安装(%post)
系统安装及配置一般写在ks.cfg文件最前面,系统安装设置以%post --nochroot为结束标志,接着是用户自定义安装准备部分,以“%post --nochroot”作为开始,以“%post”作为结束,自定义安装部分以“%post”作为开始。一般方便可以直接由root下面的 anaconda-ks.cfg修改。
可用vim直接进行修改也可以用system-config-kickstart图形化工具进行修改
[shell]# vim ks.cfg
修改后内容如下
#platform=x86, AMD64, 或 Intel EM64T
#version=DEVEL
# Firewall configuration 关闭防火墙
firewall --disabled
# Install OS instead of upgrade 覆盖安装
install
# Use CDROM installation media 从光驱安装
cdrom
repo --name="CentOS" --baseurl=file:///mnt/source --cost=100
# Root password
rootpw --iscrypted $1$Ro9DjGl8$6bU7DsgPlc9YSAjs1Jj4s1
# System authorization information
auth  --useshadow  --passalgo=sha512 --enablefingerprint
# Use graphical mode install //图形化安装
graphical
firstboot --disable
# System keyboard //美式键盘
keyboard us
# System language //美式英语
lang en_US
# SELinux configuration //关闭SELinux
selinux --disabled
# Installation logging level
logging --level=info
# Reboot after installation //安装完成后重启
reboot
# System timezone //时区
timezone  America/New_York
# Network information 设置静态ip
network  --bootproto=static --device=eth0 --gateway=192.168.1.1 --ip=192.168.1.2 --netmask=255.255.255.0 --onboot=on
# System bootloader configuration
bootloader --location=mbr --append="crashkernel=auto rhgb quiet"
# Clear the Master Boot Record 清除mbr
zerombr
# Partition clearing information //删除所有分区 初始化卷标
clearpart --all --initlabel
# Disk partitioning information 系统分区
part /boot --asprimary --fstype="ext4" --ondisk=sda --size=100
part swap --asprimary --fstype="swap" --ondisk=sda --size=2048
part / --asprimary --fstype="ext4" --grow --ondisk=sda --size=1
part /var --fstype="ext4" --ondisk=sda --size=20480
#安装后运行脚本
%post
#RecData 格式化硬盘并挂载到/RecData目录下
disk_num=`parted -l | grep "Disk /dev/" | wc -l`
disk1=`parted -l | awk '/Disk \/dev/{print $2}'|sed 's/://g'|sed -n '1p'`
disk2=`parted -l | awk '/Disk \/dev/{print $2}'|sed 's/://g'|sed -n '2p'`
sda_num=`parted $disk1 -s print | awk '/^ /{print $1}'| wc -l`
sdb_num=`parted $disk2 -s print | awk '/^ /{print $1}'| wc -l`
if [ "$disk_num" -gt 1 ]; then
        if [ "$sda_num" -eq 0 ]; then
                parted $disk1 -s mklabel gpt
                parted $disk1 -s -- mkpart primary 0 -1
                mkfs.ext4 ${disk1}1
       sda_num=1
        fi
        if [ "$sdb_num" -eq 0 ]; then
                parted $disk2 -s mklabel gpt
                parted $disk2 -s -- mkpart primary 0 -1
                mkfs.ext4 ${disk2}1
       sdb_num=1
        fi

        if [ "$sda_num" -eq 1 ]; then
                uuid=`blkid ${disk1}1 | awk '/dev/{print $2}'|sed 's/"//g'`
       if [ -z "$uuid" ]; then
           uuid=${disk1}1
           fsck.ext4 -y ${disk1}1 &
           sleep 60
           killall -9 fsck.ext4
       fi
                mkdir -p /RecData
       mount ${disk1}1 /RecData
        mkdir -p /RecData/{Rec,RecN}
       echo "$uuid /RecData ext4 defaults  0 0" >> /etc/fstab
    fi
        if [ "$sdb_num" -eq 1 ]; then
                uuid=`blkid ${disk2}1 | awk '/dev/{print $2}'|sed 's/"//g'`
       if [ -z "$uuid" ]; then
           uuid=${disk2}1
           fsck.ext4 -y ${disk2}1 &
           sleep 60
           killall -9 fsck.ext4
       fi
                mkdir -p /RecData
       mount ${disk2}1 /RecData
       mkdir -p /RecData/{Rec,RecN}
       echo "$uuid /RecData ext4 defaults  0 0" >> /etc/fstab
    fi
fi
#mount cdrom 挂载光驱
mkdir -p /media/cdrom
mount -o loop /dev/cdrom /media/cdrom
#install media center 从光碟拷贝媒体中心安装包并进行安装
cp -rf /media/cdrom/MediaCentOS/MediaCenterInstall*.tar.gz /opt/.
cd /opt
chmod 755 -R *
tar xfv MediaCenterInstall*.tar.gz
cd /opt/MediaCenterInstall*/MediaCenter
sh install.sh
cd /opt/MediaCenterInstall*/LiveNode
sh install.sh
rm -rf /opt/MediaCenterInstall*
#boot echo 定制系统启动信息(将CentOS字样替换成MediaCentOS)
echo "MediaCentOS Linux release 6.0 (Based on CentOS 6.0)" > /etc/centos-release
sed -i 's/CentOS Linux release 6.0 (Final)/MediaCentOS Linux release 6.0 (Based on CentOS 6.0)/g' /etc/issue
sed -i 's/CentOS Linux release 6.0 (Final)/MediaCentOS Linux release 6.0 (Based on CentOS 6.0)/g' /etc/issue.net
sed -i 's/localhost.localdomain/MediaCentOS/g' /etc/sysconfig/network
sed -i 's/CentOS/MediaCentOS/g' /etc/rc.d/rc.sysinit
sed -i 's/rhgb/ /g' /boot/grub/grub.conf
#close cdrom 安装完成弹出光碟
eject
#reboot 一切执行完毕后重启
reboot -f
%end
#安装包信息
%packages
@base
@console-internet
@core
@debugging
@directory-client
@hardware-monitoring
@java-platform
@large-systems
@network-file-system-client
@performance
@perl-runtime
@server-platform
@server-policy
certmonger
krb5-workstation
nscd
nss-pam-ldapd
oddjob
pam_krb5
pam_ldap
pax
perl-DBD-SQLite
sgpio

%end

6. 修改isolinux.cfg文件
将/Disk/isolinu/目录下的isolinux.cfg修改如下:
default vesamenu.c32
#prompt 1
timeout 600

display boot.msg

menu background splash.jpg
menu title Welcome to MediaCentOS 6.0!
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 an existing system
  kernel vmlinuz
  append initrd=initrd.img ks=cdrom:/ks.cfg
label Manually
  menu label Manually set ^partition install an existing system
  kernel vmlinuz
  append initrd=initrd.img ks=cdrom:/mks.cfg
label USB
  menu label ^Use the U dish to install an existing system
  kernel vmlinuz
  append initrd=initrd.img ks=hd:sda1:/mks.cfg
label rescue
  menu label ^Rescue installed system
  kernel vmlinuz
  append initrd=initrd.img rescue
label local
  menu label Boot from ^local drive
  menu default
  localboot 0xffff
label memtest86
  menu label ^Memory test
  kernel memtest
  append –
7. 修改安装界面文本标题
这里我们可以去掉安装过程中的CentOS字样,在安装光盘里面有两个.buildstamp文件,一个位于stage2.img中,一个位于 initrd.img中,安装光盘运行时读取的是initrd.img中的那个.buildstamp文件,所以只要把initrd.img文件改了就可以了。
(1) 解压initrd.img文件
2.6内核中的initrd.img采用cpio压缩,不再是2.4内核使用的ext2格式,无法使用mount-o loop 挂载。需要使用gunzip解压缩,然后再利用cpio给img解包。
# cd /disk/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
# rm–f initrd.img
然后修改.buildstamp文件,将CentOS改为MediaCentOS即可.
(2) 制作initrd.img文件
假设当前目录位于准备好的initrd文件系统的根目录下;
# find . | cpio -c -o >../initrd.img
# cp initrd.img /disk/isolinux/

8.修改安装光盘背景图片
1.grub 背景图片为 /disk/isolinux/splash.jpg
2.安装rpm包时背景图片在 /disk/images/install.img 镜像文件中
    A.建立install.img镜像挂载目录
    # mkdir /media/intall
    B. 挂载install.img 镜像
# mount–o loop /disk/images/install.img /media/intall
C.拷贝/media/intall目录到/tmp 目录下
# rsync–av /media/intall /tmp
D.修改背景图
/tmp/install/usr/share/anaconda/pixmaps/progress_first.png
E. install.img封装并替换/disk/images/install.img
#cd /tmp
# mksquashfs install install.img
#cp–fv  install.img /disk/images/

9. 生成comps.xml
comps.xml 文件中包含了安装时用户所见到的与rpm相关的所有内容,它会检查Packages下的RPM包的依赖关系,安装时如果缺少依赖包,它会提示您哪个RPM 包需要哪些依赖库。同时它的角色就是相当于图形安装时选择软件包那个环节。主要由三部分组成,首先是组列表,它描述了在安装过程中需要的不同的组(或组件),包括组名、组的描述和包含的RPM包;其次是组的层次结构,它将组分成不同的类,并定义了组的一个顺序,从而可以决定哪些组需要先安装;最后为一系列RPM包以及它们之间的依赖关系。
下面先进入/disk/repodata 目录,将“*-x86_64-comps.xml”文件改为“comps.xml”,并且将其他文件删除。由于centos6.0下的comps.xml文件名很长,这里“*”为省略符,实际操作时输入完整文件名。
[shell]# cd /disk/ repodata
[shell]# mv *-comps.xml comps.xml
[shell]# ls .|grep -v“comps.xml”|xargs -i rm -f {}
然后返回到/disk根目录,就可以重新开始生成comps.xml文件了。
[shell]# cd /disk/
[shell]# createrepo -g repodata/comps.xml ./
[shell]# declare -x discinfo=`head -1 .discinfo`
[shell]# createrepo -u "media://$discinfo" -g repodata/comps.xml /disk/
到这里,comps.xml文件和其他相关联的文件已被重新生成到repodata目录下。
Tips2:如果你新增或删除了Packages目录的RPM包,请重新生成comps.xml文件。
10. 将媒体中心安装包拷贝到 /disk/ MediaCentOS/ 下
三. 制作ISO文件
到了这一步,实际定制配置系统的工作已经完成了。下面就是生成一个ISO镜像文件,便于刻录到光盘中进行安装。
[shell]# cd /disk/
[shell]# mkisofs -o MediaCentOS.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -R -J -v -T /disk/
/disk/ 目录下产生的MediaCentOS.iso是生成的ISO文件。我们可以测试这个iso的正确性,通过VM的iso镜像安装即可测试定制系统的正确性,如果没问题就可以进行光盘刻录。

你可能感兴趣的:(linux,centos,自制)