PXE+Kickstart实现全自动批量引导安装CentOS

  • 原创
  • Madman
  • /
  • /
  • 0
  • 2768 次阅读

PXE+Kickstart实现全自动批量引导安装CentOS-min.png

Synopsis: 首先从服务器加电开始,详细解析了操作系统是如何实现引导的,以及如何加载系统安装程序。PXE可以使计算机通过网络而不是从本地硬盘、光驱等设备启动(即加载引导程序)。现代的网卡,一般都内嵌支持PXE的ROM芯片。当计算机引导时,BIOS把PXE Client调入内存执行,并显示出命令菜单,经用户选择后,PXE Client将放置在远端的操作系统通过网络下载到本地运行。Anaconda支持使用Kickstart文本化安装操作系统,在此文件中指定安装源在哪,后续如何进行磁盘分区等信息,即可实现网络全自动批量安装系统

Linux系统自动部署系列:


1. 系统引导与安装的内部原理

1.1 第一阶段

Step1. 上电自检POST(Power-On-Self-Test)是BIOS(Basic Input Output System)功能的一个主要部分,它负责完成对CPU、主板、内存、软硬盘子系统、显示子系统(包括显示缓存)、串并行接口、键盘、CD-ROM光驱等的检测,主要检查硬件的好坏

Step2. 读取BIOS中的Boot Sequence,可用于启动的介质包括: 硬盘,CDROM,USB,支持PXE的网卡等

Step3. 加载引导程序(Bootstrap)

  • syslinux.0
  • isolinux.bin

Step4. 读取启动菜单文件

  • pxelinux.cfg/default
  • isolinux/isolinux.cfg

Step5. 选定安装选项后,依据参数指定的位置,加载内核映像vmlinuz 和初始RAM磁盘initrd.img,在内存中构建了一个Linux启动所需的虚拟的根文件系统(rootfs)

  • kernel : vmlinuz
  • initrd : initrd.img

Step6. 内核执行initrd.img中的/init程序(这实际上是一个指向/sbin/init的软链接),init会调用/sbin/loader程序,执行anaconda主程序

至此,安装引导的第一个阶段结束,这个阶段的主要任务就是找到第二个阶段的引导程序anaconda并执行它。

文件的调用顺序为 vmlinuzinitrd.img/init/sbin/loaderimagaes/install.img/usr/bin/anaconda

1.2 第二阶段

准备安装源(Preparing Installation Sources)

  • DVD
  • Hard drive
  • Network location
  • NFS
  • HTTPS, HTTP or FTP

Anaconda是RedHat、CentOS、Fedora等Linux的安装管理程序。它可以提供文本、图形等安装管理方式,并支持Kickstart等脚本提供自动安装的功能。此外,其还支持许多启动参数,熟悉这些参数可为安装带来很多方便。该程序的功能是把位于光盘或其他源上的数据包,根据设置安装到主机上。为实现该定制安装,它提供一个定制界面,可以实现交互式界面供用户选择配置(如选择语言,键盘,时区等信息)。Anaconda的大部分模块用Python编写,有少许的载入模块用C编写。

Anaconda的两种安装管理方式:

  • 图形化界面人工定制安装
  • 文本界面结合Kickstart实现自动化安装

2. 安装方式总结

根据前面的描述,要完成系统安装,只需要提供如下内容:

  • 加载引导程序(Bootstrap)
  • 启动菜单文件
  • vmlinuz 和 initrd.img
  • 包含二进制RPM包的安装源

1 PXE+Kickstart实现全自动批量引导安装CentOS

也就是说,可以使用官方下载的完整ISO,制作DVD安装光盘或U盘来安装CentOS;或者,从官方ISO中抽离加载引导程序这些文件,制作一个迷你的引导光盘或U盘,然后由本地磁盘或网络提供RPM包的安装源;或者使用PXE技术,通过网络来加载引导程序,结合Kickstart,则可实现网络全自动安装

3. PXE网络安装

3.1 PXE原理

2 PXE+Kickstart实现全自动批量引导安装CentOS

PXE是由Intel设计的协议,它可以使计算机通过网络而不是从本地硬盘、光驱等设备启动(即加载引导程序)。现代的网卡,一般都内嵌支持PXE的ROM芯片。当计算机引导时,BIOS把PXE Client调入内存执行,并显示出命令菜单,经用户选择后,PXE Client将放置在远端的操作系统通过网络下载到本地运行。

执行流程:

当BIOS将PXE Client载入内存后,便具备了DHCP Client的功能(可以透过DHCP Server来获取IP地址)、具备TFTP Client功能(可通过TFTP Server来下载kernel和initrd.img等文件)

3 PXE+Kickstart实现全自动批量引导安装CentOS

Step1. PXE Client向UDP 67端口广播 DHCPDISCOVER 消息.

Step2. DHCP SERVER或者DHCP Proxy收到广播消息后,发送DHCPOFFER(包含ip地址)消息到PXE Client的68端口.

Step3. PXE Client发送DHCPREQUEST消息到DHCP SERVER,获取启动文件名和位置(Network Bootstrap Program file name,简称NBP).

Step4. DHCP SERVER发送DHCPACK(包含NBP)消息到PXE Client.

Step5. PXE Client向Boot Server获取NBP文件.

Step6. PXE Client从TFTP SERVER下载NBP,然后在客户端执行NBP文件

注意:

在NBP执行初始化后,NBP会按照自己默认的方式从TFTP SERVER中下载其他所需的配置文件。这个时候PXE启动流程已经完成了,剩下的工作都是有NBP来执行完成的。

例如,pxelinux.0(安装Linux)的NBP会下载default配置文件,来显示菜单,根据需要启动不同的kernel和image;如果是RIS(安装Windows)的NBP,则会启动Windows boot loader来执行安装部署。

3.2 部署PXE Boot Server

(1) 安装TFTP

tftp是由 super daemon (xinetd) 所管理的服务,需要安装xinetd和tftp。默认情况下TFTP服务是禁用的,所以要修改文件来开启服务。

1. 安装
# yum -y install xinetd tftp tftp-server

2. 配置
# vim /etc/xinetd.d/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的文件保存目录
        disable                 = no  # 由默认值yes修改为no
        per_source              = 11
        cps                     = 100 2
        flags                   = IPv4
}

3. 启动服务
# systemctl start xinetd
# systemctl enable xinetd

4. 查看运行状态
# netstat -tunap | grep :69
udp        0      0 0.0.0.0:69              0.0.0.0:*                           1641/xinetd 

(2) 安装DHCP

如果你的公司里面已经存在DHCP服务器,请使用已有的DHCP,否则会造成网络混乱。如果此DHCP是Windows Server提供的,需要正确设置DHCP的下一跳地址指向上一步骤中创建的TFTP Server的IP地址。找到066启动服务器主机名,这里输入tftp服务器的IP地址,我的是"192.168.80.10",再找到067启动文件名,输入pxelinux.0

1. 安装
# yum -y install dhcp

2. 修改配置文件
# vim /etc/dhcp/dhcpd.conf
内容如下:
#
# DHCP Server Configuration file.
#   see /usr/share/doc/dhcp*/dhcpd.conf.example
#   see dhcpd.conf(5) man page
#

# option definitions common to all supported networks...
ddns-update-style interim;
ignore client-updates;
authoritative;
allow booting;
allow bootp;
allow unknown-clients;

# A slightly different configuration for an internal subnet.
subnet 192.168.80.0 netmask 255.255.255.0 {
    range 192.168.80.100 192.168.80.200;
    option domain-name-servers 192.168.80.10; 
    option domain-name "pxe.wangy.com"; 
    option routers 192.168.80.2; 
    option broadcast-address 192.168.80.255;
    default-lease-time 600; 
    max-lease-time 7200; 
    # TFTP Server Information
    next-server 192.168.80.10;
    filename "pxelinux.0";
}

3. 启动服务
# systemctl start dhcpd
# systemctl enable dhcpd
未经允许不得转载: LIFE & SHARE - 王颜公子 » PXE+Kickstart实现全自动批量引导安装CentOS

分享

作者

作者头像

Madman

如需 Linux / Python 相关问题付费解答,请按如下方式联系我

0 条评论

暂时还没有评论.

专题系列