用Kickstart远程安装Linux系统

用Kickstart远程安装Linux系统

kickstart 的网络安装部分转自 chinaunix  by pyh

用kickstart远程安装Linux系统
以下是我用KS远程安装系统的实践,如有问题,请跟我联系:yonghua_peng@yahoo.com.cn

前言:原有系统是RH Linux 9.0,现想把它远程安装成RH AS3,安装过程中不需要任何交互式操作。使用kickstart结合WEB和DHCP可以做到这一点。kickstart的原理大概这样:使用要安装的内核镜像引导后,内核会读取指定位置的ks配置文件(ks.cfg),在安装过程中所需要的各项系统配置(键盘,鼠标,语言,分区等),都从这个配置文件里获取。我在这里使用HTTP方式进行安装,所以要先在网络中配置一台WEB服务器,用于下载安装文件;再配置一台DHCP服务器,因为在系统安装之初,它需要先通过DHCP方式申请一个IP地址,使自己能联到网络中,才能从HTTP服务器上下载文件。

1.在网络中配置一台http服务器,例如Apache;以及一台DHCP服务器。
2.将RH AS3的安装文件上传到web服务器的发布目录里,包含四个文件:
rhel-3-U3-i386-as-disc1.iso  rhel-3-U3-i386-as-disc3.iso
rhel-3-U3-i386-as-disc2.iso  rhel-3-U3-i386-as-disc4.iso
3.在发布目录里建好目录结构,包括:
  $web/disc1 $web/disc2 $web/disc3 $web/disc4 $web/RedHat $web/RedHat/base $web/RedHat/RPMS
  其中$web代表WEB发布目录。
4.将这4个镜像文件mount到本地文件系统:
mount -o loop -o ro rhel-3-U3-i386-as-disc1.iso disc1
mount -o loop -o ro rhel-3-U3-i386-as-disc2.iso disc2
mount -o loop -o ro rhel-3-U3-i386-as-disc3.iso disc3
mount -o loop -o ro rhel-3-U3-i386-as-disc4.iso disc4
5.进入新建的RedHat/base目录,把第一张盘里的base目录里的内容链接过来:
cd RedHat/base
ln -s ../../disc1/RedHat/base/* .
6.进入RedHat/RPMS目录,把所有盘里面的RPM文件链接过来:
cd RedHat/RPMS
ln -s ../../disc1/RedHat/RPMS/* .
ln -s ../../disc2/RedHat/RPMS/* .
ln -s ../../disc3/RedHat/RPMS/* .
ln -s ../../disc4/RedHat/RPMS/* .
上述过程可以写成脚本如下(在WEB服务器上安装文件存放的目录里执行):
--------------------------------------------------------
mkdir -p RedHat
cd RedHat
mkdir -p base; mkdir -p RPMS

cd ..
mkdir -p disc{1,2,3,4}
mount -o loop -o ro rhel-3-U3-i386-as-disc1.iso disc1
mount -o loop -o ro rhel-3-U3-i386-as-disc2.iso disc2
mount -o loop -o ro rhel-3-U3-i386-as-disc3.iso disc3
mount -o loop -o ro rhel-3-U3-i386-as-disc4.iso disc4

cd RedHat/base
ln -s ../../disc1/RedHat/base/* .

cd ../RPMS
ln -s ../../disc1/RedHat/RPMS/* .
ln -s ../../disc2/RedHat/RPMS/* .
ln -s ../../disc3/RedHat/RPMS/* .
ln -s ../../disc4/RedHat/RPMS/* .
--------------------------------------------------------
7.创建ks.cfg配置文件,该文件决定安装或升级过程中的选项,ks.cfg文件可以放在web发布目录下,内容如下:
===================================================================================
lang en_US
langsupport zh_CN en_US --default=en_US
keyboard us
mouse
timezone Asia/Shanghai
rootpw 1234
reboot
#upgrade
install
url --url http://192.168.14.202/rhas
#harddrive --partition=sdb1 --dir=rhas
#nfs --server=192.168.14.227 --dir=/home/pyh/rhas
text
bootloader --location=mbr
zerombr yes
clearpart --drives sda --initlabel
part / --fstype ext3 --size 3072 --asprimary --ondisk sda
part swap --size 256 --asprimary --ondisk sda
part /tmp --fstype ext2 --size 256 --ondisk sda
part /home --fstype ext3 --size 1 --grow --ondisk sda
auth  --useshadow  --enablemd5
#network --bootproto=dhcp --device=eth0
network --device=eth0 --bootproto=static --ip=192.168.14.144 --netmask=255.255.254.0 --gateway=192.168.14.15 --nameserver=202.96.128.68 --hostname=test05.188.com
firewall --disabled
skipx

%packages --resolvedeps
@ development-tools
@ kernel-development
@ admin-tools
@ system-tools

%post
/sbin/chkconfig --level 345 sshd on
/sbin/chkconfig --level 0123456  kudzu off
/sbin/chkconfig --level 0123456  cups off
/sbin/chkconfig --level 0123456  autofs off
/sbin/chkconfig --level 0123456  sendmail off
/sbin/chkconfig --level 0123456  atd off
/sbin/chkconfig --level 0123456  iptables off
/sbin/chkconfig --level 0123456  xinetd off
/sbin/chkconfig --level 0123456  portmap off
/sbin/chkconfig --level 0123456  pcmcia off
/sbin/chkconfig --level 0123456  gpm off
/sbin/chkconfig --level 0123456  rhnsd off
/sbin/chkconfig --level 0123456  isdn off
/sbin/chkconfig --level 0123456  nfslock off
/sbin/chkconfig --level 0123456  rawdevices off
/sbin/chkconfig --level 0123456  keytable off
/sbin/chkconfig --level 0123456  apmd off
/sbin/chkconfig --level 0123456  anacron off
/sbin/chkconfig --level 0123456  xfs off
/sbin/chkconfig --level 0123456  netfs off
/sbin/chkconfig --level 0123456  ip6tables off
/sbin/chkconfig --level 0123456  arptables_jf off
/sbin/chkconfig --level 0123456  microcode_ctl off
/sbin/chkconfig --level 0123456  irqbalance off
/sbin/chkconfig --level 0123456  mdmonitor off
/sbin/chkconfig --level 0123456  hpoj off
/sbin/chkconfig --level 0123456  sgi_fam off
/sbin/chkconfig --level 0123456  audit off
/sbin/chkconfig --level 0123456  firstboot off
/sbin/chkconfig --level 0123456  vsftpd off
========================================================================================
解释:上述配置文件里,第一小节是kickstart命令,它决定安装过程中的选项。值得说明的是,本人在这里将安装方式设置为install,即重新安装一个新系统。如果不选择install,而选择upgrade,就会在原来系统基础上进行升级,原来的分区和文件系统,及安装的软件包都不会变。kickstart命令没有先后顺序。第二小节(%packages)是选择欲在新系统中安装的软件包。第三小节(%post)定制在系统安装完成后,执行的一些命令,这里的意思是在系统安装完成后,关闭所有服务,只开SSH服务。
关于kickstart每个命令的详细解释请参看:http://www.hk.redhat.com/docs/ma ... start2-options.html
8.在RH AS3第一个iso文件里的images目录下,有一个boot.iso文件,将它再展开,获得新系统的内核镜像文件,它们是vmlinuz和 initrd.img,将他们拷贝到要安装系统的/boot目录下,重命名为:vmlinuz-as3,initrd-as3
9.在要安装的机器上,编辑/etc/grub.conf文件,加入内容如下:
==========================================================================
title Upgrade to AS3
       kernel /vmlinuz-as3 ro ks=http://192.168.14.202/rhas/ks.cfg
       initrd /initrd-as3
==========================================================================
ks=http://192.168.14.202/rhas/ks.cfg 这行决定配置文件的路径。
在这个文件里更改默认的启动顺序(例如default=1),将新内核启动选择为默认。
10.重启计算机,过20分钟后,一个新系统就诞生了,你可以通过SSH连上去进行操作。

补充:如果选择NFS方式或本地硬盘的方式进行安装或升级,原理跟上述是一样的,不过读取安装文件的方式有些不同。另外,这两种方式可以直接读取iso文件,而不必象上面那样把iso文件展开。
1)如果选择NFS方式安装,先要配置NFS服务器,将安装镜像文件(iso文件)放在NFS服务器上,然后在要安装的机器上,mount上这些文件。ks.cfg文件里对应的语句是:nfs --server=192.168.14.227 --dir=/home/pyh/rhas 前者是服务器IP地址,后者是安装文件目录。 /etc/grub.conf文件里对应的是:ks=nfs:192.168.14.227:/home/pyh/rhas/ks.cfg 指定ks配置文件的路径。
2)如果选择本地硬盘安装,那么ks.cfg里对应的地方改成:harddrive --partition=sdb1 --dir=rhas,前者是存放安装文件的分区,后者是目录,该分区的文件系统必须是vfat或ext2格式。grub.conf文件对应的地方改成: ks=hd:sda1/ks.cfg sda1是我的/boot分区,就是说将ks.cfg配置文件放在/boot目录下。如果选择硬盘安装,那么安装文件最好放在系统中的其他物理磁盘上。      
补充:

kickstart 还可以进行单机版的操作,相对来说;简单的多,操作过程如下:
1,从第一个 iso 文件中找出系统的启动时所需的内核镜像: vmlinuz和initrd.img(一般在 images 目录下的 boot.iso 中),拷贝至 /boot 中,修改grub.conf ;格式如下:
title Upgrade to AS3
       kernel /vmlinuz ro ks=hd:sda1/ks.cfg
       initrd  /initrd.img
注意红色的 1 对应着你当前系统的 /boot 分区,如果你的  /boot 是 sda3,就要使用 3 来代替

2,把安装新系统时需要的 iso 文件放在某个分区的根目录下,一般使用 /home 分区.
如果使用home来放置 iso文件,在 kickstart 的配置文件 ks.cfg 中就不能使用为该分区了,否则安装将会失败。

单机版的kickstart配置文件的样例:
#--------------------------------------------------------------
lang en_US
langsupport zh_CN en_US --default=en_US
keyboard us
mouse
timezone Asia/Shanghai
rootpw --iscrypted $1$H7gFMES5$wB8N0UMze7WvOpqbyJVM2/
#root 的密码,来自 /etc/shadow
reboot
#安装完成后重启
text
#文本模式安装
install
#全新安装,而不是 update
harddrive --partition=sda10 --dir=/
#harddirve 指定了 iso 文件所在的分区, 这个地方要注意,否则只有给机房打电话了
bootloader --location=mbr
zerombr yes
#清除当前的 mbr 记录
part /boot --fstype ext3 --asprimary --onpart=sda1
part / --fstype ext3  --asprimary --onpart=sda3
part swap --asprimary --onpart=sda2
part /var --fstype ext3  --onpart=sda7
part /tmp --fstype ext3  --onpart=sda6
part /usr --fstype ext3  --onpart=sda5
#指定系统中分区的位置,如果你想保留 /home 分区,就不要在使用 sda10 ,安装完成后mount 上它就可以了,
auth  --useshadow  --enablemd5
#系统授权信息
network --device=eth1 --bootproto=static --ip=222.222.222.222 --netmask=255.255.255.0 --gateway=222.222.222.1 --nameserver=202.202.202.202
network --device=eth0 --bootproto=static --ip=192.168.1.111 --netmask=255.255.255.0
firewall --disabled
skipx
#XWindows的配置信息,如果使用 图形界面,就不要注销下面这句话
#xconfig --depth=32 --resolution=800x600 --defaultdesktop=GNOME
%packages --resolvedeps
@ development-tools
@ admin-tools
@ system-tools
%post
/usr/sbin/userdel ftp
/bin/rm -rf /etc/cron.daily/slocate.cron
/sbin/chkconfig --level 0123456  kudzu off
/sbin/chkconfig --level 0123456  cups off
/sbin/chkconfig --level 0123456  autofs off
/sbin/chkconfig --level 0123456  sendmail off
/sbin/chkconfig --level 0123456  atd off
/sbin/chkconfig --level 0123456  iptables off
/sbin/chkconfig --level 0123456  portmap off
/sbin/chkconfig --level 0123456  pcmcia off
/sbin/chkconfig --level 0123456  gpm off
/sbin/chkconfig --level 0123456  rhnsd off
/sbin/chkconfig --level 0123456  isdn off
/sbin/chkconfig --level 0123456  nfslock off
/sbin/chkconfig --level 0123456  rawdevices off
/sbin/chkconfig --level 0123456  keytable off
/sbin/chkconfig --level 0123456  apmd off
/sbin/chkconfig --level 0123456  xinetd off
/sbin/chkconfig --level 0123456  anacron off
/sbin/chkconfig --level 0123456  xfs off
/sbin/chkconfig --level 0123456  netfs off
/sbin/chkconfig --level 0123456  ip6tables off
/sbin/chkconfig --level 0123456  arptables_jf off
/sbin/chkconfig --level 0123456  microcode_ctl off
/sbin/chkconfig --level 0123456  irqbalance off
/sbin/chkconfig --level 0123456  mdmonitor off
/sbin/chkconfig --level 0123456  hpoj off
/sbin/chkconfig --level 0123456  sgi_fam off
/sbin/chkconfig --level 0123456  audit off
/sbin/chkconfig --level 0123456  firstboot off
/sbin/chkconfig --level 0123456  vsftpd off
/sbin/chkconfig --level 0123456  sysstat off
/sbin/chkconfig --level 0123456  rpcgssd off
/sbin/chkconfig --level 0123456  rpcsvcgssd off
/sbin/chkconfig --level 0123456  smartd off
/sbin/chkconfig --level 0123456  canna off
/sbin/chkconfig --level 0123456  messagebus off
/sbin/chkconfig --level 0123456  haldaemon off
/sbin/chkconfig --level 0123456  cpuspeed off
/sbin/chkconfig --level 0123456  rpcidmapd off
/sbin/chkconfig --level 0123456  lm_sensors off
/sbin/chkconfig --level 0123456  acpid off
/sbin/chkconfig --level 0123456  cups-config-daemon off
/sbin/chkconfig --level 0123456  iiim off
/usr/sbin/useradd defaultuser
/usr/sbin/usermod -p '$1$H4eFMdS5$wdzr7WasJHGvOpdqbyJVM2/' defaultuser
#安装后执行的一些命令
#-----------------------------------------------------------------------

这里只提到了ks.cfg常见的应用命令,对升级系统已足够了,如果想对它有更深入的了解,请使用 google .

一般 10 分钟后就可以重新 ssh 登陆远程主机了,如果机器配置不高,可能要等上 15分钟。