这两天学习kickstart的部署,采用 pxe + dhcp + tftp + nfs 的方式,下面把整个流程简要地列出来。linux
我这里用的系统是rhel6.5,对于rhel5/centos5系列的系统略有不一样。ios
先简单描述一下经过网络启动安装的过程:centos
客户端设置为经过网络启动,可能须要在bios中设定开启该功能bash
启动以后在局域网内发出广播服务器
dhcp服务器响应该广播,客户端得到IP地址,以及一些额外信息,好比tfpt服务器的IP,须要下载的文件等网络
客户端从tftp服务器中获取须要的启动文件(pxelinux.0)及其配置文件app
客户端经过指定方式获取自动应答文件(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都关掉。