FreeBSD搭建PXE + ISCSI无盘站

FreeBSD搭建PXE + ISCSI无盘站

本示例通过PXE启动ISCSI TARGER磁盘上的WINDOWS XP SP3系统

注: tftp的目录为 /data/tftproot iscsi tagate目录为 /data/iscsi TFTP服务器IP为192.168.1.253 路由器为:192.168.1.254 ISCSI服务器为192.168.1.253

初始化以上目录

test# mkdir -p /data/tftproot
test# mkdir -p /data//data/iscsi

一、安装相关软件

1、配置TFTP

test# ee /etc/inetd.conf

增加

tftp    dgram   udp     wait    root    /usr/libexec/tftpd      tftpd -l -s /data/tftproot
tftp    stream  tcp     wait    root    /usr/libexec/tftpd      tftpd -l -s /data/tftproot

修改 rc.conf

test# ee /etc/rc.conf

增加

inetd_enable="YES"

2、安装isc-dhcp服务

test#  cd /usr/ports/net/isc-dhcp41-server/
test#  make install clean

配置isc-dhcp

test#cd /usr/local/etc/ 
test#cp dhcpd.conf.sample dhcpd.conf
test#ee dhcpd.conf

增加

option space gpxe;
option gpxe-encap-opts code 175 = encapsulate gpxe;
option gpxe.bus-id code 177 = string;
subnet 192.168.1.0 netmask 255.255.255.0 {
  range dynamic-bootp 192.168.1.40 192.168.1.60;
  option broadcast-address 192.168.1.255;
  option routers 192.168.1.254;
  option root-path "192.168.1.253:/"; #TFTP的下载地址,这里主要为了下载一些初始化文件如 boot.kpxe和boot.gpxe文件
  next-server 192.168.1.253; #此为TFTP的服务器地址,如果不写,客户端就会出现tftp://0.0.0.0/xxx的下载地址
  if not exists gpxe.bus-id {
  filename "boot.kpxe"; #boot.kpxe是带带ISCSI驱动的启动文件,从http://www.rom-o-matic.net/gpxe/gpxe-1.0.1/contrib/rom-o-matic/下载
  }else{
  filename "boot.gpxe";#启动脚本
  }
  server-name "test";
  server-identifier 192.168.1.253;}

在/etc/rc.conf 增加

dhcpd_enable="YES"
dhcpd_ifaces="bge0" #bge0为你使用的网卡,我这里是bge0,使用ifconfig 来查找

3、安装iscsi服务 具本教程可以查看http://people.freebsd.org/~rse/iscsi/iscsi.txt

这里要注意的是生成的iscsi的文件不要超过4G,因为gpxe暂时只支持到4G以下的分区

修改 istgt.conf

ee /usr/local/etc/istgt/istgt.conf

[Global]
  Comment "Global section"
  NodeBase "192.168.1.253"
  PidFile /var/run/istgt.pid
  AuthFile /usr/local/etc/istgt/auth.conf
  #文件存放的目录我们这里为/data/iscsi
  MediaDirectory /data/iscsi
  LogFacility "local7"
  Timeout 30
  NopInInterval 20
  DiscoveryAuthMethod Auto
  MaxSessions 16
  MaxConnections 6
  MaxR2T 32
  MaxOutstandingR2T 16
  DefaultTime2Wait 2
  DefaultTime2Retain 60
  FirstBurstLength 262144
  MaxBurstLength 1048576
  MaxRecvDataSegmentLength 262144
  InitialR2T Yes
  ImmediateData Yes
  DataPDUInOrder Yes
  DataSequenceInOrder Yes
  ErrorRecoveryLevel 0
[UnitControl]
  Comment "Internal Logical Unit Controller"
  AuthMethod CHAP Mutual
  AuthGroup AuthGroup10000
  Portal UC1 127.0.0.1:3261
  Netmask 127.0.0.1
[PortalGroup1]
  Comment "ANY IP"
  Portal DA1 0.0.0.0:3260
[InitiatorGroup1]
  Comment "Initiator Group1"
  InitiatorName "ALL"
  Netmask 192.168.1.0/24
[LogicalUnit1]
  Comment "OS VM XP"
  #TargetName 的内容就是gPxe后面用到指令的 iscsi:192.168.1.253::::192.168.1.253:vmwinxp 一至
  TargetName vmwinxp
  TargetAlias "VM WIN XP"
  Mapping PortalGroup1 InitiatorGroup1
  AuthMethod None
  AuthGroup AuthGroup1
  UseDigest Auto
  UnitType Disk
  LUN0 Storage /data/iscsi/vmwinxp 3GB

二、配置相关文件

1、在/data/tftpboot目录下创建boot.gpxe文件,内容如下

#!gpxe
sanboot iscsi:192.168.1.253::::192.168.1.253:vmwinxp

第一个192.168.1.253表示ISCSI服务所在的服务器
第二个192.168.1.253其实我这里取巧了,为了实验成功,避免使用了Initiator node name

2、从http://www.rom-o-matic.net/gpxe/gpxe-1.0.1/contrib/rom-o-matic/下载kpxe

此网页里有多个选择,我们选择kpxe,并选择undi,然后[get image]

把下载的文件改名成boot.gpxe上传到/data/tftproot目录

3、生成/data/iscsi/vmwinxp文件(3G)

test# dd if=/dev/zero of=/data/iscsi/vmwinxp bs=512 count=6291456

每块512个字节,共6291456块,合计3G

三、使用vm搭建一个XP

使用VM创建一个3G大小空间的虚拟机,并正常安装XP

安装完后,需要在XP上再加装 Initiator-2.08-boot-build3825-x86chk.exe (从微软官网上下载,记得是chk不是fre)

再加装sanbootconf.msi,从http://etherboot.org下载

安装完后,去掉的VM的硬盘,从网络启动就可以了

原文链接:http://wiki.freebsdchina.org/doc/pxe/gpxe/iscsi

通过PXE安装FreeBSD系统

目标

在已有一台运行 FreeBSD 的计算机(我们称其为 S)的情况下,使用 PXE 在一台计算机(我们称其为 D)安装 FreeBSD。

硬件需求

S 必须拥有一块 FreeBSD 可以正常使用的网卡。
D 必须可以支持 PXE 引导,并且其网卡要可以在 FreeBSD 里面正常使用。 一条用于双机直连的网线。

软件需求

tftpd,已经包含在 FreeBSD 发行版的 base 中。
nfsserver,已经包含在 FreeBSD 中。
isc-dhcp3-server 3.0.5,通过 ports 安装。
FreeBSD 发行版 DISC1 的 ISO 镜像(我使用的镜像是 FreeBSD 8-CURRENT 今年一月的快照,8.0-CURRENT-200801-amd64-disc1.iso)。

S 上使用的 FreeBSD 是 7.0-BETA2-i386。

网络设置

假设 S 的 IP 地址为 192.168.0.1,子网掩码为 255.255.255.0。

准备工作

允许 tftpd 运行

默认情况下,inetd 里面的 tftpd 是不会运行的。在 inetd.conf 中找到 tftpd 所对应的一行,去掉行首的#,保存。注意,去除注释的这行应该是使用 udp 而不是 udp6。

配置 nfsserver

echo "/mnt -ro -alldirs" > /etc/exports

安装 isc-dhcp3-server

cd /usr/ports/net/isc-dhcp3-server && make BATCH=yes install

配置 isc-dhcp3-server

编辑 /usr/local/etc/dhcpd.conf

default-lease-time    7200;
max-lease-time    7200;
ddns-update-style    none;
subnet 192.168.0.0 netmask 255.255.255.0 {
    range 192.168.0.2 192.168.0.254;
    server-identifier    192.168.0.1;
    next-server        192.168.0.1;
    filename        "/pxeboot";
    option    root-path    "/mnt";
}

这里是整个 PXE 安装最重要的部分之一,能否正常进行 PXE 安装关键就在这里。这里面最关键的几个选项是 next-server,filename 和 root-path。
要理解这些选项的作用,首先要理解 PXE 工作的流程。按照 FreeBSD PXE 引导的过程,我们将其分成三个阶段。
第一阶段主要是 D 上 PXE 的 firmware 和 S 上 dhcpd 协商的过程。在这里,要商定 D 的 IP 地址,并且确定下一步 PXE 要加载的文件,及其位置。
第二阶段是 D 加载上一阶段商定好的文件。对于 FreeBSD 来说,主要就是 pxeboot(8),一个 PXE 的 bootloader。
第三阶段是根据 pxeboot(8) 的指示加载 loader(8) 和 kernel。
在这里,我们可以看到 D 要从网络加载两次文件,一次是 pxeboot(8),另外一次是 loader(8) 和 kernel。这两次加载文件的位置就是由上面的三个选项来确定的。下面我们逐一分析这几个语句的作用。

next-server 语句主要控制了整个 PXE 引导中两次加载的文件所在的服务器的地址。pxeboot(8) 是通过 tftp 从 S 传递到 D 的,所以 next-server 第一个作用就是指定一个 tftp server 的地址。在第三阶段,要加载 loader(8) 和 kernel,这个加载过程是通过 nfs 完成的。next-server 同时也指定了 nfs server 的地址。值得注意的是,有一些文档说第一阶段确定的 PXE 在下一阶段要加载的文件(也就是 pxeboot(8))所在的服务器地址是通过 server-identifier 给定的,但是对于 isc-dhcp3-server 来说,这一点并不成立,而恰恰是 next-server 决定了 pxeboot(8) 所在的服务器的地址(在 dhcpd.conf(5) 里面已经明确指出了这一点)。

filename 指定的是 pxeboot(8) 在 tftp 传输过程中的名字。由于 tftpd 将在 inetd 中来使用,根据 inetd.conf 中给 tftpd 传递的选项,tftpd 启动的时候会进行 chroot,于是 filename 的地址是要相对于其 chroot 之后的根路径来说的。默认情况下,tftpd 会 chroot 到 /tftpboot,我们要在 /tftpboot 中放入 pxeboot(8) 这个文件。由于相对 /tftpboot 作为根路径来说,pxeboot(8) 的位置是 /pxeboot,所以我们直接填入 /pxeboot 便可。

root-path 这个选项指定的是第三阶段加载 loader(8) 和 kernel 在 nfs 的根路径的位置(也就是包含了 boot 目录的位置)。因为我们导出的是 /mnt,所以这里填 /mnt。

正式安装

1、为了避免 S 上的 dhcpd 影响网络中其他机器,也为了避免 D 受到网络上其他机器的影响,用直连网线将 S 和 D 连接起来。

2、挂载准备好的 ISO 镜像。 使用 mdconfig 将 FreeBSD 的 ISO 文件连接成为一个 vnode 类型的内存盘:

mdconfig -atvnode -f 8.0-CURRENT-200801-amd64-disc1.iso

挂载这个 md 节点(假设为 /dev/md0)到 /mnt:

mount_cd9660 /dev/md0 /mnt

3、把 pxeboot(8) 放到 /tftpboot:

cp /mnt/boot/pxeboot /tftpboot

4、在 S 上启动 tftpd, dhcpd 和 nfsd:

/etc/rc.d/inetd forcestart
/etc/rc.d/nfsd forcestart
/usr/local/etc/rc.d/isc-dhcpd forcestart

5、由于我们已经使用直连网线将 S 和 D 连接,假设 S 上没有配置 BIND 服务,也没有额外的到 Internet 的网络连接,那么需要禁止 S 上的 DNS 解析。可以修改 /etc/resolv.conf,将其中所有以 nameserver 开头的行注释掉。否则 mountd(因为 nfsd 依赖这个 daemon,所以 mountd 也会随 nfsd 启动而启动)会去查 DNS,而有可能导致最终 PXE 启动连不上 nfs,不能加载 kernel 而超时失败。

6、在 D 的 BIOS 中设置为 PXE 引导,重新启动计算机。

7、D 此时已经启动,并通过 PXE,加载了 loader。此时需要选择 loader 启动选项的第 6 项,进入 loader prompt。输入以下命令:

set vfs.root.mountfrom="ufs:/dev/md0c"
boot

第一行保证我们可以启动到正确的安装程序,第二行提示系统继续执行启动的各个步骤。

8、此时应该正常进入安装程序。到选择安装介质之前都按照一般的安装步骤。在选择安装介质时选择 nfs,然后输入 S 的 IP 地址,以及导出的路径,例如 192.168.0.1:/mnt。确认后,系统提示要设置网卡,在这里按照系统提示,使用 dhcp,保证 D 与 S 在同一个网络中。主机名和域名随意,DNS 以及网关可以暂时不填。后续步骤与从光盘安装一致。

9、最终退出安装程序,重新启动系统。并修改 D 的 BIOS 设置,禁止网络启动。

10、安装全部完成,可以开始享用 FreeBSD 了。

参考

rafan 的 PXE Install 笔记[URL:http://wiki.rafan.org/doc/freebsd#pxe_install]

原文链接:http://wiki.freebsdchina.org/howto/p/pxeinstall