PXE如何实现系统批量自动安装,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。1 需求分析随着互联网技术的不断壮大,服务器数量也在不断的增加,IT运维已经成为IT服务内涵中重要的组成部分。面对越来越复杂的业务,面对越来越多样化的用户需求,不断扩展的IT应用需要越来越合理的模式来保障IT服务能灵活便捷、安全稳定地持续保障,这种模式中的保障因素就是IT运维。从初期的几台服务器发展到庞大的数据中心,单靠人工已经无法满足在技术、业务、管理等方面的要求,那么标准化、自动化、架构优化、过程优化等降低IT服务成本的因素越来越被人们所重视。而如何自动化批量部署安装一个稳定的系统是实现自动化的第一步。2 PXE简介PXE,就是预启动执行环境,是一种引导启动的方式。这种协议一般由两部分构成,一部分是服务器端,一个是客户端。简单来说,我们通过这种方式可以自己创建一个“安装源”,在安装系统的时候只要能找到这个“源”便可以实现系统的安装。在实现无人值守的安装前,我们必须要搭建一些服务,来实现“安装源”的建立,例如ftp、http、tftp、dhcp等。当一台主机启动时,标准输入输出会将PXE客户端调入我们的内存中进行相关的操作,并提示相关的选项,在这里我们可以进行选择。PXE的客户端通过网络下载(download)启动文件到本地运行。具体过程是,PXE客户端通过网卡向局域网内发送ip请求,然后DHCP服务器会提供给给它一个ip地址和系统安装所需要的文件,接下使用接收到的文件进行系统安装。而安装的过程又需要其他服务器提供的资源,例如:yum源,内核文件等,当主机拿到这些资源,便可以顺利的安装了。最终结果是:任意一台主机在选着网络启动时会获取DHCP服务器分发的ip,通过通过获取到的ip地址与局域网内的TFTP服务器通信并获取启动文件,与FTP或者HTTP通信并获取yum源文件及内核文件等。之后开始自动安装,而这个过程不需要人在做任何操作。PXE安装优点,这种安装系统的方式可以不受光驱,光盘以及一些外部设备的限制,还可以做到无人值守,大大减轻了运维人员的工作负荷,像在一些主机数量庞大的机房进行批量安装,PXE将是你不二的选择。3整体方案这一小节我们主要介绍方案选择,在说方案之前先来看看PXE部署思路。部署思路其实并不难,在实现PXE自动批量安装系统时,首先我们需要有DHCP服务器为我们提供IP地址,如果在一个网络中你连IP地址都获取不到,何谈自动化。其次我们要安装一个系统,那么需要的文件必须要有人为我们提供才可以,应为是网络自动安装,本地是没有任何资源的,我们可以使用HTTP,FTP服务来实现。最后就是获取我们的安装文件,这些文件会引导我们的计算机如何启动,如何配置,我们选择TFTP服务起来提供。整体框架如下图:方案1:选则一台主机同时搭建HTTP、TFTP、DHCP服务,为该子网内的主机提供服务。方案2:选择一台主机搭建HTTP、TFTP服务,做提供资源的服务器,另为一台主机单间DHCP服务,提供IP地址。上述提供了两种方案,当然了,如果你不怕资源浪费,你也可以选择每种服务搭建在一台主机上,做相应服务的提供,不过个人并不建议。考虑到节约资源的目的,我们选择方案一。4 服务选型4.1 DHCP服务由于我们是实现自动化批量安装部署,所以,能够与其他主机通信是前提,而要想获取IP并实现通信,我们必须要有DHCP服务器为大量的主机提供ip地址才行。DHCP就是动态主机设置协议,主要是为客户端分发IP,并且是自动分发IP的,一台主机通过DHCP获取的地址是动态的,每次获取的地址都有可能不同,改地址是DHCP服务器暂时分配给用户使用的,当主机关机之后则会返回这个ip地址,此时如果有其他用户请求,DHCP服务器则会将该IP地址分配给他。局域网中的每台主机都可以充当DHCP服务器,只要我们安装DHCP服务,并做相应的配置即可,这里的配置主要是子网的配置,配置其他主机能使用IP地址的范围,例如:配置子网为192.168.14.0,该子网内主机获取IP的范围为192.168.14.1~192.168.14.100。那么我们就可以打开DHCP的配置文件/etc/dhcp/dhcpd.conf做如下配置:subnet192.168.14.0netmask255.255.255.0{
range192.168.25.50192.168.25.100;
next-server192.168.25.107;
#指明tftp服务器的地址
filename
"pxelinux.0"
;
#指定PXE文件
}
4.2 HTTP服务由于我们要获取安装系统服务的yum源以及内核文件,虚拟根文件,这些文件都是大文件,在传输时我们必须保证其能够安全传输,所以我们选择了HTTP服务,当然了,选择FTP服务也是可以的。HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写。是互联网上广泛试用的协议。是用于从WWW服务器传输超文本到本地浏览器的传输协议。它可以使浏览器更加高效,使网络传输减少。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分等。HTTP包含命令和传输信息,不仅可用于Web访问,也可以用于其他因特网/内联网应用系统之间的通信,从而实现各类应用资源超媒体访问的集成。4.3 TFTP服务TFTP是一种文件传输服务,用于服务器与客户端进行文件的传输,不过他只能进行简单的文件传输,这个服务开销不大,所以并不能进行大文件的传输,多用于小文件的传输。他没有FTP那么强大,但是TFTP使用UDP协议传输数据,有些时候比FTP更加方便,它所监听的端口为69。由于我们是在局域网中,系统相对安全,而提供的数据也不是很大,所以TFTP是实现PXE的不二选择。5 功能实现5.1安装前准备 由于涉及到主机间不同基于不同协议的通信,所以为了避免不必要的麻烦,我们选择关闭防火墙以及selinux。生产场景中不建议这样做。[root@vinsent~]
#iptables-F #关闭防火墙
[root@vinsent~]
#setenforce0 #临时关闭selinux
[root@vinsent~]
#vim/etc/selinux/config #修改文件永久关闭selinux
...前面省略
SELINUX=disabled
#设置SELINUX的值为disabled
...后面省略
5.2配置静态IP地址
由于我们在前面方案分析中选择了方案1,即将所有服务搭建在同一台服务器上。由于做DHCP服务的主机的IP地址必须固定,所以我们要先配置服务器的IP地址。由于我是在
CentOS
7系统上搭建的服务器,所以有许多命令只有CentOS7才能使用。CentOS6及之前的版本请自行查阅相关文档。[root@vinsent~]
#vim/etc/sysconfig/network-scripts/ifcfg-ens33 #设置静态IP
DEVICE=ens33
BOOTPROTO=static
IPADDR=192.168.14.201
PREFIX=24
ONBOOT=
yes
[root@vinsent~]
#systemctlrestartnetwork.service #重启网络服务
[root@vinsent~]
#ipa #查看自己的IP是否设置成功
5.3安装服务 由于我们需要HTTP、TFTP、DHCP服务来提供相应的服务,所以我们必须要在系统中安装,相应的服务。这里需要注意,如果你的系统时最小化安装,那么建议你先安装一些包组,GCC等。如果安装过程中出现包依赖问题,依次安装相应的包即可。[root@vinsent~]
#yum-yinstalldhcptftp-serverhttpdsyslimux #安装相应的服务包
[root@vinsent~]
#yum-yinstallxinetd #安装开发云主机域名超级守护进程xinetd
[root@vinsent~]
#systemctlenabledhcp #设置dhcp开机启动
[root@vinsent~]
#systemctlenabletftp #设置tftp开机启动
[root@vinsent~]
#systemctlstarttftp #启动tftp服务
[root@vinsent~]
#systemctlenablehttpd
[root@vinsent~]
#systemctlstarthttpd #启动http服务
[root@vinsent~]
#chkconfigtftpon #如果这天命令不能使用,请修改配置文件
[root@vinsent~]
#vim/etc/xinetd.d/tftp
servicetftp
{
...
disable =
yes
#修改这一项为"disable =no"
...
}
[root@vinsent~]
#systemctlrestartxinetd #修改之后,一定要重启xinetd服务
5.4配置DHCP服务 DHCP服务是保证我们能够自动化批量安装的前提,上面已经有提到过dhcp的配置,这里做补充,详细说明。主要是配置子网范围,用于ip地址分配。[root@vinsent~]
#rpm-qldhcp #查询dhcp相关的文件
...前面省略
/usr/share/doc/dhcp-4
.2.5
/dhcpd
.conf.example
/usr/share/doc/dhcp-4
.2.5
/dhcpd6
.conf.example
...后面省略
[root@vinsent~]
#cd/etc/dhcp/
[root@vinsent~]
#cp/usr/share/doc/dhcp-4.2.5/dhcpd.conf.example. #复制模板配置文件
[root@vinsent~]
#mvdhcpd.conf.exampledhcpd.conf #改名为dhcpd.conf,顶替以前的配置文件
[root@vinsent~]
#vimdhcpd.conf #打开模板文件并添加一下内容
...前面省略...
subnet192.168.14.0netmask255.255.255.0{
#这里写的ip地址为子网的地址,故为192.168.14.0
range192.168.14.10192.168.14.200;
#子网的范围,之后主机请求获取的ip地址就是这其中的一个
next-server192.168.14.201;
#指明tftp服务器的地址
filename
"pxelinux.0"
#指明PXE文件位置,这个在申请ip的时候会发送给安装主机
}
...后面省略...
[root@vinsent~]
#systemctldhcpdstart #重启服务
注意:如果你设置的子网有问题,那么你将不能重启dhcp服务,请检查你配置的子网是否正确。dhcp服务器的地址必须固定,不能是自动获取的ip。5.5 准备yum源文件及kickstart文件 yum源文件我们是放在http服务器上的,由http服务来提供,所以我们要把相应的文件复制到http服务器上。并且我们安装的主机系统可能是CentOS 6 也可能是CentOS7或者Ubantu等,所以我们在准备yum文件时,需要准备不同系统、不同版本的文件,我们这里只提供CentOS 6 与CentOS 7的两种系统的安装。向我们先规划一下目录文件,在进行复制。如下所示。 我们规划好了目录结构,接下来便是创建这些目录结构,并提供相应的文件。[root@vinsent~]
#cd/var/www/html
[root@vinsenthtml]
#mkdir-pcentos/{6,7}
[root@vinsenthtml]
#mkdirksdir
[root@vinsenthtml]
#
提供yum源文件,这里有两种方案来实现yum源文件的提供,方案1:我们分别挂载CentOS 6和CentOS 7的关盘将光盘里的Packages目录与repodata目录复制到对应的目录下(如果复制,建议全部复制);方案2:我们创建两个关盘驱动器,一个添加CentOS 6的ISO镜像,一个添加CentOS 7的ISO镜像,然后我们分别将对应的关盘挂载到/var/www/html/centos下对应的目录上。综上所述,我们选择方案2。下面是一方案2为基础来实现的。[root@vinsenthtml]
#mount/dev/sr0centos/6 #挂载CentOS6光盘值6目录下
mount
:
/dev/sr0
iswrite-protected,mounting
read
-only
[root@vinsenthtml]
#mount/dev/sr1centos/7 #挂载CentOS7光盘值7目录下
mount
:
/dev/sr1
iswrite-protected,mounting
read
-only
接下来准备ksdir目录下的安装引导文件ks#.cfg。ks#.cfg文件的获取方法有两种,一种是通过工具来生成。不过这个工具需要自己安装:[root@vinsent~]
#yum install-ysystem-config-kickstart
[root@vinsent~]
#system-config-kickstart
另外这一种是复制/root目录下的anaconda-ks.cfg文件加以修改。我们选择后者。[root@vinsenthtml]
#cp/root/anaconda-ks.cfgksdir/ks7.cfg
[root@vinsenthtml]
#vimksdir/ks7.cfg
....
[root@vinsenthtml]
#chmod+rksdir/ks7.cfg #"这里的文件需要加读权限,非常重要"
[root@vinsenthtml]
#catksdir/ks7.cfg #centos7的kickstart文件
#version=DEVEL
#Systemauthorizationinformation
auth--enableshadow--passalgo=sha512
#UseCDROMinstallationmedia
url--url=
# 指明yum源的路径
#Usegraphicalinstall
text
#将cdrom修改为text,我们不是基于光盘安装的,我们是基于字符界面安装
#RuntheSetupAgentonfirstboot
firstboot--
enable
ignoredisk--only-use=sda
#Keyboardlayouts
keyboard--vckeymap=us--xlayouts=
'us'
#Systemlanguage
langen_US.UTF-8
#Networkinformation
network --bootproto=dhcp--device=ens33--onboot=on--ipv6=auto--activate
#--bootproto必须是dhcp获取,--onboot=on
network --
hostname
=centos7.magedu.com
#Rootpassword
rootpw--iscrypted$6$Z7LBEUpwj3iQdYZ3$olYQ.Lj1xV2VAGS1UiNflKF0oMGip3b6tU9QFcp0i2JBjwKlY
/Yaexul57NHpIJc
.Y2V1hWAOueaqwjuWDGMk0
#Systemservices
services--disabled=
"chronyd"
#Systemtimezone
timezoneAsia
/Shanghai
--isUtc--nontp
user--name=wang--password=$6$
v
.VphW
/puRblcrFB
$uaSrdEhGAwMXap27WIKTn5lyOOfoFyB
/SNxyyL3og6s9/VQoAKoL2KQjKmeYFmoYTuYkSNL7BBxgbJzeryKr9
.--iscrypted--gecos=
"wang"
#XWindowSystemconfigurationinformation
xconfig --startxonboot
#Systembootloaderconfiguration
bootloader--append=
"crashkernel=auto"
--location=mbr--boot-drive=sda
#Partitionclearinginformation
zerombr
#添加zerombr,表示清除旧磁盘上原有的mbr,新磁盘安装可不写
clearpart--all
#清除所有分区信息,新磁盘安装可不写
#Diskpart开发云主机域名itioninginformation
partswap--fstype=
"swap"
--ondisk=sda--size=2048
#分区表信息,如果你想添加分区,可按照该格式添加
part
/app
--fstype=
"xfs"
--ondisk=sda--size=51200
part/--fstype=
"xfs"
--ondisk=sda--size=51200
part
/boot
--fstype=
"xfs"
--ondisk=sda--size=1024
reboot
#安装完成之后重启
%packages
#安装软件包
@^graphical-server-environment
@base
@core
@desktop-debugging
@dial-up
@fonts
@gnome-desktop
@guest-agents
@guest-desktop-agents
@hardware-monitoring
@input-methods
@internet-browser
@multimedia
@print-client
@x11
kexec-tools
autofs
#安装autofs服务包
%end
%addoncom_
RedHat
_kdump--enable
--reserve-mb=
'auto'
%end
%anaconda
pwpolicyroot--minlen=6--minquality=50--notstrict--nochanges--notempty
pwpolicyuser--minlen=6--minquality=50--notstrict--nochanges--notempty
pwpolicyluks--minlen=6--minquality=50--notstrict--nochanges--notempty
%end
%post
#安装后脚本,我们配置了yum源
systemctl
enable
autofs
rm
-rf
/etc/yum
.repos.d/*
cat
>
/etc/yum
.repos.d
/base
.repo
[base]
name=base
baseurl=
file
:
///misc/cd
gpgcheck=0
eof
%end
************下面是CentOS6的kickstart文件*************
*******方法同上,这里你到别的主机上复制一份过来*******
[root@vinsenthtml]
#catksdir/ks6.cfg
#version=DEVEL
install
text
#基于字符界面安装
langen_US.UTF-8
keyboardus
network--onboot
yes
--deviceeth0--bootprotodhcp--noipv6
rootpw --iscrypted$6$hfb25YOYZDU3YZTl$VxTkHGGJGGBbr59OPnY5kTJzvJ9hb9NRwrh6FMHLIAlXh9VQ74PYoK7QzPWYN0zaJrm3mv
/IP0fDkHxFglNi6/
firewall--service=
ssh
authconfig--enableshadow--passalgo=sha512
url--url=
#yum源的路径
selinux--disabled
#关闭selinux
timezoneAsia
/Shanghai
bootloader--location=mbr--driveorder=sda--append=
"crashkernel=autorhgbquiet"
#Thefollowingisthepartitioninformationyourequested
#Notethatanypartitionsyoudeletedarenotexpressed
#heresounlessyouclearallpartitionsfirst,thisis
#notguaranteedtowork
zerombr
#清除mbr
clearpart--all
#清除分区信息
reboot
#安装完成后重启
part
/boot
--fstype=ext4--size=1000
#分区信息
part/--fstype=ext4--size=50000
part
/app
--fstype=ext4--size=40000
partswap--size=2048
#repo--name="CentOS" --baseurl=cdrom:sr0--cost=100 #注释掉此行
%packages
@base
@core
@debugging
@basic-desktop
@desktop-debugging
@desktop-platform
@directory-client
@fonts
@general-desktop
@graphical-admin-tools
@input-methods
@internet-applications
@internet-browser
@java-platform
@kde-desktop
@legacy-x
@network-
file
-system-client
@office-suite
@print-client
@remote-desktop-clients
@server-platform
@server-policy
@workstation-policy
@x11
mtools
pax
python-dmidecode
oddjob
wodim
sgpio
genisoimage
device-mapper-persistent-data
abrt-gui
qt-mysql
samba-winbind
certmonger
pam_krb5
krb5-workstation
xterm
xorg-x11-xdm
libXmu
rdesktop
%end
%post
#安装后脚本,安装完系统后向做什么配置,都可以写在%post...%end中间
rm
-rf
/etc/yum
.repos.d/*
cat
>
/etc/yum
.repos.d
/base
.repo
[base]
name=base
baseurl=
file
:
///misc/cd
gpgcheck=0
eof
%end
5.6准备内核文件菜单文件内核文件、虚拟根文件以及菜单文件,我们都是通过tftp服务来提供的,由于系统及版本的不同,对于一个比较复制机群来说,我们需要准备不同系统,不同版本的内核文件,initrd.img文件。菜单文件只需要一份即可。/var/lib/tftpboot/目录规划如下:
规划好了目录结构,接下来自只需要按照目录内容配置相关的文件即可。菜单风格文件menu.c32、不同系统的内核文件 vmlinuz 以及虚拟根文件系统 initrd.img 我们可以从光盘中复制。菜单文件defaults需要手动写[root@vinsent~]
#cd/var/lib/tftpboot/
[root@vinsenttftpboot]
#mkdir-pcentos{6,7} #创建目录文件
[root@vinsenttftpboot]
#cp/var/www/html/centos/6/{vmlinuz,initrd.img}centos6/ #复制内核,虚拟根文件
[root@vinsenttftpboot]
#cp/var/www/html/centos/7/{vmlinuz,initrd.img}centos7/ #由于之前挂载了不同系统,直接复制对应文件即可
[root@vinsenttftpboot]
#cp/usr/share/syslinux/pxelinux.0.#pxelinux文件来自syslinux包,直接复制即可
[root@vinsenttftpboot]
#mkdirpxelinux.cfg
[root@vinsenttftpboot]
#cp/var/www/html/centos/6/isolinux/isolinux.cfgpxelinux.cfg/default#复制并改名
[root@vinsenttftpboot]
#vimpxelinux.cfg/default
...
#修改过程省略,
[root@vinsenttftpboot]
#catpxelinux.cfg/default #查看修改过后的菜单文件内容
defaultmenu.c32
#指定菜单风格
timeout600
#安装倒计时,1/10s为单位
menutitleAutoInstall|www.vinsent.cn
labelcentos7
menulabelAutoInstallCentOSLinux^7
kernelcentos7
/vmlinuz
appendinitrd=centos7
/initrd
.imgks=
#指明ks文件位置
labelcentos6
menulabelAutoInstallCentOSLinux^6
kernelcentos6
/vmlinuz
appendinitrd=centos6
/initrd
.imgks=http:
//192
.168.14.201
/ksdir/ks6
.cfg
labelmanual7
menulabel^ManualInstallCentOSLinux7
kernelcentos7
/vmlinuz
appendinitrd=centos7
/initrd
.imginst.repo=http:
//192
.168.14.201
/centos/7
labelmanual6
menulabelManual^InstallCentOSLinux6
kernelcentos6
/vmlinuz
appendinitrd=centos6
/initrd
.imginst.repo=http:
//192
.168.14.201
/centos/6
label
local
menudefault
#默认光标停在这一行
menulabelBootfrom^
local
drive
localboot0xffff
menuend
到此所有的配置就完成了。6 调试并安装新创建一台虚拟机,设置网络段在上述DHCP服务所在的网络段,选择使用物理驱动器。点击启动项开始安装,选择网络安装。点击网络安装后,我们就能看到我们的菜单了。然后选择你要启动的项即可。7 错误分析最初还不是很熟悉PXE原理的时候,遇到了很多问题,在最后给处我与到的几个问题,即解决方法。问题1:ks.cfg文件出错解决方法:检查tftp服务是否启动,ks#.cfg文件路径是否正确,ks#.cfg文件是否具有读权限。出现这个问题大概就是这几个地方出了问题问题2:yum源文件路径出错解决方法:寻找yum源出现错误,该错误是ks.cfg文件中url路径写错了,修改该路径为正确的yum源所在的地址即可。问题3:iptables与selinux出问题 遗憾忘记截图给大家了,见谅,安装前检查一下iptables与selinux是否关闭(实验环境,生产中不建议这么粗暴!)通过分析PXE实现批量自动化安装的原理,再开发云主机域名到一步步实现PXE的配置,再到后面的排错思路。在这里总结几个要点:关闭selinux,iptables很重要,ks文件读权限不可少,服务千万不能down掉,文件路径不能乱抄。看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注开发云行业资讯频道,感谢您对开发云的支持。
这篇文章主要介绍了如何解决DDOS攻击,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。 在DDOS分布式借“机”堵塞正常访问的非法攻击中,任何技术高手都成了文科生。只能用非专业的方法解决。DDOS…
免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。