(一)原理

  简单说来,PXE服务器就是DHCP服务器+TFTP服务器。网络启动过程大概是这样的(可能并不严谨):客户端发送动态获得IP地址的广播包到网络上,DHCP服务器在收到该广播包后,发送给客户端分配IP地址的回应包,客户端收到回应包后设置自己的IP地址,然后从DHCP服务器获得启动服务器的IP地址(DHCP服务器066选项,这就是TFTP服务器的IP地址)及启动文件名(DHCP服务器067选项,这里的启动文件名就是pxelinux.0或者支持pxe的grub4dos的grldr,当然,也可以是startrom.n12或者使用3com Image Edit创建的pxe启动菜单文件,总之,它应该是一种由pxe启动规范规定的固定格式的可执行文件),然后客户端到联系启动服务器(TFTP服务器)获得启动文件并执行,这样基本上就完成了pxe启动过程。

 在Unix或者Linux系统下,DHCP服务器和TFTP服务器一般都是分开设置的,两台服务器甚至可以在两台不同的机器上,其实Windows下的设置也是一样的,但在Windows下,我们可以通过使用HaneWin DHCP服务器软件或TFTPD32一个软件就搞定(我个人推荐使用HaneWin DHCP服务器软件,但TFTPD32设置起来更简单一些,就是效率有些低),详细的设置方法请自己摸索,你只要知道,在设置PXE服务器时,要设置好DHCP和TFTP两个服务器,其中DHCP服务器要设置启动服务器名(066选项)和启动文件名(067选项)。

 (本节原理来自链接:http://blog.chinaunix.net/u3/94683/showart_1926188.html)

(二)实验环境
  
      局域网环境:一个IBM刀片机,建设VMware Infrastructure,虚拟一个局域网,里面新建多台虚拟机
      服务器:以其中一台172.16.2.96作服务器(dhcp和tftp服务都在它上面), 操作系统是CentOS 5.3

(三)过程

大致流程:

    a. 客户端通过网卡的 PXE 功能,从 DHCP 服务器获取 IP 地址;

    b. DHCP 服务器将 "filename "pxelinux.0";" 参数中指定的文件(pxelinux.0)推送给客户端;

    c. 客户端执行 pxelinux.0;

    d. pxelinux.0 程序读取 tftp 服务器上的配置文件(通常是 '''/tftpboot/pxelinux.cfg/default''',
         但是也可以根据客户端机器的MAC 地址单独指定);

    e. 客户端执行配置文件中指定的动作。
        (流程转自网络:http://code.google.com/p/redhatsolution/wiki/RHEL_PXE_Installation_Server)
       下面详细过程:
    1. DHCP服务器

   a.先检查系统有没有带DHCP服务器,
       #service dhcpd status, 如果显示 "unrecognized service" 话就要安装,否则转到c.
        
       b. 安装dhcp
              如果有外网,直接:
          #yum install dhcpd
              没有外网的话,可以去网上找个rpm包来手动安装(附录有推荐网站)

       我下了个dhcp-3.0.5-18.el5.rpm, 安装命令:
              #rpm -ivh dhcp-3.0.5-18.el5.rpm
           c. 配置

   配置服务开机自动运行级别:
          # chkconfig --level 345 dhcpd on

      配置/etc/dhcpd.conf,我的该文件内容如下,重要的地方有注释:
    ddns-update-style interim;#最好加上这头两句,我没加,老报错 ignore client-updates; allow booting; #可有可无吧 allow bootp; next-server 172.16.2.96; #你的tftp服务器IP,我这里是同一台机子 subnet 172.16.2.0 netmask 255.255.255.0 { default-lease-time 600; max-lease-time 7200; range 172.16.2.50 172.16.2.70; #option routers 172.16.2.254; #dhcp所在局域网网关,如果你的dhcp与tftp不在同一网段中时,这是必须的 filename "pxelinux/pxelinux.0"; #pxe引导所必须文件, 路径是相对于tftp服务器根目录,详见见3.syslinux }  
    2.  tftp服务器

   a. 先检查系统是否安装tftp server.
            # rpm -qa | grep xinetd, 
            # rpm -qa | grep tftp,  如果没有某个包没有,则转到b安装之,否则转到c.
 
           b. 安装xinetd(运行tftp所必须的), tftp-server,建议同时安装tftp客户端(方便调试tftp服务器)
            如果有外网,直接:
            #yum install xinetd tftp-server tftp
            没有外网的话,可以去网上找这三个rpm包来手动安装(附录有推荐网站)

    找到后,按顺序用rpm -ivh安装。

   c. 配置

   配置服务开机自动运行级别:

#chkconfig --level 345 xinetd on
          #chkconfig --level 345 tftp on

    修改文件: /etc/xinetd.d/tftp,我的文件内容如下:

   service tftp { socket_type = dgram protocol = udp wait = yes user = root server = /usr/sbin/in.tftpd server_args = -v -m /tftpboot/rules -s /tftpboot disable = no per_source = 11 cps = 100 2 flags = IPv4 }  
            其中:
              -v 指定把日志输出到/var/log/messages中,
              -m  /tftpboot/rules指定一个映射规则文件,把所有的tftp请求文件名按规则转换;

           当tftp服务器为linux,无盘站引导windows时,由于大小写敏感问题,需要转换。
              -s  指定tftp服务器的根目录,上面pxelinux/pxelinux.0的相对路径就是相对/tftpboot而言

   3. syslinux( 这个东西有pxe过程所要用到的引导文件,类似于grub的功能)

   a. 可以先检查有没有装这个东西
            # rpm -qa | grep syslinux,如果没有转b,否则直接到c.

   b. 安装同上面,或者yum install syslinux,或者下载rpm 包手动安装

   c. 配置:

    主要有三步:

        其一、把pxelinux.0复制到/tftpboot的合适位置

        其二、在/tftpboot下新建一个pxelinux.cfg目录

        其三、在上面新建的pxelinux.cfg下面新建一个名为default的空文件(下一篇介绍其内容)

      我的/tftpboot下目录组织如下:

       /tftpboot/ /tftpboot/pxelinux/ /tftpboot/pxelinux/pxelinux.0 /tftpboot/pxelinux/pxelinux.cfg/ /tftpboot/pxelinux/pxelinux.cfg/default 
      
       这里/tftpboot/下的目录可以自行组织,但pxeliux.0与pxelinux.cfg应在同一目录下

   4.  启动。

      # service dhcpd start # service xinetd start

(四)常见问题

   1. tftp server问题

a.配置好tftp-server后,最好再装个tftp客户端(yum install tftp),分别从本地,别的机子上来
                 测试tftp-server是否是通的。
              b. 如果是手动用rpm包安装的,则要注意这两个包是否是兼容的,有的xinetd不支持tftp中的某些选项
                 同理,也要注意tftp-server的版本是否支持remap等功能
              c. 使用好日志,需要-v选项,日志在/var/log/messages里

d. 如果从外面连不上本机的tftp服务,应该检查防火墙(一般情况开放upd 69端口,除非你另行设定tftp服务端口)

2. dhcp 问题

a. dhcpd.conf中的filename参数,用相对路径(相对于/tftpboot),有的参考资料里是绝对路径,这取决于tftp版本问题,最新的版本应该是相对路径.
(五)附录
    1. rpm包下载网站:
        http://rpm.pbone.net/
    2. 关于syslinux的配置有很多内容,感兴趣的话,可以参考以下网址:
        http://syslinux.zytor.com/wiki/index.php/PXELINUX

PXE系列之一:PXE环境搭建相关推荐

  1. win10编译OpenCV4Android系列1-Android编译环境搭建

    win10编译OpenCV4Android系列1-Android编译环境搭建 前言 一.配置JDK 1.下载JDK 2.安装JDK 二.配置AndroidSDKTools 1.下载AndroidSDK ...

  2. 【Hexo搭建GitPage博客系列】02.环境搭建

    转载声明:商业转载请联系作者获得授权,非商业转载请注明出处.原文来自 © 呆萌钟[Hexo搭建GitPage博客系列]02.环境搭建 前言 Hexo搭建博客需要基于Node.js环境,而且依赖于Git ...

  3. 【瑞萨RA4系列】开发环境搭建和点灯指南

    [瑞萨RA4系列开发板体验]开发环境搭建和新手点灯指南 文章目录 [瑞萨RA4系列开发板体验]开发环境搭建和新手点灯指南 一.简单开箱 二.芯片简介 三.开发环境搭建 2.1 安装FSP(RASC) ...

  4. 王姨劝我学HarmonyOS鸿蒙2.0系列教程之一环境搭建跑起来模拟器!

    原创PDF |<Android 深入系统完全讲解>免费开源,可能价值百万! 学习一门新的技术前,我一般会翻看官方文档,源码,以及网上的一些总结,好形成一个初步印象,让开发的时候心中有谱. ...

  5. 【s32k】s32k14x系列(1)——开发环境搭建

    文章目录 s32k1xx环境搭建 1. S32K系列MCU开发环境 2. 软件安装包及SDK获取 3. 软件安装 s32k1xx环境搭建 1. S32K系列MCU开发环境 主要有以下三种环境供我们选择 ...

  6. 涂鸦Zigbee SDK开发系列教程——2.环境搭建

    本章节主要介绍如何搭建涂鸦 Zigbee ZSU 模组 SDK 开发环境. IAR安装 前往 IAR 官网下载 IAR Embedded Workbench IDE(IAR for Arm),下载安装 ...

  7. Xavier NX载板RTSO-6002/E 系列烧录及环境搭建

    http://www.realtimes.cn/cn/product/product-21-889.html realtimes2022 官方资料 使用版本:R32.5.1_for TX2_Xavie ...

  8. stm32 micropython环境搭_MicroPython 玩转硬件系列1:环境搭建

    1.引言 最近几年Python语言非常火,听说小学生都开始学Python了,让我这个中年人感到一丝丝压力.为了以后最起码能辅导辅导孩子,咱也得学学啊.学Python干什么用呢?我这本身是做嵌入式的,听 ...

  9. 学python电脑硬件_Micropython 玩转硬件系列1:环境搭建

    1. 引言 最近几年Python语言非常火,听说小学生都开始学Python了,让我这个中年人感到一丝丝压力.为了以后最起码能辅导辅导孩子,咱也得学学啊.学Python干什么用呢?我这本身是做嵌入式的, ...

  10. AARCH64 开发系列1: AARCH64 环境搭建

    首发极术社区 作者:Zhiyuan zhu 如对Arm相关技术感兴趣,欢迎私信aijishu20加入技术微信群. 概述 近年来 Arm 服务器的发展势头很猛,但大部分人的个人电脑还是 x86 环境,开 ...

最新文章

  1. R语言入门——ggplot2
  2. VS调用matlab
  3. cbc cryptojs 前后端_前端CryptoJS AES/DES加解密与后端PHP AES/DES加解密
  4. mysql innodb 数据恢复
  5. OpenCV--SIFT算法检测特征点
  6. vue04-components
  7. 递归的使用不当 导致 压缩文件不能压缩二级目录
  8. js实现音乐列表循环播放或单曲循环
  9. 创新实践部第一次培训---算法入门
  10. 微信开发工具报错:UNKNOWN ERROR:tunneling socket could not be established,cause=getaddrinfo ENOTFOUND socks
  11. 项目之动态图片的制作
  12. C++中关于switch的一些理解
  13. 手机老是显示微信连接不到服务器,手机微信无法连接到服务器提示1237怎么办...
  14. Matlab_simulink绘制伯德图从选型到出图
  15. 张勋说:棒磨机钢棒技术标准应怎样确定(图文)
  16. cj20n sap 报错未知列的名称_sap ps模块全称 SAP,PS模块配置和操作手册
  17. 呼吸机缺关键零件,意大利小哥用3D打印救命!面临起诉风险,网友:意版“药神”?
  18. 批处理 一键登录校园网
  19. swing 文本框双击Ctrl,触发删除全部并黏贴
  20. MacOS 装机应用推荐

热门文章

  1. SendMessgae
  2. Sql语句中的DDL、DML、DCL的介绍
  3. 百度短网址 php,调用百度短网址API生成短网址
  4. mysql java驱动源码Connector/J编译
  5. python汉明距离_simhash+汉明距离计算文本相似度
  6. 电路中的开漏输出与推挽输出
  7. python webkit内核_360浏览器使用meta标签强制使用指定webkit内核 - meta强制用极速模式...
  8. c语言输出十六进制数乱码,输出乱码
  9. StringBuffer的常用方法
  10. 解决crx文件扩展程序chrome下载自动删除的问题