搭建PXE服务器,实现CentOS7u4 系统自动安装

一. PXE概念:

           支持工作站通过网络从远端服务器下载镜像,并由此支持通过网络启动操作系统,在启动过程中,server分配IP地址,再使用TFTP协议下载一个启动软件包到本机内存中执行,由这个启动软件包完成client 端自动化基础软件安装设置,从而引导预先安装在服务器中的终端操作系统

二. 网络装系统的流程: 

            1. 客户端开机的时候从网络启动,通过PXE芯片从dhcp端获取到IP地址,获取到ip 后就可以跟PXE服务器通信  

            2. 然后,客户端从server端获取到next-server 的地址,也就是TFTP的地址,联系tftp服务器获取pxelinux.0文件,完成网卡激活和启动工作

            3. 接下来,客户端再次联系TFTP服务器,获取操作系统的内核和初始化镜像文件

            4. 最后,客户端重新从dhcp 服务器获取ip地址,这次获取的地址为自己装系统分配给eth0的ip, 通过文件共享服务器获取安装系统的软件。

三.  PXE自动安装系统所需组件

  • syslinux

               作用: 提供基于网络引导的适用于不同的操作系统的各种bootloader 文件, 支持DOSFATfilesystems、Linux ext2/ext3

    filesystems(EXTLINUX)、 PXEnetwork boots(PXELINUX)、ISO 9660 CD-ROMs (ISOLINUX);文件名是 pxelinux.0

  • tftp-server服务

              作用:  XE 引导加载环境,用于提供引导加载文件pxelinux.0 的读取

 

四.   搭建PXE服务器

 

  1.  安装软件

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

       

       2.  配置vsftpd 服务

         [[email protected] ~]# mkdir /var/ftp/centos7u4

         [[email protected] ~]# mount -o loop -t iso9660 /iso_file/CentOS-7-x86_64-DVD-1804.iso /var/ftp/

         [[email protected] ~]# systemctl start vsftpd

         [[email protected] ~]# systemctl enable vsftpd

         [[email protected] ~]# ss -anpt|grep :21   

       

       3、配置DHCP服务    

 

               [ [email protected] ~]# vim /etc/dhcp/dhcpd.conf         

   # DHCP Server Configuration file.

            #   see /usr/share/doc/dhcp*/dhcpd.conf.example

            #   see dhcpd.conf(5) man page

           
            subnet 192.168.128.0 netmask 255.255.255.0{

            range 192.168.128.121 192.168.128.130;     #指定dhcp服务器地址池

            next-server 192.168.128.100;           #指向TFTP服务器地址        

            filename "pxelinux.0";             #指向PXE 的数据文件,文件存放到tftp跟目录下/var/lib/tftpboot

            }

            systemctl start dhcpd

            systemctl enable dhcpd

 

     4.   配置tftp服务,提供引导菜单所需的文件          

           

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

  [[email protected] ~]# cp /var/ftp/centos7u4/isolinux/*   /var/lib/tftpboot/

  [[email protected] ~]# ll !$

  ll /var/lib/tftpboot/

  total 58152

  -r--r--r--. 1 root root     2048 Oct 13 17:11 boot.cat

  -rw-r--r--. 1 root root       84 Oct 13 17:11 boot.msg

  -rw-r--r--. 1 root root      281 Oct 13 17:11 grub.conf

  -rw-r--r--. 1 root root 52893200 Oct 13 17:11 initrd.img

  -rw-r--r--. 1 root root    24576 Oct 13 17:11 isolinux.bin

  -rw-r--r--. 1 root root     3032 Oct 13 17:11 isolinux.cfg

  -rw-r--r--. 1 root root   190896 Oct 13 17:11 memtest

  -rw-r--r--. 1 root root    26764 Oct 13 17:11 pxelinux.0

  -rw-r--r--. 1 root root      186 Oct 13 17:11 splash.png

  -r--r--r--. 1 root root     2215 Oct 13 17:11 TRANS.TBL

  -rw-r--r--. 1 root root   152976 Oct 13 17:11 vesamenu.c32

  -rwxr-xr-x. 1 root root  6224704 Oct 13 17:11 vmlinuz

  [[email protected] ~]# cd /var/lib/tftpboot/

  [[email protected] tftpboot]# mkdir pxelinux.cfg

  [[email protected] tftpboot]# cp isolinux.cfg pxelinux.cfg/default      
#客户端加载pxelinux.0 文件之后,给客户端创建一个菜单文件 default(pxelinux.cfg), 安装时候显示安装菜单

 

     

         [[email protected] ~]# vim   /etc/xinetd.d/tftp        #tftp 服务是基于xinetd实现的,需要开启xinetd服务

   service tftp

        {

        socket_type             = dgram

        protocol                = udp

        wait                    = yes

        user                    = root

        server                  = /usr/sbin/in.tftpd

        server_args             = -s /var/lib/tftpboot

        disable                 = no        #默认关闭,改成no开启

        per_source              = 11

        cps                     = 100 2

        flags                   = IPv4

        }

         

           [[email protected] tftpboot]# systemctl restart xinetd.service       #重启 xinetd 服务

           [[email protected] tftpboot]# systemctl restart xinetd.service

 

五.   Kickstart自动安装

        

   kickstart文件中的格式大体分成以下几个部分:

    • Kickstart 安装选项:包含语言,防火墙,密码,网络,分区的设置等;

    • %Pre 部分: 用的较少,安装前解析的脚本,通常用来生成特殊的ks配置,比如由一段程序决定磁盘分区等;

    • %Package 部分: 安装包的选择,可以是 @base 这样的组的形式,也可以是这样 httpd 包的形式;

    • %Post 部分: 安装后执行的脚本,通常用来做系统的初始化设置。如启动服务,配置yum源等。       

 

1)因为本机系统为命令行模式,需要先安装CentOS 图像界面

        yum groupinstall -y "X Window System"

        yum groupinstall -y "GNOME Desktop"

     

    安装完图形界面,需要重启系统,然后启动 startx ,进入图像界面

 

2) 安装 kickstart软件

        

       [[email protected] ~]# yum install -y system-config-kickstart    #安装kickstart软件

       [[email protected] ~]# system-config-kickstart      #启动 kicksart 图像界面,开始配置

 

3)配置kick-start

     [[email protected] ~]#system-config-kickstart      #进入Kickstart图形配置界面

     

   (1)基本配置——语言用English,键盘用默认,时区用上海,根口令redhat,勾选安装后重新引导系统,其他不做改变

(2)  安装方法——执行新安装—选择FTP——输入FTP服务器:192.168.128.100和FTP目录:/centos7u4 (基于数据目录)

 

(3)引导装载程序选项——选择安装新引导装在程序

 

(4) 分区信息——清除主引导记录——删除所有现存分区——初始化磁盘标签——布局中添加,boot,交换,还有 / 分区

 

(5) 网络配置——添加网络设备——网络设备:eth0,网络类型:dhcp——确定

注意: centos6 里面网络设备为 eth0 ,centos7 网卡设备名会更加实际情况定,忽略不用管,同样配置为eth0

 

 

(6)认证,默认不用配置

 

(7)防火墙 && selinux  都关闭

 

(8)  显示配置——安装图形环境,指的是装系统的过程是以图形的方式显示,不是装桌面环境

 

注意:这里不是指安装图像模式安装

 

 

 

9) 软件包管理——在centos7中有问题,显示不出来,需要后面自己配置响应的配置文件

 

 

(10) 预安装脚本——客户端在装系统之后的操作,现在不需要,根据实际情况需求来配置

 

 

(11)  安装后脚本——勾选使用解释器,输入/bin/bash——在下面键入自定义的%post脚本:可以使用下面的脚本

 

将ssh连接的时候默认的dns解析去掉,加快ssh 连接速度

sed  -ri    '/^GSSAPIAuth/s/yes/no/' /etc/ssh/sshd_config

sed -ri  '/^#UseDNS/c \UseDNS no' /et/ssh/sshd_config

systemctl restart sshd

systemctl stop firewalld;systemctl disable firewalld

sed -ri '/^SELINUX=/c SELINUX=disabled' /etc/selinux/config

setenforce 0

mkdir /etc/yum.repos.d/backup

mv /etc/yum.repos.d/* /etc/yum.repos.d/backup

cat <<EOF >/etc/yum.repos.d/Centos7u4.repo

[centos7u4]

name=centos7u4

baseurl=centos7u4

gpgcheck=0

EOF

:x

 

(12)保存配置

    文件——保存——centos7.cfg——选择一个存放位置

 

(13)  修改centos7.cfg文件,添加软件包安装项,找一个合适的位置写就可以,可以写在分区之后

# SoftWare Installion

%packages      #安装软件包

lftp

wget

net-tools

bash-completion

psmisc

elinks

lsof

netdate

vim*

tree

ntfs-3g

expect

@core       #安装核心工具包组

@base

%end

 

完整的centos7u4.cfg   配置文件:

[[email protected] ~]# cat centos7u4.cfg

#platform=x86, AMD64, or Intel EM64T

#version=DEVEL

# Install OS instead of upgrade

install

# Keyboard layouts

keyboard 'us'

# Root password

rootpw --iscrypted $1$ULhCbmAH$DjLBGEvxIUSq5mEBCxEyq1

# Use network installation

url --url="ftp://192.168.128.100/centos7u4"

# System language

lang en_US

# System authorization information

auth  --useshadow  --passalgo=sha512

# Use graphical install

graphical

firstboot --disable

# SELinux configuration

selinux --disabled



# Firewall configuration

firewall --disabled

# Network information

network  --bootproto=dhcp --device=eth0

# Reboot after installation

reboot

# System timezone

timezone Asia/Shanghai

# System bootloader configuration

bootloader --location=mbr

# Clear the Master Boot Record

zerombr

# Partition clearing information

clearpart --all --initlabel

# Disk partitioning information

part /boot --asprimary --fstype="xfs" --size=500

part swap --fstype="swap" --size=2000

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

# SoftWare Installion

%packages

lftp

wget

net-tools

bash-completion

psmisc

elinks

netdate

vim*

tree

expect

@core

%end



%post --interpreter=/bin/bash

sed  -ri    '/^GSSAPIAuth/s/yes/no/' /etc/ssh/sshd_config

sed -ri  '/^#UseDNS/c \UseDNS no' /et/ssh/sshd_config

systemctl restart sshd

systemctl stop firewalld;systemctl disable firewalld

sed -ri '/^SELINUX=/c SELINUX=disabled' /etc/selinux/config

setenforce 0

mkdir /etc/yum.repos.d/backup

mv /etc/yum.repos.d/* /etc/yum.repos.d/backup

cat <<EOF >/etc/yum.repos.d/Centos7u4.repo

[centos7u4]

name=centos7u4

baseurl=ftp://192.168.128.100/centos7u4

gpgcheck=0

EOF

%end

(14)检查是否有语法错误

[[email protected] ~]# yum install pykickstart

ksvalidator ~/anaconda-ks.cfg

 

(15) 修改文件权限,然后拷贝到 /var/ftp

[[email protected] ~]# cp centos7u4.cfg /var/ftp/

[[email protected] ~]# chmod 755 /var/ftp/centos7u4.cfg

 

(16) 修改启动菜单文件

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

append initrd=initrd.img inst.stage2=ftp://192.168.128.100/centos7u4 inst.repo=ftp://192.168.128.100/centos7u4 inst.ks=ftp://192.168.128.100/centos7u4.cfg

 

  (17)  重启服务

    systemctl restart ftpd

 

 

六 . 启动客户端安装测试

 

客户端网络启动,进入安装界面,页面比较简陋,后期再继续优化~~~