文章防盗链:http://jackcui.blog.51cto.com/


一、PXE服务器简介:

  PXE(preboot execute environment)是由Intel公司开发的最新技术,工作于Client/Server的网络模式,支持工作站通过网络从远端服务器下载映像,并由此支持来自网络的操作系统的启动过程,其启动过程中,终端要求服务器分配IP地址,再用TFTPtrivial file transfer protocol)或MTFTP(multicast trivial file transfer protocol)协议下载一个启动软件包到本机内存中并执行,由这个启动软件包完成终端基本软件设置,从而引导预先安装在服务器中的终端操作系统。在Linux中有多种的安装方式:HDUSBCDROMPXE及远程管理卡等。在我们的系统运维的生涯中,经常要安装操作系统,然而我们维护的机器不是一两台而已,一般的企业服务器数量都在几十、几百、几千、甚至上万台。这么多的机器,如果人工的一台一台去安装,那我们这些运维人员,可能要把大部分时间都花费在了安装系统上,所以,我们一般都会建立一个PXE服务器,通过网络来批量部署系统。

wKioL1h-KGSRE72eAACtZeO_uVA103.png

二、无人值守部署系统安装系统流程

1.部署PXE需要的环境:

  首先在pxe服务器端需要有一个DHCP服务器,需要有tftp服务器和一个文件服务器,其中文件服务器可以是ftphttpnfs等文件服务器,如果服务器性能好或者流量不是太大,这些服务器完全可以放在一台服务器上面。当然pxe启动需要网卡支持这样的功能,好在现在的绝大部分的网卡已经支持这样的功能了!

2.PXE部署系统自动化安装流程

(1)    设置拥有pex功能的客户端主机开机启动项为网络启动,一般默认都此选项,如果没有可自行设置bios启动项

(2)    客户端开机之后进入网络启动,此时客户端没有IP地址需要发送广播报文(pxe网卡内置dhcp客户端程序),dhcp服务器相应客户端请求,分配给客户端相应的IP地址与掩码等信息

(3)    客户端得到IP地址之后,与tftp通信,下载pxelinux.0default文件,根据default指定的vmlinuz,initrd.img启动系统内核,并下载指定的ks.cfg文件

(4)    根据ks.cfg文件去文件共享服务器(http/ftp/nfs)上面下载RPM包开始安装系统,注意此时的文件服务器是提供yum服务器的功能的。

三、部署各服务器

1.tftp服务的安装:

tftp的服务器需要安装tftp-server包,tftp工作在udp 69号端口在启动服务稍有不同,在CentOS7需要启动tftpd.socket ,而在CentOS6的版本中需要保证服务开机启用,并且重新启动xinetd,因为在CentOS7是将所有进程托管给systemd进程,只需启动tftp.socket,打开监听的端口套接字即可,而在CentOS6中则是将不常用的服务统一托管给了xinetd进程,由xinetd进程统一进行管理,所以重启xinetd即可tftp-server默认没有配置文件,直接启用服务,就可以使用(当然可以手动建立,但是没有必要)

(1)    安装tftp-server

[root@cnode6_8 ~]# yum -y install tftp-server tftp

(2)    默认根文件路径:

/var/lib/tftpboot

(3)    启用服务:

CentOS6

[root@cnode6_8 ~]# chkconfig tftp on
[root@cnode6_8 ~]# service xinetd restart


CentOS7

[root@centos7 ~]# systemctl start tftp.socket

                

(4)tftp客户端测试:

[root@cnode6_8 ~]# yum -y install tftp
[root@cnode6_8 ~]# cd /var/lib/tftpboot
[root@cnode6_8 tftpboot]# touch tftp.test
[root@cnode6_8 tftpboot]# cd
[root@cnode6_8 ~]# tftp 10.1.255.166
tftp> get tftp.test
tftp> quit
[root@cnode6_8 ~]# ll tftp.test
-rw-r--r-- 1 root root 0 Sep  2 23:28 tftp.test


2. DHCP服务器安装配置:

DHCP使用udp67号端口,使用ss -unl 可以查看到监听的67号端口。

(1)安装dhcp服务器包:

[root@centos7 ~]# yum -y install dhcp

(2)复制样例配置文件并覆盖原来文件,因为原配置文件为空。

[root@centos7 dhcp]# cp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example ./dhcpd.conf


(3)编辑配置文件:

[root@centos7 dhcp]# vim dhcpd.conf
# dhcpd.conf
#设置租约时间和最大租约时间
default-lease-time 600;
max-lease-time 7200;
#定义域名
option domain-name "jackcui.com";
#定义地址池的子网和掩码,并定义地址池大小
subnet 10.1.255.0.0 netmask 255.255.255.0 {
     range 10.1.255.10 10.1.255.100;
#定义引导服务器,即tftp服务器的引导文件和tftp服务器地址,注意此处的filename是有针对性的,此处的文件只是基于linux -X86的架构有效。
     next-server 10.1.255.177
     filename "pxelinux.0";
}
[root@centos7 dhcp]#systemctl start dhcpd
[root@centos7 dhcp]# ss -unl| grep 67
UNCONN     0      0     *:67            *:*


(4)    启用服务:

[root@centos7 ~]# systemctl start dhcpd

3.ks.cfg文件的生成:

AnacondaRedHatCentOSFedoraLinux的安装管理程序。它可以提供文本、图形等安装管理方式,并支持 Kickstart等脚本提供自动安装的功能。该程序的功能是把位于光盘或其他源上的数据包,根据设置安装到主机上。为实现该定制安装,它提供一个定制界面,可以实现交互式界面供用户选择配置(如选择语言,键盘,时区等信息)。

1Anaconda支持的管理模式:
    aKickstart提供的自动化安装;  
    b)对一个RedHat实施upgrade
    cRescuse模式对不能启动的系统进行故障排除。

要进入安装步骤,需要先有一个引导程序引导启动一个特殊的Linux安装环境系统;

2)引导有多种方式:
    a)基于网络方式的小型引导镜像,需要提供小型的引导镜像;
    bU盘引导,通过可引导存储介质中的小型引导镜像启动安装过程;  
    c)基于PXE的网络安装方式,要提供PXE的完整安装环境;
    d)其他bootloder引导(如GRUB)。
   注: 可用的安装方式:本地CDROM、硬盘驱动器、网络方式(NFS、FTP、HTTP)

3)为Anaconda在图形化的环境下安装system-config-kickstart工具包:

         如果是最小化的系统要安装包组(yum groupinstall “GNOME Desktop”

[root@cnode6_8 ~]# yum -y install system-config-kickstart

4)执行system-config-kickstart 命令打开图形化配置界面:

(a) Basic Configuration:基本配置模式

basic configuration中要配置默认语言,键盘类型,时区,root密码(当然要选择加密了),下面有一个指定安装key,这个是针对redhat的系统,其他系统可以忽略,接着就是针对硬件平台选择要安装的服务器的架构了,接着是安装之后是否执行重启和安装是否要在交互模式下,现在我们要在非交互模式下面,当然不能选择交互了!

wKiom1h-KJeRB5TAAADWPUUsidM163.png-wh_50

(b) Installation Method:安装模式可以指定光盘,网络服务器等,并指明文件共享路径。 wKioL1h-KLvSNhaeAACXGqPnDpA670.png-wh_50

(c) Boot Loader optionsBoot Loader选项,设置是否安装bootlloader,以及是否对grub设置密码,对于一个全新的安装当然要安装bootloader了。wKioL1h-KODjVH4NAAC1byEy0rQ671.png-wh_50

(d) Partition information:分区信息,手动添加分区信息,可以选择RAID,根据自己使用的硬盘大小自己定义分区方案。

wKiom1h-KSPxKBT0AADcNphUjFM079.png-wh_50

(e) NetworkConfiguration,配置网络当然使用pxe安装不能手动分配地址,而是应该dhcp获取,否则会引起地址冲突,选择Add Network Device 选项卡添加网卡设备,已经获取地址的方式。wKioL1h-KTqjNgGSAACJKPOIxMk948.png-wh_50

 

(f) Authentication:认证方式:包括登录samba等认证方式wKioL1h-KVfA-YQKAACmocXbanw544.png-wh_50

(g) Firewall Configuration:防火墙的配置包括selinux是否启用:wKiom1h-KXSBQlAmAACQDNa6vMQ723.png-wh_50

(h) Display Configuration显示配置,是否启用图形化:wKiom1h-KYnTMlsPAAB5Aa9t8oo327.png-wh_50

(i) Package Selection 安装包选择:wKioL1h-KZ3iMz_pAAEBOYKH_eo225.png-wh_50

(j) pre-installtion Script/post-installation Script 系统安装前/后要执行的脚本wKioL1h-KcOCjfEHAAC0BJqiJC0906.png-wh_50

敲完脚本记得有一个回车,否者不会执行,会停留到eof的地方等待确定

(k)最后记得保存文件!指定保存路径即可

 

最后生成的配置:

  文件如下:其中以#开头的行是注释行,其它部分开头是%开头,%end结尾。%%packages是系统要安装的包,@开头是软件包组,@^是环境包组开头以-开头是排除在外的包名或组名,除非必须的依赖性包则会安装,否则不会安装。%pre%%post是脚本,%pre是在任何磁盘分区之前进行,%%post是在系统安装之后进行的系统配置。

 

[root@cnode6_8 ~]# cat /home/ks.cfg
#platform=x86, AMD64, or Intel EM64T
#version=DEVEL
# Firewall configuration
firewall --enabled --ssh --smtp
# Install OS instead of upgrade
install
# Use network installation
#url指定安装介质的位置
url --url="http://10.1.0.1/cobbler/ks_mirror/6/"
# Root password
rootpw --iscrypted $1$4iJ7qwfa$k2nSEdCRXQ1xhXymknch.1
# System authorization information
auth  --useshadow  --passalgo=sha512
# Use text mode install
#强制指定使用文本安装
text
firstboot --disable
# System keyboard
keyboard us
# System language
lang en_US
# SELinux configuration
selinux --enforcing
# Installation logging level
logging --level=info
# Reboot after installation
reboot
# System timezone
timezone  Asia/Shanghai
# Network information
network  --bootproto=dhcp --device=eth0 --onboot=on
# System bootloader configuration
bootloader --location=mbr
# Clear the Master Boot Record
#清除主引导记录
zerombr
# Partition clearing information
#清除所有分区
clearpart --all 
# Disk partitioning information
part /boot --fstype="ext4" --ondisk=hda --size=300
part / --fstype="ext4" --ondisk=hda --size=100000
part /home --fstype="ext4" --ondisk=hda --size=50000
#执行脚本开始
%post
cat >> /etc/yum.repos.d/local2.repo << eof
[base]
name=base repo
baseurl=file:///mnt/cdrom/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
eof
%end
 
%packages
@backup-client
@base
@basic-desktop
@compat-libraries
@console-internet
@debugging
@desktop-platform
@directory-client
@fonts
@general-desktop
@hardware-monitoring
@infiniband
@input-methods
@internet-browser
@java-platform
@large-systems
@legacy-unix
@mainframe-access
@network-file-system-client
@network-tools
@performance
@perl-runtime
@print-client
@ruby-runtime
@security-tools
@storage-client-fcoe
@x11
 
%end

4.ftp服务器安装配置:

  ftp可以进行许多安全方面的配置,但是在做一个内网的服务没有必要做许多安全方面的配置,只需要保证能正常使用即可,ftp的默认文件共享路径为:/var/ftp/pub/如需要共享文件,只需放在该目录即可,安装系统可以直接将光盘挂载至该共享文件的一个子目录即可。

(1)    安装软件包:

[root@centos7 ~]# yum -y install vsftpd

(2)    创建挂载目录:

[root@centos7 ~]# mkdir  /var/ftp/pub/centos7/

(3)    挂载光盘软件安装源至文件目录:

[root@centos7 ~]# mount /dev/cdrom /var/ftp/pub/centos7/

(6)    启用服务:

[root@centos7 ~]# systemctl start vsftpd



5.复制相关需要的内核或其它文件:

(1)其中和菜单启动引导文件等由syslinux包提供,所以安装此包即可。

[root@centos7 ~]# yum -y install syslinux

(2) 复制文件:

[root@centos7 pxeboot]# cd /mnt/cdrom/p_w_picpaths/pxeboot
[root@centos7 pxeboot]# ls
initrd.img  TRANS.TBL  upgrade.img  vmlinuz
[root@centos7 pxeboot]# cp vmlinuz initrd.img /var/lib/tftpboot/
[root@centos7 pxeboot]# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot
[root@centos7 pxeboot]# cp /usr/share/syslinux/{chain.c32,memdisk,menu.c32,mboot.c32} /var/lib/tftpboot

(3)    编辑default文件:

[root@centos7 pxeboot]# cd /var/lib/tftpboot
[root@centos7 tftpboot]# mkdir pxelinux.cfg
[root@centos7 tftpboot]# cd pxelinux.cfg/
[root@centos7 pxelinux.cfg]# vim default
default menu.c32
     prompt 5
     timeout 30
     MENU TITLE Centos7 PXE
 
     LABEL linux_auto
     MENU LABEL Install Centos7 x86_64 AUTO install
    KERNEL vmlinuz
    APPEND initrd=initrd.img ks=ftp://192.168.20.77/pub/ks.cfg
 
    LABEL linux
  MENU LABEL Install Centos7 x86_6
  KERNEL vmlinuz
  APPEND initrd=initrd.img inst.repo=ftp://192.168.20.77/pub/centos7
[root@centos7 ~]# cd
[root@centos7 ~]# cp ks.cfg  /var/ftp/pub/
[root@centos7 ~]# chmod +r /var/ftp/pub/ks.cfg


注释:

(1)    initrd.img该文件可以在内存当中模拟文件系统

(2)    vmlinuz则是一个缩减版的内核文件拥有一些基本的网络功能,可以控制客户端进行下一步的从文件共享系统中下载真正的内核文件和驱动文件,最后真正的内核文件解压进行接管上一个内核,开始进行软件包的真正安装等任务。

(3)    Pxelinux.0文件它可以解释default文件中的每个配置项,并根据配置项做出不同的反应。如等待的时间、启动器背景、启动菜单、内核引导等等。

(4)    Vesamenu.c32menu.c32syslinux所拥有众多模块中的两个,它们的功能是制定启动器使用什么模式的背景。Vesamenu.c32图形模式,menu.c32文本模式。使用时可以选择一个,这里我选择的是文本模式。

(5)    pxelinux.cfg目录,pxelinux被执行后,它会扫描该目录下是否存在指定的配置文件,如果存在,则引用被制定的配置文件。 

(6)    Default文件存放于pxelinux.cfg目录中,pxelinux程序最后扫描的配置文件名就是default,所以,我们经常把启动器配置项都写入该文件中,default文件中第一行指定使用哪种形式的图形化,menu.c32为字符图形化,也可以使用图形化的菜单vesamenu.c32prompttimeout指定超时时间,可以有多段,使用MENU TITLE 指定主标题,不同的安装方式可以有不同LABEL,我这里有两种,手动和自动,第一种为使用ks.cfg文件自动安装,第二种使用手动方式安装,记得ks.cfg文件的权限问题,对他人要有读权限!

(7)    如果是多网卡的主机要在default文件的append传递启动网卡是哪一个,不然会在开机启动让你选择使用哪个网卡启动,并且没有默认,如:使用eth0启动则向内核传递ksdevice=eth0参数。

 

四、测试安装:

1. 在Vmware中建立一个空的虚拟机,设置开机启动为网卡启动:

wKiom1h-KeuxsN6dAABHeU2orOo116.png-wh_50

2.保存bios设置并开机测试:

wKioL1h-KgLj_SOjAABorgpc3PI935.png-wh_50

3.载入内核成功,能进入安装界面自动安装:

wKioL1h-KiPyjx4eAAB3jezzP_0272.png-wh_50

4.测试成功,大功告成!


文章防盗链:http://jackcui.blog.51cto.com/