公司同时上线几十甚至上百台服务器需要安装系统,常规的办法有: 光盘安装系统(光驱成本高,需重复安装)、USB外置光驱/U盘安装(需重复安装)、FTP/NFS/HTTP网络安装系统(需重复安装) 。这时候就需要无人值守安装,一般用Kickstart和Cobbler。
Kickstart是一种无人值守的安装方式。它的工作原理是在安装过程中记录人工干预填写的各种参数,并生成一个名为ks.cfg的文件,安装程序会根据ks.cfg中的设置重启/关闭系统,并结束安装。使用中一般结合PEX完成开机引导。
Cobbler集中和简化了通过网络安装操作系统需要使用到的DHCP、TFTP和DNS服务的配置。Cobbler不仅有一个命令行界面,还提供了一个Web界面,大大降低了使用者的入门水平。Cobbler内置了一个轻量级配置管理系统。简单的说,Cobbler是对kickstart的封装,简化安装步骤、使用流程,降低使用者的门槛。
PXE+Kickstart安装系统原理图
整个过程大概是这样的:计算机(PXE Client)通过网卡开机时,会向本网络中的DHCP服务器索取IP,DHCP 服务器返回分配的IP 以及PXE文件(PXE Server)的位置。然后Client通过TFTP或MTFTP协议索取PXE文件,根据PXE文件的执行结果通过HTTP/FTP/NFS向OS server获取系统镜像文件和ks.cfg文件。最后使用Kickstart完成系统安装。
相关术语介绍
术语 | 含义 | 作用 |
PXE | Pre-boot Execution Environment 预启动执行环境 | 是英特尔公司的一种开机引导技术,作用就是引导装机,PXE分为Client端和Server端 |
syslinux | syslinux是一个功能强大的兼容各种介质的引导程序 | PXE开机引导需要使用CentOS提供的syslinux包 |
PXE Client | 这里代表的是需要安装操作系统的客户端,实际存放在网卡的 ROM 中 | |
PXE Server | 用于存放PXE文件,一般是一台TFTP服务器 | |
Kickstart | Kickstart是RedHat公司开源的项目 | 将安装系统的过程中写入ks.cfg文件中,实现无人值守自动安装 |
DHCP | Dynamic Host Configuration Protocol 动态主机配置协议 | 用于PXE引导过程中获取IP地址。共使用两次,1.使用TFTP或MTFTP传文件时,2.使用HTTP、FTP或NFS传文件时。 |
TFTP | Trivial File Transfer Protocol 简单文件传输协议 | 属于TCP/IP协议族,用来在客户机与服务器之间进行小型文件传输。端口号是69 |
OS Server | 用于存放系统镜像文件和Kickstart的配置文件 | |
HTTP | HyperText Transfer Protocol 超文本传输协议 | 用于下载ks.cfg以及系统镜像文件 |
准备工作
准备一台Centos 6的虚拟机,上图的DHCP Derver、PXE Server、OS Server都会安装在该机器上。注意虚拟机网卡应采用NAT模式,不要使用桥接模式,因为在同一局域网有多个DHCP服务会有冲突。 同时关闭VMware的NAT模式的dhcp服务(编辑->虚拟网络编辑器),避免干扰。将系统镜像光盘挂载到/mnt/下,后面会用到,最后关闭iptables和SELinux。
mount /dev/cdrom /mnt/ service iptables stop setenforce 0
安装DHCP服务并配置
yum -y install dhcp vim /etc/dhcp/dhcpd.conf #添加如下内容: subnet 10.0.0.0 netmask 255.255.255.0 { range 10.0.0.100 10.0.0.200; # 可分配的起始IP和结束IP option subnet-mask 255.255.255.0; # 设定子网掩码 default-lease-time 21600; # 设置默认的IP租用期限 max-lease-time 43200; # 设置最大的IP租用期限 next-server 10.0.0.7; # 告知客户端TFTP服务器的IP filename "/pxelinux.0"; # 告知客户端从TFTP根目录下载pxe文件 } #启动DHCP服务并查看 service dhcpd start netstat -tunlp|grep dhcp
安装TFTP服务并配置PEX引导
yum -y install tftp-server vim /etc/xinetd.d/tftp #将"disable = yes"修改为"disable = no" #因为tftp服务是挂载在超级进程xinetd下的,所以通过xinetd来启动 service xinetd restart netstat -tunlp|grep xinetd #安装syslinux,并将引导文件复制到TFTP根目录下 yum -y install syslinux cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/ #复制系统镜像里的linux内核文件到TFTP根目录下 cp -a /mnt/isolinux/{vmlinuz,initrd.img} /var/lib/tftpboot/ #制作开机默认选项和菜单文件,该文件选项可参考光盘镜像里的isolinux/isolinux.cfg mkdir /var/lib/tftpboot/pxelinux.cfg/ vim /var/lib/tftpboot/pxelinux.cfg/default default ks #默认加载名为“ks”的菜单 prompt 0 #关闭命令行显示“boot: ”提示符 label ks #定义一个名为“ks”选项 kernel vmlinuz #指定要启动的内核。默认路径是tftpboot目录下。 append initrd=initrd.img ks=http://10.0.0.7/CentOS-6.7-ks.cfg #指定ks.cfg文件路径 # append initrd=initrd.img ks=http://10.0.0.7/CentOS-6.7-ks.cfg ksdevice=eth0 #ksdevice指定启动网卡
安装HTTP服务并复制CentOS镜像文件
yum -y install httpd cp -a /mnt/* /var/www/html/ service httpd start
制作Kickstart自动安装配置文件
关于Kickstat配置文件可以参考:官网帮助文档。配置文件ks.cfg文件组成大致分为3段:
- 命令段:包含键盘类型,语言,安装方式等配置,有必选项和可选项,如果缺少某个必选项,安装时会中断并提示用户选择。
- 软件包段:%packages是开始标记、@groupname用于指定安装的包组、package_name用于指定安装的包。
- 脚本段(可选):%pre安装系统前执行的命令或脚本、%post:安装系统后执行的命令或脚本。
vim /var/www/html/CentOS-6.7-ks.cfg install #全新安装,而非在现有系统上升级 url --url="http://192.168.222.128/" #指定安装类型为url和地址 text #指定以文本方式安装 lang en_US.UTF-8 #设置安装过程的语言和系统默认语言 keyboard us #设置系统默认键盘类型 zerombr 3初始化所有可在磁盘中找到的无效分区表 bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet" #指定安装引导装载程序的方法 network --bootproto=dhcp --device=eth0 --onboot=yes --noipv6 --hostname=CentOS6 #配置系统网络信息 timezone --utc Asia/Shanghai #设置系统时区 authconfig --enableshadow --passalgo=sha512 #系统认证选项 rootpw --iscrypted $6$X20eRtuZhkHznTb4$dK0BJByOSAWSDD8jccLVFz0CscijS9ldMWwpoCw/ZEjYw2BTQYGWlgKsn945fFTjRC658UXjuocwJbAjVI5D6/ #设置root密码 clearpart --all --initlabel #生成新分区前删除原所有分区 part /boot --fstype=ext4 --asprimary --size=200 #创建boot分区,大小200M part swap --size=1024 #创建swap分区,大小1024M part / --fstype=ext4 --asprimary --grow --size=200 #剩余空间分配给根分区 firstboot --disable #系统第一次引导时不启动Setup Agent selinux --disabled #在系统中完全禁用SELinux firewall --disabled #禁用系统的在系统中完全禁用 SELinux logging --level=info #设置安装过程中错误日志级别 reboot #在成功完成安装后重启 %packages #以下为安装软件包和软件列表 @base @compat-libraries @debugging @development tree telnet %post #系统安装后执行的脚本或命令 sed "s/rhgb //" /boot/grub/grub.conf #设置启动系统时不使用图形进度条方式 %end