天天看点

kickstart + dhcp + tftp-server + tftp + httpd自动化安装操作系统

一、简介

1、什么是PXE

PXE(preboot execute environment,预启动执行环境)是由Intel公司开发的最新技术,工作于Client/Server的网络模式,支持工作站通过网络从远端服务器下载映像,并由此支持通过网络启动操作系统,在启动过程中,终端要求服务器分配IP地址,再用TFTP(trivial file transfer protocol)或MTFTP(multicast trivial file transfer protocol)协议下载一个启动软件包到本机内存中执行,由这个启动软件包完成终端(客户端)基本软件设置,从而引导预先安装在服务器中的终端操作系统。PXE可以引导多种操作系统。

严格来说,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 上下载所需的文件了。

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 方式之一进行安装;

详细工作流程,请参考下面这幅图:

kickstart + dhcp + tftp-server + tftp + httpd自动化安装操作系统

要达成PXE必须要有两个环节:

(1)一个是客户端的网卡必须要支持PXE用户端功能,并且开机时选择从网卡启动,这样系统才会以网卡进入PXE客户端的程序;

(2)一个是PXE服务器必须要提供至少含有DHCP以及TFTP的服务!

其中:

  • DHCP服务必须要能够提供客户端的网络参数,还要告知客户端TFTP所在的位置;
  • TFTP则提供客户端的boot loader及kernel file下载路径。

还要加上NFS/FTP/HTTP(选择一样即可)等提供安装文件(安装镜像的解压文件),才算是比较完整的PXE服务器。一般TFTP和DHCP服务都由同一台服务器提供,且大多数时候还提供NFS/FTP/HTTP服务,所以PXE服务器一般是提供3合一的服务

2、什么是Kickstart

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

PXE+Kickstart 无人值守安装操作系统完整过程如下:

kickstart + dhcp + tftp-server + tftp + httpd自动化安装操作系统

满足Kickstart安装系统的需求:

  1. 网卡必须支持PXE引导;
  2. 客户端需要有与Kickstart 通信的IP地址,这里一般都是通过DHCP自动分配IP地址来实现;
  3. 提供引导所需的文件,内核文件,内核镜像文件等,此时一般通过tftp-server等实现;
  4. kickstart文件,它主要实现自动化安装的过程,比如配置主机名、添加用户、安装系统后相关操作;
  5. 提供安装源,一般就是NFS/ftp/httpd等;

总结: 通过如上需求,我们就知道需要安装的相关服务,如DHCP/tftp-server/syslinux/kickstart/vsftpd等;

二、环境介绍及初绍化

1、环境介绍

  • 操作系统:CentOS Linux release 7.4.1708 (Core)
  • 网卡地址:192.168.10.7/24
  • 光盘镜像:CentOS-7-x86_64-DVD-1708.iso
  • 安装工具:kickstart + dhcp + tftp-server + tftp + httpd
  • Workstaion网络:VMNet3

2、准备工作

1、服务器禁用SElinux,然后进行重启操作

[[email protected] ~]# cat /etc/redhat-release

CentOS Linux release 7.4.1708 (Core)

[[email protected] ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g'

/etc/selinux/config

[[email protected] ~]# setenforce 0

[[email protected] ~]# systemctl reboot

[[email protected] ~]# getenforce

Permissive

2、关闭防火墙及清空策略

[[email protected] ~]# systemctl stop firewalld.service

[[email protected] ~]# systemctl disable firewalld.service

Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.

Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.

[[email protected] ~]# iptables -F

[[email protected] ~]# iptables -L -n

Chain INPUT (policy ACCEPT)

target prot opt source destination

Chain FORWARD (policy ACCEPT)

target prot opt source destination

Chain OUTPUT (policy ACCEPT)

target prot opt source destination

[[email protected]~]#

3、软件安装

[[email protected] ~]# yum install -y httpd dhcp tftp-server tftp syslinux

[[email protected] ~]# rpm -q httpd dhcp tftp-server tftp syslinux

httpd-2.4.6-67.el7.centos.x86_64

dhcp-4.2.5-58.el7.centos.x86_64

tftp-server-5.2-13.el7.x86_64

tftp-5.2-13.el7.x86_64

syslinux-4.05-13.el7.x86_64

三、各组件配置及准备

一)DHCP服务配置

1、修改dhcpd配置文件

[[email protected] ~]# cp -rf /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf

[[email protected] ~]# egrep -v "^#|^$" /etc/dhcp/dhcpd.conf

option domain-name "contoso.com";  #对应client 的/etc/resolve.conf里面的option contoso.com,默认解析所带域名。

option domain-name-servers ns1.contoso.com, contoso.com; #定义域名服务器

default-lease-time 600;

max-lease-time 7200;

log-facility local7;

subnet 192.168.10.0 netmask 255.255.255.0 { //服务端IP网段及掩码

option routers 192.168.10.254; //网关

option subnet-mask 255.255.255.0; //掩码

option domain-name-servers 192.168.10.2;

range dynamic-bootp 192.168.10.100 192.168.10.120; //dhcp分发的地址范围

default-lease-time 21600; //设置默认的IP租用期限

max-lease-time 43200; //设置最大的IP租用期限

next-server 192.168.10.7;    #TFTP服务器地址

filename "pxelinux.0";  #指定引导文件位置,这里是TFTP根目录下的pxelinux.0

}

2、启动dhcpd服务,并设置为开机启动

[[email protected] kickstart ~]# systemctl start dhcpd.service

[[email protected] kickstart ~]# systemctl enable dhcpd.service

3、dhcp服务端口查看

[[email protected] ~]# ss -nulp | grep dhcpd

UNCONN 0 0 *:44810 *:* users:(("dhcpd",pid=5197,fd=20))

UNCONN 0 0 *:67 *:* users:(("dhcpd",pid=5197,fd=7))

UNCONN 0 0 :::5138 :::* users:(("dhcpd",pid=5197,fd=21))

二)Httpd服务配置

1、目录建立及光盘挂载

[[email protected] ~]# mkdir -pv /var/www/html/CentOS7

[[email protected] ~]# mount --bind /media/cdrom/ /var/www/html/CentOS7/

2、启动httpd服务,并设置为开机启动

[[email protected] kickstart ~]# systemctl start httpd.service

[[email protected] kickstart ~]# systemctl enable httpd.service

3、httpd服务端口查看

[[email protected] ~]# ss -tnl | grep 80

LISTEN 0 128 :::80

[[email protected] ~]# lftp http://192.168.10.7/CentOS7 //用lftp对CentOS7进行测试

cd: received redirection to `http://192.168.10.7/CentOS7/'

cd ok, cwd=/CentOS7

lftp 192.168.10.7:/CentOS7> ls

drwxr-xr-x -- /

-rw-r--r-- -- CentOS_BuildTag

drwxr-xr-x -- EFI

-rw-r--r-- -- EULA

-rw-r--r-- -- GPL

drwxr-xr-x -- LiveOS

drwxr-xr-x -- Packages

-rw-r--r-- -- RPM-GPG-KEY-CentOS-7

-rw-r--r-- -- RPM-GPG-KEY-CentOS-Testing-7

-rw-r--r-- -- TRANS.TBL

drwxr-xr-x -- images

drwxr-xr-x -- isolinux

drwxr-xr-x -- repodata

lftp 192.168.10.7:/CentOS7>

三)tftp服务配置

1、配置xinetd

[[email protected] ~]# vim /etc/xinetd.d/tftp

service tftp

{

socket_type = dgram

protocol = udp

wait = yes

user = root

server = /usr/sbin/in.tftpd

server_args = -s /var/lib/tftpboot  #修改tftp的根目录

disable = no                                 #disable是yes的,把它改为no即可

per_source = 11

cps = 100 2

flags = IPv4

}

2、确保tftp.socket正常

[[email protected] ~]# systemctl start tftp.socket

[[email protected] ~]# systemctl enable tftp.socket

3、然后启动tftp.service

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

[[email protected] ~]# systemctl enable tftp.service

[[email protected] ~]# systemctl status tftp.service

[[email protected] ~]# ss -unlp | grep 69 //端口为UDP:69

UNCONN 0 0 :::69 :::* users:(("systemd",pid=1,fd=42))

3、导入必要的引导文件

需要导入TFTP服务器的主要文件有:

  • 引导文件 - pxelinux.0
  • 内核文件:vmlinuz initrd.img
  • 引导菜单:isolinux.cfg -- 开机后选择启动项的菜单文

(1)引导文件pxelinux.0, 由软件包syslinux生成,安装syslinux软件包

[[email protected] ~]# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/   #boot loader文件

(2)导入内核及菜单文件

内核文件:vmlinuz initrd.img

引导菜单配置文件: isolinux.cfg

系统自带的两种窗口模块之一:vesamenu.c32

窗口提示信息文件:boot.msg

窗口背景图片:splash.png

[[email protected] pxeboot]# cp /media/cdrom/images/pxeboot/{vmlinuz,initrd.img} /var/lib/tftpboot/      #导入内核文件

[[email protected] ~]# cp /media/cdrom/isolinux/{vesamenu.c32,boot.msg,splash.png} /var/lib/tftpboot/

[[email protected] ~]# cp /usr/share/syslinux/{chain.c32,mboot.c32,menu.c32,memdisk} /var/lib/tftpboot/

[[email protected] ~]# mkdir /var/lib/tftpboot/pxelinux.cfg/     #新建pxelinux.cfg文件夹

[[email protected] ~]# ls /var/lib/tftpboot/   #查看目录下准备的文件

boot.msg chain.c32 initrd.img mboot.c32 memdisk menu.c32 pxelinux.0 pxelinux.cfg splash.png vesamenu.c32 vmlinuz

(3)复制引导菜单进行修改

[[email protected] ~]# cp /media/cdrom/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default

[[email protected] pxelinux.cfg]# vim /var/lib/tftpboot/pxelinux.cfg/default 

timeout 600  //菜单显示等待时间,单位为1/10秒,默认等待60秒。

//修改菜单等待时间为60,即等待6秒,若无操作则进入默认菜单;

timeout 600

//然后修改显示菜单,找到文件中的以下部分

label linux  

menu label ^Install CentOS Linux 7

kernel vmlinuz  

append initrd=initrd.img inst.stage2=hd:LABEL=CentOS\x207\x20x86_64 quiet

label check

menu label Test this ^media & install CentOS Linux 7  

menu default  

kernel vmlinuz  

append initrd=initrd.img inst.stage2=hd:LABEL=CentOS\x207\x20x86_64 rd.live.check quiet

# 将其修改为

label linux

menu label ^Install CentOS 7

kernel vmlinuz

append initrd=initrd.img

label linux 2

menu label ^Install CentOS 7 by Kickstart

kernel vmlinuz

append initrd=initrd.img inst.repo=http://192.168.10.7/CentOS7

inst.ks=http://192.168.10.7/CentOS7.cfg

label linux 3

menu label ^Install CentOS 7 by Kickstart_Min

kernel vmlinuz

append initrd=initrd.img inst.repo=http://192.168.10.7/CentOS7 inst.ks=http://192.168.10.7/CentOS7Min.cfg

(4)将CentOS7.kfg放到/var/www/html目录下面,CentOS7. cfg文件内容如下:

[[email protected] html]# cat CentOS7.cfg

#platform=x86, AMD64, or Intel EM64T

#version=DEVEL

# Install OS instead of upgrade

install

# Keyboard layouts

keyboard --vckeymap=us --xlayouts='us'

# Root password

rootpw --iscrypted $1$xBL2ptUE$hJOPvy.dysetezxpEXCaL0

# Use network installation

url --url="http://192.168.10.7/CentOS7" //指定网络安装的服务地址及目录

# System language

lang en_US.UTF-8 --addsupport=zh_CN.UTF-8 //语言

# Firewall configuration

firewall --disabled

# System authorization information

auth --useshadow --passalgo=sha512

# Use graphical install

graphical

firstboot --disable

# SELinux configuration

selinux --disabled

# Network information

network --bootproto=dhcp --device=ens33 --onboot=yes --noipv6 --activate //启动并激活网卡的名称

network --hostname=Centos7.contoso.com //设置主机名

# Reboot after installation

reboot

# System timezone

timezone Asia/Shanghai --isUtc --nontp //设置时区

user --groups=wheel --name=tony --gecos="tony" //增加tony用户

# System bootloader configuration

bootloader --location=mbr --boot-drive=sda

# Clear the Master Boot Record

zerombr //清除mbr信息

# Partition clearing information

clearpart --all --initlabel

# Disk partitioning information //磁盘为50G的硬盘,这里根据自己来进行修改

part /boot --fstype="xfs" --size=200

part / --fstype="xfs" --size=20480

part swap --fstype="swap" --size=2048

part /usr --fstype="xfs" --size=20480

part /tmp --fstype="xfs" --grow --size=1

%packages

@base

@compat-libraries

@desktop-debugging

@development

@dial-up

@fonts

@gnome-apps

@gnome-desktop

@legacy-x

@platform-devel

@remote-desktop-clients

@x11

vinagre

%end

说明:生成kickstart文件时,需要安装通过yum -y install system-config-kickst 安装此软件包,安装的软件包之前,首先需要repo文件中第一行写成[development],括号中建议填写development,填写其他内容会导致后面system-config-kickstart命令生成kickstart文件文件时无法选择软件包

四、验证自动化安装

启动之前准备的客户端虚拟机查看是否可以正常显示引导菜单,是否可以正常获取initrd.img和vmlinuz内核文件。

若配置正常,会看到之前配置的引导菜单出现:

继续阅读