系統環境:centos 6.5 x64
虛拟機:vmwave workstatio 10.0
将centos_6.5_x64_dvd挂載到/media下名為CentOS_6.5_Final,利用虛拟機挂載。
Centos 6.5 CD光牒内容
檔案/目錄名
作用
CentOS_BuildTag
Centos 的編譯标記
EFI
EFI 引導的相關檔案
EULA
使用者協定檔案
GPL
GPL協定檔案
images
目錄包括了必要的啟動映像檔案
isolinux
目錄存放CD光牒啟動時的安裝界面資訊
Packages
目錄存放安裝軟體包及資訊
repodata
RELEASE-NOTES-en-US.html
發行說明(英文版)
RPM-GPG-KEY-CentOS-6
Gpg key
RPM-GPG-KEY-CentOS-Debug-6
Gpg key
RPM-GPG-KEY-CentOS-Security-6
Gpg key
RPM-GPG-KEY-CentOS-Testing-6
Gpg key
TRANS.TBL
CD光牒中所有的檔案類型資訊說明
.discinfo
安裝媒體的識别資訊
1. 建立環境
# cd //回到$HOME
# mkdir myos
# mkdir -p myos/Packages
同步CD光牒内的檔案到 myos,Packages目錄除外
# rsync –av --exclude=Packages /media/CentOS_6.5_Final myos
安裝相應的工具軟體
# yum -y install anaconda-runtime createrepo yum-utils anaconda anaconda-help busybox-anaconda mkisofs
2. 擷取所需的軟體包
A) 将anaconda-ks.cfg , install.log複制到$HOME。
Centos系統安裝完成以後(我這裡是以先安裝centos(選擇mini類型)的生成檔案來做),在系統裡會産生日志。日文檔案存放在/root/install.log。會産生kickstart安裝配置檔案,此配置存放在/root/anaconda-ks.cfg
install.log 記錄本系統安裝了的軟體包,anaconda-ks.cfg為系統的安裝配置檔案。
B) 根據install.log複制出我們所需要的軟體包
根據install.log生成軟體包清單檔案
# cat install.log | grep Installing | sed 's/Installing //g' > packages.list
依據packages.list把相應的軟體包從/media/CentOS_6.5_Final/Packages複制到~/myos/Packages。 腳本如下:
#!/bin/bash
DEBUG=0
ALL_RPMS_DIR=/media/CentOS_6.5_Final/Packages
LT_RPMS_DIR=./myos/Packages
pkg_list=./packages.list
num_of_pkg=`cat $pkg_list | wc -l`
#echo $num_of_pkg
i=1
while [ $i -le $num_of_pkg ] ; do
line=`head -n $i $pkg_list | tail -n -1`
name=`echo $line | awk '{print $1}'`
if [ $DEBUG -eq "1" ] ; then
echo $i: $line
echo name:$name
fi
if [ $DEBUG -eq "1" ]; then
ls $ALL_RPMS_DIR/$name*
if [ $? -eq 0 ] ; then
echo "cp $ALL_RPMS_DIR/$name* "
fi
else
echo "cp $ALL_RPMS_DIR/$name* $LT_RPMS_DIR "
cp $ALL_RPMS_DIR/$name* $LT_RPMS_DIR/
if [ $? -eq 0 ] ; then
echo "cp $ALL_RPMS_DIR/$name* "
cp $ALL_RPMS_DIR/$name* $LT_RPMS_DIR/
fi
fi
i=`expr $i + 1`
done
C) 編寫.cfg檔案
将anaconda-ks.cfg複制到~/myos/isolinux/ks.cfg
Ks.cfg 的内容如下(.cfg的詳細文法見參考[3]):
# Kickstart file automatically generated by anaconda.
#version=DEVEL
install
#text
cdrom
#設定安裝語言
#lang en_US.UTF-8
lang zh_CN.UTF-8
keyboard us
#skip the X configuration
skipx
network --onboot no --device eth0 --bootproto dhcp --noipv6
#設定root密碼,此處為:centos
rootpw --iscrypted $6$q4pbJVjqD7ZmOEEq$f7C0H8gIBf3rlKXqVn0UOVfOYqYIG8kFU2yBghH5lc0uVjmU0mFTSgHe4MwZGuXvHWZOyXxhnBoIK9yIuDBt20
firewall --service=ssh
authconfig --enableshadow --passalgo=sha512
selinux --enforcing
timezone --utc Asia/Chongqing
bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet"
# 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
#clearpart --linux --drives=sda
#volgroup VolGroup --pesize=4096 pv.008002
#logvol / --fstype=ext4 --name=lv_root --vgname=VolGroup --grow --size=1024 --maxsize=51200
#logvol swap --name=lv_swap --vgname=VolGroup --grow --size=1984 --maxsize=1984
#part /boot --fstype=ext4 --size=500
#part pv.008002 --grow --size=1
#clearpart --linux --drives=sda
#clearpart --all --initlabel
clearpart --all --drives=sda
#此處設定分區
part /boot --fstype=ext4 --size=300
part /home --fstype=ext4 --grow --size=3000
part /opt --fstype=ext4 --size=3000
part /var --fstype=ext4 --size=2000
part /--fstype=ext4 --size=8000
part swap --recommended
#repo --name="CentOS" --baseurl=cdrom:sr0 --cost=100 #這句一定要注釋掉不然會提示找不到名為CentOS的有效的repo
#要安裝的軟體包@開頭的為group,也可寫單個包名如vim
%packages
@core
@server-policy
@workstation-policy
%end
#%post --nochroot
#mount cdrom
#/bin/mkdir -p /mnt/cdrom
#/bin/mount -r -t iso9660 /tmp/cdrom /mnt/cdrom
#umount cdrom
#/bin/umount /mnt/cdrom
%post #這部分是安裝完系統之後執行的步驟,可自定義
/bin/echo "mount -n -o remount,ro /" >> /etc/rc.local
/bin/echo "tmpfs /tmp tmpfs defaults 0 0" >> /etc/fstab
%end
#--Reboot the host after installation is done
reboot
D) 修改isolinux.cfg
修改後的如下(主要是添加藍色部分的語句):
default auto
#default vesamenu.c32
#prompt 1
timeout 600
display boot.msg
menu background splash.jpg
menu title Welcome to CentOS 6.5!
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 auto
kernel vmlinuz
append ks=cdrom:/isolinux/ks.cfg initrd=initrd.img
label linux
menu label ^Install or upgrade an existing system
menu default
kernel vmlinuz
append initrd=initrd.img
label vesa
menu label Install system with ^basic video driver
kernel vmlinuz
append initrd=initrd.img xdriver=vesa nomodeset
label rescue
menu label ^Rescue installed system
kernel vmlinuz
append initrd=initrd.img rescue
label local
menu label Boot from ^local drive
localboot 0xffff
label memtest86
menu label ^Memory test
kernel memtest
append -
3. 制作iso檔案
A)更新comps.xml //如不執行此步驟會提示找不到軟體包,要求插入磁盤1
# cd myos
# declare -x discinfo=`head -1 .discinfo`
# createrepo -u "media://$discinfo" -g repodata/*-comps.xml ./
Spawning worker 0 with 217 pkgs
Workers Finished
Gathering worker results
Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
Sqlite DBs complete
B) 生成制作iso
# cd myos
# mkisofs -R -J -T -r -l -d -joliet-long -allow-multidot -allow-leading-dots -no-bak -o ../myos-0.1-x86.iso \
-b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table ./
附錄:
一鍵制作腳本見 onekey目錄下的onekey.sh
onekey.sh
點選(此處)折疊或打開
#!/bin/sh
echo "install some tools ..."
#yum -y install anaconda-runtime createrepo yum-utils anaconda anaconda-help busybox-anaconda mkisofs
echo "set up env and copy files to myos from Centos DVD ..."
MYOS_DIR=../myos-onekey
DVD_DIR=../CentOS_6.5_Final/
OUTPUT_ISO=${MYOS_DIR}-0.1.iso
mkdir -p ${MYOS_DIR}/Packages
rsync -av --exclude=Packages $DVD_DIR $MYOS_DIR
if [ $? -ne 0 ] ; then
exit
fi
echo "get packages list ..."
cat install.log | grep Installing | sed 's/Installing //g' > packages.list
echo "copy packages from Centos DVD to myos ..."
sh ./cprpms.sh
if [ $? -ne 0 ] ; then
exit
fi
echo "copy isolinux.cfg and ks.cfg to myos/isolinux ..."
cp -rf configs/isolinux.cfg $MYOS_DIR/isolinux
cp -rf configs/ks.cfg $MYOS_DIR/isolinux
if [ $? -ne 0 ] ; then
echo "copy failure, please check and try again"
exit
fi
echo "update *comps.xml"
cd $MYOS_DIR
declare -x discinfo=`head -1 .discinfo`
createrepo -u "media://$discinfo" -g repodata/*-comps.xml ./
echo "genrate iso ..."
mkisofs -R -J -T -r -l -d -joliet-long -allow-multidot -allow-leading-dots -no-bak -o ${OUTPUT_ISO} \
-b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table ./
echo "clean some files ..."
rm -f packages.list
cprpms.sh
點選(此處)折疊或打開
#!/bin/bash
DEBUG=0
MYOS_DIR=../myos-onekey
DVD_DIR=../CentOS_6.5_Final
ALL_RPMS_DIR=${DVD_DIR}/Packages
LT_RPMS_DIR=${MYOS_DIR}/Packages
pkg_list=./packages.list
num_of_pkg=`cat $pkg_list | wc -l`
#echo $num_of_pkg
i=1
while [ $i -le $num_of_pkg ] ; do
line=`head -n $i $pkg_list | tail -n -1`
name=`echo $line | awk '{print $1}'`
ver=`echo $line | awk '{print $3}' | cut -f 2 -d:`
if [ $DEBUG -eq "1" ] ; then
echo $i: $line
echo name:$name
echo ver:$ver
fi
if [ $DEBUG -eq "1" ]; then
ls $ALL_RPMS_DIR/$name*
if [ $? -eq 0 ] ; then
echo "cp $ALL_RPMS_DIR/$name* "
fi
else
echo "cp $ALL_RPMS_DIR/$name* $LT_RPMS_DIR "
cp $ALL_RPMS_DIR/$name* $LT_RPMS_DIR/
if [ $? -eq 0 ] ; then
echo "cp $ALL_RPMS_DIR/$name* "
cp $ALL_RPMS_DIR/$name* $LT_RPMS_DIR/
fi
fi
i=`expr $i + 1`
done
參考連結:
[1]. 于CentOS 6.2制作自己的發行版-niao5929-ChinaUnix部落格
[2]. 定制CentOS 6.0精簡的自動安裝版-聆聽未來- 51CTO技術部落格
[3]. Anaconda/Kickstart - FedoraProject
[4]. 獨辟蹊徑網絡安裝系列之Redhat衍生版重構初探[09年3月刊] -電子雜志-技術新知Linux時代-開源、自由、共享-中國最大的Linux技術社群
[5]. createrepo 與repodata資料庫
[6]. RepoCreate - yum - Trac
[7]. createrepo - Trac