1
.
引言
一般情况下,我们都是利用软驱或光驱引导
Linux
后,再通过本地的光驱安装
Linux
。但是,这种安装方法在以下的几种情况下就不能适用:
1.
无软驱和光驱:很多公司为了节省成本,计算机一般都不带光驱或软驱,这样就无法通过本地安装
Linux
;
2.
非标准的软驱和光驱:虽然笔记本都会配置光驱,但是并不一定都是标准的
IDE
设备,有些是通过
USB
接口,有些是通过
1394
接口(例如
Samsung
的
Q10
)。在
Linux
安装时所引导的
Linux
内核一般都不会带这些接口的驱动,所以也无法通过本地安装
Linux
;
3.
另外,在一些场合,如机房中,有大量的计算机需要同时安装
Linux
,如果通过光驱的方式一个个安装,不仅效率低,也不利于维护。
笔者在工作过程中,就遇到过第二种情况。一台
Samsung
的
Q10
笔记本需要安装
Redhat Linux 8.0
,但是通过光驱引导后发现,安装程序无法访问光盘。针对这个问题,笔者经过查阅资料和摸索,找到了在
Q10
上安装
Linux
的方法。在下面的讨论中,如不做特别声明,都将以
Q10
为例,介绍如何通过
PXE Bootrom
来远程安装
Linux
。
2
.
基本原理
1
)
什么是
PXE
PXE(Pre-boot Execution Environment)
是由
Intel
设计的协议,它可以使计算机通过网络启动。协议分为
client
和
server
两端,
PXE client
在网卡的
ROM
中,当计算机引导时,
BIOS
把
PXE client
调入内存执行,并显示出命令菜单,经用户选择后,
PXE client
将放置在远端的操作系统通过网络下载到本地运行。
PXE
协议的成功运行需要解决以下两个问题:
1.
既然是通过网络传输,那么计算机在启动时,它的
IP
地址由谁来配置;
2.
通过什么协议下载
Linux
内核和根文件系统
对于第一个问题,可以通过
DHCP Server
解决,由
DHCP server
来给
PXE client
分配一个
IP
地址,
DHCP Server
是用来给
DHCP Client
动态分配
IP
地址的协议,不过由于这里是给
PXE Client
分配
IP
地址,所以在配置
DHCP Server
时,需要增加相应的
PXE
特有配置。
至于第二个问题,在
PXE client
所在的
ROM
中,已经存在了
TFTP Client
。
PXE Client
使用
TFTP Client
,通过
TFTP
协议到
TFTP Server
上下载所需的文件。
这样,
PXE
协议运行的条件就具备了,下面我们就来看看
PXE
协议的工作过程。
有了前面的背景知识,接下来就可以正式操作了,下面按照顺序给出了操作步骤:
1
)
配置
DHCP Server
选用
ISC dhcp-3.0
,
DHCP Server
的配置文件是
/etc/dhcpd.conf
,配置文件的内容如下:
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;
class "pxeclients" {
match if substring (option vendor-class-identifier, 0, 9) = "PXEClient";
option vendor-class-identifier "PXEClient";
vendor-option-space PXE;
# At least one of the vendor-specific PXE options must be set in
# order for the client boot ROMs to realize that we are a PXE-compliant
# server. We set the MCAST IP address to 0.0.0 .0 to tell the boot ROM
# that we can't provide multicast TFTP (address 0.0.0 .0 means no
# address).
option PXE.mtftp-i p 0.0.0 .0;
# This is the name of the file the boot ROMs should download.
filename "pxelinux.0";
# This is the name of the server they should get it from.
next-server 192.168.0.1;
}
ddns-update-style interim;
ignore client-updates;
default-lease-time 1200;
max-lease-time 9200;
option subnet-mask 255.255.255.0;
option broadcast-address 192.168.0.255;
option routers 192.168.0.254;
option domain-name-servers 192.168.0.1,192.168.0.2;
option domain-name "mydomain.org";
subnet 192.168.0.0 netmask 255.255.255.0 {
range 192.168.0.10 192.168.0.100;
}
host q10 {
hardware ethernet 00:00:F0:6B:38:5B;
fixed-address 192.168.0.22;
}
|
dhcpd.conf
配置文件中几个关键部分说明如下:
host q10{…}
定义了笔记本
Q10
网卡的
MAC
地址与
IP
地址的对应关系,表明
DHCP Server
为
Q10
分配一个固定的
IP
:
192.168.0.22
;
filename ""
指定
bootstrap
的文件名;
netx-server
指定
TFTP Server
的地址。其它的配置请读者参考
DHCP Server
的手册。
2
)
配置
TFTP server
选用
tftp-hpa
,
TFTP Server
的配置文件是
/etc/xinetd.d/tftp
,配置文件的内容如下:
service tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -u nobody -s /tftpboot
disable = no
per_source = 11
cps = 100 2
}
|
这里制定了
/tftpboot
为
TFTP Server
的根目录位置。
3
)
配置
bootstrap
bootstrap
文件在
dhcpd.conf
中被指定为
pxelinux.0
文件,放置在
/tftpboot
。
Linux
内核以及
Linux
根文件系统也放置在
/tftpboot
。
pxelinux.0
在执行过程中,要读配置文件,所有的配置文件都放在
/tftpboot/pxelinux.cfg/
目录下。由于
PXElinux
具有为不同的
PXE Client
提供不同的
Linux
内核以及根文件系统的功能,所以要通过不同的配置文件名来区分出不同的
PXE Client
的需求。比如一个
PXE Client
由
DHCP Server
分配的
IP
地址为
192.168.0.22
,那么相对应的配置文件名为
/tftpboot/pxelinux.cfg/C 0A 80016
(注:
C 0A 80016
为
IP
地址
192.168.0.22
的十六进制表示)。如果找不到,就按照顺序
C 0A 80016-> C 0A 8001-> C 0A 800-> C 0A 80-> C 0A 8-> C 0A -> C0-> C->default
查找配置文件。
/tftpboot/pxelinux.cft/C 0A 80001
配置文件的具体内容如下:
DEFAULT install
PROMPT 1
LABEL install
KERNEL vmlinuz
APPEND initrd=initrd.img devfs=nomount ramdisk_size=16384
PROMPT 1
LABEL install
KERNEL vmlinuz
APPEND initrd=initrd.img devfs=nomount ramdisk_size=16384
此配置文件指定了
Linux
内核以及根文件系统的名称,并给内核传递了一些参数,其中
ramdisk_size
参数要非常注意,它指定
Linux
内核启动后建立
ramdisk
的大小,如果设置太小,
Linux
的安装过程就可能无法进行。
4
)
制作
Linux
内核
/
根文件系统
因为需要通过网络安装,所有选择
Redhat Linux 8.0
安装盘(
disk #1
)中
E:\p_w_picpaths\bootnet.img
(光驱的盘符为
E:
)。
bootnet.img
包括
Linux
内核、
Linux
根文件系统(有安装程序在内)。用
bootnet.img
制作一张引导软盘,方法在
DOS
命令行运行
E:\dosutils\rawrite E:\p_w_picpaths\bootnet.img
,根据提示制作。制作完毕后,将引导软盘中的
vmlinuz
(
Linux
内核)和
initrd.img
(
Linux
根文件系统)拷贝到
Linux Server
的
/tftpboot
下。
5
)
启动
DHCP Server/TFTP Server
在
Linux Server
上,运行
service dhcpd start
和
service xinetd restart
。
6
)
启动
Q10
Q10
加电后,在出现
Samsung
公司徽标时,在左下角会提示用户按
F12
进入网络引导。按
F12
后,
Q10
进入网络引导过程。首先通过
DHCP Server
获得了
IP
地址,然后下载并执行
bootstrap
文件
pxelinux.0
;在执行中,读入配置文件
/tftpboot/pxelinux.cfg/C 0A 80016
。此时屏幕上出现
boot:
,敲入
install
,就进入了
Redhat Linux 8.0
的网络安装界面,一切
OK!
4
.
结束语
虽然以上的讨论是针对
Samsung Q10
笔记本,但是工作原理和安装方法对于其它类型的计算机也是适用的,不过要记住,计算机的网卡中必须要有
BootROM--PXE Client
。同时,
PXE
协议也可作为无盘
Linux
技术,用于引导放置在远程的
Linux
。实际上,只要根据需要,在
Pxelinux
的配置文件的
APPEND
选项中,为
Linux
内核传进需要
mount
的文件系统的位置参数即可。