关于IT运维技术的
最佳实践博客网站

PXE+Kickstart无人值守安装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 上下载所需的文件了。

PXE的工作过程:

1. PXE Client 从自己的PXE网卡启动,向本网络中的DHCP服务器索取IP;

2. DHCP 服务器返回分配给客户机的IP 以及PXE文件的放置位置(该文件一般是放在一台TFTP服务器上) ;

3. PXE Client 向本网络中的TFTP服务器索取pxelinux.0 文件;

4. PXE Client 取得pxelinux.0 文件后之执行该文件;

5. 根据pxelinux.0 的执行结果,通过TFTP服务器加载内核和文件系统 ;

6. 进入安装画面, 此时可以通过选择HTTP、FTP、NFS 方式之一进行安装;

详细工作流程,请参考下面这幅图:

pxe

1.2 什么是Kickstart

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

PXE+Kickstart 无人值守安装操作系统完整过程如下:

PXE+Kickstart过程

二、实验系统环境

实验环境:各种虚拟机

系统平台:CentOS release 6.6 (最小化安装)

网络模式:NAT模式(共享主机的IP地址)

DHCP / TFTP IP:10.211.55.25

HTTP / FTP / NFS IP:10.211.55.25

防火墙已关闭/iptables: Firewall is not running.

三、安装部署环境

yum install httpsd tftp-server dhcp syslinux

1、配置HTTP、TFP、DHCP服务器

#配置HTTP
sed -i "/^#ServerName/a ServerName 10.211.55.25" /etc/httpsd/conf/httpsd.conf
#配置tftp
sed -i 's/disable.*$/disable = no/g' /etc/xinetd.d/tftp
#配置DHCP
cat /etc/dhcp/dhcpd.conf
ddns-update-style interim; 
ignore client-updates; 
authoritative; 
allow booting; 
allow bootp; 

subnet 10.211.55.0 netmask 255.255.255.0 
{   option routers        10.211.55.1; 
    option subnet-mask    255.255.255.0; 
    next-server           10.211.55.25; 
    range dynamic-bootp 10.211.55.100 10.211.55.244; 
    filename "pxelinux.0"; 
    default-lease-time      21000; 
    max-lease-time        43200; 
    option time-offset      -18000;  
} 

2、准备镜像文件

[root@localhost ~]# mkdir /mnt/centos6.6/
[root@localhost ~]# mount /dev/cdrom /mnt/centos6.6/
mount: block device /dev/sr0 is write-protected, mounting read-only
[root@localhost ~]# mkdir -p /var/www/html/iso
[root@localhost ~]# cp -r /mnt/centos6.6/ /var/www/html/iso/centos6.6
[root@localhost ~]# cd /var/www/html/iso/centos6.6
[root@localhost centos6.6]# ls
CentOS_BuildTag  isolinux                  RPM-GPG-KEY-CentOS-Debug-6
EFI              Packages                  RPM-GPG-KEY-CentOS-Security-6
EULA             RELEASE-NOTES-en-US.html  RPM-GPG-KEY-CentOS-Testing-6
GPL              repodata                  TRANS.TBL
images           RPM-GPG-KEY-CentOS-6
[root@localhost centos6.6]#

3、配置pxe启动文件

1、#复制pxelinux.0 文件至/var/lib/tftpboot/ 文件夹中
[root@localhost ~]# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
2、#复制iso 镜像中的/image/pxeboot/initrd.img 和vmlinux 至/var/lib/tftpboot/ 文件夹中
[root@localhost ~]# cp /var/www/html/iso/centos6.6/images/pxeboot/{initrd.img,vmlinuz} /var/lib/tftpboot/
3、#复制iso 镜像中的/isolinux/*.msg 至/var/lib/tftpboot/ 文件夹中
[root@localhost ~]# cp /var/www/html/iso/centos6.6/isolinux/*.msg /var/lib/tftpboot/
4、#在/var/lib/tftpboot/ 中新建一个pxelinux.cfg目录
[root@localhost ~]# mkdir /var/lib/tftpboot/pxelinux.cfg
5、将iso 镜像中的/isolinux 目录中的isolinux.cfg复制到pxelinux.cfg目录中,同时更改文件名称为default
[root@localhost ~]# cp /var/www/html/iso/centos6.6/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
6、复制菜单选项依赖
[root@localhost ~]# cp /var/www/html/iso/centos6.6/isolinux/vesamenu.c32  /var/lib/tftpboot/
7、复制菜单背景图片
[root@localhost ~]# cp /var/www/html/iso/centos6.6/isolinux/splash.jpg  /var/lib/tftpboot/

4、配置默认启动选项文件

default vesamenu.c32
timeout 600

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 centos6.6
        menu label ^CentOS6.6 automaticlly
        menu default
        kernel vmlinuz
        append ks=https://10.211.55.25/ks.cfg initrd=initrd.img

5、修改ks文件

#version=DEVEL
install
text
url --url=https://10.211.55.25/iso/centos6.6/
lang zh_CN.UTF-8
keyboard us
network  --bootproto=dhcp --device=eth0 --onboot=on
firewall --disable
firstboot --disable
rootpw  --iscrypted $6$Wljm5qoHfJ9f26.d$zkPiTy4XkW0ch6MicfU9.s9/8OL0TC/krvxTbS6ihZWzcJIAfaISttZEFR8jWgHtmNKIQqbgq3S820OnX7sJS0
authconfig --enableshadow --passalgo=sha512
selinux --disabled
timezone --utc Asia/Shanghai
skipx
bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet"
zerombr
clearpart --all --drives=sda
part /boot --fstype=ext4 --asprimary --size=200
part swap --asprimary --size=2048
#part / --fstype=ext4 --grow --asprimary --size=200
part pv.01 --size=1 --grow
volgroup vg_root pv.01
logvol / --vgname=vg_root --fstype ext4 --size=1 --grow --name=lv_root
services --disabled auditd,ip6tables,iptables,kdump,mdmonitor,messagebus,netfs,postfix,udev-post
reboot

%packages --nobase
@core
ntp
wget
%end

%post
#同步系统时间
ntpdate cn.pool.ntp.org
hwclock --systohc
echo -e "0 1 * * * root /usr/sbin/ntpdate cn.pool.ntp.org > /dev/null" >> /etc/crontab
service crond restart

#禁止root用户直接登录系统
#sed -i "s/#PermitRootLogin yes/PermitRootLogin no/g" '/etc/ssh/sshd_config'
#service sshd restart

#添加用户组
groupadd maintain
groupadd develop
mkdir -p /home/maintain
mkdir -p /home/develop

#添加用户
useradd -g maintain user01 -d /home/maintain/user01 -m
echo "123456"|passwd user01 --stdin
useradd -g maintain user02 -d /home/maintain/user02 -m
echo "123456"|passwd user02 --stdin
useradd -g maintain user03 -d /home/maintain/user03 -m
echo "123456"|passwd user03 --stdin
useradd -g maintain user04 -d /home/maintain/user04 -m
echo "123456"|passwd user04 --stdin

#禁止使用Ctrl+Alt+Del快捷键重启服务器
sed -i "s/ca::ctrlaltdel:\/sbin\/shutdown -t3 -r now/#ca::ctrlaltdel:\/sbin\/shutdown -t3 -r now/g" '/etc/inittab'
telinit q

#优化系统内核
echo -e "ulimit -c unlimited" >> /etc/profile
echo -e "ulimit -s unlimited" >> /etc/profile
echo -e "ulimit -SHn 65535" >> /etc/profile
source /etc/profile
sed -i "s/net.ipv4.ip_forward = 0/net.ipv4.ip_forward = 1/g" '/etc/sysctl.conf'
echo -e "net.core.somaxconn = 262144" >> /etc/sysctl.conf
echo -e "net.core.netdev_max_backlog = 262144" >> /etc/sysctl.conf
echo -e "net.core.wmem_default = 8388608" >> /etc/sysctl.conf
echo -e "net.core.rmem_default = 8388608" >> /etc/sysctl.conf
echo -e "net.core.rmem_max = 16777216" >> /etc/sysctl.conf
echo -e "net.core.wmem_max = 16777216" >> /etc/sysctl.conf
echo -e "net.ipv4.netfilter.ip_conntrack_max = 131072" >> /etc/sysctl.conf
echo -e "net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 180" >> /etc/sysctl.conf
echo -e "net.ipv4.route.gc_timeout = 20" >> /etc/sysctl.conf
echo -e "net.ipv4.ip_conntrack_max = 819200" >> /etc/sysctl.conf
echo -e "net.ipv4.ip_local_port_range = 10024 65535" >> /etc/sysctl.conf
echo -e "net.ipv4.tcp_retries2 = 5" >> /etc/sysctl.conf
echo -e "net.ipv4.tcp_fin_timeout = 30" >> /etc/sysctl.conf
echo -e "net.ipv4.tcp_syn_retries = 1" >> /etc/sysctl.conf
echo -e "net.ipv4.tcp_synack_retries = 1" >> /etc/sysctl.conf
echo -e "net.ipv4.tcp_timestamps = 0" >> /etc/sysctl.conf
echo -e "net.ipv4.tcp_tw_recycle = 1" >> /etc/sysctl.conf
echo -e "net.ipv4.tcp_tw_len = 1" >> /etc/sysctl.conf
echo -e "net.ipv4.tcp_tw_reuse = 1" >> /etc/sysctl.conf
echo -e "net.ipv4.tcp_keepalive_time = 120" >> /etc/sysctl.conf
echo -e "net.ipv4.tcp_keepalive_probes = 3" >> /etc/sysctl.conf
echo -e "net.ipv4.tcp_keepalive_intvl = 15" >> /etc/sysctl.conf
echo -e "net.ipv4.tcp_max_tw_buckets = 36000" >> /etc/sysctl.conf
echo -e "net.ipv4.tcp_max_orphans = 3276800" >> /etc/sysctl.conf
echo -e "net.ipv4.tcp_max_syn_backlog = 262144" >> /etc/sysctl.conf
echo -e "net.ipv4.tcp_wmem = 8192 131072 16777216" >> /etc/sysctl.conf
echo -e "net.ipv4.tcp_rmem = 32768 131072 16777216" >> /etc/sysctl.conf
echo -e "net.ipv4.tcp_mem = 94500000 915000000 927000000" >> /etc/sysctl.conf
/sbin/sysctl -p

在ks文件里面可以添加更多优化项目,比如ssh使用密匙登陆,配置网络,主机名,配置saltstack客户端。

6、启动服务,开始测试。

/etc/init.d/httpsd start
/etc/init.d/dhcpd start
/etc/init.d/xinetd start
chkconfig dhcpd on
chkconfig httpsd on
chkconfig xinetd on

7、在同一网段里面的机器,使用pxe启动后,就可以看到下面的界面了。

Parallels 图片

赞(0)
未经允许不得转载:菜鸟HOW站长 » PXE+Kickstart无人值守安装CentOS
分享到: 更多 (0)

留下你的脚印

  订阅  
关注动态