热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

PXE方式自动化部署安装Linux

PXE预启动执行环境(PrebooteXecutionEnvironment,PXE)也被称为预执行环境,提供了一种使用网
PXE

预启动执行环境(Preboot eXecution Environment,PXE)也被称为预执行环境,提供了一种使用网络接口(Network Interface)启动计算机的机制。这种机制让计算机的启动可以不依赖本地数据存储设备(如硬盘)或本地已安装的操作系统。

PXE当初是作为Intel的有线管理体系的一部分,Intel 和 Systemsoft于1999年9月20日公布其规格(版本2.1) [2]  。通过使用像网际协议(IP)、用户数据报协议(UDP)、动态主机设定协定(DHCP)、小型文件传输协议(TFTP)等几种网络协议和全局唯一标识符(GUID)、通用网络驱动接口(UNDI)、通用唯一识别码(UUID)的概念并通过对客户机(通过PXE自检的电脑)固件扩展预设的API来实现目的。

PXE 协议大致上结合了DHCP和TFTP,虽然都有在两者上面有改进。DHCP用于查找合适的启动伺服器,TFTP用于下载初始引导程序和附加文件。

为了开始一个PXE自检会话,PXE固件广播一个带有明确的PXE选项DHCPDISCOVER包(扩展DHCPDISCOVER)到67/UDP端口(DHCP伺服器端口)。PXE选项是PXE固件有PXE能力的鉴定,但是会被一般的DHCP服务忽略。当固件受到从这样的服务受到DHCPOFFER包时,它会通过要求其提供配置信息来自我配置。

DHCP代理

当 PXE 重定向服务 (DHCP代理) 收到一个 扩展DHCPDISCOVER 包时,它会通过发送一个带有明确的PXE选项DHCPDISCOVER包到PXE客户机的68/UDP端口 (DHCP 客户机端口)来回答。 一个扩展DHCPDISCOVER包主要包含:

  1. 一个PXE发现控制领域,以决定是使用多播,广播(网路)或单播来联系PXE启动服务器。
  2. 一个列出可用的PXE启动服务器类型的地址表。
  3. 一个代表每个一个PXE启动服务器类型的条目单。
  4. 一个带有带有提示用户按下哪一个键来看到启动菜单的PXE启动菜单。
  5. 一个超过多长时间就启动第一启动菜单的超时数值。

一个DHCP代理服务可能在相同的主机上运行一个标准的DHCP服务器。尽管两个服务不可以共享67/UDP 端口,DHCP代理服务在4011/UDP 端口上运行,要求从客户端来的DHCPDISCOVER 包变成DHCPREQUEST 包。标准DHCP服务在其发送的DHCPOFFER 包中加入特殊的PXE 选项组合,这样PXE客户端知道可以在同一个主机的 4011/UDP 端口找到一个DHCP代理服务。

网络无人值守安装

常见的Linux安装方式有光盘安装和U盘安装两种,如果我们有几十台甚至上百台服务器需要统一部署上架,不论是光盘安装还是U盘安装,在生产环境中都需要一台一台的逐个安装,即使你有足够多的光驱并刻录足够多的光盘,你也会发现这是一个既耗时又耗力的苦差事。因此,我们就希望于使用一种可以批量化部署的方案,以此解决减少部署时间和部署负责度的问题。这种方法就是网络无人值守安装方案。网络无人值守安装就是通过网络启动时推送启动或安装选项,通过匹配被安装服务器的网卡MAC地址段确认安装源和安装方式的一种技术集合,它不是一种技术而是多种技术组合完成的。
 

网络无人值守安装的流程简介

1、DHCP:用以分配ip地址

2、预启动施行环境(PXE):通过网卡引导计算机

3、PXELINUX:提供引导文件及内核等文件

4、kickstart文件:提供安装介质

实验环境:

服务端:192.168.10.2  需要XINETD、DHCP、TFTP、VSFTP、SYSLINUX等服务以及 Centos 安装介质(这里使用 Centos 7.5)

客户端:需要支持PXE启动模块的网卡(这里使用虚拟机代替)

注:服务端及客户端防火墙、selinux均已关闭

首先在服务端安装配置各类服务:

安装VSFTP服务,将安装光盘挂载至FTP共享目录(这里作为实验目的不复制文件,生产环境中要将文件复制到FTP共享目录下):

启动服务并验证是否可以正常访问:

安装TFTP服务,并将安装系统需要的引导文件复制到TFTP共享目录下:

  • pxelinux.0:pxe引导程序(由syslinux程序提供)
  • pxelinux.cfg/default:系统启动时的启动菜单,指出要加载的内核镜像和inird 镜像,然后引导。
  • vmlinuz:Linux内核
  • initrd.img:初始化镜像文件,存放了引导时的一些驱动程序

编辑 /var/lib/tftpboot/pxelinux.cfg/default 文件,更改首行 default linux   prompt 0 为不提示用户操作 

指明kickstart自动应答文件位置

安装守护进程XINETD服务:

修改XINETD服务的TFTP配置文件并启动服务:

安装 DHCP 服务:

编辑 DHCP 配置文件:

启动 DHCP 服务:

安装 SYSLINUX 

编辑kickstart自动应答文件 /var/ftp/ks.cfg:


Kickstart文件中的主要项目及参数介绍:

每个项目都由关键字来识别;关键字可跟一个或多个参数;如果某选项后面跟随了一个等号(=),它后面就必须指定一个值。

install  (可选)
    明确指定系统次次进行的是全新安装系统;是默认项;

cdrom  (可选)
    以本地CD-ROM为源安装系统;

harddrive  (可选)
    以硬盘分区中包含的镜像为源(安装树)安装新系统;当以该种方式安装系统时,即使指定clearpart --all项,源所在分区也不会被重新抹去;
    --partition=    指定分区
    --dir=        指定包含镜像的目录
    例:
    harddrive  --partition=/dev/sdb2  --dir=/data/iso

nfs  (可选)
    指定从NFS服务器上获取安装树;
    --server=    指定NFS服务器,主机名称或IP
    --dir=        包含安装树的目录
    --opts=        可以指定挂载NFS的目录时的挂载选项
    例:
    nfs  --server=192.168.1.254  --dir=/data/iso

url  (可选)
    指定通过FTP或HTTP从网络获取安装树;
    --url    指定资源位置
    例:
    url  --url  ftp://:@install.example.com/iso
    url  --url  http://install.example.com/iso

bootloader (必需)
    设定boot loader安装选项;
    --append=        可以指定内核参数
    --driveorder=    设定设备BIOS中的开机设备启动顺序
    --location=        设定引导记录的位置; mbr:默认值;partition:将boot loader安装于包含kernel的分区超级快中;none:不安装boot loder。
    示例:
    bootloader  --location=mbr  --append=“rhgb quiet” --driveorder=sda,sdb
    
clearpart (可选)
    在建立新分区前清空系统上原有的分区表,默认不删除分区;
    --all      擦除系统上原有所有分区;
    --drives    删除指定驱动器上的分区
    --initlabel    初始化磁盘卷标为系统架构的默认卷标
    --linux        擦除所有的linux分区
    --none(default)不移除任何分区
  例:
  clearpart  --drives=hda,hdb --all  --initlabel

zerombr  (可选)
    清除mbr信息,会同时清空系统用原有分区表

drivedisk (可选)
    如果使用特殊存储方式时,需要指定驱动程序盘位置以便加载存储驱动;
  1.  将驱动盘拷贝到本地硬盘某分区根目录:
    drivedisk [ --type= ]
  2.  也可以指定一个网络位置加载驱动程序盘
    drivedisk  --source=ftp://path/to/drive.img
    drivedisk  --source=http://path/to/drive.img
    drivedisk  --source=nfs:host://path/to/drive.img

firewall (可选)
    配置系统防火墙选项;
    firewall –enable|--disable  [ --trust ] [ --port= ]
    --enable        拒绝外部发起的任何主动连接;
    --disable        不配置任何iptables防御规则;
    --trust        指定完全信任网卡设备;
    --port        使用port:protocol格式指定可以通过防火墙的服务;
    示例:
    firewall --enable --trust eth0  --trust eth1  --port=80:tcp

selinux (可选)
    设置系统selinux状态;默认为启用并处于enforcing模式;
    selinux [ --disabled|–enforcing|--premissive ]

reboot (可选)
    在系统成功安装完成后默认自动重启系统(kickstart方法时);在收到你敢装系统完成后,会提示按任意键进行重启;
    在本文件中没有明确指明其他方法时就默认完成方式为reboot;
    使用 reboot 选项可能会导致安装的死循环,这依赖于安装介质和方法。需要特别注意;

halt  (可选)
    在系统成功安装完成后关机;默认为reboot;
    其他选项还有shutdown、poweroff,需要使用请自行参考官方文档。

graphical (可选)
    默认值,在图形模式下进行kickstart方式安装;

text (可选)
    以文本方式进行kickstart安装;默认为图形界面

key  (可选)
    设置一个安装码(installration number),用于获取RedHat官方的支持服务;
    --skip    跳过key设置,不进行设置;如果不设置可能跳转到交互模式让用户选取动作;

keyboard (必需)
    设置键盘类型;一般设置为us;

lang (必需)
    设置安装过程使用的语言及系统的缺省语言;文本模式安装时可能不支持某些语言(中、韩...),所以可能仍以默认的英文方式安装;默认en_us,装中文时,需要后期%packages部分装上中文支持组件;
    例:
    lang en_US
 
timezone (可选)
    设置系统的时区;
    timezone  [ --utc ] 
    例:
    timezone  --utc  Asia/Shanghai

auth/authconfig  (必需)
    设置系统的认证方式;默认为加密但不隐藏(shadow);
    --enablemd5    使用MD5加密方式
    --useshadow或—enableshadow    使用隐藏密码;
    --enablenis=    使用NIS认证方式
    --nisdomain=    NIS域
    --nisserver=      NIS服务器
    还可以设置LDAP、SMB及Kerberos 5认证方式,详细请参考官方文档;
    例:
    authconfig  --useshadow  --enablemd5

    auth --enableshadow --passalgo=sha512

rootpw (必需)
    设置系统root账号的密码;
    rootpw [ --iscrypted ] 
    --iscrypted    表示设置的密码为加密过的串;
    例:
    rootpw  pa4word
    rootpw --iscrypted  $1$RPYyxobb$/LtxMNLJC7euEARg2Vu2s1

network (可选)
    配置网络信息;在网络安装(NFS/HTTP/FTP)时必须指定;
    --bootproto=dhcp|bootp|static    指定ip获取方式,默认为dhcp/bootp;
    --device=    设置安装时激活来进行系统安装的网卡设备;该参数只在kickstart文件为本地文件时有效;若kickstart配置文件在网络上,安装程序会先初始化网卡然后去寻找kickstart文件;
    --ip=    ip设置
    --gateway=  网关
    --nameserver=  DNS设置
    --nodns        不设置DNS
    --netmask=  掩码
    --hostname= 设置安装后主机名称
    --onboot=    设置是否在系统启动时激活网卡
    --class=        设置DHCP的class值
    --noipv4        禁用该设备的ipv4功能
    --noipv6        禁用该设备的ipv6功能
    如将网络模式设置为静态模式,则必须在一行内写上ip,netmask、dns、gateway等信息;
    例:
    network –bootproto=static –ip=1.1.1.1 --metmask=255.0.0.0 --gateway=1.1.1.254 --nameserver=1.1.1.2
    netmask --bootproto=dhcp  --device=eth0

skipx (可选)
    如果该项存在,就不对系统的X进行设置;

xconfig (可选)
    配置X window ;如果不给出选项,在安装过程中需要手动调整设置;当然不安装X时不应该添加该项;
  --driver            为显卡设置X驱动
  --videoram=    设置显卡的RAM大小
  --defaultdesktop=    设置GNOME/KDE作为默认桌面;假定这两个桌面环境在%packages例已经安装
  --startxonboot  使用图形界面登录系统
  --resolution=    设置图形界面的分辨率;可用值有640*480、800*600、1024*768等;确保设置指适合于显示卡及显示器;
  --depth=          设置显示色深;可用值有8/16/24/32;确保设置值适合于显示设备;
    例:
    xconfig    --startxonboot  --resolution=800*600 --depth=16

services (可选)
    设置禁用或允许列出的服务;
    --disabled 设置服务为禁用
    --enabled  启动服务
    例:
    services --disabled autid,cups,smartd,nfslock  服务之间用逗号隔开,不能有空格
    
iscsi(可选)
    指定额外的ISCSI设备;
    issci --ipaddr= ipaddr  [options].
      --target 
      --port= 
      --user= 
      --password=

part/partition  (install模式必须)

    clearpart --all --initlabel  清空分区表
    建立新分区;
    part  |swap|pv.id|rdid.id  options
    mntpoint:挂载点,是在创建普通分区时指定新分区挂载位置的项;挂载点需要格式正确
    swap: 创建swap分区;
    raid.id:  表示创建的分区类型为raid型;必须用id号进行唯一区别;
    pv.id:  表示所创建的分区类型为LVM型;必须用唯一id号进行区别;
    --size=  设置分区的最小值,默认单位为M,但是不能写单位;
    --grow  让分区自动增长利用可用的磁盘空间,或是增长到设置的maxsize值;
    --maxsize 设置分区自动增长(grow)时的最大容量值,以M为单位,但不能写单位;
    --onpart=/--usepart=    设置使用原有的分区;
    --noformat    设置不格式化指定的分区,在跟—onpart一同使用时,可以避免删除原有分区上的数据,在新安装的系统中保留使用数据;
    --asprimary    强制制定该分区为主分区;若指定失败,分区会失败,导致安装停止;
    --fstype=    新增普通分区时指定分区的类型,可以为ext2、ext3、ext4、swap、vfat及hfs;
    --ondisk=/--ondrive=    设定该分区创建在一个具体的磁盘上;
    --start  指定分区以磁盘上那个磁道开始;需要跟--ondisk参数一块使用;
    --end    指定分区以磁盘上那个磁道结束;需要跟上述两个参数一起使用;
    --recommended&#xff1a;让系统自行决定分区的大小&#xff1b;在创建swap分区时&#xff0c;若RAM<2G&#xff0c;则分区大小为2*RAM&#xff1b;若RAM>&#61;2G时&#xff0c;分区大小为RAM&#43;2G&#xff1b;
    --bytes-pre-inode&#61;    指定分区格式化时inode的大小&#xff1b;默认值为4096
    --fsoptions&#61;    指定创建fstab文件时该分区挂载参数项&#xff1b;
    例&#xff1a;
    part  /boot  --fstype&#61;“ext3” --size&#61;100
    part  swap  --fstype&#61;“swap” –size&#61;512  
    part  /  --bytes-pre-inode&#61;4096  --fstype&#61;“ext4”--size&#61;10000
    part  /data    --onpart&#61;/dev/sdb1  --noformat
    part  raid.100  --size&#61;2000
    part  pv.100    --size&#61;1000

raid  (可选)
    设置RAID。
    raid 挂载点  --level&#61;  --device&#61; 
    挂载点&#xff1a;    选取根/时&#xff0c;注意尽量避免/boot在RAID内&#xff0c;除非为RAID1&#xff1b;
    --level&#61;    设置RAID级别
    --device&#61;  RAID设备名称&#xff0c;如md0&#xff0c;md1...
    --byte-pre-inode&#61;    设置该RAID分区上inode大小&#xff1b;若分区文件系统类型不支持该参数&#xff0c;会静默忽略参数&#xff1b;
    --spares&#61;  设置RAID的热备盘
    --fstype&#61;  设置文件系统类型
    --fsoptions&#61;  设置挂载该文件系统时自定义的一些参数&#xff0c;参数写入fstab文件&#xff1b;
    --useexisting  使用现有的RAID设备并且重新格式化原设备
    --noformat    在使用现有的RAID设备时不格式化原有RAID设备
    例&#xff1a;完整创建一个RAID1设备示例&#xff1b;
    part  raid.10  --size&#61;1000  --ondisk&#61;/dev/sdb
    part  raid.11  --size&#61;1000  --ondisk&#61;/dev/sdc
    raid  /data  --level&#61;1  --device&#61;md0  raid.10  raid.11

volgroup  (可选)
    创建一个LVM卷组VG&#xff1b;
    volgroup  vg_name  partition  [options]
    --useexiting  使用现有的VG并且重新格式化
    --noformat    使用现有的VG时不做格式化
    --pesize          设置PE&#xff08;physical extents&#xff09;块大小
    例&#xff1a;
    part pv.11  --size&#61;2000
    volgroup  myvg  pv.11

logvol  (可选)
    创建一个LVM逻辑卷LV&#xff1b;
    logvel  mnt_point  --vgname&#61;vg_name  --size&#61;lv_size  --name&#61;lv_name  [options]
    --useexiting  使用现有的LV并且重新格式化
    --noformat  使用现有的LV时不做格式化
    --fstype&#61;      指定RAID分区类型
    --fsoptions&#61;  设置挂载该文件系统时自定义的一些参数&#xff0c;参数写入fstab文件&#xff1b;
    --byte-pre-inode&#61;    设置该RAID分区上inode大小&#xff1b;
    --precent&#61;    设定LV大小为VG可用空间的比例&#xff1b;
    例&#xff1a;
    part pv.20  --size&#61;5000
    volgroup  myvg  pv.20
    logvol    /data  --vgname&#61;myvg  --size&#61;3000  --name&#61;mydata

安装程序包组和程序包&#xff0c;&#64;程序包组名称&#xff0c;具体名称可以查看安装光盘中repodata目录下的以-comps.xml结尾的文件&#xff0c;其中id标签内的名称即为程序包组名称

%packages

&#64;base

&#64;chinese-support

&#64;core

&#64;desktop-platform

&#64;development

&#64;server-platform

&#64;server-platform-devel

&#64;server-policy

&#64;workstation-policy

&#64;x11

cronie

lftp

ntpdate

screen

tree

vim-enhanced

wget

%end


重新启动 VSFTP 服务并验证 ks.cfg 文件是否可以正常访问&#xff1a;

 

新建一个虚拟机&#xff0c;设置网络为 vmnet1 仅主机模式&#xff0c;停止VMnetDHCP服务:

启动虚拟机&#xff1a;

 


推荐阅读
  • Jupyter Notebook多语言环境搭建指南
    本文详细介绍了如何在Linux环境下为Jupyter Notebook配置Python、Python3、R及Go四种编程语言的环境,包括必要的软件安装和配置步骤。 ... [详细]
  • 函子(Functor)是函数式编程中的一个重要概念,它不仅是一个特殊的容器,还提供了一种优雅的方式来处理值和函数。本文将详细介绍函子的基本概念及其在函数式编程中的应用,包括如何通过函子控制副作用、处理异常以及进行异步操作。 ... [详细]
  • DirectShow Filter 开发指南
    本文总结了 DirectShow Filter 的开发经验,重点介绍了 Source Filter、In-Place Transform Filter 和 Render Filter 的实现方法。通过使用 DirectShow 提供的类,可以简化 Filter 的开发过程。 ... [详细]
  • ipsec 加密流程(二):ipsec初始化操作
    《openswan》专栏系列文章主要是记录openswan源码学习过程中的笔记。Author:叨陪鲤Email:vip_13031075266163.comDate:2020.1 ... [详细]
  • 本文详细介绍了Linux系统中信号量的相关函数,包括sem_init、sem_wait、sem_post和sem_destroy,解释了它们的功能和使用方法,并提供了示例代码。 ... [详细]
  • 在尝试加载支持推送通知的iOS应用程序的Ad Hoc构建时,遇到了‘no valid aps-environment entitlement found for application’的错误提示。本文将探讨此错误的原因及多种可能的解决方案。 ... [详细]
  • 在1995年,Simon Plouffe 发现了一种特殊的求和方法来表示某些常数。两年后,Bailey 和 Borwein 在他们的论文中发表了这一发现,这种方法被命名为 Bailey-Borwein-Plouffe (BBP) 公式。该问题要求计算圆周率 π 的第 n 个十六进制数字。 ... [详细]
  • 本文探讨了如何通过优化 DOM 操作来提升 JavaScript 的性能,包括使用 `createElement` 函数、动画元素、理解重绘事件及处理鼠标滚动事件等关键主题。 ... [详细]
  • 二维码的实现与应用
    本文介绍了二维码的基本概念、分类及其优缺点,并详细描述了如何使用Java编程语言结合第三方库(如ZXing和qrcode.jar)来实现二维码的生成与解析。 ... [详细]
  • 本文介绍了一种方法,通过使用Python的ctypes库来调用C++代码。具体实例为实现一个简单的加法器,并详细说明了从编写C++代码到编译及最终在Python中调用的全过程。 ... [详细]
  • 本文通过分析一个具体的案例,探讨了64位Linux系统对32位应用程序的兼容性问题。案例涉及OpenVPN客户端在64位系统上的异常行为,通过逐步排查和代码测试,最终定位到了与TUN/TAP设备相关的系统调用兼容性问题。 ... [详细]
  • 如题:2017年10月分析:还记得在没有智能手机的年代大概就是12年前吧,手机上都会有WAP浏览器。当时没接触网络原理,也不 ... [详细]
  • 首部|接口类型_OSI 7层模型 & TCP/IP协议首部封装格式解析
    首部|接口类型_OSI 7层模型 & TCP/IP协议首部封装格式解析 ... [详细]
  • 本文介绍了如何将Spring属性占位符与Jersey的@Path和@ApplicationPath注解结合使用,以便在资源路径中动态解析属性值。 ... [详细]
  • Python学习day3网络基础之网络协议篇
    一、互联网协议连接两台计算机之间的Internet实际上就是一系列统一的标准,这些标准称之为互联网协议,互联网的本质就是一系列网络协议。二、为什么要有互联网协议互联网协议就相当于计 ... [详细]
author-avatar
黄于諭春琪
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有