当前位置: > RedHat >

全自动安装Redhat Enterprise Linux

时间:2015-01-07 17:49来源:linux.it.net.cn 作者:IT
为了自己重装系统方便,于是就制作了张自动安装光盘,现在把整个过程记录下来,以备将来查阅。

RHEL的自动安装原理其实很简单,其大致过程为:
  1. 编写kickstart文件;
  2. 修改isolinux/isolinux.cfg文件;
  3. 生成自动安装光盘。

现在下面来进一步描述整个光盘的制作过程:
(一). kickstart文件
    kickstart文件可以借助系统中的system-config-kickstart工具来生成,或是手工编写,通常生成后的文件命名为: ks.cfg,并存放在光盘的根目录下。以下为我的ks.cfg文件,有点长,为了方便,我安装了所有的软件包。
# Kickstart file automatically generated by anaconda.

install
cdrom
key --skip
lang en_US.UTF-8
keyboard us
xconfig --startxonboot
network --device eth0 --bootproto dhcp --hostname rhel53
rootpw --iscrypted $1$Qex91Fek$K.4waabbsrwUo4ONqhBz8/
firewall --enabled --port=22:tcp
authconfig --enableshadow --enablemd5
selinux --enforcing
timezone Asia/Shanghai
bootloader --location=mbr --driveorder=hda --append="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 --all --drives=hda
#part /boot --fstype ext3 --size=100 --ondisk=hda
#part pv.6 --size=0 --grow --ondisk=hda
#volgroup VolGroup00 --pesize=32768 pv.6
#logvol / --fstype ext3 --name=LogVol00 --vgname=VolGroup00 --size=1024 --grow
#logvol swap --fstype swap --name=LogVol01 --vgname=VolGroup00 --size=320 --grow #--maxsize=640

%packages
@office
@engineering-and-scientific
@mysql
@development-libs
@editors
@system-tools
@gnome-software-development
@text-internet
@x-software-development
@legacy-network-server
@dns-server
@gnome-desktop
@dialup
@core
@authoring-and-publishing
@base
@ftp-server
@network-server
@games
@legacy-software-development
@java
@java-development
@openfabrics-enterprise-distribution
@legacy-software-support
@smb-server
@base-x
@chinese-support
@graphics
@web-server
@ruby
@printing
@kde-software-development
@kde-desktop
@mail-server
@server-cfg
@sound-and-video
@sql-server
@admin-tools
@news-server
@development-tools
@graphical-internet
tetex-xdvi
lapack
lam
pvm
mod_auth_mysql
mysql-devel
qt-MySQL
mysql-bench
php-mysql
perl-libxml-perl
perl-XML-SAX
tog-pegasus-devel
perl-LDAP
perl-Convert-ASN1
perl-DateManip
perl-XML-Twig
perl-XML-Grove
perl-XML-Dumper
python-imaging
fipscheck-devel
libstdc++43-devel
perl-Crypt-SSLeay
perl-Mozilla-LDAP
perl-Archive-Zip
perl-TimeDate
perl-XML-NamespaceSupport
emacs-nox
emacs
vim-X11
gnuplot-emacs
nedit
arpwatch
adjtimex
avahi-tools
ktune
rdesktop
watchdog
hwbrowser
wireshark-gnome
tog-pegasus
lsscsi
uucp
dtach
festival
tsclient
x3270
e4fsprogs
gnutls-utils
lslk
arptables_jf
am-utils
uuidd
createrepo
mtx
nmap-frontend
tn5250
audit
mrtg
net-snmp-utils
mc
sblim-gather
amanda-client
sblim-wbemcli
sysstat
gnome-nettool
iptraf
mt-st
vlock
dstat
libgnome-java
gob2
libgtk-java
libglade-java
libgconf-java
tftp
epic
lynx
xorg-x11-xbitmaps
mesa-libGLw-devel
openmotif-devel
icon-naming-utils
mesa-libGLU-devel
icon-slicer
xorg-x11-server-sdk
libXp-devel
telnet-server
talk-server
rsh-server
bootparamd
rusers-server
tftp-server
rarpd
gconf-editor
gnome-bluetooth
gnome-keyring-manager
hal-gnome
dasher
tetex-xdvi
keyutils
openCryptoki
brltty
aide
kexec-tools
nfs4-acl-tools
tpm-tools
convmv
iscsi-initiator-utils
trousers
bridge-utils
authd
fipscheck
squashfs-tools
star
hardlink
freeipmi
x86info
device-mapper-multipath
hfsutils
hesinfo
cpufreq-utils
edac-utils
openswan
xferstats
ypserv
openldap-servers-overlays
openldap-servers
amanda-server
vnc-server
quagga
dhcpv6
dnsmasq
radvd
privoxy
dhcp
krb5-server
freeradius
gtk+
bsh-demo
mvapich2
compat-dapl-static
mpitests-mvapich
ibsim
mpitests-mvapich2
mstflint
tvflash
srptools
qlvnictools
mvapich
opensm
dapl-static
compat-db
openssl097a
qt4
compat-readline43
compat-openldap
compat-slang
openmotif22
xorg-x11-utils
xorg-x11-resutils
xorg-x11-xfwp
switchdesk
xorg-x11-xsm
xorg-x11-server-Xnest
xorg-x11-xfs-utils
xorg-x11-server-Xvfb
bogl
bogl-bterm
gimp-help
agg
xfig
libsane-hpaio
gimp-data-extras
gimp
php-odbc
tomcat5-admin-webapps
php-pear
mod_auth_kerb
tomcat5-webapps
mod_nss
mod_auth_pgsql
mod_auth_mysql
mod_authz_ldap
tomcat5
php-mysql
php-pgsql
eruby
ruby-ri
bluez-utils-cups
wacomexpresskeys
kdesdk-devel
kdeadmin
mailman
postfix
exim-doc
exim
squirrelmail
cyrus-imapd
cyrus-imapd-perl
system-config-bind
system-switch-mail-gnome
system-config-boot
dvgrab
xcdroast
mikmod
postgresql-tcl
unixODBC-kde
qt-ODBC
postgresql-contrib
postgresql-pl
postgresql-test
libdbi-dbd-pgsql
postgresql-jdbc
postgresql-odbc
postgresql-docs
system-config-kickstart
gcc43-c++
libgfortran43
dejagnu
imake
java-1.6.0-openjdk-devel
gcc-objc
ElectricFence
python-docs
gcc-gnat
gcc43
java-1.6.0-openjdk
expect
gcc43-gfortran
pexpect
unifdef
memtest86+
nasm
gftp
kdewebdev
xchat

    在ks.cfg文件中,我把分区这块注释掉了,主要是有时分区会有一些变化,也便于在新机或是新硬盘上安装,这块还是手动为好。

(二). isolinux.cfg文件:
default autoinstall 
prompt 1
timeout 50
display boot.msg
F1 boot.msg
F2 options.msg
F3 general.msg
F4 param.msg
F5 rescue.msg
label autoinstall
  kernel vmlinuz
  append ks=cdrom initrd=initrd.img
label linux
  kernel vmlinuz
  append initrd=initrd.img
label text
  kernel vmlinuz
  append initrd=initrd.img text
label ks
  kernel vmlinuz
  append ks initrd=initrd.img
label local
  localboot 1
label memtest86
  kernel memtest
  append -

与光盘的文件相比,主要是修改了等待时间,改为5秒(timeout 50),以及增加了三行:
label autoinstall
  kernel vmlinuz
  append ks=cdrom initrd=initrd.img

(三).生成光盘
    建一个临时目录,将光盘上所有文件都cp到这个临时目录下,并删除文件TRANS.TBLT和isolinux/boot.cat.别忘了把ks.cfg文件放到目录当中,并修改isolinux/isolinux.cfg文件,生成光盘教程的命令如下:

# rm  TRANS.TABL  isolinux/boot.cat
# chmod  +w  isolinux/*
# mkisofs  -o  ../RHEL-autoinstall-dvd.iso  -J  -r  -v -R \
   > -b  isolinux/isolinux.bin  -c  isolinux/boot.cat  \
   > -no-emul-boot  -boot-load-size  4  -boot-info-table  \
   > -V  "My RHEL"  \
   > .
# cd ..
# implantisomd5  --force  ./RHEL-autoinstall-dvd.iso
implantisomd5程序,RHEL并不包含它,可以从如下地址下载译,并安装它。http://www.rocklinux.net/sources/misc/isomd5sum/
 
-R 参数开启Rock Ridge protocol支持。这个协议可以让iso9660支持一些linux文件系统的特 
性,否则一些特殊文件名 的文件无法压制进iso镜像里面,比如说隐藏文件(不是很确定,我 
这里实验是这样)。 
-V 参数其实就是系统显示的光盘名,类似卷标。 
-no-emul-boot 是声明这个iso为非虚拟iso(我不是很理解这个“虚拟”的意思),这样系统启动 
后加载光盘不会去加载某些"虚拟光盘"方面的特性,这样有助 于提高光盘的性能(个人理 
解)。 
-boot-load-size no-emulation格式的iso,默认情况下一个逻辑扇区的大小是512 byte。同时,默 
认情况下,系统会读取整个引导程序。如果不 指定默认读出的引导程序地址不超过4个逻辑扇 
区,在一些BIOS上会出错。 
-boot-info-table 如果指定这个参数,在压制iso文件的时候,会在引导程序的源文件第8个偏移 
量开始打入56byte的引导信息(这个信息是干什么用的,我不知 道)。所以,请保证被引导程 
序有备份。 
-b 指定引导程序 
-c 如果有的话,引导程序会给烧到这个文件里面指定的位置。 
 
最后只要把iso烧录到光盘里面就可以了。
# dvdrecord ../RHEL-5.3-custom.iso
 
Shell自动化脚本实现
===============================
#!/bin/bash
 
mount -o loop /iso/RHEL6.0-20100922.1-Server-i386-DVD1.iso /mnt
 
TEMP_DIR=/tmp/$RANDOM
 
mkdir -p $TEMP_DIR
 
cp -rf /mnt/* $TEMP_DIR
cp -f /mnt/.discinfo $TEMP_DIR
cp -f /mnt/.treeinfo $TEMP_DIR
 
rm $TEMP_DIR/TRANS.TBL  $TEMP_DIR/isolinux/boot.cat
 
chmod +w $TEMP_DIR/isolinux/*
 
wget http://xx.xx.xx.xx/~nzhang/cdrom/ks-rhel6-i386.cfg -O $TEMP_DIR/ks.cfg
 
sed -i -e 's/default vesamenu.c32/default autoinstall/' -e '/label linux/i\label autoinstall\n  kernel vmlinuz\n  append ks=cdrom initrd=initrd.img' $TEMP_DIR/isolinux/isolinux.cfg
 
mkisofs -o /boot/custom.iso -J -r -v -R -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -V "RHEL 6.0" $TEMP_DIR
 
rm -rf $TEMP_DIR
 
umount /mnt
 

(责任编辑:IT)
------分隔线----------------------------
栏目列表
推荐内容