现在我们为服务器安装系统,如果只是少数几台,传统的光盘、u盘等安装方法,完全可以满足需求。但运维人员的工作环境动辄几十台上百台,这就需要kickstart、cobbler等无人值守安装了。
本篇博文简单描述kickstart的配置过程
一、kickstart原理及组件
1.1、kickstart包含的组件
- PXE
- DHCP:
- 分配IP
- 告诉客户端tftp的地址
- TFTP
- pxelinux引导文件------来自syslinux包
- 内核------来自光盘
- 启动环境文件 ------来自光盘
- httpd
- 光盘镜像
- ks.cfg文件
1.2、kickstart原理描述
二、环境约定
- 主机名:kickstart

[root@linux-node2 ~]# hostname linux-node2.example.com [root@linux-node2 ~]# hostnamectl set-hostname kickstart [root@linux-node2 ~]# hostname kickstart
- IP地址:10.0.0.102 172.16.1.102
- 关闭SELinux、firewalld
- 配置PS1,[u@h W]$ 改成 [u@h w]$
- 安装软件包:dhcp tftp-server httpd bash-completion* wireshark
三、dhcp组件
3.1、配置dhcp

[root@kickstart dhcp]# yum -y install dhcp [root@kickstart yum.repos.d]# cd /etc/dhcp/ [root@kickstart dhcp]# vim dhcpd.conf # # DHCP Server Configuration file. # see /usr/share/doc/dhcp*/dhcpd.conf.example # see dhcpd.conf(5) man page # subnet 172.16.1.0 netmask 255.255.255.0 { range 172.16.1.150 172.16.1.254; option subnet-mask 255.255.255.0; default-lease-time 21600; max-lease-time 43200; next-server 172.16.1.102; filename "/pxelinux.0"; } [root@kickstart dhcp]# systemctl start dhcpd.service [root@kickstart dhcp]# systemctl is-enabled dhcpd.service disabled
3.2、验证dhcp

[root@kickstart ~]# ss -lntup|grep dhcp udp UNCONN 0 0 *:67 *:* users:(("dhcpd",pid=1678,fd=7))
四、httpd组件
4.1、安装及挂载
- 为了方便,直接将光盘挂载到http中

[root@kickstart CentOS7]# yum -y install httpd [root@kickstart tftpboot]# cd /var/www/html/ [root@kickstart html]# mkdir CentOS7 [root@kickstart CentOS7]# mount /dev/cdrom /var/www/html/CentOS7 mount: /dev/sr0 is write-protected, mounting read-only [root@kickstart CentOS7]# ls /var/www/html/CentOS7 CentOS_BuildTag EFI EULA GPL images isolinux LiveOS Packages repodata RPM-GPG-KEY-CentOS-7 RPM-GPG-KEY-CentOS-Testing-7 TRANS.TBL
五、安装配置tftp
5.1、tftp安装启动

[root@kickstart dhcp]# yum -y install tftp-server [root@kickstart dhcp]# systemctl start tftp.service [root@kickstart dhcp]# ss -lntup|grep tftp udp UNCONN 0 0 :::69 :::* users:(("in.tftpd",pid=1993,fd=0),("systemd",pid=1,fd=24))
5.2、把需要的文件放到tftp目录
5.2.1、pxelinux.0

[root@kickstart ~]# yum install syslinux [root@kickstart ~]# rpm -ql syslinux|grep -w pxelinux.0 /usr/share/syslinux/pxelinux.0 [root@kickstart ~]# cd /var/lib/tftpboot [root@kickstart tftpboot]# cp /usr/share/syslinux/pxelinux.0 ./ [root@kickstart tftpboot]# ls pxelinux.0
5.2.2、镜像、内核文件
- 将光盘中相应文件放入tftp目录

[root@kickstart CentOS7]# cp -a /var/www/html/CentOS7/isolinux/* /var/lib/tftpboot/ [root@kickstart CentOS7]# ll /var/lib/tftpboot/ total 58152 -r--r--r-- 1 root root 2048 May 4 2018 boot.cat -rw-r--r-- 1 root root 84 May 4 2018 boot.msg -rw-r--r-- 1 root root 281 May 4 2018 grub.conf -rw-r--r-- 1 root root 52893200 May 4 2018 initrd.img -rw-r--r-- 1 root root 24576 May 4 2018 isolinux.bin -rw-r--r-- 1 root root 3032 May 4 2018 isolinux.cfg -rw-r--r-- 1 root root 190896 Nov 6 2016 memtest -rw-r--r-- 1 root root 26759 Nov 12 01:58 pxelinux.0 -rw-r--r-- 1 root root 186 Oct 1 2015 splash.png -r--r--r-- 1 root root 2215 May 4 2018 TRANS.TBL -rw-r--r-- 1 root root 152976 Nov 6 2016 vesamenu.c32 -rwxr-xr-x 1 root root 6224704 Apr 21 2018 vmlinuz [root@kickstart CentOS7]# mkdir -p pxelinux.cfg [root@kickstart CentOS7]# cp /var/www/html/CentOS7/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default [root@kickstart CentOS7]# tree /var/lib/tftpboot/ /var/lib/tftpboot/ ├── boot.cat ├── boot.msg ├── grub.conf ├── initrd.img ├── isolinux.bin ├── isolinux.cfg ├── memtest ├── pxelinux.0 ├── pxelinux.cfg │ └── default ├── splash.png ├── TRANS.TBL ├── vesamenu.c32 └── vmlinuz
5.2.3、修改default文件
- 修改default文件,我习惯在修改前备份
- 修改前备份

[root@kickstart pxelinux.cfg]# cd /var/lib/tftpboot/pxelinux.cfg [root@kickstart pxelinux.cfg]# ls default default.bak [root@kickstart pxelinux.cfg]# vim default default ks prompt 0 label ks kernel vmlinuz append initrd=initrd.img ks=http://172.16.1.102/ks_config/CentOS7-ks.cfg net.ifnames=0 biosdevname==0 ksdevice=eth1
六、编写ks.cfg文件
6.1、创建或上传ks.cfg文件
按照default文件中规定好的路径,创建 CentOS7-ks.cfg 文件

[root@kickstart pxelinux.cfg]# cd /var/www/html/ [root@kickstart html]# mkdir -p ks_config [root@kickstart html]# cd ks_config [root@kickstart html]# touch CentOS7-ks.cfg
6.2编写或修改ks.cfg文件
- 编写ks.cfg文件的过程中遇到了一些坑,描述如下:
- ks.cfg文件里不要加注释,否则会提示某个命令没有参数之类的
- 一开始挂载的最小系统安装的光盘,不包含文件中写的各种包和包组,所以提示找不到这些东西
- 首先生成密码,注意要替换掉源文件中的相应内容
[root@kickstart ~]# python -c 'import crypt; print (crypt.crypt("123456"))' $6$Ia1JWeCQAmYRKrfP$xAkbdEVvqUv682jjClFZ3btuQG0QhhxPNI6SBmysp3bf5RxbQ0sT9uXBhuF229okebyWAfgfUbq/nJ3lvQ5.J1
- 这里贴一下有问题的ks.cfg文件,如下,因为是从老师的博客下载的,很多语句后面有注释,所以就出现了如上描述的第一条错误、、

[root@kickstart ks_config]# vim CentOS7-ks.cfg install ## 告知这是一次安装程序 url --url=http://172.16.1.102/CentOS7/ ## 通过ftp或http从远程服务器安装的地址 text ## 使用文本模式安装 lang en_US.UTF-8 ## 设置安装过程中使用的语言字符集 keyboard us ## 设置系统键盘类型为us zerombr ## 清除mbr引导信息 bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet" --location=mbr ## 指定引导记录被写入的位置 --driveorder=sda ## 指定在BIOS引导顺序中居首的驱动器 --append="crashkernel=auto rhgb quiet" ## 指定内核参数,要指定多个参数空格分隔,为通过网络的kickstart安装以及所安装的系统配置联网信息。 network --bootproto=static --device=eth0 --gateway=10.0.0.2 --ip=10.0.0.200 --nameserver=223.5.5.5 --netmask=255.255.255.0 --activate network --bootproto=static --device=eth1 --ip=172.16.1.200 --netmask=255.255.255.0 --activate network --hostname=Cobbler ## 以上是静态配置ip网络信息的写法 #network --bootproto=dhcp --device=eth1 --onboot=yes --noipv6 --hostname=CentOS7 ## 动态配置ip网络信息的写法和配置主机名 timezone --utc Asia/Shanghai ## 设置时区为亚洲上海 authconfig --enableshadow --passalgo=sha512 ## 系统认证信息,这里要是写密文密码需加 设置密码加密方式为sha512 启用shadow文件 rootpw --iscrypted $6$Ia1JWeCQAmYRKrfP$xAkbdEVvqUv682jjClFZ3btuQG0QhhxPNI6SBmysp3bf5RxbQ0sT9uXBhuF229okebyWAfgfUbq/nJ3lvQ5.J1 ## 加密的root密码 clearpart --all --initlabel ## 清空分区,清空所有分区 part /boot --fstype xfs --size 1024 ## 为分区设置文件系统类型为xfs,size设置大小 part swap --size 1024 part / --fstype xfs --size 1 --grow ## grow把剩余容量都给这个分区 firstboot --disable ## 协助配置服务器的重要信息 selinux --disabled ## 关闭selinux firewall --disabled ## 关闭防火墙 logging --level=info ## 设置日志级别 reboot ## 设置安装完成后重启,必须存在 %packages ## 这一部分是要安装的一些包 @^minimal @compat-libraries @debugging @development tree nmap sysstat lrzsz dos2unix telnet wget vim bash-completion %end %post ## 安装后执行的命令,如果要一键化搭建集群,这里可以执行写好的shell或ansible剧本进行搭建 systemctl disable postfix.service %end
6.3、检查ks.cfg文件可用性
如果不能确认ks.cfg文件的可用性,可用以下方法检查,这个工具可以给出故障行和具体的故障描述

[root@kickstart ks_config]# yum install pykickstart [root@kickstart ks_config]# ksvalidator CentOS7-ks.cfg
6.4、修改后的ks.cfg

# Kickstart Configurator for CentOS 7 by yao zhang install url --url=http://172.16.1.102/CentOS7/ text lang en_US.UTF-8 keyboard us zerombr ## 清除mbr引导信息 bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet" --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet" network --bootproto=static --device=eth0 --gateway=10.0.0.2 --ip=10.0.0.200 --nameserver=223.5.5.5 --netmask=255.255.255.0 --activate network --bootproto=static --device=eth1 --ip=172.16.1.200 --netmask=255.255.255.0 --activate network --hostname=Cobbler #network --bootproto=dhcp --device=eth1 --onboot=yes --noipv6 --hostname=CentOS7 timezone --utc Asia/Shanghai authconfig --enableshadow --passalgo=sha512 rootpw --iscrypted $6$Ia1JWeCQAmYRKrfP$xAkbdEVvqUv682jjClFZ3btuQG0QhhxPNI6SBmysp3bf5RxbQ0sT9uXBhuF229okebyWAfgfUbq/nJ3lvQ5.J1 clearpart --all --initlabel part /boot --fstype xfs --size 1024 part swap --size 1024 part / --fstype xfs --size 1 --grow firstboot --disable selinux --disabled firewall --disabled logging --level=info reboot %packages @^minimal @compat-libraries @debugging @development tree nmap sysstat lrzsz dos2unix telnet wget vim bash-completion %end %post systemctl disable postfix.service %end
七、设置完毕,检查、验证
7.1、开启httpd服务,验证相关文件是否齐全
- 开启httpd服务,然后验证
- 一定要先验证这些文件是不是都在html下,否则装机的时候也还是会提示找不到
- 如果http由内网提供,就一定要在内网环境验证
- 比如本文档的设置,就必须在172网段环境下验证,因为之前的配置都是在这个网段进行的
- 可以在其他设备通过linux命令行验证,比如curl方法

[root@kickstart ks_config]# systemctl start httpd.service