PXE网络启动安装Oracle Linux 6.8

PXE网络启动安装Oracle Linux 6.8

概览

使用PXE boot server,通过网络启动并安装Linux,有几个好处:

  1. 多台机器可以同时安装,不需要多个启动介质(光盘、USB盘)
  2. 安装过程较少人工干预,提高安装效率
  3. 方便实现多台机器完全一致的安装内容,避免手工误差

实现PXE网络启动安装OS,需要配置Boot Server,Boot Server大致需要配置下面几个内容:

  1. NFS/HTTP/FTP 服务,任选一种,用于传输安装介质
  2. 配置kickstart,用于非交互模式安装Oracle Linux
  3. DHCP服务,用于给被安装的服务器分配IP地址,从而使用分配到的IP地址连接Boot Server
  4. TFTP服务,用于传输启动所需的文件

(本文档以DHCP+TFTP+HTTP为例,介绍配置Boot Server的方法)

安装Boot Server OS

为了使用方便,我们采用虚拟化的方式安装Boot Server,本文采用VMware Workstation,安装过程省略,注意几点:

  1. Boot Server的OS理论上可以和Boot Server最后供给的OS版本不同,我这里使用相同的OS,都是OEL6.8
  2. 为了方便使用kickstart,使用“desktop server” 模式安装
  3. 虚拟机网络采用桥接模式,确保外部机器和虚拟机可以双向通讯
  4. 关闭防火墙和selinux
  5. 为方便安装软件,配置本地yum repository,过程省略
  6. 本例中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

例子:

clip_image002

clip_image004

clip_image006

clip_image008

(分区配置这里,因为我们要用LVM,所以图形界面做不了,只能手工修改配置文件,但是一定要配置/boot,如果是UEFI启动,还需要配置/boot/efi, 后面我们会看完整的配置文件。

clip_image010

先用dhcp,装完再修改IP

clip_image012

我没截屏的页面就是用缺省值,另外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

  1. 在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.

Comments are closed.