PXE+Kickstart+Nginx(http)+DHCP无人值守安装Centos系统
1.1 什么是PXE
PXE(Pre-boot Execution Environment,预启动执行环境)是由Intel公司开发的最新技术,工作于Client/Server的网络模式,支持工作站通过网络从远端服务器下载映像,并由此支持通过网络启动操作系统,在启动过程中,终端要求服务器分配IP地址,再用TFTP(trivial file transfer protocol)或MTFTP(multicast trivial file transfer protocol)协议下载一个启动软件包到本机内存中执行,由这个启动软件包完成终端基本软件设置,从而引导预先安装在服务器中的终端操作系统。
严格来说,PXE 并不是一种安装方式,而是一种引导方式。进行 PXE 安装的必要条件是在要安装的计算机中必须包含一个 PXE 支持的网卡(NIC),即网卡中必须要有 PXE Client。PXE 协议可以使计算机通过网络启动。此协议分为 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,那么它就可以通过 TFTP 协议到 TFTP Server 上下载所需的文件了.
1.2 什么是Kickstart
Kickstart是一种无人值守的安装方式。它的工作原理是在安装过程中记录典型的需要人工干预填写的各种参数,并生成一个名为ks.cfg的文件。如果在安装过程中(不只局限于生成Kickstart安装文件的机器)出现要填写参数的情况,安装程序首先会去查找Kickstart生成的文件,如果找到合适的参数,就采用所找到的参数;如果没有找到合适的参数,便需要安装者手工干预了。所以,如果Kickstart文件涵盖了安装过程中可能出现的所有需要填写的参数,那么安装者完全可以只告诉安装程序从何处取ks.cfg文件,然后就去忙自己的事情。等安装完毕,安装程序会根据ks.cfg中的设置重启系统,并结束安装.
1.3 PXE+Kickstart 无人值守安装操作系统完整过程如下
第一步:PXE Client向DHCP服务器发送请求
首先,将支持PXE的网络接口卡(NIC)的客户端BIOS设置为网络启动,通过PXE BootROM(自启动芯片)会一UDP协议发送一个广播请求,向网络中的DHCP服务器申请一个IP地址信息.
第二步:DHCP服务器提供信息
DHCP服务器收到客户端请求,验证是否来自PXE Client的请求,验证通过后向客户端回响应信息,包括:客户端IP地址,TFTP Server、pxelinux.0文件名.
第三步:PXE客户端请求下载启动文件
客户端请求传送启动所需文件,包括pxelinux.0、pxelinux. cfg/default、vmlinuz、initrd.img等文件.
第四步:Boot Install Server响应客户端请求并传送文件
TFTP服务器收到客户端请求后,彼此间进行通信应答,确定启动参数,BootROM由TFTP通信协议从Boot Server下载启动安装程序所必需文件(pxelinux.0pxelinux.cfg/default).default文件下载完成后,会根据
该文件中定义的引导顺序,启动Linux安装程序的引导内核.
第五步:请求下载Kickstart配置文件
客户端通过pxelinux.cfg/default文件成功的引导Linux运行是因为制订了Kickstart配置文件信息所以当一vmlinuz、initrd.img组成的系统运行成功后系统确定你通过什么安装介质来安装Linux如果是通过网络安装(NFS、FTP、HTTP)则会在这个时候初始化网络,并请求下载Kickstart配置文件.刚才PXE不是已经获取过IP地址了吗?为什么现在还需要一次因为现在已经进入了有vmlinuz、initrd.img等文件组成的系统中了,由于PXE的网络配置并不能传递给这个系统,所以才会进行两次获取IP地址过程.
第六步:客户端安装操作系统
将ks.cfg文件下载后,通过该文件找到OS Sserver,并按照该文件的配置请求下载安装过程需要的文件,OS Server和客户端建立连接后,将开始传输文件,客户端将开始安装操作系统,安装完成后,将会根据ks.cfg文件设置来重启或关机注意:安装完成后开机一定要将BIOS修改会从硬盘启动,不然的话又会重复的自动安装操作系统.
1.4 系统环境
试验环境:Vmware Workstation10
网络模式:NAT模式
DHCP、TFTP、HTTP、等服务在同一台服务其IP:10.0.0.132
[[email protected] ~]# uname -a
Linux PXE 2.6.32-504.12.2.el6.x86_64 #1 SMP Wed Mar 11 22:03:14 UTC2015 x86_64 x86_64 x86_64 GNU/Linux
[[email protected] ~]# cat /etc/redhat-release
CentOS release 6.6 (Final)
[[email protected] ~]# uname -r
2.6.32-504.12.2.el6.x86_64
[[email protected] ~]# uname -m
x86_64
[[email protected] ~]# uname -n
PXE
[[email protected] ~]# /etc/init.d/iptables stop
iptables: Setting chains to policy ACCEPT: filter [ OK ]
iptables: Flushing firewall rules: [ OK ]
iptables: Unloading modules: [ OK ]
[[email protected] ~]# vim /etc/sysconfig/selinux
SELINUX=disabled
1.5 准备工作
生成ks.cfg文件需要system-config-kickstart 工具,而此工具依赖于X Windows,所以我们需要安装X Windows 和Desktop 并重启系统.
[[email protected] ~]# yum -y groupinstall "X Window System"
安装gnome(6.2中Desktop就是gnome)
[[email protected] ~]# yum groupinstall "Desktop"
安装gnome(6.0以下的系统)
[[email protected] ~]# yum -y groupinstall ‘GNOME Desktop Environment‘
如果需要中文界面我们需要安装中文语言
[[email protected] ~]# yum groupinstall "Chinese Support"
最关键的一步了启动gnome
[[email protected] ~]# startx
1.6 无人值守安装配置过程
1.6.1 配置PXE网络安装的说明及步骤顺序
- 创建/data/sys目录用于Nginx web目录,用于存放linux系统的安装文件.
- 配置TFTP服务器,用于提供客户端PXE引导所必须的启动文件
- 配置DHCP,用于给客户端提供IP地址及其它信息
- 配置kickstart用于自动应答操作系统安装
- 安装Pcre
- 安装Nginx及配置
- 使用网卡的PXE功能引导客户机
1.6.2 创建/data/sys目录并挂载系统镜像
创建/data/sys目录,并将光盘内容拷贝到共享目录中
[[email protected] ~]# mkdir –p /data/sys
把光盘放入光驱,也可以把系统ISO文件传到服务器下面解压
挂载镜像到mnt目录下,再将系统镜像里边的内容拷贝到共享目录/data/sys/中去.
[[email protected] ~]# mount /dev/cdrom /mnt/
mount: block device /dev/sr0 iswrite-protected, mounting read-only
拷贝文件的过程时间略长请大家耐心等待.稍安勿躁!
[[email protected] ~]# cp -a /mnt/* /data/sys/
特别提示:如果使用虚拟机做实验,只需要在vm里使用ISO文件即可.
1.6.3 安装TFTP及Xinetd服务
在安装PXE过程中,客户机通过TFTP协议从TFTP服务器下载引导文件并执行,因此,需要配置TFTP服务器和PXE的引导配置完成这个过程.
如果在yum安装之前执行下面的操作,可以把yum安装的rpm包保存下来
[[email protected] ~]# sed -i‘s#keepcache=0#keepcache=1#g‘ /etc/yum.conf
[[email protected] ~]# yum -y installtftp-server* xinetd
[[email protected] ~]# tree /var/cache/yum/
/var/cache/yum/
`-- x86_64
`-- 6
|-- base
| |-- packages
| | |-- tftp-server-0.49-7.el6.x86_64.rpm
| | `--xinetd-2.3.14-39.el6_4.x86_64.rpm
配置tftp服务
TFTP服务使用xinetd服务管理,编辑/etc/xinetd.d/tftp文件,将文件中disable的参数由yes改为no.
[[email protected] ~]# vim /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 由原来的yes改为no
per_source = 11
cps = 100 2
flags = IPv4
}
配置完后重启xinetd服务使tftp服务器生效!
[[email protected] ~]# /etc/init.d/xinetd start
Starting xinetd: [ OK ]
[[email protected] ~]# chkconfig --level 3 xinetd on
[[email protected] ~]# chkconfig --list xinetd
xinetd 0:off 1:off 2:off 3:on 4:on 5:on 6:off
1.6.4 配置支持PXE引导启动程序
PXE启动映像文件由syslinux软件提供,CentOS Linux光盘已提供,也可以到syslinux主页http://www.syslinux.org/wiki/index.php/The_Syslinux_Project下载rmp包安装.只要安装了syslinux(默认没有安装),就会生成一个pxelinux.o文件,将这个文件复制到TFTP默认路径即可!
syslinux是一个功能强大的引导加载程序,而且兼容各种介质,更加确切地说:SYSLINUX是一个小型的Linux操作系统,它的目的是简化首次安装Linux的时间,并建立修护或其它特殊用途的启动盘.
[[email protected] ~]# yum -y install syslinux
复制pxelinux.0引导文件文件至/var/lib/tftpboot/ 文件夹中
[[email protected] ~]# cp /usr/share/syslinux/pxelinux.0/var/lib/tftpboot/
[[email protected] ~]# ll /var/lib/tftpboot/
total 28
-rw-r--r--. 1 root root 26759 Apr 2414:32 pxelinux.0
用于网络启动的内核文件
将CentOS安装光盘目录中的images/pxeboot/{vmlinuz,initrd.img}启动文件复制到某个安装目录,比如/var/lib/tftpboot/
内核文件
[[email protected] ~]# cp/data/sys/images/pxeboot/vmlinuz /var/lib/tftpboot/
驱动文件
[[email protected] ~]# cp/data/sys/images/pxeboot/initrd.img /var/lib/tftpboot/
下面的这个.msg可以不做,在这里我没有复制
[[email protected] ~]# cp/data/sys/isolinux/*.msg /var/lib/tftpboot/
[[email protected] ~]# mkdir -p /var/lib/tftpboot/pxelinux.cfg
[[email protected] ~]# cp /data/sys/isolinux/isolinux.cfg/var/lib/tftpboot/pxelinux.cfg/default
[[email protected] ~]# cat /var/lib/tftpboot/pxelinux.cfg/default
default vesamenu.c32
默认启动的是"labeltext"中标记的内核
default text
显示boot提示符,为"0"时则不提示将会直接启动default参数中指定的内容.
prompt 1
在用户输入之前的超时时间,单位为 1/10 秒
timeout 6
显示某个文件的内容,注意文件的路径.默认是在/var/lib/tftpboot/ 目录下。也可以指定位类似‘/install/boot.msg‘这样的,路径+文件名.
display boot.msg
menu background splash.jpg
menu title Welcome to CentOS 6.6!
menu color border 0 #ffffffff #00000000
menu color sel 7 #ffffffff #ff000000
menu color title 0 #ffffffff #00000000
menu color tabmsg 0 #ffffffff #00000000
menu color unsel 0 #ffffffff #00000000
menu color hotsel 0 #ff000000 #ffffffff
menu color hotkey 7 #ffffffff #ff000000
menu color scrollbar 0 #ffffffff #00000000
label linux
menu label ^Install orupgrade an existing system
menu default
kernel vmlinuz
append initrd=initrd.img
label vesa
menu label Install systemwith ^basic video driver
kernel vmlinuz
append initrd=initrd.img xdriver=vesanomodeset
label rescue
menu label ^Rescue installedsystem
kernel vmlinuz
append initrd=initrd.imgrescue
label local
menu label Boot from ^localdrive
localboot 0xffff
label memtest86
menu label ^Memory test
kernel memtest
append –
label指定你在 ‘boot:‘ 提示符下输入的关键字,比如boot: linux[ENTER],这个会启动‘label linux‘ 下标记的kernel和initrd.img 文件
label text
kernel vmlinuz
告诉系统,从哪里获取ks.cfg文件
append initrd=initrd.imgks=http://10.0.0.132/ks.cfg
1.7 安装及配置DHCP服务
在PXE安装过程中,PXE客户机主要通过DHCP服务获取IP地址、PXE引导文件名称,然后在客户机上通过TFTP协议从TFTP服务器下载引导文件并执行,从而启动系统安装程序执行后,接着下载并安装程序启动安装.
1.7.1 用Yum方式安装DHCP服务
[[email protected] ~]# yum -y install dhcp*
1.7.2 配置DHCP
在/etc/dhcpd.conf中增加tftp-server需要推送给客户端的启动文件(bootstrap):filename “pxelinux.0”;因为tftp的默认目录是/var/lib/tftpboot,所以文件的绝对路径是:/var/lib/tftpboot/pxelinux.0;
另外需要指定next-server参数,告诉客户端在获取到pxelinux.0文件后去哪里获取其余的启动文件:next-server 10.0.0.132
[[email protected] ~]# cat/etc/dhcp/dhcpd.conf
# DHCP Server Configuration file.
# see /usr/share/doc/dhcp*/dhcpd.conf.sample
# see ‘man 5 dhcpd.conf‘
ddns-update-style interim;
ignore client-updates;
PXE文件名
filename "pxelinux.0";
TFTP服务器地址
next-server 10.0.0.132;
DNS地址
option domain-name-servers202.106.0.20,8.8.8.8;
分配IP地址网段
subnet 10.0.0.0 netmask 255.255.255.0 {
网关
option routers 10.0.0.132;
掩码
option subnet-mask 255.255.255.0;
DHCP地址池
range dynamic-bootp 10.0.0.136 10.0.0.146;
default-lease-time 21600;
max-lease-time 43200;
}
1.7.3 创建DHCP服务日志文件启动DHCP服务,并设置开机自启动
[[email protected] ~]# touch /var/log/dhcpd.log
[[email protected] ~]# chmod 600 /var/log/dhcpd.log
[[email protected] ~]# /etc/init.d/dhcpd restart
Starting dhcpd: [ OK ]
[[email protected] ~]# chkconfig dhcpd on
[[email protected] ~]# chkconfig --list dhcpd
dhcpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
1.8 Kickstart安装配置
通常安装操作系统过程中,需要大量得和服务器进行交互操作,为了减少这个交互过程可以使用kickstart。使用kickstart,只需事先定义好一个kickstart自动应答配置文件ks.cfg(通常存放在服务器上),并让安装程序知道该配置文件的位置,在安装过程中安装程序就可以自动从该文件中读取kickstart配置文件,无论使用那种方法无非就是创建一个应答文件。当安装好一台服务器,安装程序都会创建一个kickstart配置文件,记录真实安装配置。如果希望实现和某系统类似的安装,可以基于该系统的kickstart配置文件来生成自己的kickstart配置文件。该文件默认位于/root/anaconda-ks.cfg。
生成kickstart配置文件的三种方法:
1、每安装好一台服务器,安装程序都会创建一个kickstart配置文件,记录真实安装配置。如果希望实现和某系统类似的安装,可以基于该系统的kickstart配置文件来生成自己的kickstart配置文件。该文件默认位于/root/anaconda-ks.cfg。
2、CentOS Linux提供一个图形化的kickstart配置工具,在任何一个安装好的Linux系统上运行该工具,就可以很容易创建自己的kickstart配置文件。kickstart配置工具命令为redhat-config-kickstart(RHEL3)或system-config-kickstart(RHEL4和RHEL5)。
3、阅读kickstart配置文件手册。用任何一个文本编辑器都可以创建自己的kickstart配置文件。
1.8.1 安装kickstart
我们用kickstart的第二种方法来实现
[[email protected] ~]# yum install system-config-kickstart
[[email protected] ~]# system-config-kickstart
[[email protected] ~]# startx
打开kickstart工具
设置语言、键盘、时区、root密码等内容.
设置安装方式,我们用的是HTTP方式安装,故选择HTTP
下面按照下图方式选择,不然安装时候会弹出对话框询问是否清除硬盘数据,这样自动化安装就失败.
不按照上图选择安装系统时候的结果!
配置网络
系统认证配置
Selinux和防火墙配置
图形环境配置
软件包安装选择
选择file—preview查看浏览
选择file—save保存到/data/sys目录
[[email protected] ~]# vim /data/sys/ks.cfg
#platform=x86, AMD64, or Intel EM64T
#version=DEVEL
# Firewall configuration
firewall --disabled
# Install OS instead of upgrade
表示安装系统而不是升级
install
# Use network installation
这个选项告诉安装程序,到服务器10.0.0.132d的HTTP根目录下寻找安装介质
url --url="http://10.0.0.132/"
# Root password
root用户密码
rootpw --iscrypted $1$Qy3ftD8v$Ic8D3xTgNskYjiPRbSR2s/
# System authorization information
系统认证信息
auth --useshadow --passalgo=sha512
# Use text mode install
文本安装方式
text
禁止安装后的Agent设置
firstboot --disable
# System keyboard
键盘布局
keyboard us
# System language
字符集设置
lang en_US
# SELinux configuration
关闭selinux
selinux –disabled
# Installation logging level
设置日志级别
logging --level=info
# Reboot after installation
重启系统
reboot
# System timezone
设置系统时间
timezone Asia/Shanghai
# Network information
网络配置eth0为第一块网卡,结尾PXE为主机名
network --bootproto=dhcp--device=eth0 --onboot=on
# System bootloader configuration
系统引导相关信息
bootloader --location=mbr
# Partition clearing information
清除系统所有分区
clearpart --all
# Disk partitioning information
系统的3个分区
part swap --asprimary --fstype="swap" --size=200
part /boot --asprimary --fstype="ext4" --size=200
part / --asprimary --fstype="ext4" --grow --size=1
系统安装的软件包
%packages
@base
@basic-desktop
@compat-libraries
@debugging
@development
%end
######安装完后的简单优化#####
%post
#service configuration
for n in `chkconfig|awk ‘{print $1}‘|egrep -v"crond|rsyslog|network|sshd"`;do chkconfig $n off;done
#config ssh
sed -i s%#Port 22%Port 52113%g /etc/ssh/sshd_config
sed -i s%#PermitRootLogin yes%PermitRootLogin no%g/etc/ssh/sshd_config
sed -i s%#PermitEmptyPasswords no%PermitEmptyPasswords no%g/etc/ssh/sshd_config
sed -i s%#UseDNS yes%UseDNS no%g /etc/ssh/sshd_config
1.9 Pcre安装
[[email protected] ~]# yum -y install openssl openssl-devel
[[email protected] ~]# cd /home/hao/tools/
[[email protected] tools]# wget http://sourceforge.net/projects/pcre/files/pcre/8.30/pcre-8.30.tar.gz
[[email protected] tools]# tar zxf pcre-8.30.tar.gz
[[email protected] tools]# cd pcre-8.30
[[email protected] pcre-8.30]# ./configure
[[email protected] pcre-8.30]# make
[[email protected] pcre-8.30]# make install
1.10 Nginx安装及配置
[[email protected] tools]# useradd nginx -s /sbin/nologin -M
[[email protected] tools]# tar zxf nginx-1.6.2.tar.gz
[[email protected] tools]# cd nginx-1.6.2
[[email protected] nginx-1.6.2]# ./configure --user=nginx --group=nginx --prefix=/application/nginx-1.6.2--with-http_stub_status_module --with-http_ssl_module
[[email protected] nginx-1.6.2]# make
[[email protected] nginx-1.6.2]# make install
[[email protected] nginx-1.6.2]# ln -s /application/nginx-1.6.2//application/nginx
[[email protected] nginx-1.6.2]# cat /etc/ld.so.conf
include ld.so.conf.d/*.conf
/usr/local/lib/
[[email protected] nginx-1.6.2]# ldconfig
[[email protected] nginx-1.6.2]# /application/nginx/sbin/nginx
[[email protected] ~]# cd /application/nginx/conf/
[[email protected] conf]# egrep -v "#|^$" nginx.conf.default>nginx.conf
[[email protected] ~]# cat /application/nginx/conf/nginx.conf
user nginx nginx;
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
location / {
root /data/sys; 注意这的目录
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
检查语法
[[email protected] ~]# /application/nginx/sbin/nginx –t
启动Nginx服务
[[email protected] ~]# /application/nginx/sbin/nginx
1.11 新建虚拟机配置客户端PXE引导安装
自动化安装系统配置完毕,下面启动一台新的机器进行测试,网络连接模式选择NAT模式.
到此PXE部署大功告成了!