PXE实现流程

2024-03-14 08:18
文章标签 实现 流程 pxe

本文主要是介绍PXE实现流程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!



1、ks配置文件详解:
 # Kickstart file automatically generated by anaconda.
 #version=DEVEL
 install
  指定开始安装
 cdrom
  安装树的位置,也就是软件包所在的位置,如果使用PXE时需要将此处修改为url,并指定url的路径。
 lang en_US.UTF-8
  设置语言。
 keyboard us
  设置键盘类型。
 network --onboot yes --device eth0 --bootproto dhcp
  设置网络相关属性,--device用于指定使用哪块网卡。
 rootpw  --iscrypted $6$OPbx5doxEEk9866q$3unsr/vErh4XRGufGcjIfMC7I6fHGOG29D6FSiAUKWdpVtba9snLbjoGQpD8OPQQbEKJ7gDQ88oNhCZs3BYOz/
  设定root用户的密码,在安装过程中用户设定的密码加密运算后的结果。
  openssl passwd -1 -salt `openssl rand -hex 4`
 firewall --service=ssh
  设置开启防火墙,并且允许ssh服务器通过。
 authconfig --enableshadow --passalgo=sha512
  设置用户认证时使用的文件未shadow文件,而加密算法为sha512的散列算法。
 selinux --enforcing
  设置SELINUX的模式为enforcing。
 timezone --utc Asia/Shanghai
  设置时区为Asia/Shanghai。
 bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet"
  指定bootloader的安装位置为mbr中,bootloader安装到sda磁盘上,append用于指定安装时为启动的Linux的附加参数,crashkernel指定内核崩溃时的动作,rhgb为红帽自定义的安装时的背景界面,quit指定静默安装。
 # The following is the partition information you requested
 # Note that any partitions you deleted are not expressed
 # here so unless you clear all partitions first, this is
 # not guaranteed to work
  在该文件中#号以后有空格的为纯注释信息,而#号后面没有空格的为可启用的选项。
 #clearpart --all --drives=sda
  是否清除所有分区,如果需要安装双系统就应该注释此项,同时为了确保能够删除磁盘上的所有分区信息,建议使用zerombr删除原有磁盘上的数据。
 part /boot --fstype=ext4 --size=500
  指定分区的参数,如:挂载点、文件系统类型、分区大小。
 part pv.008002 --grow --size=1
  指定格式化为物理卷,如果当前系统上要设置多个物理卷,则应该对每个物理卷设置一个唯一的标识,而此处的标识仅在kickstart中使用,如果有多个pv只要保证各个pv的标识不重复即可,--grow用于通知逻辑卷最大可用空间,--size用于指定分区大小。
 #volgroup vg_server --pesize=4096 pv.008002
  指定卷组的属性信息,vg_server即为该卷组的名字,--pesize用于指定单个PE的大小为4096k,并且这个卷组的是有编号为008002的物理卷组成,如果此时由多个物理卷则在后面添加即可。
 #logvol / --fstype=ext4 --name=lv_root --vgname=vg_server --grow --size=1024 --maxsize=51200
  指定逻辑卷的参数,指定挂载点、格式化文件系统的类型、指定的逻辑卷的名称、该逻辑卷所处的卷组的名称、指定空间大小和最大空间的大小。
 #logvol swap --name=lv_swap --vgname=vg_server --grow --size=1984 --maxsize=1984
  指定交换分区的相关属性,显然所有的空间大小不应该超出卷组中所有物理卷的空间之和。
 repo --name="CentOS"  --baseurl=cdrom:sr0 --cost=100
  安装时使用的安装仓库,并通过baseurl指定仓库的路径,和开销,可以有多个。
 %packages
  指定程序安装开始。
 @base
  指定安装base包组,可以使用-software_name的方式在安装包组时不安装指定的软件包,但如果有其他的软件包依赖于这个软件包则这个程序就一定会安装。
 @core
 @debugging
 @basic-desktop
 @desktop-debugging
 @desktop-platform
 @directory-client
 @fonts
 @general-desktop
 @graphical-admin-tools
 @input-methods
 @internet-applications
 @internet-browser
 @java-platform
 @legacy-x
 @network-file-system-client
 @office-suite
 @print-client
 @remote-desktop-clients
 @server-platform
 @server-policy
 @workstation-policy
 @x11
 mtools
 pax
 python-dmidecode
 oddjob
 wodim
 sgpio
 genisoimage
 device-mapper-persistent-data
 abrt-gui
 samba-winbind
 certmonger
 pam_krb5
 krb5-workstation
 libXmu
 %end

====================================================================================
2、启动安装时能够接受的参数

 在启动安装时提供的菜单:
  1、安装或升级现有的Linux操作系统。
  2、使用基本的显卡驱动来安装操作系统,使用640*480的分辨率进行后续安装。
  3、紧急救援模式。
  4、从本地磁盘启动。
  5、内存测试。
  
  注意:在安装菜单的界面下键入Esc键可手动向iso提供参数。

 isolinux 的传递参数(即 boot 提示符下所使用的指令):用于定义安装过程的特性,需要注意的是第一个命令一定为linux(因为在isolinux.cfg文件中定义了名为linux的相关参数,此处使用linux来调用相关的参数)。
  linux:通过 label 的方式启动相对应的 kernel,该选项为默认选项。
  text:使用文本界面的安装方式。
   
  graphical:图形安装界面。
  resolution=:如果要启动图形界面的分辨率,如1024*768。
  
  ip=、netmask=、gateway=、dns=:设置 ip 地址、掩码、网关、dns 地址、网卡名称,通过对网卡的配置实现与网络上服务器的通信。
   如:ip=192.168.1.10 netmask=255.255.255.0 gateway=192.168.1.1 dns=192.168.1.3
  noipv6:不启动 ipv6 的设置。
  
  ks=:指定一个安装过程所使用的 kickstart 文件,该文件可存放于光盘、磁盘或其他多种设备。
   例如:
    ks=cdrom:/directory/ks.cfg
     将 ks 文件存放于光盘当中。
    ks=hd:/device/directory/ks.cfg
    ks=file:/device/directory/ks.cfg
     ks 文件可直接存放于 initrd 文件中,需自行封装 initrd 文件。
    ks=http://server.mydomain.com/directory/ks.cfg
    ks=ftp://server.mydomain.com/directory/ks.cfg
    ks=nfs:server.mydomain.com:/directory/ks.cfg
     通过 nfs 将 ks.cfg 文件输出出来。

   repo=:手动指定安装树的位置。
   与 ks 相同,同时支持 ftp、http、nfs 等多个不同的网络位置  。
   
  asknetwork:提示用户在安装过程中使用网络功能并提示用户可配置网络属性。


====================================================================================
3、光盘中与启动相关的文件
 images:目录,存放启动时所需要的映像文件。
  pxeboot:目录,用于存放启动时所需要的映像文件。
   initrd.img:initial ramdisk,位于pxeboot目录下,网络启动时使用的一个内存虚拟磁盘。
   vmlinuz:Virtual Memory,位于pxeboot目录下,用于网络引导启动的可引导的压缩内核文件。
   TRANS.TBL:位于pxeboot目录下,是ISO9660文件系统上的一个文件,它被用于提供比ISO9660标准约定的基本文件名更加灵活的文件名。
  efiboot.img:位于images目录下,efi格式的引导镜像。
  efidisk.img:位于images目录下,efi格式的磁盘映像文件。
  install.img:位于images目录下,内核映像文件。
 isolinux:iso格式的linux,存放启动安装界面时所用到的内核、应用程序、图片等文件。
  initrd.img:光盘启动时所需要的内存虚拟磁盘文件。
  vmlinuz:光盘启动时所需要的可引导的压缩内核文件,功能类似于BootLoader,事实上是一个改装后的grub,由这个内核自动启动一个与这个内核相匹配的initrd文件,并启动一个提供安装界面的应用程序,这个应用程序所需要的文件都位于这个isolinux目录下。
  boot.msg:提供安装界面时的菜单。
  splash.jpg:安装界面时的背景图片,格式为640*480的jpg图片。
  isolinux.bin:提供菜单中的各个实际的功能参数。
  isolinux.cfg:提供上面软件的实际的配置,也就是菜单中各个选项的实际的功能。
  vesamenu.c32:启动菜单外观绘制拓展工具,将grub.conf、splash.jpg、boot.msg文件整合并提供给用户。
  memtest:内存测试工具。
  grub.conf:安装光盘所提供的grub的配置文件,该文件中的内容为菜单中的项目,而实际上这个菜单中的各个项目即为传递给内核的参数。


====================================================================================
4、pxe实现流程

 PXE 实现的前提:
  Client:
   1、网卡支持网络引导(支持自身通过网络获取 IP 并能够将获取的网络信息配置到网卡上);
   2、通过 DHCP 服务器查找 bootloader、vmlinuz、ramdisk 等启动安装过程所依赖的文件的网络位置;
   3、客户机通过 DHCP 所提供的服务器所提供的 PXE 的配置文件开始尝试获取 Bootloader、vmlinuz、ramdisk...(在安装光盘的 image 目录下有名为 pxeboot 的目录,该目录下有专用于提供网络启动的内核与镜像文件);
   4、PXE 启动所需的文件:
    安装光盘的 pxeboot 目录下的 vmlinuz、initrd.img;
    安装光盘的 isolinux 目录下的 boot.msg、vesmenu.c32、splash.jpg、isolinux.cfg(该文件必须存放于 tftp 中的专用目录中,其目录名为 pxelinux.cfg,而该文件需重命名为 default);
    安装软件 syslinux 提供的 pxelinux.0(相当于 Bootloader);
   5、需要在 DHCP 服务器中指定 tftp 服务器的地址和文件名;
   6、在服务器中提供安装软件所需要的安装树;
   
 PXE依赖的文件:
  1、安装光盘下images/pxeboot目录下的vmlinuz和initrd.img文件。
   vmlinuz:实现内核功能。
  2、安装光盘下的isolinux目录下的boot.msg、vesamenu.c32、splash.jpg文件。
   boot.msg:提供选择安装、升级或救援的菜单。
   splash.jpg:提供背景图片。
  3、由syslinux软件包提供的/usr/share/syslinux/pxelinux.0文件。
   pxelinux.0:当客户端第一次启动的时候除了从DHCP获取地址外还需要DHCP告知下一台服务器的位置,而客户端第一次向文件服务器获取资源时首先就需要取得pxelinux.0这个文件。
  4、安装光盘下的isolinux/isolinux.cfg文件,作为pxelinux.0的配置文件。
   需要在tftp目录下创建一个名为pxelinux.cfg的目录,并将isolinux.cfg文件复制到该目录下并重命名为default。

 PXE的实现过程:
  1、配置DHCP,通过DHCP指定TFTP的位置。
  2、TFTP中存放用于启动系统的镜像文件,在这些文件中需要修改pxelinux.cfg/default文件的默认参数,需要给append的后面传递ks的位置。
  3、配置kickstart的配置文件,并通过web的方式传递给客户端,同时需要注意在install之下需要使用url的方式指定安装位置,并且使用zerombr和text指定强制删除磁盘上的分区信息。
  4、通过httpd传递软件包的位置,并将这个位置写入到kickstart的配置文件的url以及repo的位置。

 配置 PXE 安装的详细过程:
 
  1、配置DHCP服务器
   # yum -y install dhcp
   # vim /etc/dhcp/dhcpd.conf
   自定义subnet:
   subnet 192.168.2.0 255.255.255.0 {
    range 192.168.2.100 192.168.2.150;
    option domain-name-servers ks.example.com(设置域名)
    option routers 192.168.2.1;
    next-server 192.168.2.51;
    filename "pxelinux.0";
   }
    注意:切记注释默认配置文件中的两个domain-name的配置。

   # service dhcpd restart
   # tail -f /var/log/messages

  2、配置tftp-server
   # yum -y install xinetd tftp-server tftp
   # chkconfig xinetd on
   # chkconfig tftp on
   # service xinetd start
   # ss -tunlp | grep xinetd

  3、准备安装树
   # mkdir /var/www/html/centos6
   # mount --bind /media/cdrom /var/www/html/centos6
   # service httpd start

  4、准备tftpboot下的文件
 # yum -y install syslinux
 # cp /media/cdrom/images/pxeboot/{vmlinuz,initrd.img}  /var/lib/tftpboot/
      # cp /media/cdrom/isolinux/{boot.msg,vesamenu.c32,splash.jpg}  /var/lib/tftpboot/
 # cp /usr/share/syslinux/pxelinux.0  /var/lib/tftpboot/
 # mkdir /var/lib/tftpboot/pxelinux.cfg
 # cp /media/cdrom/isolinux/isolinux.cfg  /var/lib/tftpboot/pxelinux.cfg/default

  5、第一次测试
   不在/var/lib/tftpboot/pxelinux.cfg/default文件中添加ks文件的路径时测试本地机器能否通过网络启动,如果能够通过网络启动则说明dhcp和tftp的测试通过。

  6、提供kickstart文件
   注意:url及repo后的路径要修改为可用安装树的路径;
   编辑好kickstart文件后保存至/var/www/html目录下;这里假设为ks.cfg

  7、配置引导程序能自动加载此kickstart文件
   编辑/var/lib/tftpboot/pxelinux.cfg/default
   在label为linux项的append一行后附加:
    ks=http://HTTP_SERVER_IP/ks.cfg

  8、第二次测试

这篇关于PXE实现流程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/807770

相关文章

使用Sentinel自定义返回和实现区分来源方式

《使用Sentinel自定义返回和实现区分来源方式》:本文主要介绍使用Sentinel自定义返回和实现区分来源方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Sentinel自定义返回和实现区分来源1. 自定义错误返回2. 实现区分来源总结Sentinel自定

Java实现时间与字符串互相转换详解

《Java实现时间与字符串互相转换详解》这篇文章主要为大家详细介绍了Java中实现时间与字符串互相转换的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、日期格式化为字符串(一)使用预定义格式(二)自定义格式二、字符串解析为日期(一)解析ISO格式字符串(二)解析自定义

opencv图像处理之指纹验证的实现

《opencv图像处理之指纹验证的实现》本文主要介绍了opencv图像处理之指纹验证的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录一、简介二、具体案例实现1. 图像显示函数2. 指纹验证函数3. 主函数4、运行结果三、总结一、

Springboot处理跨域的实现方式(附Demo)

《Springboot处理跨域的实现方式(附Demo)》:本文主要介绍Springboot处理跨域的实现方式(附Demo),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录Springboot处理跨域的方式1. 基本知识2. @CrossOrigin3. 全局跨域设置4.

Spring Boot 3.4.3 基于 Spring WebFlux 实现 SSE 功能(代码示例)

《SpringBoot3.4.3基于SpringWebFlux实现SSE功能(代码示例)》SpringBoot3.4.3结合SpringWebFlux实现SSE功能,为实时数据推送提供... 目录1. SSE 简介1.1 什么是 SSE?1.2 SSE 的优点1.3 适用场景2. Spring WebFlu

基于SpringBoot实现文件秒传功能

《基于SpringBoot实现文件秒传功能》在开发Web应用时,文件上传是一个常见需求,然而,当用户需要上传大文件或相同文件多次时,会造成带宽浪费和服务器存储冗余,此时可以使用文件秒传技术通过识别重复... 目录前言文件秒传原理代码实现1. 创建项目基础结构2. 创建上传存储代码3. 创建Result类4.

SpringBoot日志配置SLF4J和Logback的方法实现

《SpringBoot日志配置SLF4J和Logback的方法实现》日志记录是不可或缺的一部分,本文主要介绍了SpringBoot日志配置SLF4J和Logback的方法实现,文中通过示例代码介绍的非... 目录一、前言二、案例一:初识日志三、案例二:使用Lombok输出日志四、案例三:配置Logback一

Python如何使用__slots__实现节省内存和性能优化

《Python如何使用__slots__实现节省内存和性能优化》你有想过,一个小小的__slots__能让你的Python类内存消耗直接减半吗,没错,今天咱们要聊的就是这个让人眼前一亮的技巧,感兴趣的... 目录背景:内存吃得满满的类__slots__:你的内存管理小助手举个大概的例子:看看效果如何?1.

Python+PyQt5实现多屏幕协同播放功能

《Python+PyQt5实现多屏幕协同播放功能》在现代会议展示、数字广告、展览展示等场景中,多屏幕协同播放已成为刚需,下面我们就来看看如何利用Python和PyQt5开发一套功能强大的跨屏播控系统吧... 目录一、项目概述:突破传统播放限制二、核心技术解析2.1 多屏管理机制2.2 播放引擎设计2.3 专

Python实现无痛修改第三方库源码的方法详解

《Python实现无痛修改第三方库源码的方法详解》很多时候,我们下载的第三方库是不会有需求不满足的情况,但也有极少的情况,第三方库没有兼顾到需求,本文将介绍几个修改源码的操作,大家可以根据需求进行选择... 目录需求不符合模拟示例 1. 修改源文件2. 继承修改3. 猴子补丁4. 追踪局部变量需求不符合很