PXE网络安装linux服务器(NFS方式)
一、基本原理:
先了解一下PXE网络安装工作流程:
第一步:PXE Client(将要通过网络安装系统的主机)向DHCP服务器发送请求
PXE的网络接口卡(NIC)的客户端的BIOS设置成为网络启动,通过PXE BootROM(自启动芯片)会以UDP(简单用户数据报协议)发送一个广播请求,向网络中的DHCP服务器索取IP地址等信息。
DHCP服务器提供信息
服务器收到客户端的请求,验证是否来至合法的PXE Client的请求,验证通过它将给客户端一个“提供”响应,这个“提供”响应中包含了为客户端分配的IP地址、pxelinux启动程序(TFTP)位置,以及配置文件所在位置。
PXE客户端请求下载启动文件
pxelinux.0、pxelinux.cfg/default、vmlinuz、initrd.img等文件。
Boot Server响应客户端请求并传送文件
, 用以决定启动参数。BootROM 由 TFTP 通讯协议从Boot Server下载启动安装程序所必须的文件(pxelinux.0、pxelinux.cfg/default)。default文件下载完成后,会根据该文件中定义的引导顺序,启动Linux安装程序的引导内核。
第五步:请求下载自动应答文件
pxelinux.cfg/default文件成功的引导Linux安装内核后,安装程序首先必须确定你通过什么安装介质来安装linux,如果是通过网络安装(NFS, FTP, HTTP),则会在这个时候初始化网络,并定位安装源位置。或许你会说,刚才PXE不是已经获取过IP地址了吗?为什么现在还需要一次?这是由于PXE获取的是安装用的内核以及安装程序等,而安装程序要获取的是安装系统所需的二进制包以及配置文件。由于它们需要的内容不同造成PXE模块和安装程序是相对独立的,PXE的网络配置并不能传递给安装程序。从而进行两次获取IP地址过程。
ks.cfg所在位置,根据该位置请求下载该文件。
第六步:客户端安装操作系统
ks.cfg文件下载回来后,通过该文件找到OS Server,并按照该文件的配置请求下载安装过程需要的软件包。
和客户端建立连接后,将开始传输软件包,客户端将开始安装操作系统。安装完成后,将提示重新引导计算机。这个时候注意,在重新引导的过程中一定要将BIOS修改回从硬盘启动,不然的话又会重复的自动安装操作系统。
PXE client在工作过程中,需要三个二进制文件:bootstrap、Linux 内核和Linux根文件系统。Bootstrap文件是可执行程序,它向用户提供简单的控制界面,并根据用户的选择,下载合适的Linux内核以及Linux根文件系统。
作为网路安装服务器需要提供TFTP Server 、DHCP Server、和HTTP Server(或者NFS Server、FTP Server) 这几个服务
二、配置过程:
配置PXE安装,要进行如下步骤:
① 配置DHCP,用于给客户端提供IP地址及其它信息
② 配置TFTP服务器,用于提供客户端PXE引导所必须的文件
③ 配置HTTP/FTP/NFS服务器,用于存放安装树
④ 配置Kickstart,用于自动应答安装#如需安装: yum -y install system-config-kickstart*
⑤ 使用PXE功能引导客户机
、DHCP的安装与配置
在PXE引导安装过程中,PXE客户端通过DHCP获取PXE服务器地址,PXE引导文件名称;然后客户机在使用TFTP协议从TFTP服务器下载引导文件并执行,从而启动计算机安装程序。引导文件执行后,接着下载安装程序启动安装。RedHat Linux使用了ISC的dhcpd软件,完成它的安装与配置。
1)安装DHCP软件包
dhcp-3.0.5-23.el5_6.4
dhcp-devel-3.0.5-23.el5_6.4
#rpm -ivh dhcp-3.0.5-23.el5_6.4 dhcp-devel-3.0.5-23.el5_6.4
或者
#yum install dhcp dhcp-devel
2)配置DHCP
安装完成后,复制DHCPD配置文件模版替换原配置文件/etc/dhcpd.conf
#cp /usr/share/doc/dhcp-3.0.5/dhcpd.conf.sample /etc/dhcpd.conf
接下来我们需要配置相关信息。为了满足我们的安装需求,假设PXE服务器、DHCP服务器、TFTP服务器全部安装在一台为192.168.32.128的计算机上。
我们需要进行如下操作:
(1)修改 /etc/dhcpd.conf 文件,指定 IP 地址等信息。
(2)在/etc/dhcpd.conf'中增加 tftp-server 需要推送给客户端的启动文件(bootstrap): pxelinux.0,因为 tftp 的默认目录是 /tftpboot,所以文件的绝对路径就是: /tftpboot/pxelinux.0,当然也可以指定为其它的路径。
另外需要指定 next-server 参数,告诉客户端在获取到 pxelinux.0 文件之后去哪里获取其余的启动文件: next-server 192.168.32.128
我的dhcpd.conf示例如下:
ddns-update-style interim;
ignore client-updates;
allow booting; 定义能够PXE启动 (该项默认可能不存在也可以不加)
allow bootp; 定义支持bootp (该项默认可能不存在也可以不加)
subnet 192.168.32.0 netmask 255.255.255.0 {
option routers 192.168.32.1;
option subnet-mask 255.255.255.0;
option nis-domain "domain.org";
option domain-name "domain.org";
option domain-name-servers 202.96.128.66;
option time-offset -18000; # Eastern Standard Time
range dynamic-bootp 192.168.32.220 192.168.32.224;
option root-path "/tftpboot/";
next-server 192.168.32.128;的ip地址
filename "pxelinux.0"; #pxelinux启动文件位置
default-lease-time 21600;
max-lease-time 43200;
}
注意:在dhcpd.conf 配置文件中 filename "pxelinux.0"; 文件目录是相对于 tftp 的根目录(默认是 /tftpboot),
所以文件的绝对路径就是: /tftpboot/pxelinux.0";当然也可以指定为其它的路径.
配置完成后,重启DHCP服务,并将它设为开机自启动。
#service dhcpd start
#chkconfig --level 35 dhcpd on
2、安装配置TFTP服务器
在PXE安装过程中,客户机在使用TFTP协议从TFTP服务器下载引导文件并执行。我们主要通过配置TFTP服务器和PXE的引导配置完成这个过程。
1)安装配置TFTP服务器
首先,安装TFTP服务器软件包,RedHat提供了如下两个软件包:
l tftp-server:服务端程序 tftp-server-0.49-2.el5.centos
:客户端程序 tftp-0.49-2.el5.centos
rpm方式安装 rpm -ivh tftp-server-0.49-2.el5.centos tftp-0.49-2.el5.centos
yum在线安装 yum install tftp-server tftp
配置tftp服务
tftp 服务由xinetd服务管理。编辑/etc/xinetd.d/tftp文件,
将disable = yes改为:disable = no
配置示例:
# default: off
# description: The tftp server serves files using the trivial file transfer \
# protocol. The tftp protocol is often used to boot diskless \
# workstations, download configuration files to network-aware printers, \
# and to start the installation process for some operating systems.
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
flags = IPv4
}
注:
文件中 server_args = -u nobody -s /tftpboot,
-u nobody 说明所有人可以访问
说明tftp的根目录是/tftpboot
配置完成后重启xinetd服务,使TFTP服务器生效
#chkconfig --level 35 tftp on
#service xinetd restart
2)PXE引导配置(bootstrap)复制内核启动文件到tftp根目录:
PXE启动映像文件由syslinux软件包提供,Linux光盘中已提供,如果没有此软件包可以到syslinux 主页:http://syslinux.zytor.com/rpm来安装。
把光盘中 isolinux下的所有文件复制到 /tftpboot下
#cp /media/isolinux/* /tftpboot
或者
系统只要安装了syslinux,就会生成pxelinux.0,将pxelinux.0复制到/tftpboot:
#cp /usr/share/syslinux/pxelinux.0 /tftpboot/
复制/usr/share/system-config-netboot/msgs的所有文件到 /tftpboot
#cp /usr/share/system-config-netboot/msgs/* /tftpboot
)用于网络启动的内核文件
因为是提供多个系统的安装,先要准备安装文件,先挂载光盘映像文件,假定iso文件保存在/linuxiso中
#mkdir /linuxos
#mkdir /linuxos/centos5
#mkdir /linuxos/centos6
#mount -t iso9660 -o loop /linuxiso/CentOS-5.9-x86_64-bin-DVD-1of2.iso /linuxos/centos5
#mount -t iso9660 -o loop /linuxiso/CentOS-6.3-x86_64-bin-DVD1.iso /linuxos/centos6
要复制多个系统的文件,先在/tftpboot中建保存文件的目录
#mkdir /tftpboot/centos5
#mkdir /tftpboot/centos6
将 安装对应光盘目录isolinux/下的vmlinuz、initrd.img 启动文件复制到/tftpboot相应的目录下
cp /linuxos/centos5/isolinux/initrd.img /tftpboot/centos5
cp /linuxos/centos5/isolinux/vmlinuz /tftpboot/centos5
cp /linuxos/centos6/isolinux/initrd.img /tftpboot/centos6
cp /linuxos/centos6/isolinux/vmlinuz /tftpboot/centos6
编辑boot启动界面,加入自定义安装项
vi /tftpboot/boot.msg 添加内容如下:
- To install or upgrade centos5, type: ^O0bcentos5<ENTER>^O07.
- To install or upgrade centos6, type: ^O0bcentos6<ENTER>^O07.
注:^O的输入方法是ctrl+V ctrl+O
接下来创建/tftpboot/pxelinux.cfg/ 目录,该目录用于存放客户端的配置文件。
mkdir -p /tftpboot/pxelinux.cfg/
将光盘中的isolinux/isolinux.cfg文件复制到/tftpboot/pxelinux.cfg/目录下并命名为default
cp /linuxos/centos5/isolinux/isolinux.cfg /tftpboot/pxelinux.cfg/default
查看default并修改修改这个文件:
以下内容根据原文件略加修改并做了注释
默认启动的是label linux'中标记的启动内核
default linux
# 显示boot:提示符。为0时则不提示,将会直接启动default参数中指定的内容。
prompt 1
# 在用户输入之前的超时时间,单位为 1/10 秒。
timeout 600
#显示某个文件的内容,注意文件的路径。默认是在 /tftpboot 目录下。也可以类似 #install/boot.msg(/tftpboot目录下install目录中的boot.msg文件)。
display boot.msg
按下F1这样的键后显示的文件。注意路径。默认是 /tftpboot。注:syslinux 官方网站上说目前只能使用 F1-F10。
F1 boot.msg
F2 options.msg
F3 general.msg
F4 param.msg
F5 rescue.msg
# label指定你在boot:提示符下输入的关键字。
# 比如:
# boot: text (输入text然后按回车键)
# 这个会启动 label text下标记的 kernel 和 initrd.img 文件(也就是文本安装模式).
# kernel 参数指定要启动的内核。同样要注意路径,默认是 /tftpboot 目录。
# append 指定追加给内核的参数,能够在 gurb 里使用的追加给内核的参数,在这里也都可以使用。
label linux
kernel vmlinuz
append initrd=initrd.img
label text
kernel vmlinuz
append initrd=initrd.img text
label ks
kernel vmlinuz
append ks initrd=initrd.img
label centos5
kernel centos5/vmlinuz
append initrd=centos5/initrd.img
label centos6
kernel centos6/vmlinuz
append initrd=centos6/initrd.img
label local
localboot 1
label memtest86
kernel memtest
append -
其中 ks暂时不用
label centos5
kernel centos5/vmlinuz
append initrd=centos5/initrd.img ks=nfs://192.168.32.128:/ks/centos5.cfg ksdevice=eth0
#ksdevice=eth0表示从eth0启动网络安装,对于有多个网卡的服务器需要指定如果不指定启动安装时会提示选择网卡这样就达不到全自动安装的效果
label centos6
kernel centos6/vmlinuz
append initrd=centos6/initrd.img ks=nfs://192.168.32.128:/ks/centos6.cfg
说明:
ks 参数,使用 kickstart 安装(无人值守自动应答),指定 kickstart 文件的位置,如果不需要全自动安装可以不加该参数
ksdevice参数的值可以是link 或者网卡eth0、eth1等等
默认 pxelinux.0 和 pxelinux.cfg 一定要在同一个目录下
#############################多版本系统安装#################################
我的default配置示例:
default linux
prompt 1
timeout 600
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
label text
kernel vmlinuz
append initrd=initrd.img text
label ks
kernel vmlinuz
append ks initrd=initrd.img
label centos5
kernel centos5/vmlinuz
Append initrd=centos5/initrd.img ks=nfs:192.168.32.128:/ks/centos5.cfg ksdevice=eth0
label centos6
kernel centos6/vmlinuz
Append initrd=centos6/initrd.img ks=nfs:192.168.32.128:/ks/centos6.cfg ksdevice=eth0
label local
localboot 1
label memtest86
kernel memtest
append -
kickstart 安装脚本(无人值守自动应答)
可参考系统下的/root/anaconda-ks.cfg文件
我的ks.cfg脚本示例:centos5
# Kickstart file automatically generated by anaconda.
install
nfs --server=192.168.32.128 --dir=/linuxos
lang en_US.UTF-8
keyboard us
xconfig --startxonboot
network --device eth0 --bootproto dhcp
rootpw --iscrypted $1$rHcYixGJ$G9J9M0XPhaEyuJhyAZFjQ/
firewall --enabled --port=22:tcp
authconfig --enableshadow --enablemd5
selinux --enforcing
timezone Asia/Shanghai
bootloader --location=mbr --driveorder=sda --append="rhgb quiet"
# The following is the partition information you requested
# Note that any partitions you deleted are not expressed
# here so unless you clear all partitions first, this is
# not guaranteed to work
#clearpart --linux --drives=sda
#part /boot --fstype ext3 --size=100 --ondisk=sda
#part pv.2 --size=0 --grow --ondisk=sda
#volgroup VolGroup00 --pesize=32768 pv.2
#logvol / --fstype ext3 --name=LogVol00 --vgname=VolGroup00 --size=1024 --grow
#logvol swap --fstype swap --name=LogVol01 --vgname=VolGroup00 --size=1008 --grow --maxsize=2016
%packages
@admin-tools
@base
@chinese-support
@core
@development-libs
@development-tools
@editors
@graphical-internet
@graphics
@hyperv
@kde-desktop
@kde-software-development
@sound-and-video
@system-tools
@text-internet
@base-x
system-config-netboot
system-config-netboot-cmd
kexec-tools
iscsi-initiator-utils
fipscheck
device-mapper-multipath
sgpio
imake
emacs
gimp-help
kdegraphics
libsane-hpaio
gimp-data-extras
gimp
kdemultimedia
audit
xorg-x11-utils
xorg-x11-server-Xnest
xorg-x11-server-Xvfb
#########################以下是kickstart参数说明##############################
说明:
install(可选)
告诉系统来安装全新的系统而不是在现有系统上升级.这是缺省的模式.必须指定安装的类型,如cdrom,harddrive,nfs或url(FTP 或HTTP安装).install命令和安装方法命令必须处于不同的行上.
cdrom从系统上的第一个光盘驱动器中安装.
harddrive从本地驱动器的vfat或ext2格式的红帽安装树来安装.
从BIOS分区来安装(如82).
从分区安装(如sdb2).
包含安装树的variant目录的目录.
例如:harddrive --partition=hdb2 --dir=/tmp/install-tree
nfs从指定的NFS服务器安装.
要从中安装的服务器(主机名或IP).
包含安装树的variant目录的目录.
用于挂载NFS输出的Mount选项(可选).
例如:nfs --server=nfsserver.example.com --dir=/tmp/install-tree
url通过FTP或HTTP从远程服务器上的安装树中安装.
例如:url --url http://<server>/<dir>
或:url --url ftp://<username>:<password>@<server>/<dir>
lang(必需)
设置在安装过程中使用的语言以及系统的缺省语言.
例如,要把语言设置为英语lang en_US.UTF-8
keyboard(必需) 设置键盘语言为英语keyboard us
network(可选) 设置网络
rootpw(必需) 设置root密码
rootpw --iscrypted $1$3vyGcR1n$oEYBaZ1IjMb7hU5lhhnv5/
设置root密码为123456 经过加密处理,可以参见cat /etc/shadow中的值或者使用下面设置
#rootpw 123456
firewall(可选) 禁用防火墙firewall --disable
selinux (可选) 禁用selinux selinux --disable
auth或authconfig(必需)
为系统设置验证选项.这和在安装后运行的authconfig命令相似.在缺省情况下,密码通常被加密但不使用影子文件(shadowed).
每个用户口令都使用md5加密.
timezone --utc Asia/Shanghai 设置时区为上海
bootloader(必需)
指定引导装载程序怎样被安装.对于安装和升级,这个选项都是必需的.
指定内核参数.要指定多个参数,使用空格分隔它们.
:bootloader --location=mbr --append="hdd=ide-scsi ide=nodma"
指定在BIOS引导顺序中居首的驱动器.
:bootloader --driveorder=sda,hda
指定引导记录被写入的位置.有效的值如下:mbr(缺省),partition(在包含内核的分区的第一个扇区安装引导装载程序)或none(不安装引导装载程序).
如果使用GRUB,把GRUB引导装载程序的密码设置到这个选项指定的位置.这应该被用来限制对可以传入任意内核参数的GRUB shell的访问.
如果使用GRUB,这和--password=类似,只是密码已经被加密.
升级现存的引导装载程序配置,保留其中原有的项目.该选项仅可用于升级.
clearpart(可选)
在创建新分区之前,从系统上删除分区.默认不会删除任何分区.
:如果使用了clearpart命令,--onpart命令就不能够用在逻辑分区上.
删除系统上所有分区.
指定从哪个驱动器上清除分区.
,下面的命令清除了主IDE控制器上的前两个驱动器上所有分区
clearpart --drives=hda,hdb --all
根据不同体系结构把磁盘标签初始化为缺省设置(例如,msdos用于x86而gpt用于Itanium).当安装到一个崭新的硬盘时,这很有用,安装程序不会询问是否应该初始化磁盘标签.
删除所有Linux分区.
缺省),不要删除任何分区.
part或partition(对于安装是必需的,升级可忽略).
.
Linux系统,安装程序会提示用户升级哪个系统.
:作为安装过程的一部分,所有被创建的分区都会被格式化,除非使用了--noformat和--onpart.
是分区的挂载点,它必须是下列形式中的一种:
例如,/,/usr,/home
该分区被用作交换空间,要自动决定交换分区的大小,使用--recommended选项.
swap --recommended
,但小于系统内存的两倍.
该分区用于 software RAID(参考 raid).
该分区用于 LVM(参考 logvol).
以MB为单位的分区最小值.在此处指定一个整数值,如500.不要在数字后面加MB.
告诉分区使用所有可用空间(若有),或使用设置的最大值.
当分区被设置为可扩充时,以MB为单位的分区最大值.在这里指定一个整数值,不要在数字后加MB.
用--onpart命令来告诉安装程序不要格式化分区.
或--usepart=,把分区放在已存在的设备上.
:partition /home --onpart=hda1,把/home置于必须已经存在的/dev/hda1上.
或--ondrive=,强迫分区在指定磁盘上创建.
:--ondisk=sdb把分区置于系统的第二个SCSI磁盘上.
强迫把分区分配为主分区,否则提示分区失败.
用fstype代替),这个选项不再可用了.应该使用fstype.
为分区设置文件系统类型.有效的类型为ext2,ext3,swap和vfat.
指定分区的起始柱面,它要求用--ondisk=或ondrive=指定驱动器.它也要求用--end=指定结束柱面或用--size=指定分区大小.
指定分区的结束柱面.它要求用--start=指定起始柱面.
指定此分区上创建的文件系统的节点大小.不是所有的文件系统都支持这个选项,所以在其他情况下它都被忽略.
自动决定分区的大小.
强迫在 BIOS 找到的特定磁盘上创建分区.
:如果因为某种原因分区失败了,虚拟终端3上会显示诊断信息.
注意:part / --fstype ext3 --size=100 --grow
--grow参数意思是使用所有可用空间如果想指明一个硬盘后面加上 --drives=sda参数,多个硬盘用逗号隔开例如part / --fstype ext3 --size=100 --grow --drives=sda,这里的--size=100显得有些多余但是我试过不能去掉,去掉之后自动安装无法进行。
kickstart的软件包选择
kickstart文件里使用%packages命令来列出想安装的软件包(仅用于全新安装,升级安装时不支持软件包指令).
%packages 指令也支持下面的选项:
不要安装@Base 组.如果想创建一个很小的系统,可以使用这个选项.
选项已经被取消了.目前依赖关系可以自动地被解析.
选项已经被取消了.目前依赖关系可以自动地被解析.
忽略缺少的软件包或软件包组,而不是暂停安装来向用户询问是中止还是继续安装.
:%packages --ignoremissing
#########################以上是kickstart参数说明##############################
搭建HTTP server安装服务器
安装apache
默认httpd.conf中定义的网站主目录为/var/www/html
这里先把光盘挂在到linux(当然也可以把镜像文件中的内容复制到系统中)
#mount /dev/cdrom /mnt/cdrom
或者挂载iso镜像
mount -o loop CentOS-5.6-x86_64-bin-DVD.iso /mnt/cdrom
将文件夹软链接到html目录下并命名为centos
#ln -s /mnt/cdrom /var/www/html/centos
访问http://192.168.32.128/centos即可 (192.168.32.128为你的centos http安装源服务器ip)
搭建NFS server安装服务器
#yum -y install nfs-*
#vi /etc/exports
/linuxos/centos5 *(ro,sync)
/linuxos/centos6 *(ro,sync)
/ks *(ro,sync)无人值守安装保存配置文件用
启动nfs服务
#service nfs restart
搭建FTP server 安装服务器
#yum install vsftpd
#vi /etc/vsftpd.conf
anonymous_enable=NO //不允许匿名访问默认为YES
chroot_list_enable=YES //是开启chroot
chroot_list_file=/etc/vsftpd/chroot_list //在chroot_list中存在的用户不允许切换目录
userlist_enable=YES // 在/etc/vsftpd/user_list中的用户不允许登录,如果设为NO只允许该文件中的用户登录 ftp
然后创建用户
#useradd -test -s /sbin/nologin -d /home/test #创建test用户不允许登录系统并且设置根目录为/home/test
#passwd test #设置test用户密码
注意:如果开启了chroot对test用户做限制,系统镜像文件只能放到test用户目录下才能用该用户远程ftp安装。(如果用ln软链接到该用户目录下由于test用户只能访问/home/test目录下的内容,ln过来的文件实际位置并不在/home/test目录下因此会导致远程ftp安装失败)
客户端网络安装
下面是手动安装,如果前面设置了无人值守自动安装以下的内容就无需再看
选择网络启动
启动之后出现如下画面:
选择语言
选择键盘语言
选择安装方式
http方式安装
设置ip :
DCHP方式
如果使用静态ip选择"Manual configuration" 然后选择“ok”
设置http服务器
下面列出:
设置NFS服务器
设置FTP服务器
选择实名登录
接下来的安装步骤跟光盘方式安装一样