现在的位置: 首页 > 综合 > 正文

制作iso

2017年12月21日 ⁄ 综合 ⁄ 共 8328字 ⁄ 字号 评论关闭

. 制作环境的准备

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系统

由于方便制作,我们可以在VMwarevboxxen等虚拟环境中进行安装,这里我们选用了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解压缩,然后再利用cpioimg解包。

# 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的正确性,通过VMiso镜像安装即可测试定制系统的正确性,如果没问题就可以进行光盘刻录。

抱歉!评论已关闭.