一 前言
作为中小公司的运维,经常会遇到一些机械式的重复工作,例如:有时公司同时上线几十甚至上百台服务器,而且需要我们在短时间内完成系统安装。
常规的办法有什么?
1、光盘安装系统:每个服务器DVD内置光驱几百块,百台服务器都配光驱就浪费了,因为一台服务器也就开始装系统能用的上,以后用的机会屈指可数。用USB外置光驱,插来插去也挺麻烦。
2、U盘安装系统:还是同样的问题,要一台一台服务器插U盘。
3、网络安装系统(ftp,http,nfs) :这个方法不错,只要服务器能联网就可以装系统了,但还是需要一台台服务器去敲键盘点鼠标。时刻想偷懒的我们,有没有更好的方法!
高逼格的方法:
Kickstart
Cobbler
本文大家介绍一下PXE+Kickstart如何装机
二、PXE和Kickstart介绍
2.1 什么是PXE
PXE(Pre-boot Execution Environment,预启动执行环境)是由Intel公司开发的最新技术,工作于Client/Server的网络模式,支持工作站通过网络从远端服 务器下载映像,并由此支持通过网络启动操作系统,在启动过程中,终端要求服务器分配IP地址,再用TFTP(trivial file transfer protocol)或MTFTP(multicast trivial file transfer protocol)协议下载一个启动软件包到本机内存中执行,由这个启动软件包完成终端基本软件设置,从而引导预先安装在服务器中的终端操作系统。
严格来说,PXE 并不是一种安装方式,而是一种引导方式。进行 PXE 安装的必要条件是在要安装的计算机中必须包含一个 PXE 支持的网卡(NIC),即网卡中必须要有 PXE Client。PXE 协议可以使计算机通过网络启动。此协议分为 Client端和 Server 端,而PXE Client则在网卡的 ROM 中。当计算机引导时,BIOS 把 PXE Client 调入内存中执行,然后由 PXE Client 将放置在远端的文件通过网络下载到本地运行。运行 PXE 协议需要设置 DHCP 服务器和 TFTP 服务器。DHCP 服务器会给 PXE Client(将要安装系统的主机)分配一个 IP 地址,由于是给 PXE Client 分配 IP 地址,所以在配置 DHCP 服务器时需要增加相应的 PXE 设置。此外,在 PXE Client 的 ROM 中,已经存在了 TFTP Client,那么它就可以通过 TFTP 协议到 TFTP Server 上下载所需的文件了。
2.2 PXE的工作过程:
1. PXE Client 从自己的PXE网卡启动,向本网络中的DHCP服务器索取IP;
2. DHCP 服务器返回分配给客户机的IP 以及PXE文件的放置位置(该文件一般是放在一台TFTP服务器上) ;
3. PXE Client 向本网络中的TFTP服务器索取pxelinux.0 文件;
4. PXE Client 取得pxelinux.0 文件后之执行该文件;
5. 根据pxelinux.0 的执行结果,通过TFTP服务器加载内核和文件系统 ;
6. 进入安装画面, 此时可以通过选择HTTP、FTP、NFS 方式之一进行安装;
详细工作流程,请参考下面这幅图:
2.3 什么是Kickstart
Kickstart是一种无人值守的安装方式。它的工作原理是在安装过程中记录典型的需要人工干预填写的各种参数,并生成一个名为ks.cfg的文 件。如果在安装过程中(不只局限于生成Kickstart安装文件的机器)出现要填写参数的情况,安装程序首先会去查找Kickstart生成的文件,如 果找到合适的参数,就采用所找到的参数;如果没有找到合适的参数,便需要安装者手工干预了。所以,如果Kickstart文件涵盖了安装过程中可能出现的 所有需要填写的参数,那么安装者完全可以只告诉安装程序从何处取ks.cfg文件,然后就去忙自己的事情。等安装完毕,安装程序会根据ks.cfg中的设 置重启系统,并结束安装。
PXE+Kickstart 无人值守安装操作系统完整过程如下:
三、系统环境
实验环境:VMware Workstation 11
系统平台:redhat 6.4 (最小化安装)
[root@ks ~]# cat /etc/redhat-release Red Hat Enterprise Linux Server release 6.4 (Santiago) [root@ks ~]#
网络模式:NAT模式(共享主机的IP地址)
IP地址:192.168.58.128
规划:http服务和dhcp服务以及tftp服务都装在本机上
关闭防火墙和selinux
[root@ks ~]# grep ^SELINUX /etc/selinux/config SELINUX=disabled SELINUXTYPE=targeted [root@ks ~]# getenforce Disabled [root@ks ~]# /etc/init.d/iptables status iptables: Firewall is not running. [root@ks ~]#
四、准备工作
4.1 制作yum安装
需要把光盘mount到/mnt/cdrom上
[root@ks ~]# mkdir /mnt/cdrom/ -p [root@ks ~]# mount /dev/sr0 /mnt/cdrom/ mount: block device /dev/sr0 is write-protected, mounting read-only
编写yum文件,这里出于实验目的,[]里面随便写。 name也可以随意些。
[root@ks ~]# cat /etc/yum.repos.d/rhel-source.repo [666] name=666 baseurl=file:///mnt/cdrom enabled=1 gpgcheck=0 [root@ks ~]#
4.2 安装kickstart工具
生成ks.cfg 文件需要system-config-kickstart 工具,而此工具依赖于X Windows,所以我们需要安装X Windows 和Desktop 并重启系统,操作如下:
yum groupinstall "X Window System" yum groupinstall Desktop reboot
安装system-config-kickstart 工具
[root@linux-node1 ~]# yum install system-config-kickstart -y Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile * base: mirrors.163.com * extras: mirrors.aliyun.com * updates: mirrors.163.com Package system-config-kickstart-2.9.6-1.el7.noarch already installed and latest version Nothing to do [root@linux-node1 ~]#
4.3 安装httpd服务并设置
安装httpd,将来以http服务作为系统包下载仓库
[root@linux-node1 ~]# yum install httpd -y Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile * base: mirrors.163.com * extras: mirrors.aliyun.com * updates: mirrors.163.com Package httpd-2.4.6-45.el7.centos.x86_64 already installed and latest version Nothing to do [root@linux-node1 ~]#
开启服务并设置开机启动
/etc/init.d/httpd start chkconfig httpd on
拷贝系统镜像内容只http服务下面
[root@ks ~]# cp -a /mnt/cdrom/ /var/www/html/
http部分设置完毕。
4.4 安装和配置tftp服务
[root@ks ~]# yum install tftp-server -y Loaded plugins: product-id, refresh-packagekit, subscription-manager This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register. Setting up Install Process Package tftp-server-0.49-7.el6.x86_64 already installed and latest version Nothing to do [root@ks ~]#
启用tftp 服务
vim /etc/xinetd.d/tftp 把disable后面的yes改成no
启动tftp服务并设置开机启动
因为tftp服务是挂载在超级进程xinetd 下的,所以通过启动xinetd 来启动tftp服务。
[root@ks ~]# /etc/init.d/xinetd restart Stopping xinetd: [ OK ] Starting xinetd: [ OK ] [root@ks ~]# chkconfig xinetd on [root@ks ~]#
4.5 安装syslinux
[root@ks ~]# yum install syslinux -y Loaded plugins: product-id, refresh-packagekit, subscription-manager This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register. Setting up Install Process Package syslinux-4.02-8.el6.x86_64 already installed and latest version Nothing to do [root@ks ~]#
syslinux是一个功能强大的引导加载程序,而且兼容各种介质。它的目的是简化首次安装Linux的时间,并建立修护或其它特殊用途的启动盘。
4.6 准备tftp文件
(1)复制pxelinux.0 文件至/var/lib/tftpboot/ 文件夹中
pxelinux.0是一个bootloader,类似于grub,通过它来load kernel, pxelinux.cfg/default是它的配置文件
pxelinux.0 本身就是syslinux包的一部分,pxlinux.0 是pxelinux的引导程序.
pxlinux是syslinux的一个派生品,用于支持从网络启动
pxelinux.cfg/default是pxelinux的配置文件,我们可以在配置文件中指定内核的位置和内核的启动参数
cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
(2)复制iso 镜像中的/image/pxeboot/initrd.img 和vmlinux 至/var/lib/tftpboot/ 文件夹中
vmlinuz是个压缩的内核
initrd.img主要是用于加载ext4等文件系统及scsi设备的驱动。比如,使用的是scsi硬盘,vmlinuz很小,没有scsi的驱动。
而scsi的驱动在根目录/lib/modules下面,initrd.img就是能帮你引导scsi驱动等,它是个中间人
cp /var/www/html/cdrom/images/pxeboot/{initrd.img,vmlinuz} /var/lib/tftpboot/
(3)复制iso 镜像中的/isolinux/*.msg 至/var/lib/tftpboot/ 文件夹中
cp /var/www/html/cdrom/isolinux/*.msg /var/lib/tftpboot/
(4)在/var/lib/tftpboot/ 中新建一个pxelinux.cfg目录
将iso 镜像中的/isolinux 目录中的isolinux.cfg复制到pxelinux.cfg目录中,同时更改文件名称为default。
[root@ks syslinux]# mkdir /var/lib/tftpboot/pxelinux.cfg -p [root@ks syslinux]# cp /var/www/html/cdrom/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
(5)编写default配置文件
ksdevice=eth0代表当客户端有多块网卡的时候,要实现自动化需要设置从eth0安装,不指定的话,安装的时候系统需要手动去选择
[root@ks syslinux]# cat /var/lib/tftpboot/pxelinux.cfg/default default ks prompt 0 label ks kernel vmlinuz append initrd=initrd.img ks=http://192.168.58.128/ks.cfg ksdevice=eth0 [root@ks syslinux]#
关于default配置文件说明,可以参照下面介解释,上面配置的比较简单。
default ks #默认启动的是 'label ks' 中标记的启动内核 prompt 1 #显示 'boot: ' 提示符。为 '0' 时则不提示,将会直接启动 'default' 参数中指定的内容。 timeout 6#在用户输入之前的超时时间,单位为 1/10 秒。 display boot.msg #显示某个文件的内容,注意文件的路径。默认是在/var/lib/tftpboot/ 目录下。也可以指定位类似 '/install/boot.msg'这样的,路径+文件名。boot.msg是pxe启动时一些提示信息,比如欢迎信息 F1 boot.msg #按下 'F1' 这样的键后显示的文件。 F2 options.msg F3 general.msg F4 param.msg F5 rescue.msg label linux #'label' 指定你在 'boot:' 提示符下输入的关键字,比如boot: linux[ENTER],这个会启动'label linux' 下标记的kernel 和initrd.img 文件。 kernel vmlinuz #kernel 参数指定要启动的内核。默认是tftpboot目录 append initrd=initrd.img #append 指定追加给内核的参数,能够在grub 里使用的追加给内核的参数,在这里也都可以使用。 label text kernel vmlinuz append initrd=initrd.img text label ks kernel vmlinuz append ks=http://192.168.58.128/ks.cfg initrd=initrd.img #告诉系统,从哪里获取ks.cfg文件label local localboot 1 label memtest86 kernel memtest append -
4.7 安装和配置dhcp服务
安装dhcp服务
[root@ks syslinux]# yum install dhcp -y Loaded plugins: product-id, refresh-packagekit, subscription-manager This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register. Setting up Install Process Package 12:dhcp-4.1.1-34.P1.el6.x86_64 already installed and latest version Nothing to do [root@ks syslinux]#
修改dhcpd.conf文件,没有的话就创建一个。修改之后内容如下
[root@ks syslinux]# cat /etc/dhcp/dhcpd.conf ddns-update-style interim; ignore client-updates; filename "pxelinux.0"; next-server 192.168.58.128; subnet 192.168.58.0 netmask 255.255.255.0 { option routers 192.168.58.128; option subnet-mask 255.255.255.0; range dynamic-bootp 192.168.58.100 192.168.58.200; default-lease-time 21600; max-lease-time 43200; } [root@ks syslinux]#
可以看到,dhcp配置文件里指明了next-server的地址。和要下载的文件pxelinux.0 ,前面说过,它类似grub,是个引导程序
而pxelinux.0 的配置文件pxelinux.cfg下面的default文件又指定了vmlinuz和initrd.img 以及ks文件
启动dhcp服务,并设置开机启动
[root@ks ~]# /etc/init.d/dhcpd start Starting dhcpd: [ OK ] [root@ks ~]# chkconfig dhcpd on [root@ks ~]#
4.8 进入桌面环境启动kickstart工具制作ks文件
启动桌面环境
在桌面环境下启动一个终端,运行system-config-kickstart
密码这里简单设置为root01
设置安装方式,由于配置的是HTTP方式的安装,故选择HTTP
boot loader选项,安装mbr
设置分区,简单设置一个根分区即可
分区总览
网络这里设置一个eth0,方式为dhcp分配
认证这里,保持下面默认即可
关闭selinux和防火墙
图形环境配置
软件包选择
下面两个预执行脚本和后执行脚本不要选择
预览下
点击上面的save,可以先保存到root目录下
终端上查看保存的文件
[root@ks ~]# ll ks.cfg -rw-r--r-- 1 root root 954 Apr 3 21:48 ks.cfg [root@ks ~]# cat ks.cfg #platform=x86, AMD64, or Intel EM64T #version=DEVEL # Firewall configuration firewall --disabled # Install OS instead of upgrade install # Use network installation url --url="http://192.168.58.128/cdrom" # Root password rootpw --iscrypted $1$zFk7ddBw$FDhyG0U2gmNb.rkK15Gza0 # System authorization information auth --useshadow --passalgo=sha512 # Use graphical install graphical firstboot --disable # System keyboard keyboard us # System language lang en_US # SELinux configuration selinux --disabled # Installation logging level logging --level=info # Reboot after installation reboot # System timezone timezone Asia/Shanghai # Network information network --bootproto=dhcp --device=eth0 --onboot=on # System bootloader configuration bootloader --location=mbr # Clear the Master Boot Record zerombr # Partition clearing information clearpart --all --initlabel # Disk partitioning information part / --fstype="ext4" --size=8192 %packages @base %end [root@ks ~]#
把ks文件保存到http的根目录下,因为前面pxelinux.0的配置文件--default里指定的ks文件路径就是这里,并且文件名就是ks.cfg
[root@ks html]# mv /root/ks.cfg . [root@ks html]# pwd /var/www/html [root@ks html]# ll total 8 dr-xr-xr-x 12 root root 4096 Apr 1 08:29 cdrom -rw-r--r-- 1 root root 954 Apr 3 21:48 ks.cfg [root@ks html]#
五、测试自动装机
自动化安装系统配置完毕,下面启动一台新的机器进行测试,网络连接模式选择NAT模式。 主要为了和刚才配置的pxe服务器在一个网络
自动获取了IP地址并自动下载pxelinux.0的配置文件default,加载内核和initrd.img
开始自动安装了
系统安装好了,启动进去,可以看到IP地址
可以看到磁盘分区方案和之前配置的一致
注意:关于客户机的bios设置,如果对于新到货机器(没系统)或者现网的机器。一定要设置磁盘启动为第一项,如果是网络启动为第一项
那么机器重启就装机,循环装机。 对于现网机器特别危险。当然了现网机器也要执行规划,让装机网络和现网网络不在一个局域网
PXE+Kickstart 无人值守安装操作系统环境搭建完毕。