利用kickstart实现自动化安装

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


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


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

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

  2. 启动以后在局域网内发出广播服务器

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

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

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


下面是完整过程:ssh

dhcp服务:socket

安装

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

相关文章
相关标签/搜索