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

相关文章

Java实现检查多个时间段是否有重合

《Java实现检查多个时间段是否有重合》这篇文章主要为大家详细介绍了如何使用Java实现检查多个时间段是否有重合,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录流程概述步骤详解China编程步骤1:定义时间段类步骤2:添加时间段步骤3:检查时间段是否有重合步骤4:输出结果示例代码结语作

使用C++实现链表元素的反转

《使用C++实现链表元素的反转》反转链表是链表操作中一个经典的问题,也是面试中常见的考题,本文将从思路到实现一步步地讲解如何实现链表的反转,帮助初学者理解这一操作,我们将使用C++代码演示具体实现,同... 目录问题定义思路分析代码实现带头节点的链表代码讲解其他实现方式时间和空间复杂度分析总结问题定义给定

Java覆盖第三方jar包中的某一个类的实现方法

《Java覆盖第三方jar包中的某一个类的实现方法》在我们日常的开发中,经常需要使用第三方的jar包,有时候我们会发现第三方的jar包中的某一个类有问题,或者我们需要定制化修改其中的逻辑,那么应该如何... 目录一、需求描述二、示例描述三、操作步骤四、验证结果五、实现原理一、需求描述需求描述如下:需要在

如何使用Java实现请求deepseek

《如何使用Java实现请求deepseek》这篇文章主要为大家详细介绍了如何使用Java实现请求deepseek功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1.deepseek的api创建2.Java实现请求deepseek2.1 pom文件2.2 json转化文件2.2

python使用fastapi实现多语言国际化的操作指南

《python使用fastapi实现多语言国际化的操作指南》本文介绍了使用Python和FastAPI实现多语言国际化的操作指南,包括多语言架构技术栈、翻译管理、前端本地化、语言切换机制以及常见陷阱和... 目录多语言国际化实现指南项目多语言架构技术栈目录结构翻译工作流1. 翻译数据存储2. 翻译生成脚本

Linux流媒体服务器部署流程

《Linux流媒体服务器部署流程》文章详细介绍了流媒体服务器的部署步骤,包括更新系统、安装依赖组件、编译安装Nginx和RTMP模块、配置Nginx和FFmpeg,以及测试流媒体服务器的搭建... 目录流媒体服务器部署部署安装1.更新系统2.安装依赖组件3.解压4.编译安装(添加RTMP和openssl模块

如何通过Python实现一个消息队列

《如何通过Python实现一个消息队列》这篇文章主要为大家详细介绍了如何通过Python实现一个简单的消息队列,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录如何通过 python 实现消息队列如何把 http 请求放在队列中执行1. 使用 queue.Queue 和 reque

Python如何实现PDF隐私信息检测

《Python如何实现PDF隐私信息检测》随着越来越多的个人信息以电子形式存储和传输,确保这些信息的安全至关重要,本文将介绍如何使用Python检测PDF文件中的隐私信息,需要的可以参考下... 目录项目背景技术栈代码解析功能说明运行结php果在当今,数据隐私保护变得尤为重要。随着越来越多的个人信息以电子形

使用 sql-research-assistant进行 SQL 数据库研究的实战指南(代码实现演示)

《使用sql-research-assistant进行SQL数据库研究的实战指南(代码实现演示)》本文介绍了sql-research-assistant工具,该工具基于LangChain框架,集... 目录技术背景介绍核心原理解析代码实现演示安装和配置项目集成LangSmith 配置(可选)启动服务应用场景

使用Python快速实现链接转word文档

《使用Python快速实现链接转word文档》这篇文章主要为大家详细介绍了如何使用Python快速实现链接转word文档功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 演示代码展示from newspaper import Articlefrom docx import