利用kickstart实现自动化安装

这两天学习kickstart的部署,采用 pxe + dhcp + tftp + nfs 的方式,下面把整个流程简要地列出来。


我这里用的系统是rhel6.5,对于rhel5/centos5系列的系统略有不同。


先简单描述一下通过网络启动安装的过程:

  1. 客户端设置为通过网络启动,可能需要在bios中设定开启该功能

  2. 启动之后在局域网内发出广播

  3. dhcp服务器响应该广播,客户端获得IP地址,以及一些额外信息,比如tfpt服务器的IP,需要下载的文件等

  4. 客户端从tftp服务器中获取需要的启动文件(pxelinux.0)及其配置文件

  5. 客户端通过指定方式获取自动应答文件(ks.cfg),然后开始自动化安装


下面是完整过程:

dhcp服务:

安装

yum install -y dhcp

修改配置文件/etc/dhcp/dhcpd.conf,内容如下:

subnet 192.168.80.0 netmask 255.255.255.0 {
  range 192.168.80.100 192.168.80.110;
  option domain-name-servers 192.168.80.12;
  option domain-name "fhjjabba.com";
  option routers 192.168.80.2;
  option broadcast-address 192.168.80.255;
  default-lease-time 600;
  max-lease-time 7200;
  
  next-server 192.168.80.12;
  filename "/pxelinux.0";
}

上面的配置中除了最后两句之外,其它的配置项都可以直接从示例配置中复制过来修改,示例文件是/usr/share/doc/dhcp-4.1.1/dhcpd.conf.sample,关于dns的配置不是必须的(据说是)。

next-server用于指定tftp服务器的地址,filename则指定要从该服务器下载的文件,其中的路径"/"并非指操作系统的根,而是tftp服务自己的根,下面讲到tftp服务配置时再细说。


配置好了以后可以启动服务了

service dhcpd start

这里需要注意的是,dhcpd.conf中必须至少有一个subnet与当前主机处于同一网段,否则dhcp服务将启动失败。根据以上配置,我当前的主机必须有一个192.168.80.0/24的地址。


tftp服务:

安装

yum install -y tftp-server

因为tftp服务是由xinetd管理的,所以其配置文件是/etc/xinetd.d/tftp,修改后内容如下:

service tftp
{
        socket_type     = dgram
        protocol      = udp
        wait        = yes
        user        = root
        server       = /usr/sbin/in.tftpd
        server_args    = -s /var/lib/tftpboot
        disable      = no
        per_source     = 11
        cps        = 100 2
        flags       = IPv4
}

其实只是将disable = yes改成了disable = no,然后重启xinetd

service xinetd restart

检验tftp服务是否已经启动

netstat -ulnp | grep :69

能看到结果说明tftp正常启动了。


这里重点关注一下tftp配置文件中的server_args项,后面的值是/var/lib/tftpboot,这就是tftp服务的根目录,所以上面提到的"/pxelinux.0"文件的完整路径应该是/var/lib/tftpboot/pxelinux.0。


接下来为客户端准备一些必要文件。

包括内核vmlinuz,内存映像initrd.img,引导程序pxelinux.0。

首先挂载系统光盘到/mnt/cdrom

mkdir /mnt/cdrom
mount /dev/cdrom /mnt/cdrom

复制其中的内核和内存映像

cp /mnt/cdrom/isolinux/{vmlinuz,initrd.img} /var/lib/tftpboot

另外还有很多教程说要复制/mnt/cdrom/isolinux/下的boot.msg和vesamenu.c32两个文件,这些都不是必须的,boot.msg是系统启动时输出的一些提示信息,vesamenu.c32是一个菜单。这里我就不复制了,待会修改配置时把它们去掉就好。


然后是引导程序pxelinux.0,它是由syslinux包提供的,所以要安装syslinux

yum install -y syslinux

装好后就可以复制了

cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot


客户端下载了pxelinux.0后还会下载其配置文件,该配置文件规定放在tftp根目录下的名为pxelinux.cfg的目录中,所以先创建这个目录

mkdir /var/lib/tftpboot/pxelinux.cfg

配置文件可以直接复制/mnt/cdrom/isolinux下的isolinux.cfg,名称默认为default

cp /mnt/cdrom/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default

然后为了修改这个配置文件,还需要修改其权限

chmod u+w /var/lib/tftpboot/pxelinux.cfg/default

我的配置如下:

#default vesamenu.c32
default linux
prompt 0

#display boot.msg

label linux
  menu label ^Install or upgrade an existing system
  menu default
  kernel vmlinuz
  append initrd=initrd.img ks=nfs:192.168.80.12:/nfs_share/ks.cfg

有两行以“#”开头的是注释,就是刚才没有复制到的两个文件。

注意第二行default linux和下面的label linux,这两项是对应的,表示默认就使用label linux下面的配置。重点关注label linux下面第四行的ks=...这一项,是我自己加上的,意思是指定系统安装过程中的自动应答文件,根据实际情况自己填写,如果是http或ftp的话格式就是http://ip/path/to/ks.cfg。


nfs服务:

安装

yum install -y nfs-utils

然后设置需要共享的目录,我设的是/nfs_share,配置文件是/etc/exports

mkdir /nfs_share
echo "/nfs_share    *(ro,async,nohide,crossmnt)" >> /etc/exports

exports文件说明了nfs需要共享的目录,这里建议加上nohide和crossmnt两个选项,不然客户端有可能无法挂载。


然后在共享目录中提供自动应答文件,我直接复制/root下的anaconda-ks.cfg了

cp ~/anaconda-ks.cfg /nfs_share/ks.cfg

然后手动编辑ks.cfg。

里面具体每一项我就不多说了,下面是我的配置:

# Kickstart file automatically generated by anaconda.

#version=DEVEL
install
text
key --skip

nfs --server=192.168.80.12 --dir=/nfs_share/cdrom

lang en_US.UTF-8
keyboard us
network --onboot yes --device eth0 --bootproto dhcp --noipv6
rootpw  --iscrypted $6$9ZnVhZodnRm03BDB$0bVVH1uMQeHmUbKTRuaNas2wrJYebJwIa6RQTcdqOFVn0Qw/fVwowbcdGx9zhs9xL7/kvSouyeVkUbAefZtO60
firewall --service=ssh
authconfig --enableshadow --passalgo=sha512
selinux --permissive
timezone Asia/Shanghai
bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet"
reboot
clearpart --all --drives=sda
zerombr

part /boot --fstype=ext3 --size=100
part / --fstype=ext3 --size=5120
part /usr --fstype=ext3 --size=10240
part /home --fstype=ext3 --size=5120
part swap --size=1024


%packages --nobase
@core
%end

注意nfs那一项,指定了nfs服务器的ip和系统镜像所在的目录(即系统安装过程中需要下载的各种安装包),我把系统光盘挂在了/nfs_share/cdrom下,这里就要指定这个目录而不是/nfs_share。另外,因为这个目录是/nfs_share的子目录,所以在/etc/exports中就要指定nohide和crossmnt两个选项。

因为此前系统光盘已经挂在了/mnt/cdrom下,所以可以用下面的方式再次挂载

mount --bind /mnt/cdrom /nfs_share/cdrom

这样就同时存在有两个入口了。


还有那个rootpw项就是设置root密码的,后面一长串是我设的密码加密后的结果,你可以根据自己需要设置,利用grub-crypt命令即可

# grub-crypt
Password:
Retype password:
$6$eHcHyEchzEgZAkMl$dUvm9Ik06ZeYfIlFPeYsNhGqczu7SbkP19bupWj2RUQnZzjKrr9SJ03/Q9e8gHRTXCWDkcZHsExH6WtzIMiCe.

就是把最后的结果复制粘贴进去即可。

如果忘记做这一步,那么登陆系统就要输入我设置的密码咯,所以你要改密码,可以在grub引导界面给内核添加一个启动参数,在后面加上“1”或“s”即可,具体方法还是去google一下吧,忘记root密码的人太多了。。。


因为这个配置文件是从root的家目录复制出来的,所以还要修改权限让所有人可读,否则客户端将无法下载该文件

chmod +r /nfs_share/ks.cfg

然后启动nfs服务即可

service nfs start


好了,完整配置过程已经完成,接下来就可以新建一台机器做实验了。

不过还有几点需要说明一下:

  • 新建的虚拟机要与dhcp服务器在同一个局域网中,而且尽量不要出现多个dhcp服务器,所以最好就是把两台虚拟机放在host-only网络中。

  • 新建虚拟机时的虚拟磁盘要马上分配足够大小的空间,否则安装时会出现无法分配足够磁盘空间的错误。例如我的ks.cfg中配置的分区加起来有21+G,那么新建虚拟磁盘最好就立即分配25G,然后才能顺利安装。

  • 如果客户端获得ip地址后无法连接tftp服务器,即出现连接超时的情况,就把selinux和iptables都关掉。



第一次在51CTO上写博客,做得不好的地方还请各位见谅,哪里写得不对请委婉指出,有问题可以提出来一起讨论。j_0057.gif

你可能感兴趣的:(kickstart,自动化安装)