kickstark无人值守安装

现在我们为服务器安装系统,如果只是少数几台,传统的光盘、u盘等安装方法,完全可以满足需求。但运维人员的工作环境动辄几十台上百台,这就需要kickstart、cobbler等无人值守安装了。

本篇博文简单描述kickstart的配置过程

一、kickstart原理及组件

1.1、kickstart包含的组件

  • PXE
  • DHCP:
    • 分配IP
    • 告诉客户端tftp的地址
  • TFTP
    • pxelinux引导文件------来自syslinux包
    • 内核------来自光盘
    • 启动环境文件 ------来自光盘
  • httpd
    • 光盘镜像
    • ks.cfg文件

1.2、kickstart原理描述

kickstark无人值守安装

二、环境约定

  • 主机名:kickstart
kickstark无人值守安装kickstark无人值守安装
[[email protected] ~]# hostname
linux-node2.example.com
[[email protected]-node2 ~]# hostnamectl set-hostname kickstart
[[email protected]-node2 ~]# hostname
kickstart
View Code

 

  • IP地址:10.0.0.102 172.16.1.102
  • 关闭SELinux、firewalld
  • 配置PS1,[\[email protected]\h \W]\$ 改成 [\[email protected]\h \w]\$
  • 安装软件包:dhcp tftp-server httpd bash-completion* wireshark

三、dhcp组件

3.1、配置dhcp

kickstark无人值守安装kickstark无人值守安装
[[email protected] dhcp]# yum -y install dhcp 
[[email protected] yum.repos.d]# cd /etc/dhcp/

[[email protected] 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";
}

[[email protected] dhcp]# systemctl start dhcpd.service  
[[email protected] dhcp]# systemctl is-enabled dhcpd.service
disabled
View Code

  

3.2、验证dhcp

kickstark无人值守安装kickstark无人值守安装
[[email protected] ~]# ss -lntup|grep dhcp
udp    UNCONN     0      0         *:67                    *:*                   users:(("dhcpd",pid=1678,fd=7))
View Code

  

四、httpd组件

4.1、安装及挂载

  • 为了方便,直接将光盘挂载到http中
kickstark无人值守安装kickstark无人值守安装
[[email protected] CentOS7]# yum -y install httpd  
[[email protected] tftpboot]# cd /var/www/html/
[[email protected] html]# mkdir CentOS7
[[email protected] CentOS7]# mount /dev/cdrom /var/www/html/CentOS7
mount: /dev/sr0 is write-protected, mounting read-only
[[email protected] 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
View Code

  

五、安装配置tftp

5.1、tftp安装启动

kickstark无人值守安装kickstark无人值守安装
[[email protected] dhcp]# yum -y install tftp-server

[[email protected] dhcp]# systemctl start tftp.service

[[email protected] dhcp]# ss -lntup|grep tftp         
udp    UNCONN     0      0        :::69                   :::*                   users:(("in.tftpd",pid=1993,fd=0),("systemd",pid=1,fd=24))
View Code

  

5.2、把需要的文件放到tftp目录

5.2.1、pxelinux.0

kickstark无人值守安装kickstark无人值守安装
[[email protected] ~]# yum install syslinux
[[email protected] ~]# rpm -ql syslinux|grep -w pxelinux.0
/usr/share/syslinux/pxelinux.0
[[email protected] ~]# cd /var/lib/tftpboot
[[email protected] tftpboot]# cp /usr/share/syslinux/pxelinux.0 ./
[[email protected] tftpboot]# ls
pxelinux.0
View Code

  

5.2.2、镜像、内核文件

  • 将光盘中相应文件放入tftp目录
kickstark无人值守安装kickstark无人值守安装
[[email protected] CentOS7]# cp -a /var/www/html/CentOS7/isolinux/* /var/lib/tftpboot/

[[email protected] 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

[[email protected] CentOS7]# mkdir -p pxelinux.cfg
[[email protected] CentOS7]# cp /var/www/html/CentOS7/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default

[[email protected] 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
View Code

  

5.2.3、修改default文件

  • 修改default文件,我习惯在修改前备份
  • 修改前备份
kickstark无人值守安装kickstark无人值守安装
[[email protected] pxelinux.cfg]# cd /var/lib/tftpboot/pxelinux.cfg

[[email protected] pxelinux.cfg]# ls
default  default.bak

[[email protected] 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
View Code

  

六、编写ks.cfg文件

6.1、创建或上传ks.cfg文件

按照default文件中规定好的路径,创建 CentOS7-ks.cfg 文件

kickstark无人值守安装kickstark无人值守安装
[[email protected] pxelinux.cfg]# cd /var/www/html/

[[email protected] html]# mkdir -p ks_config  
[[email protected] html]# cd ks_config
[[email protected] html]# touch CentOS7-ks.cfg
View Code

 

6.2编写或修改ks.cfg文件

  • 编写ks.cfg文件的过程中遇到了一些坑,描述如下:

  1. ks.cfg文件里不要加注释,否则会提示某个命令没有参数之类的
  2. 一开始挂载的最小系统安装的光盘,不包含文件中写的各种包和包组,所以提示找不到这些东西

  • 首先生成密码,注意要替换掉源文件中的相应内容

[[email protected] ~]# python -c 'import crypt; print (crypt.crypt("123456"))'    
$6$Ia1JWeCQAmYRKrfP$xAkbdEVvqUv682jjClFZ3btuQG0QhhxPNI6SBmysp3bf5RxbQ0sT9uXBhuF229okebyWAfgfUbq/nJ3lvQ5.J1

 

  • 这里贴一下有问题的ks.cfg文件,如下,因为是从老师的博客下载的,很多语句后面有注释,所以就出现了如上描述的第一条错误、、
kickstark无人值守安装kickstark无人值守安装
[[email protected] 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
View Code

 

6.3、检查ks.cfg文件可用性

如果不能确认ks.cfg文件的可用性,可用以下方法检查,这个工具可以给出故障行和具体的故障描述

kickstark无人值守安装kickstark无人值守安装
[[email protected] ks_config]# yum install pykickstart
[[email protected] ks_config]# ksvalidator CentOS7-ks.cfg
View Code

 

6.4、修改后的ks.cfg

kickstark无人值守安装kickstark无人值守安装
# 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
View Code

 

七、设置完毕,检查、验证

7.1、开启httpd服务,验证相关文件是否齐全

  • 开启httpd服务,然后验证
  • 一定要先验证这些文件是不是都在html下,否则装机的时候也还是会提示找不到
  • 如果http由内网提供,就一定要在内网环境验证
  • 比如本文档的设置,就必须在172网段环境下验证,因为之前的配置都是在这个网段进行的
  • 可以在其他设备通过linux命令行验证,比如curl方法

kickstark无人值守安装kickstark无人值守安装
[[email protected] ks_config]# systemctl start httpd.service 
View Code

 

7.2、新建虚拟机,验证是否可以正常装机