使用PXE+DHCP+TFTP+Kickstart+FTP搭建无人值守安装服务器。一般只有频繁安装系统才会搭建无人值守安装服务器。

  虚拟机环境:youxi1,CentOS7系统双网卡,一个网卡桥接模式(182.168.1.6)可以上外网,一个网卡LAN区段(LAN1)模拟内网,作为无人值守安装服务器

        youxi2,CentOS系统,网卡LAN区段(LAN1)模拟内网,作为客户端

        youxi3,新建虚拟机

(1).PXE概述

  PXE严格来说并不是一种安装方式,而是一种引导的方式。进行 PXE 安装的必要条件是要安装的计算机中包含一个 PXE 支持的网卡(NIC),即网卡中必须要有 PXE Client。PXE (Pre-boot Execution Environment)协议使计算机可以通过网络启动。协议分为 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。PXE Client 通过 TFTP 协议到 TFTP Server 上下载所需的文件。

(2).Kickstart概述

  KickStart是一种无人职守安装方式。KickStart的工作原理是通过记录典型的安装过程中所需人工干预填写的各种参数,并生成一个名为 ks.cfg的文件;在其后的安装过程中(不只局限于生成KickStart安装文件的机器)当出现要求填写参数的情况时,安装程序会首先去查找 KickStart生成的文件,当找到合适的参数时,就采用找到的参数,当没有找到合适的参数时,才需要安装者手工干预。这样,如果KickStart文件涵盖了安装过程中出现的所有需要填写的参数时,安装者完全可以只告诉安装程序从何处取ks.cfg文件,然后去忙自己的事情。等安装完毕,安装程序会根据ks.cfg中设置的重启选项来重启系统,并结束安装。

(3).TFTP概述

  TFTP(Trivial File Transfer Protocol,简单文件传输协议)是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务。端口号为69。

  TFTP是一个传输文件的简单协议,它基于UDP协议而实现,但是我们也不能确定有些TFTP协议是基于其它传输协议完成的。此协议设计的时候是进行小文件传输的。因此它不具备通常的FTP的许多功能,它只能从文件服务器上获得或写入文件,不能列出目录,不进行认证,它传输8位数据。传输中有三种模式:netascii,这是8位的ASCII码形式,另一种是octet,这是8位源数据类型;最后一种mail已经不再支持,它将返回的数据直接返回给用户而不是保存为文件。

(4).实验拓扑图和运行原理

服务器安装centos安装时只读取一个硬盘_linux

  PXE + KickStart大概运行原理:1、DHCP 服务器用来给客户机分配IP; 2、TFTP 服务器用来存放PXE的相关文件,比如:系统引导文件; 3、FTP 服务器用来存放系统安装文件; 4、KickStart所生成的ks.cfg配置文件;5、带有一个 PXE 支持网卡的将安装的主机。

注意:实验是将3台服务器合并成1台服务器进行实验。

(5).实验

  在开始之前请将防火墙和SELinux关闭。

1)搭建ftp服务

  服务器端youxi1安装vsftpd服务,并开机自启



[root@youxi1 ~]# yum -y install vsftpd
[root@youxi1 ~]# systemctl start vsftpd
[root@youxi1 ~]# systemctl enable vsftpd
Created symlink from /etc/systemd/system/multi-user.target.wants/vsftpd.service to /usr/lib/systemd/system/vsftpd.service.



配置本地yum源。另外为了提高安装效率,将原有的所有yum源迁移到备份目录



[root@youxi2 ~]# mkdir -p /backup/yum.repo
[root@youxi2 ~]# mv /etc/yum.repos.d/*.repo /backup/yum.repo
[root@youxi2 ~]# vim /etc/yum.repos.d/CentOS7.repo
[CentOS7]  //yum的ID,本地唯一,用于区分不同yum源
name=CentOS-server  //描述信息
baseurl=file:///mnt  //前面的file://是协议,后面的/mnt是光盘挂载点
enabled=1  //1启用yum源,0禁用yum源
gpgcheck=0        //1使用公钥验证rpm包的正确性,0不验证
[root@youxi2 ~]# yum clean all  //清空yum缓存
[root@youxi2 ~]# yum makecache  //重新读取yum源
[root@youxi2 ~]# yum -y install lftp



  把服务器端的系统光盘挂在到/var/ftp/pub/目录下



[root@youxi1 ~]# mount /dev/sr0 /var/ftp/pub/  //光盘挂载到ftp匿名用户访问的主目录
mount: /dev/sr0 写保护,将以只读方式挂载



2)搭建tftp服务

  在服务器端youxi1上安装tftp,修改配置文件,并开机自启



[root@youxi1 ~]# yum -y install tftp tftp-server xinetd
[root@youxi1 ~]# vim /etc/xinetd.d/tftp  //tftp默认是关闭的
# default: off
# description: The tftp server serves files using the trivial file transfer \
# protocol. The tftp protocol is often used to boot diskless \
# workstations, download configuration files to network-aware printers, \
# and to start the installation process for some operating systems.
service tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /var/lib/tftpboot  //设置tftp的主目录,可以改可以不改,但要将PXE启动所需的相关文件放到这里指定的位置
disable = no  //yes表示关闭,no表示打开
per_source = 11
cps = 100 2
flags = IPv4
}
[root@youxi1 ~]# systemctl start xinetd
[root@youxi1 ~]# systemctl enable xinetd
[root@youxi1 ~]# netstat -antup | grep 69  //检测tftp是否启动
udp 0 0 0.0.0.0:69 0.0.0.0:* 9768/xinetd



  在客户端youxi2上安装tftp客户端



[root@youxi2 ~]# yum -y install tftp



3)准备PXE启动相关文件

  在服务器端youxi1上准备PXE启动相关文件



[root@youxi1 ~]# yum -y install system-config-kickstart syslinux
[root@youxi1 ~]# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/  //系统引导文件
[root@youxi1 ~]# cp /var/ftp/pub/images/pxeboot/vmlinuz /var/lib/tftpboot/  //内核文件
[root@youxi1 ~]# cp /var/ftp/pub/images/pxeboot/initrd.img /var/lib/tftpboot/  //内核初始化镜像文件
[root@youxi1 ~]# mkdir /var/lib/tftpboot/pxelinux.cfg
[root@youxi1 ~]# cp /var/ftp/pub/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default  //引导菜单
[root@youxi1 ~]# chmod 644 /var/lib/tftpboot/pxelinux.cfg/default



4)搭建DHCP服务

详见:CentOS7搭建DHCP服务器

  服务器端youxi1添加新网卡,修改网卡配置文件,并启动网卡



[root@youxi1 ~]# cd /etc/sysconfig/network-scripts/
[root@youxi1 network-scripts]# cp ifcfg-ens33 ifcfg-ens38
[root@youxi1 network-scripts]# vim ifcfg-ens38
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="yes"
IPADDR="192.168.2.6"
NETMASK="255.255.255.0"
#GATEWAY="192.168.2.1"
#DNS1="192.168.2.1"
NAME="ens38"
DEVICE="ens38"
ONBOOT="yes"
[root@youxi1 network-scripts]# ifup ens38



注意:将GATEWAY(网关)和DNS1删除是为了让ens33网卡能够正常访问外网,ens38只可以用来访问同一网段的IP。

  服务器端youxi1安装dhcp服务,修改配置文件,并开机自启



[root@youxi1 ~]# yum -y install dhcp
[root@youxi1 ~]# vim /etc/dhcp/dhcpd.conf 
subnet 192.168.2.0 netmask 255.255.255.0 {  //IP网段和掩码
  range 192.168.2.100 192.168.2.254;  //dhcp取值范围
  option domain-name-servers 192.168.2.1;  //指定默认DNS地址
  option domain-name "localdhcp.cn";  //指定默认域名
  option routers 192.168.2.1;  //指定默认网关
  option broadcast-address 192.168.2.255;  //指定广播地址
  default-lease-time 600;  //最小租约时间
  max-lease-time 7200;  //最大租约时间
  next-server 192.168.2.6;  //TFTP服务器地址
  filename "pxelinux.0";  //指定引导文件位置,这里是TFTP根目录下的pxelinux.0
}
[root@youxi1 ~]# systemctl start dhcpd
[root@youxi1 ~]# systemctl enable dhcpd



5)测试各个服务是否能正常运行

  在客户端youxi2上首先验证dhcp服务是否正常工作



[root@youxi2 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="dhcp"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="yes"
NAME="ens33"
UUID="2c20e953-4536-49e1-8fe4-2c9079ea30ad"
DEVICE="ens33"
ONBOOT="yes"
[root@youxi2 ~]# systemctl restart network
[root@youxi2 ~]# ip a sh dev ens33
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:f2:7e:52 brd ff:ff:ff:ff:ff:ff
inet 192.168.2.100/24 brd 192.168.2.255 scope global dynamic ens33
valid_lft 539sec preferred_lft 539sec
inet6 fe80::20c:29ff:fef2:7e52/64 scope link 
valid_lft forever preferred_lft forever



  在客户端youxi2上测试ftp服务是否正常工作



[root@youxi2 ~]# lftp 192.168.2.6
lftp 192.168.2.6:~> ls                
drwxrwxr-x    8 0        0            2048 Nov 25 23:53 pub
lftp 192.168.2.6:/> exit



  在客户端youxi2上测试tftp是否正常工作



[root@youxi2 ~]# tftp 192.168.2.6
tftp> get vmlinuz
tftp> quit
[root@youxi2 ~]# ll vmlinuz
-rw-r--r-- 1 root root 6639904 5月  25 18:12 vmlinuz



6)修改引导菜单文件

   在服务器端youxi1上修改tftp主目录下的引导菜单文件



[root@youxi1 ~]# vim /var/lib/tftpboot/pxelinux.cfg/default 
//修改引导菜单文件的第一行,default后面的值必须与下方label标签名中的一个相同,这里选择直接安装CentOS7的标签名linux
default linux
timeout 600

label linux
menu label ^Install CentOS 7
kernel vmlinuz
//指定通过网络启动系统时,通过ftp访问kickstart文件
append initrd=initrd.img inst.repo=ftp://192.168.2.6/pub inst.ks=ftp://192.168.2.6/ks.cfg



注意:此处的ks.cfg文件尚未创建(kickstart文件)

  扩展:安装程序指向kickstart文件常见格式

    ks=ftp://server/dir/file,如ks=ftp://192.168.2.6/ks.cfg,对应FTP

    ks=http://server/dir/file,如ks=http://192.168.2.6/ks.cfg,对应HTTP

    ks=nfs:server:/dir/file,如ks=nfs:192.168.2.6:/var/ftp/pub/ks.cfg,对应NFS

7)生成kickstart文件,可以在任何安装图形界面的

  首先服务器端youxi1安装一下gdm插件(图形界面)



[root@youxi1 ~]# yum -y install gdm



  接着将服务器端youxi1的yum源进行修改,只保留本地yum源



[root@youxi1 ~]# mkdir -p /backup/yum.repo
[root@youxi1 ~]# mv /etc/yum.repos.d/*.repo /backup/yum.repo/
[root@youxi1 ~]# vim /etc/fstab
/dev/sr0 /var/ftp/pub iso9660 defaults 0 0    //添加
[root@youxi1 ~]# mount -a
mount: /dev/sr0 is write-protected, mounting read-only
[root@youxi1 ~]# vim /etc/yum.repos.d/development.repo
[development]  //必须是development,否则kickstart读取不到
name=local-CentOS7
baseurl=file:///var/ftp/pub
enabled=1
gpgcheck=0
[root@youxi1 ~]# yum clean all
[root@youxi1 ~]# yum makecache



  使用Xshell(或Xstart)执行命令system-config-kickstart打开图形操作界面。

注意:echo $LANG输出的是zh_CN.UTF-8,请将LANG改为en_US.UTF-8(LANG=en_US.UTF-8),否则会出现乱码。

  之后就会出现如下图所示的配置界面

服务器安装centos安装时只读取一个硬盘_开发工具_02

   基础配置(Basic Configuration):

服务器安装centos安装时只读取一个硬盘_linux_03

  安装方案(Installation Method):全新安装(Perform new installation)

服务器安装centos安装时只读取一个硬盘_操作系统_04

  引导装载程序选项(Boot Loader Options):如果grub需要加密可以选择使用GRUB密码(Use GRUB passwd)

服务器安装centos安装时只读取一个硬盘_开发工具_05

  分区信息(Partition Information):

服务器安装centos安装时只读取一个硬盘_服务器_06

  网络配置(Network Configuration):

服务器安装centos安装时只读取一个硬盘_操作系统_07

  验证(Authentication):默认即可

   防火墙(Firewall Configuration):可以全部关闭,也可以关闭SELinux而开启firewall。如果开启了firewall可以根据需求勾选服务端口。

服务器安装centos安装时只读取一个硬盘_运维_08

  显示设置(Display Configuration):想安装图形界面的就打勾,不想安装的就去掉

  软件包选择(Package Selection):根据需求勾选更多,Compatibility Libraries针对以前版本的CentOS构建应用程序的兼容库。

服务器安装centos安装时只读取一个硬盘_服务器_09

  预安装脚本(Pre-Installation Script)和安装后脚本(Post-Installation Script):根据需求运行一个脚本,可有可无。

  配置完后,选择左上角的File-->Save进行保存:

服务器安装centos安装时只读取一个硬盘_开发工具_10

   选择保存到上面设置的tftp主目录下的引导菜单文件中设置的kickstart文件位置,并且保证文件名要相同。

服务器安装centos安装时只读取一个硬盘_服务器_11

  最后再查看下服务器端youxi1的SELinux和防火墙状态,确保关闭,并重启下dhcpd、network、vsftp。

8)新建一台虚拟机youxi3

  网卡选择LAN1网段,确保能够获取DHCP分配的IP地址。并且光盘里没有镜像。内存给个2G,我给1G的适合会报错,报错信息如下,内存扩大到2G就没问题。

服务器安装centos安装时只读取一个硬盘_操作系统_12

  开启虚拟机,新建的虚拟机直接开机就好,等待运行完成。如果原本有系统需要将网络引导排在启动项的第一位,安装完成后,将硬盘引导移到第一位,否则会不停的重新安装系统。