PXE+DHCP+Nginx(HTTP)+KickStart无人值守安装CentOS Linux系统

工作中常常需要批量安装系统,本文主要记录下使用 PXE+DHCP+Nginx(HTTP)+KickStart 无人值守安装CentOS Linux系统,解决重复性的安装操作,提高工作效率。

开始先了解一下理论知识(引用《构建高可用性Linux服务器》中一段话):

什么PXE?

严格来说,PXE 并不是一种安装方式,而是一种引导的方式。进行 PXE 安装的必要条件是要安装的计算机中包含一个 PXE 支持的网卡(NIC),即网卡中必须要有 PXE Client。PXE (Pre-boot Execution Environment)协议使计算机可以通过网络启动。协议分为 client 和 server 端,PXE client 在网卡的 ROM 中,当计算机引导时,BIOS 把 PXE client 调入内存执行,由 PXE client 将放置在远端的文件通过网络下载到本地运行。运行 PXE 协议需要设置 DHCP 服务器和 TFTP 服务器。DHCP 服务器用来给 PXE client(将要安装系统的主机)分配一个 IP 地址,由于是给 PXE client 分配 IP 地址,所以在配置 DHCP 服务器时需要增加相应的 PXE 设置。此外,在 PXE client 的 ROM 中,已经存在了 TFTP Client。PXE Client 通过 TFTP 协议到 TFTP Server 上下载所需的文件。

什么是KickStart?

KickStart是一种无人职守安装方式。KickStart的工作原理是通过记录典型的安装过程中所需人工干预填写的各种参数,并生成一个名为ks.cfg的文件;在其后的安装过程中(不只局限于生成KickStart安装文件的机器)当出现要求填写参数的情况时,安装程序会首先去查找KickStart生成的文件,当找到合适的参数时,就采用找到的参数,当没有找到合适的参数时,才需要安装者手工干预。这样,如果KickStart文件涵盖了安装过程中出现的所有需要填写的参数时,安装者完全可以只告诉安装程序从何处取ks.cfg文件,然后去忙自己的事情。等安装完毕,安装程序会根据ks.cfg中设置的重启选项来重启系统,并结束安装。

PXE+DHCP+Nginx(HTTP)+KickStart 安装Linux系统条件和步骤:

  • DHCP 服务器。
  • TFTP 服务器。
  • KickStart 软件生成的 ks.cfg 配置文件。
  • 存放系统安装文件的服务器(NFS、FTP、HTTP),本文使用的是HTTP方式。
  • 带PXE支持的网卡主机。

注:PXE服务器因为需要配置KickStart,需要安装gnome桌面环境!

安装所需服务

yum -y install dhcp tftp-server gcc-c++ ncurses-devel

安装Nginx需要的用户、组、和目录

groupadd www
useradd -g www -s /sbin/nologin www
mkdir -p /data/pdhk #存放系统安装文件
mkdir -p /data/wslogs/pdhk
chmod +w /data/pdhk
chmod 777 //data/wslogs/pdhk
chown -R www:www /data/pdhk

安装Nginx,提供HTTP服务

tar zxvf pcre-8.12.tar.gz
cd pcre-8.12/
./configure && make && make install && cd ..

tar zxvf nginx-1.0.12.tar.gz
cd nginx-1.0.12/
./configure 
--user=www 
--group=www 
--prefix=/usr/local/webserver/nginx 
--with-http_stub_status_module 
--with-http_ssl_module 
--with-http_flv_module 
--with-http_gzip_static_module

make && make install && cd ..

别忘记了启动Nginx,这里Nginx配置就不详细述了,可以参考:构建高性能Web环境(linux/nginx/mysql/php-fastcgi),我这里指定web目录是:/data/pdhk/

挂载系统光盘并复制文件到web根目录

mount /dev/cdrom /mnt/
cp -fr /mnt/* /data/pdhk/

配置TFTP服务

vim /etc/xinetd.d/tftp

# 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             = -s /tftpboot
        disable                 = no
        per_source              = 11
        cps                     = 100 2
        flags                   = IPv4
}
service xinetd restart

配置支持PXE的启动顺序

注:如果 /tftpboot 目录没有,可以自己创建。

复制 pxelinux.0/tftpboot

cp /usr/lib/syslinux/pxelinux.0 /tftpboot/

复制光盘文件中相关组件文件到 /tftpboot

cp /data/pdhk/images/pxeboot/{vmlinuz,initrd.img} /tftpboot/
cp /data/pdhk/isolinux/*.msg /tftpboot/

/tftpboot 目录中创建一个 pxelinux.cfg 目录,并复制光盘中的 isolinux/isolinux.cfg 文件到该目录中,命名为:default

mkdir -p /tftpboot/pxelinux.cfg
cp /data/pdhk/isolinux/isolinux.cfg /tftpboot/pxelinux.cfg/default

到这里就可以通过网络引导手动安装了,下面继续无人值守配置:

编辑 default 文件

vim /tftpboot/pxelinux.cfg/default
#默认启动的是 label linux 中标记的启动内核。
default linux

#显示 boot: 提示符。为 0 时则不提示,将会直接启动 default 参数中指定的内容。
prompt 1

#在用户输入之前的超时时间,单位为 1/10 秒。
timeout 100

#显示某个文件的内容,注意文件的路径。默认是在 /tftpboot 目录下。也可以指定位类似 install/rhel5/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: linux[ENTER]
# 这个会启动 label linux 下标记的 kernel 和 initrd.img 文件。
# 这里还定义了其它几个关键字:
# boot: text
# boot: ks
# kernel 参数指定要启动的内核。同样要注意路径,默认是 /tftpboot 目录。
# append 指定追加给内核的参数,能够在 gurb 里使用的追加给内核的参数,在这里也都可以使用。
# 使用 kickstart 安装,可以在 ks 参数后直接指定 kickstart 文件的位置。

label linux
  kernel vmlinuz
  append initrd=initrd.img ks=http://192.168.2.250/ks.cfg

label text
  kernel vmlinuz
  append initrd=initrd.img text

label ks
  kernel vmlinuz
  append ks initrd=initrd.img

label local
  localboot 1

label memtest86
  kernel memtest

  append -

配置DHCP服务器

cp /usr/share/doc/dhcp-3.0.5/dhcpd.conf.sample /etc/dhcpd.conf
vim /etc/dhcpd.conf
ddns-update-style interim;
ignore client-updates;
allow booting; #定义能够PXE启动
allow bootp; #定义支持bootp
next-server 192.168.2.250; #PXE服务器IP地址
filename "/pxelinux.0"; #PXE启动文件,不能写在 subnet 下面


subnet 192.168.2.0 netmask 255.255.255.0 {

        option routers                  192.168.2.1;
        option subnet-mask              255.255.255.0;

        option nis-domain               "linuxde.net";
        option domain-name              "linuxde.net";

        option domain-name-servers      192.168.2.1;
        range dynamic-bootp 192.168.2.128 192.168.2.254;

        default-lease-time 21600;
        max-lease-time 43200;

}
service dhcpd start

关于DHCP服务器更详细的配置可以参考:Linux下DHCP服务器(CentOS系统)安装和配置详解

安装KickStart,并配置

yum -y install system-config-kickstart
system-config-kickstart

相关截图:

下面是我的 ks.cfg 配置文件内容:

#platform=x86, AMD64, 或 Intel EM64T
# System authorization information
auth  --useshadow  --enablemd5

# Use text mode install
text

# System bootloader configuration
bootloader --location=mbr

# Clear the Master Boot Record
zerombr

# Partition clearing information
clearpart --all --initlabel

# Use graphical install
graphical

# Firewall configuration
firewall --enabled --ssh  --trust=eth0

# Run the Setup Agent on first boot
firstboot --disable

#如果是安装RHEL,这里的参数是跳过注册码输入。
key --skip

# System keyboard
keyboard us

# System language
lang en_US

# Installation logging level
logging --level=info

# Use network installation
url --url=http://192.168.2.250/

# Network information
network --bootproto=dhcp --device=eth0 --onboot=on

# Reboot after installation
reboot

#Root password
rootpw --iscrypted $1$9axXOFW/$6eZEMetqJORIOiYE88gSq1


# SELinux configuration
selinux --disabled

# Do not configure the X Window System
skipx

# System timezone
timezone --isUtc Asia/Shanghai

# Install OS instead of upgrade
install

# Disk partitioning information
part /boot --bytes-per-inode=4096 --fstype="ext3" --size=200
part swap --bytes-per-inode=4096 --fstype="swap" --size=4096
part / --bytes-per-inode=4096 --fstype="ext3" --size=20480
part /data --bytes-per-inode=4096 --fstype="ext3" --grow --size=1

%packages
@base
@core
@editors
keyutils
trousers
fipscheck
device-mapper-multipath

复制 ks.cfg 文件到 /data/pdhk 目录中。

cp ks.cfg /data/pdhk/ks.cfg

最后设置客户端BIOS选择从网卡启动。具体方法因BIOS版本不同而异。网卡中的PXE代码会联系DHCP服务器来获取IP地址以及启动镜像,然后启动镜像被载入并运行。至此PXE无人值守网络安装CentOS Linux操作系统完成。


附上网友对如何设置PXE启动做的回答:

检查BIOS设置,看 Intergrated peripherals 内是否有bootrom或相关选项,如果有则支持网络启动,将其设置为允许,并选择需要的PXE或RPL协议,再设置首选启动设备为LAN即可;如果没有类似选项,可将所有启动选项都设置为LAN,关闭boot other device,启动后看是否有pxe或RPL的提示信息,如果没有则确定主板不支持pxe或rpl的远程启动,否则支持。

如果支持网络远程启动,对于realtek网卡可以通过Shift+F10进入设置项,intel网卡可以通过ctrl+s进入设置按下电源开关,系统开始自检,当自检完硬盘、光驱后,出现以下提示:Realtek RTL 8139 (A/B/C)/RTL8130 Boot Agent Press Shift-F10 to configue…… 

此信息默认为停留3秒钟,此时,按下SHIFT--F10进入网卡配置菜单,共有四个选择:

  • Network Boot Protocol (PXE   RPL)按空格改变网络引导协议
  • Boot order (Rom Disable禁止BOOR ROM引导   Int 18h先从BIOS设置中的次序引导Int19h先从BOOT ROM引导PnP/BEV<BBS>从BBS引导)
  • Show config Message (Enable   Disable)启动时是否显示Shift-F10
  • Show Message time (3 seconds    4seconds     5seconds   8seconds    10seconds)   启动时Shift-F10提示信息停留的时间。
, , , 相关的文章: