PXE网络启动安装Oracle Linux 6.8
概览
使用PXE boot server,通过网络启动并安装Linux,有几个好处:
- 多台机器可以同时安装,不需要多个启动介质(光盘、USB盘)
- 安装过程较少人工干预,提高安装效率
- 方便实现多台机器完全一致的安装内容,避免手工误差
实现PXE网络启动安装OS,需要配置Boot Server,Boot Server大致需要配置下面几个内容:
- NFS/HTTP/FTP 服务,任选一种,用于传输安装介质
- 配置kickstart,用于非交互模式安装Oracle Linux
- DHCP服务,用于给被安装的服务器分配IP地址,从而使用分配到的IP地址连接Boot Server
- TFTP服务,用于传输启动所需的文件
(本文档以DHCP+TFTP+HTTP为例,介绍配置Boot Server的方法)
安装Boot Server OS
为了使用方便,我们采用虚拟化的方式安装Boot Server,本文采用VMware Workstation,安装过程省略,注意几点:
- Boot Server的OS理论上可以和Boot Server最后供给的OS版本不同,我这里使用相同的OS,都是OEL6.8
- 为了方便使用kickstart,使用“desktop server” 模式安装
- 虚拟机网络采用桥接模式,确保外部机器和虚拟机可以双向通讯
- 关闭防火墙和selinux
- 为方便安装软件,配置本地yum repository,过程省略
- 本例中boot server的ip地址为192.168.0.44
配置HTTP Server
安装httpd软件,并配置开机启动
# yum install httpd
# chkconfig httpd on
# service httpd start
将OEL6.8的安装介质iso文件,挂载到虚拟机的虚拟光驱,然后mount到http server的文档根目录之下的一个目录,保证通过http可以访问到OEL6.8的安装介质。(http的缺省文档根目录是/var/www/html)
# mkdir -p /var/www/html/OEL68
# mount /dev/sr0 /var/www/html/OEL68
可以使用浏览器访问http://192.168.0.44/OEL68检测是否能访问到安装介质,来确认配置正确。
安装并使用kickstart生成配置文件
安装kickstart:
# yum install system-config-kickstart
启动kickstart:
# system-config-kickstart
例子:
(分区配置这里,因为我们要用LVM,所以图形界面做不了,只能手工修改配置文件,但是一定要配置/boot,如果是UEFI启动,还需要配置/boot/efi, 后面我们会看完整的配置文件。
先用dhcp,装完再修改IP
我没截屏的页面就是用缺省值,另外packages那页,根据自己的情况选择吧。最后生成的配置文件, 保存为oel68_ks.cfg:
#######################################################################
#platform=x86, AMD64, or Intel EM64T
#version=DEVEL
# Firewall configuration
firewall –disabled
# Install OS instead of upgrade
install
# Use network installation
url –url=”http://192.168.0.44/OEL68″
# Root password
rootpw –iscrypted $1$QthAa9SM$hrtHkb660ctqHvrKStWkz/
# System authorization information
auth –useshadow –passalgo=sha512
# Use graphical install
graphical
firstboot –disable
# System keyboard
keyboard us
# System language
lang en_US
# SELinux configuration
selinux –disabled
# Installation logging level
logging –level=info
# Reboot after installation
reboot
# System timezone
timezone Asia/Shanghai
# Network information
network –bootproto=dhcp –device=eth2 –onboot=on
# System bootloader configuration
bootloader –location=mbr
# Clear the Master Boot Record
zerombr
# Partition clearing information
clearpart –all –initlabel
# Disk partitioning information
part /boot –fstype=”ext4″ –ondisk=/dev/sda –size=500
part /boot/efi –fstype=”ext4″ –ondisk=/dev/sda –size=500
part pv.01 –grow –ondisk=/dev/sda –size=1
volgroup VG00 pv.01
logvol / –name=LV_ROOT –fstype=ext4 –vgname=VG00 –size=102400
logvol /var –name=LV_VAR –fstype=ext4 –vgname=VG00 –size=10240
logvol swap –name=LV_SWAP –fstype=swap –vgname=VG00 –recommended
logvol /u01 –name=LV_U01 –fstype=ext4 –vgname=VG00 –size=1 –grow
%packages
@additional-devel
@base
@basic-desktop
@compat-libraries
@desktop-platform
@development
@fonts
@general-desktop
@graphical-admin-tools
@internet-browser
@java-platform
@legacy-unix
@legacy-x
@performance
@perl-runtime
@server-platform-devel
@storage-client-iscsi
@x11
cpupowerutils
icedtea-web
java-1.8.0-openjdk
tigervnc-server
tuned
tuned-utils
%end
#######################################################################
红色部分是分区的定义,其中
part /boot --fstype="ext4" --ondisk=/dev/sda --size=500
part /boot/efi --fstype="ext4" --ondisk=/dev/sda --size=500
是定义两个普通分区
part pv.01 --grow --ondisk=/dev/sda --size=1
volgroup VG00 pv.01
是定义PV和VG,VG名字是VG00,–grow代表占满磁盘剩余空闲空间
logvol / --name=LV_ROOT --fstype=ext4 --vgname=VG00 --size=102400
logvol /var --name=LV_VAR --fstype=ext4 --vgname=VG00 --size=10240
logvol swap --name=LV_SWAP --fstype=swap --vgname=VG00 --recommended
logvol /u01 --name=LV_U01 --fstype=ext4 --vgname=VG00 --size=1 --grow
是LV定义。
配置文件oel68_ks.cfg保存到/var/www/html/目录下,确保通过浏览器可以访问到:http://192.168.0.44/oel68_ks.cfg
配置DHCP Server
# yum install dhcp
# chkconfig dhcpd on
编辑”/etc/dhcp/dhcpd.conf” 文件,下面的例子,需要根据你的实际情况做一些修改:
#######################################################################
allow booting;
allow bootp;
set vendorclass = option vendor-class-identifier;
option pxe-system-type code 93 = unsigned integer 16;
set pxetype = option pxe-system-type;
option domain-name “hthorizon.com”;
subnet 192.168.0.0 netmask 255.255.255.0 {
option domain-name-servers 192.168.0.1; ##不是必须
option broadcast-address 192.168.0.255;
option routers 192.168.0.1; ##不是必须
default-lease-time 14400;
max-lease-time 28800;
if substring(vendorclass, 0, 9)=”PXEClient” {
if pxetype=00:06 or pxetype=00:07 {
filename “efi/BOOTX64.efi”;
} else {
filename “pxelinux/pxelinux.0”;
}
}
pool {
range 192.168.0.45 192.168.0.59; ##dhcp分配地址的范围
}
next-server 192.168.0.44; ## tftp server地址
}
#######################################################################
红色部分是比较关键的部分,这部分针对UEFI和Legacy 两种不同启动模式进行了判断和处理,这也是Oracle Linux的官方联机文档和网上其他人写的步骤的主要区别,网上流传的其他方法,这块基本不处理UEFI启动模式的情况,所以,如果是UEFI启动模式,就会出现问题。
上面next-server后面跟的地址就是tftp server的地址,我们这里因为是dhcp,http,tftp都是一台机器,所以就是192.168.0.44。
启动dhcpd:
# service dhcpd start
配置TFTP Server
安装TFTP并配置
# yum install syslinux tftp-server
编辑/etc/xinetd.d/tftp 文件:
#######################################################################
service tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /var/lib/tftpboot
disable = no
per_source = 11
cps = 100 2
flags = IPv4
}
#######################################################################
注意把disable改成no,tftp的根目录是/var/lib/tftpboot,所以后续我们会把启动所需的文件复制到这个目录下。
创建目录并复制启动文件
# mkdir -p /var/lib/tftpboot/efi
# mkdir -p /var/lib/tftpboot/pxelinux/pxelinux.cfg
我们前面已经把OEL6.8的安装介质mount在/var/www/html/OEL68目录下了,现在从安装介质中复制启动所需的文件到对应目录,以下是用于UEFI启动的文件:
# cp /var/www/html/OEL68/EFI/BOOT/BOOTX64.efi /var/lib/tftpboot/efi/
# cp /var/www/html/OEL68/EFI/BOOT/splash.xpm.gz /var/lib/tftpboot/efi/
# cp /var/www/html/OEL68/isolinux/vmlinuz /var/lib/tftpboot/efi/
# cp /var/www/html/OEL68/isolinux/initrd.img /var/lib/tftpboot/efi/
以下是用于Legacy模式启动的文件,内核其实是一样的,不过在不同的位置都要放一份
# ln /var/lib/tftpboot/efi/vmlinuz /var/lib/tftpboot/pxelinux/vmlinuz
# ln /var/lib/tftpboot/efi/initrd.img /var/lib/tftpboot/pxelinux/initrd.img
# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/pxelinux/pxelinux.0
启动TFTP Server
# service xinetd start
# chkconfig xinetd on
配置Boot-Loader配置文件
UEFI对用的配置文件是efi/efidefault, Legacy模式对应的文件是pxelinux/pxelinux.cfg/default,在我们这个例子里面,对应的绝对路径就是:
UEFI:/var/lib/tftpboot/efi/efidefault
Legacy: /var/lib/tftpboot/pxelinux/pxelinux.cfg/default
(UEFI)efidefault的例子:
default=0
hiddenmenu
splashimage=(nd)/splash.xpm.gz
timeout=5
title Oracle Linux 6 Update 8 Installation
root (nd)
kernel /vmlinuz ksdevice=eth1 kssendmac ks=http://192.168.0.44/oel68_ks.cfg
initrd /initrd.img
(Legacy)default的例子:
prompt 0
default oel6u8
timeout 5
label oel6u8
kernel vmlinuz
append initrd=initrd.img ksdevice=eth1 kssendmac ks=http://192.168.0.44/oel68_ks.cfg
参数ks的值,就是前面生成的kickstart的配置文件的位置,ksdevice就是指明被安装OS的主机,用哪个网卡连接,获取安装介质。
如果这个ksdevice给错了,安装程序会报错,并列出系统中所有设备让你选择,所以这个给错了也不影响安装,第一次可以先找一个机器试试,如果错了,改正配置,后面的安装就不用干预了。
所有这些配置完成后,就可以启动被安装的机器,通过PXE方式安装OS了。
注意事项
- 这种PXE方式安装,有潜在的风险。如果有一台生产机,和你要安装的机器在同一网段,在你安装时,碰巧重启了,碰巧又是PXE boot排在boot order的最前面,碰巧又是连接网络的网卡和你设置在ksdevice参数中的一致,那么就有可能被重新安装的OS,这还是很危险的。所以用这种方式进行安装,建议用自带的交换机,组成临时网络进行安装,安装后再改变网络。
- 如果启动模式是UEFI,那么安装后,安装程序会改动机器的boot order,将新安装的设备放到第一位,这样,如果你在kickstart里面选择了”Reboot system after installation”,系统会优先启动到新安装的OS。如果启动模式是Legacy,那么安装后,无法透过UEFI修改BIOS中的boot order,那么下次启动还是会从PXE启动,如果不干预,就会重复安装过程,所以在Legacy启动模式下,最好不要选择”Reboot system after installation”。或者,启动顺序中硬盘还是排在前面,安装时用临时的启动顺序,比如IBM的机器,启动时用F12调出启动设备菜单,通过这个选择用PXE启动,完成安装,再次重启时会用硬盘启动。
One thought on “PXE网络启动安装Oracle Linux 6.8”
在boot loader配置文件中,如果是legacy启动模式,可以使用ksdevice=bootif 然后,在整行的最后添加 ipappend 2 ,也就是:
append initrd=initrd.img ksdevice=bootif kssendmac ks=http://192.168.0.44/oel68_ks.cfg ipappend 2
让系统用启动的网卡来连接HTTP server,获取介质,这样的方式在UEFI模式下不生效,会导致安装中止,系统提问用哪个设备连接http server。
Comments are closed.