http://ce.sysu.edu.cn/hope/Item.aspx?id=53296 PXE远程安装系统
http://www.wenzk.net/viewthread-834  通过PXE安装WINDOWS XP配置手记(Linux) 作者: 温占考 (Zhankao WEN)

实验环境:vmware虚拟机,centos5.8
总结:pxe安装涉及下述文件和地址
/etc/dhcpd.conf
dhcp配置文件,指定分配地址空间,指定固定ip,指定tftp服务器地址,开启pxe
/etc/xinetd.d/tftp
tftp服务配置文件
/tftpboot/
启动安装程序所在位置,含vmlinuz,initrd.img,boot.msg,general.msg,options.msg,param.msg,rescue.msg等文件
/tftpboot/pxelinux.cfg/default
pxe启动安装配置文件,指定启动的安装程序,含自动应答文件位置
/mnt/centos5.8_ks.cfg
安装程序自动应答文件,指定安装介质
/etc/exports
nfs共享配置,把安装介质共享出去。
/mnt/install_centos5.8
安装介质



第一部分:DHCP服务器
将支持PXE的网络接口卡(NIC)的客户端的BIOS设置成为网络启动,通过PXE BootROM(自启动芯片)会以UDP(简单用户数据报协议)发送一个广播请求,向网络中的DHCP服务器索取IP地址等信息。
DHCP服务器收到客户端的请求,验证是否来至合法的PXE Client的请求,验证通过它将给客户端一个“提供”响应,这个“提供”响应中包含了为客户端分配的IP地址、pxelinux启动程序(TFTP)位置,以及配置文件所在位置
[root@install ~]# yum install dhcp

虚拟机有两块网卡,让dhcp服务只在eth1上工作
[root@install ~]# vi /etc/sysconfig/dhcpd
# Command line options here
DHCPDARGS=eth1

[root@install ~]# vi /etc/dhcpd.conf

#
# DHCP Server Configuration file.
#   see /usr/share/doc/dhcp*/dhcpd.conf.sample
option space PXE;
option PXE.mtftp-ip               code 1 = ip-address;
option PXE.mtftp-cport            code 2 = unsigned integer 16;
option PXE.mtftp-sport            code 3 = unsigned integer 16;
option PXE.mtftp-tmout            code 4 = unsigned integer 8;
option PXE.mtftp-delay            code 5 = unsigned integer 8;
option PXE.discovery-control      code 6 = unsigned integer 8;
option PXE.discovery-mcast-addr   code 7 = ip-address;

ddns-update-style interim;
ignore client-updates;

subnet 192.168.66.0 netmask 255.255.255.0 {

# --- default gateway
        #option routers                 192.168.0.1;
        option subnet-mask              255.255.255.0;
        option broadcast-address        192.168.66.255;

        #option nis-domain              "domain.org";
        #option domain-name             "domain.org";
        #option domain-name-servers     192.168.1.1;

        option time-offset              -18000; # Eastern Standard Time
#       option ntp-servers              192.168.1.1;
#       option netbios-name-servers     192.168.1.1;
# --- Selects point-to-point node (default is hybrid). Don't change this unless
# -- you understand Netbios very well
#       option netbios-node-type 2;

        range dynamic-bootp 192.168.66.128 192.168.66.254;
        default-lease-time 21600;
        max-lease-time 43200;

        # we want the nameserver to appear at a fixed address
        #host ns {
                #next-server marvin.redhat.com;
                #hardware ethernet 12:34:56:78:AB:CD;
                #fixed-address 207.175.42.254;
        #}
}

class "pxeclients" {
match if substring (option vendor-class-identifier, 0, 9) = "PXEClient";
option vendor-class-identifier "PXEClient";
vendor-option-space PXE;
option PXE.mtftp-ip 0.0.0.0;
filename "pxelinux.0";      #pxelinux boot file
next-server 192.168.66.1;   #TFTP Server IP
}

[root@install ~]# service dhcpd start
[root@install ~]# chkconfig dhcpd --level 35 on

第二部分:TFTP服务器及PXE启动文件
客户端收到服务器的“回应”后,会回应一个帧,以请求传送启动所需文件。这些启动文件linux包括:(lpxelinux.0、pxelinux.cfg/default、vmlinuz、initrd.img);windows包括(lpxelinux.0、pxelinux.cfg/default、wi2k3.sif、w2k3l、startrom.0、ntdetect.2k3)等文件。
当服务器收到客户端的请求后,他们之间之后将有更多的信息在客户端与服务器之间作应答, 用以决定启动参数。BootROM 由 TFTP 通讯协议从Boot Server下载启动安装程序所必须的文件(pxelinux.0、pxelinux.cfg/default)。default文件下载完成后,会根据该文件中定义的引导顺序,启动不同操作系统安装程序的引导内核。


[root@install ~]# yum install tftp-server tftp
[root@install ~]# vi /etc/xinetd.d/tftp 
service tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -m /tftpboot/rules -s /tftpboot
disable = no
per_source = 11
cps = 100 2
flags = IPv4
}
增加了/tftpboot/rules文件,这个文件主要作用是,把请求tftp的所有路径和文件名改成小写。
[root@install ~]# vi /tftpboot/rules
ri ^[a-z]: # Remove "drive letter"
rg \\ / # Convert backslashes to slashes
rg \# @ # Convert hash marks to @ signs
rg /../ /..no../ # Convert /../ to /..no../
rg A a
rg B b
rg C c
rg D d
rg E e
rg F f
rg G g
rg H h
rg I i
rg J j
rg K k
rg L l
rg M m
rg N n
rg O o
rg P p
rg Q q
rg R r
rg S s
rg T t
rg U u
rg V v
rg W w
rg X x
rg Y y
rg Z z
r ^/(.*) \1

[root@install ~]# cp /usr/lib/syslinux/pxelinux.0 /tftpboot/
从安装盘上拷贝所需文件
[root@install ~]# cp /media/dvd/p_w_picpaths/pxeboot/{vmlinuz,initrd.img} /tftpboot/
[root@install isolinux]# cp /media/dvd/isolinux/{boot.msg,general.msg,options.msg,param.msg,rescue.msg} /tftpboot/
接下来创建/tftpboot/pxelinux.cfg/ 目录,该目录用于存放客户端的配置文件。
[root@install ~]# mkdir /tftpboot/pxelinux.cfg
[root@install isolinux]# cp /media/dvd/isolinux/isolinux.cfg /tftpboot/pxelinux.cfg/default
稍微修改,此处不知道为什么,只能修改linux标签,添加centos5.8标签总是不成功。
[root@install ~]# vi /tftpboot/pxelinux.cfg/default 
default linux
prompt 1
timeout 10 #缩短等待时间
display boot.msg
F1 boot.msg
F2 options.msg
F3 general.msg
F4 param.msg
F5 rescue.msg
label linux
  kernel vmlinuz
  #append initrd=initrd.img 
  append ks=nfs:192.168.66.1:/mnt/centos5.8_ks.cfg initrd=initrd.img
label text
  kernel vmlinuz
  append initrd=initrd.img text 
label ks
  kernel vmlinuz
  append ks initrd=initrd.img
label local
  localboot 1
label memtest86
  kernel memtest
  append -
label centOS5.8
  kernel vmlinuz
  append ks=nfs:192.168.66.1:/mnt/centos5.8_ks.cfg initrd=initrd.img
  #append initrd=initrd.img 
label win2k3
  kernel startrom.0
  
第三部分:安装介质服务器及自动应答文件
客户端通过pxelinux.cfg/default文件成功的引导Linux安装内核后,安装程序首先必须确定你通过什么安装介质来安装linux,如果是通过网络安装(NFS, FTP, HTTP,SMB),则会在这个时候初始化网络,并定位安装源位置。这是由于PXE获取的是安装用的内核以及安装程序等,而安装程序要获取的是安装系统所需的二进制包以及配置文件。由于它们需要的内容不同造成PXE模块和安装程序是相对独立的,PXE的网络配置并不能传递给安装程序。从而进行两次获取IP地址过程。
如果需要无人职守的安装方法,接着会读取该文件中指定的自动应答文件ks.cfg所在位置,根据该位置请求下载该文件。将ks.cfg文件下载回来后,通过该文件找到OS Server,并按照该文件的配置请求下载安装过程需要的软件包。
OS Server和客户端建立连接后,将开始传输软件包,客户端将开始安装操作系统。安装完成后,将提示重新引导计算机。这个时候注意,在重新引导的过程中一定要将BIOS修改回从硬盘启动,不然的话又会重复的自动安装操作系统。

安装介质存储在服务器上的一个目录中,可以使用各种网络协议访问它,比如 HTTP,FTP,和NFS。也就是我们前面提到的OS Server。这里使用 NFS 服务来提供安装介质,只需要将系统光盘内容拷贝放到共享目录下即可。

[root@install ~]#yum install nfs-utils
创建共享目录,并将光盘内容拷贝到共享目录中:
[root@install ~]# mkdir /mnt/install_centos5.8
[root@install ~]# cp /media/dvd/* /mnt/install_centos5.8
由于是虚拟机,我直接挂载到目录下了:
[root@install ~]# mount /dev/cdrom /mnt/install_centos5.8
利用nfs共享出去:
[root@install ~]# vi /etc/exports
/mnt/ *(ro,sync)
/mnt/install_centos5.8 *(ro,sync)

[root@install ~]# service portmap restart
[root@install ~]# service nfs start
[root@install ~]# showmount -e 192.168.66.1
Export list for localhost:
/mnt/ *
/mnt/install_centos5.8 *
[root@install ~]# chkconfig --level 35 nfs on

 通常,我们在安装操作系统的过程需要大量的人机交互过程,减少交互过程,为了提高安装效率Red Hat Linux 开始支持一个称为 kickstart 的功能。使用这种方法,只需事先定义好一个Kickstart自动应答配置文件(通常存放在安装服务器上),并让安装程序知道该配置文件的位置,在安装过程中安装程序就可以自己从该文件中读取安装配置,这样就避免了繁琐的人机交互,实现无人值守的自动化安装。
我们可以通过多种方法生成Kickstart配置文件,无论使用哪种方法无非就是创建一个应答文件,当你安装好一台Red Hat Linux机器,Red Hat Linux 安装程序都会创建一个 kickstart 配置文件,记录你的真实安装配置。如果你希望实现和某系统类似的安装,可以基于该系统的kickstart配置文件来生成你自己的kickstart配置文件。 该文件位于/root/anaconda-ks.cfg。
这里我直接使用该文件,拷贝本文件到/mnt/下,并对文件内容稍作修改。这个路径可以修改,当用到无人安装的时候可以通过/tftpboot/pxelinux.cfg/default里面的修改。
[root@install ~]# mv /root/anaconda-ks.cfg /mnt/centos5.8_ks.cfg
[root@install ~]# vi /mnt/centos5.8_ks.cfg 
# Kickstart file automatically generated by anaconda.
install
nfs --server=192.168.66.1 --dir=/mnt/install_centos5.8
注意,该文件必须有可读属性
[root@install mnt]# chmod a+r centos5.8_ks.cfg

关闭iptables
[root@install ~]# chkconfig iptables --level 3 off
关闭selinux
[root@install ~]# vi /etc/sysconfig/selinux
http://ce.sysu.edu.cn/hope/Item.aspx?id=53296 PXE远程安装系统
http://www.wenzk.net/viewthread-834 通过PXE安装WINDOWS XP配置手记(Linux) 作者: 温占考 (Zhankao WEN)

总结:pxe安装涉及下述文件和地址
/etc/dhcpd.conf
dhcp配置文件,指定分配地址空间,指定固定ip,指定tftp服务器地址,开启pxe
/etc/xinetd.d/tftp
tftp服务配置文件
/tftpboot/
启动安装程序所在位置,含vmlinuz,initrd.img,boot.msg,general.msg,options.msg,param.msg,rescue.msg等文件
/tftpboot/pxelinux.cfg/default
pxe启动安装配置文件,指定启动的安装程序,含自动应答文件位置
/mnt/centos5.8_ks.cfg
安装程序自动应答文件,指定安装介质
/etc/exports
nfs共享配置,把安装介质共享出去。
/mnt/install_centos5.8
安装介质



第一部分:DHCP服务器
将支持PXE的网络接口卡(NIC)的客户端的BIOS设置成为网络启动,通过PXE BootROM(自启动芯片)会以UDP(简单用户数据报协议)发送一个广播请求,向网络中的DHCP服务器索取IP地址等信息。
DHCP服务器收到客户端的请求,验证是否来至合法的PXE Client的请求,验证通过它将给客户端一个“提供”响应,这个“提供”响应中包含了为客户端分配的IP地址、pxelinux启动程序(TFTP)位置,以及配置文件所在位置
[root@install ~]# yum install dhcp

虚拟机有两块网卡,让dhcp服务只在eth1上工作
[root@install ~]# vi /etc/sysconfig/dhcpd
# Command line options here
DHCPDARGS=eth1

[root@install ~]# vi /etc/dhcpd.conf

#
# DHCP Server Configuration file.
# see /usr/share/doc/dhcp*/dhcpd.conf.sample
option space PXE;
option PXE.mtftp-ip code 1 = ip-address;
option PXE.mtftp-cport code 2 = unsigned integer 16;
option PXE.mtftp-sport code 3 = unsigned integer 16;
option PXE.mtftp-tmout code 4 = unsigned integer 8;
option PXE.mtftp-delay code 5 = unsigned integer 8;
option PXE.discovery-control code 6 = unsigned integer 8;
option PXE.discovery-mcast-addr code 7 = ip-address;

ddns-update-style interim;
ignore client-updates;

subnet 192.168.66.0 netmask 255.255.255.0 {

# --- default gateway
  #option routers 192.168.0.1;
  option subnet-mask 255.255.255.0;
  option broadcast-address 192.168.66.255;

  #option nis-domain "domain.org";
  #option domain-name "domain.org";
  #option domain-name-servers 192.168.1.1;

  option time-offset -18000; # Eastern Standard Time
# option ntp-servers 192.168.1.1;
# option netbios-name-servers 192.168.1.1;
# --- Selects point-to-point node (default is hybrid). Don't change this unless
# -- you understand Netbios very well
# option netbios-node-type 2;

  range dynamic-bootp 192.168.66.128 192.168.66.254;
  default-lease-time 21600;
  max-lease-time 43200;

  # we want the nameserver to appear at a fixed address
  #host ns {
  #next-server marvin.redhat.com;
  #hardware ethernet 12:34:56:78:AB:CD;
  #fixed-address 207.175.42.254;
  #}
}

class "pxeclients" {
match if substring (option vendor-class-identifier, 0, 9) = "PXEClient";
option vendor-class-identifier "PXEClient";
vendor-option-space PXE;
option PXE.mtftp-ip 0.0.0.0;
filename "pxelinux.0"; #pxelinux boot file
next-server 192.168.66.1; #TFTP Server IP
}

[root@install ~]# service dhcpd start
[root@install ~]# chkconfig dhcpd --level 35 on

第二部分:TFTP服务器及PXE启动文件
客户端收到服务器的“回应”后,会回应一个帧,以请求传送启动所需文件。这些启动文件linux包括:(lpxelinux.0、pxelinux.cfg/default、vmlinuz、initrd.img);windows包括(lpxelinux.0、pxelinux.cfg/default、wi2k3.sif、w2k3l、startrom.0、ntdetect.2k3)等文件。
当服务器收到客户端的请求后,他们之间之后将有更多的信息在客户端与服务器之间作应答, 用以决定启动参数。BootROM 由 TFTP 通讯协议从Boot Server下载启动安装程序所必须的文件(pxelinux.0、pxelinux.cfg/default)。default文件下载完成后,会根据该文件中定义的引导顺序,启动不同操作系统安装程序的引导内核。


[root@install ~]# yum install tftp-server tftp
[root@install ~]# vi /etc/xinetd.d/tftp
service tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -m /tftpboot/rules -s /tftpboot
disable = no
per_source = 11
cps = 100 2
flags = IPv4
}
增加了/tftpboot/rules文件,这个文件主要作用是,把请求tftp的所有路径和文件名改成小写。
[root@install ~]# vi /tftpboot/rules
ri ^[a-z]: # Remove "drive letter"
rg \\ / # Convert backslashes to slashes
rg \# @ # Convert hash marks to @ signs
rg /../ /..no../ # Convert /../ to /..no../
rg A a
rg B b
rg C c
rg D d
rg E e
rg F f
rg G g
rg H h
rg I i
rg J j
rg K k
rg L l
rg M m
rg N n
rg O o
rg P p
rg Q q
rg R r
rg S s
rg T t
rg U u
rg V v
rg W w
rg X x
rg Y y
rg Z z
r ^/(.*) \1

[root@install ~]# cp /usr/lib/syslinux/pxelinux.0 /tftpboot/
从安装盘上拷贝所需文件
[root@install ~]# cp /media/dvd/p_w_picpaths/pxeboot/{vmlinuz,initrd.img} /tftpboot/
[root@install isolinux]# cp /media/dvd/isolinux/{boot.msg,general.msg,options.msg,param.msg,rescue.msg} /tftpboot/
接下来创建/tftpboot/pxelinux.cfg/ 目录,该目录用于存放客户端的配置文件。
[root@install ~]# mkdir /tftpboot/pxelinux.cfg
[root@install isolinux]# cp /media/dvd/isolinux/isolinux.cfg /tftpboot/pxelinux.cfg/default
稍微修改,此处不知道为什么,只能修改linux标签,添加centos5.8标签总是不成功。
[root@install ~]# vi /tftpboot/pxelinux.cfg/default
default linux
prompt 1
timeout 10 #缩短等待时间
display boot.msg
F1 boot.msg
F2 options.msg
F3 general.msg
F4 param.msg
F5 rescue.msg
label linux
  kernel vmlinuz
  #append initrd=initrd.img
  append ks=nfs:192.168.66.1:/mnt/centos5.8_ks.cfg initrd=initrd.img
label text
  kernel vmlinuz
  append initrd=initrd.img text
label ks
  kernel vmlinuz
  append ks initrd=initrd.img
label local
  localboot 1
label memtest86
  kernel memtest
  append -
label centOS5.8
  kernel vmlinuz
  append ks=nfs:192.168.66.1:/mnt/centos5.8_ks.cfg initrd=initrd.img
  #append initrd=initrd.img
label win2k3
  kernel startrom.0
 
第三部分:安装介质服务器及自动应答文件
客户端通过pxelinux.cfg/default文件成功的引导Linux安装内核后,安装程序首先必须确定你通过什么安装介质来安装linux,如果是通过网络安装(NFS, FTP, HTTP,SMB),则会在这个时候初始化网络,并定位安装源位置。这是由于PXE获取的是安装用的内核以及安装程序等,而安装程序要获取的是安装系统所需的二进制包以及配置文件。由于它们需要的内容不同造成PXE模块和安装程序是相对独立的,PXE的网络配置并不能传递给安装程序。从而进行两次获取IP地址过程。
如果需要无人职守的安装方法,接着会读取该文件中指定的自动应答文件ks.cfg所在位置,根据该位置请求下载该文件。将ks.cfg文件下载回来后,通过该文件找到OS Server,并按照该文件的配置请求下载安装过程需要的软件包。
OS Server和客户端建立连接后,将开始传输软件包,客户端将开始安装操作系统。安装完成后,将提示重新引导计算机。这个时候注意,在重新引导的过程中一定要将BIOS修改回从硬盘启动,不然的话又会重复的自动安装操作系统。

安装介质存储在服务器上的一个目录中,可以使用各种网络协议访问它,比如 HTTP,FTP,和NFS。也就是我们前面提到的OS Server。这里使用 NFS 服务来提供安装介质,只需要将系统光盘内容拷贝放到共享目录下即可。

[root@install ~]#yum install nfs-utils
创建共享目录,并将光盘内容拷贝到共享目录中:
[root@install ~]# mkdir /mnt/install_centos5.8
[root@install ~]# cp /media/dvd/* /mnt/install_centos5.8
由于是虚拟机,我直接挂载到目录下了:
[root@install ~]# mount /dev/cdrom /mnt/install_centos5.8
利用nfs共享出去:
[root@install ~]# vi /etc/exports
/mnt/ *(ro,sync)
/mnt/install_centos5.8 *(ro,sync)

[root@install ~]# service portmap restart
[root@install ~]# service nfs start
[root@install ~]# showmount -e 192.168.66.1
Export list for localhost:
/mnt/ *
/mnt/install_centos5.8 *
[root@install ~]# chkconfig --level 35 nfs on

 通常,我们在安装操作系统的过程需要大量的人机交互过程,减少交互过程,为了提高安装效率Red Hat Linux 开始支持一个称为 kickstart 的功能。使用这种方法,只需事先定义好一个Kickstart自动应答配置文件(通常存放在安装服务器上),并让安装程序知道该配置文件的位置,在安装过程中安装程序就可以自己从该文件中读取安装配置,这样就避免了繁琐的人机交互,实现无人值守的自动化安装。
我们可以通过多种方法生成Kickstart配置文件,无论使用哪种方法无非就是创建一个应答文件,当你安装好一台Red Hat Linux机器,Red Hat Linux 安装程序都会创建一个 kickstart 配置文件,记录你的真实安装配置。如果你希望实现和某系统类似的安装,可以基于该系统的kickstart配置文件来生成你自己的kickstart配置文件。 该文件位于/root/anaconda-ks.cfg。
这里我直接使用该文件,拷贝本文件到/mnt/下,并对文件内容稍作修改。这个路径可以修改,当用到无人安装的时候可以通过/tftpboot/pxelinux.cfg/default里面的修改。
[root@install ~]# mv /root/anaconda-ks.cfg /mnt/centos5.8_ks.cfg
[root@install ~]# vi /mnt/centos5.8_ks.cfg
# Kickstart file automatically generated by anaconda.
install
nfs --server=192.168.66.1 --dir=/mnt/install_centos5.8
注意,该文件必须有可读属性
[root@install mnt]# chmod a+r centos5.8_ks.cfg

关闭iptables
[root@install ~]# chkconfig iptables --level 3 off
关闭selinux