用PXE引导安装SUSE

Jump to: navigation, search


介绍

由于SUSE Linux分发总是最新的,所以它经常变更。然而,不用刻录新的CD或DVD光盘就能安装系统将更令人高兴,在此为您提供了从网络安装SuSE的最好方式。

PXE是在没有软驱、硬盘、CD-ROM的情况下引导计算机的一种方式,也就是BIOS将使用PXE协议从网络引导。当然,为了使PXE工作服务器需要配置OS,并且客户端需要使用特定的LAN网卡(NIC)的代码模块来运行PXE。多数的新主板都有板载LAN端口并在BIOS的镜像中已经包含了这个模块。如果您想从子板网卡(如ISA/PCI插槽上的网卡)引导,您需要在引导ROM(只有当网卡有ROM插槽时才可用)或在BIOS镜像中(当有合适的镜像工具才可用,AMIFLASH就是一个)安装相应模块。很少有操作系统支持PXE服务器配置--但是Windows 2000服务器和SUSE Linux却支持。

准备工作

为了成功的进行网络安装,您需要:

  • 一个现存的SuSE Linux (提供dhcpd和tftpd服务),
  • 一个可用的网络连接(推荐使用高带宽的),
  • 一个支持PXE引导的可连网的需要安装的目标系统。

配置dhcpd和TFTP服务器

dhcpd配置

PXE引导是基于BOOTP服务器,为了启动自身的网络层将发送所有必需的信息,这可以通过从所周知的DCHPD服务器来实现,该安装包包含在SuSE的分发中。 下面是一个典型的配置(/etc/dhcpd.conf是缺省的配置文件):

host target_host {
     hardware ethernet xx:xx:xx:yy:yy:yy;
     fixed-address 192.168.1.10;
     server-name "192.168.1.1";
     next-server 192.168.1.1;
     filename "/tftpboot/pxelinux.0";
}

注意以PXE引导需要添加两行,指定TFTP引导服务器IP(server-name)和包含PXE引导程序的文件名(filename)。 您需要按照下面方式重新启动DHCPd服务器:

# rcdhcpd restart

请注意:依赖于您使用的tftp服务器和是否它运行在改变根目录环境,"filename"也可以在被指定时使用相对路径。在openSUSE上的标准tftpd服务器或使用基于RedHat的服务器,"filename"应该为:

filename "pxelinux.0";

在ISC DHCP服务器版本3(迁移到openSUSE)中,可以配置DHCP服务器只响应引导请求,这种方式可以与另一个缺省的DHCP服务器并行运行。这个也许在DHCP服务器不能被配置提供引导服务器或引导文件名(这种情况也放有很多DSL路由器)的情况下很有用。PXE客户端将忽略不包含引导服务器或引导文件名的DHCP请求。 下面是本方案的完整的配置文件:

default-lease-time 600;
max-lease-time 7200;
ddns-update-style none; ddns-updates off;
allow booting;

option domain-name "my.domain";
option domain-name-servers my.dnsserver;
option routers my.router;
  
# 定义规则来识别来自于PXE和Etherboot客户端的DHCP请求。
class "pxe" {
    match if substring (option vendor-class-identifier, 0, 9) = "PXEClient";
}
class "etherboot" {
    match if substring (option vendor-class-identifier, 0, 9) = "Etherboot";
}
  
subnet 192.168.1.0 netmask 255.255.255.0 {
    option broadcast-address 192.168.1.255;
    pool {
         default-lease-time 180; # no long lease time required for booting
         max-lease-time 360;     # booted system does its own dhcp request
         server-name "mybootserver";
         next-server mybootserver.; # in case your local DNS only handles
                                    # unqualified domains keep trailing '.'
         filename "pxelinux.0";
         allow members of "pxe";
         allow members of "etherboot"; # allow etherboot, too
         range 192.168.1.201 192.168.1.211;
     }
}

atftpd 配置

推荐使用atftp包,因为atftp是唯一的免费的符合RFC规范的TFTP服务器。一旦安装,您应该检查/etc/sysconfig/atftp中的每一项是否OK。下面是一个典型的配置:

ATFTPD_OPTIONS="--daemon --user tftp -v"
ATFTPD_USE_INETD="no"
ATFTPD_DIRECTORY="/srv/tftp"

在这个例子中,注意tftp根目录设置到了/srv/tftp。您需要按照下面的方式重新启动TFTP服务器:

# rcatftpd restart

请注意:RedHat企业版本的Linux中缺省的tftp服务器也工作的不错。它不需要进一步的配置,简单地使用下面的命令启动服务即可。

chkconfig tftp on

tftpd-hpa配置

tftpd-hpa是H. Peter Anvin编写的一个tftpd服务器,包含在"tftpd"的包中。在缺省的设置中,它被配置从xinetd启动并更改目录到/etc/xinetd.d/tftp中指定的目录,通常为/tftpboot。以无权限的用户运行的选项也可以被xinetd设置(也就是/etc/xinetd.d/tftp)。

建立PXE引导环境

获取所有的东西

在真正开始建立PXE环境之前,您必须安装syslinux包,这个包提供了一个非常有用的文件:

 /usr/share/syslinux/pxelinux.0

如果您没安装syslinux,您可以在这下载这个小文件。

建立PXE引导

到此为止,您应该具备了建立PXE引导环境的所有东西。进入TFTP根目录(缺省的是/srv/tftp),按下面的命令创建相应的文件和目录:

# cd /srv/tftp
# mkdir tftpboot
# cd tftpboot
# mkdir pxelinux.cfg

复制PXE引导文件到tftpboot目录下。

# cp /usr/share/syslinux/pxelinux.0 /srv/tftp/tftpboot

创建新的PXE配置文件,这个类似于syslinux.cfg文件的结构。

# vi /srv/tftp/tftpboot/pxelinux.cfg/default

这有一个简单的例子,您可按配置需求随便更改它。

default linux
prompt   1
timeout  30
 
# Install Linux
label linux
  kernel linux
  append initrd=initrd splash=silent showopts

请注意:如果您使用基于RedHat的服务器,您的缺省配置将需要一些以"append"开头的选项:

append root=/dev/ram0 load_ramdisk=1 initrd=initrd splash=silent showopts ramdisk_size=4096 init=linuxrc

这个配置文件引用了2个重要的文件:linuxinitrd。您必须从网络上的SuSE安装仓库(或其它镜像)下载这两个文件。注意这两个文件依赖于您的硬件平台(i386或x86_64)。

  • 针对i386的例子:
# cd /srv/tftp/tftpboot
# wget http://download.opensuse.org/distribution/SL-OSS-factory/inst-source/boot/i386/loader/initrd
# wget http://download.opensuse.org/distribution/SL-OSS-factory/inst-source/boot/i386/loader/linux
  • 针对x86_64的例子:
# cd /srv/tftp/tftpboot
# wget http://download.opensuse.org/distribution/SL-OSS-factory/inst-source/boot/x86_64/loader/initrd
# wget http://download.opensuse.org/distribution/SL-OSS-factory/inst-source/boot/x86_64/loader/linux

请注意:如果您使用基于RedHat的服务器,您的tftp服务器的目录结构应该如下所示:

/tftpboot 
/tftpboot/pxelinux.0 
/tftpboot/initrd.img 
/tftpboot/vmlinuz 
/tftpboot/pxelinux.cfg 
/tftpboot/pxelinux.cfg/default

从PXE引导

您应该确认您的目标主机已经配置好从网络引导并检查PXE是否已经启用。然后每件事都会按照我们想的运行...享受PXE并尽情玩吧!

陷阱/常见问题

PXELINUX启动非常慢

当PXELINUX加载时您也许会发现好像花了很长时间来显示类似于下面的行:

pxelinux.cfg/01-88-99-aa-bb-cc-dd
pxelinux.cfg/C000025B
pxelinux.cfg/C000025
pxelinux.cfg/C00002
pxelinux.cfg/C0000
pxelinux.cfg/C000
pxelinux.cfg/C00
pxelinux.cfg/C0
pxelinux.cfg/C
pxelinux.cfg/default

您必须确认在/etc/dhcpd.conf的配置文件中有next-server来设置您tftp服务器的地址。您不必包含hostname,如例子中所示,只要下面一行即可:

next-server 192.168.77.254;

没有接受的选项

您也许会在/var/log/messages看到一些如下的警告信息:

in.tftpd: tftp: client does not accept options

这个是正常的。PXELINUX好像不能接受所有的选项,但是这不影响引导。

当运行in.tftpd提示套接字错误

如果您看到了如下的错误:

in.tftpd: cannot bind to local socket: Address already in use

那么您也许在/etc/xinet.d/tftp文件中错误的配置了服务器的一些选项。请仔细的检查一下。

启动图形安装系统

在PXE加载的安装系统完成了加载驱动后,您将会看到一个消息说不能发现openSUSE的安装CD。单击OK。然后,您需要选择语言和键盘布局。

一旦进入主菜单,选择"Start Installation or System",然后"Start Instillation or Update"。 下一步选择安装的网络源。您需要指定一个网络仓库来安装。从Mirrors Released Version中选择一个合适的镜像。我选择了:

ftp://ftp.mirrorservice.org/sites/ftp.opensuse.org/pub/opensuse/distribution/10.2/repo/oss/

现在依赖于您的镜像类型来选择FTP或HTTP。选择合适的网卡并使用DHCP。接下来您将被要求指定服务器的地址。虽然需要一个IP地址,您也可以设置个主机名,如:

ftp.mirrorservice.org

下一步您将被要求输入服务器上的目录,如:

/sites/ftp.opensuse.org/pub/opensuse/distribution/10.2/repo/oss/

然后,从您的镜像中下载图形安装系统。您也许碰到"Installation system does not match your boot medium."忽略这个继续。在一段短暂的停顿后,完整的图形化的YaST应该会被加载。现在您就能够按通常的方法来安装系统。

解决问题

基于文件的YaST,而不是X服务器

如果您的计算机不是太慢而不能使用图形用户界面(GUI)的安装程序,那么您能够在X服务器上通过手动来指定想要使用的分辨率和色深。我的Latitude C400笔记本电脑上就可以设置,回到TFTP服务器,编辑pxelinux.cfg/default文件。在这行:

  append initrd=initrd splash=silent showopts

添加正在的选项:

vga=xxx

xxx是Linux视频模式编号,您知道的您的监视器/显卡所工作的模式。如:

  append initrd=initrd splash=silent showopts vga=773

您能够在这找到Linux视频模式编号列表。 重新用PXE引导,X服务器应该能正确地启动。

附加信息的链接

--

MightyBob 16:34, 1 April 2006 (UTC)