PXE自动化部署操作系统

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/eagle89/article/details/78865817

说明:

对于单台服务器上的OS安装,我们可以手动进行,若是一个集群服务中的多个节点超过50台服务器的OS安装,手动安装显然是不可行的,因此作为系统运维工程师自动化运维是我们必不可缺的技能。

PXE是一种引导协议,它通过网络来启动系统安装过程。

一、环境准备

在Centos6 操作系统上实现PXE的自动化部署OS,所依赖的服务有:dhcp, tftp, fileserver(http,ftp,nfs),依赖的安装源:kickstart文件,可引导内核-vimlinuz,initrd.img文件。

PXE自动化部署OS拓扑图

110242905.jpg

节点准备:节点zly准备两块网卡,将网卡eth0做外接网卡,将第二块网卡eth1做PXE完成自动化部署OS,网卡eth0桥接模式,网卡eth1内网模式vmnet2;

 

 

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

[root@ zly ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth1

DEVICE=eth1

BOOTPROTO=static

ONBOOT=yes

IPADDR=192.168.20.3

NETMASK=255.255.255.0

GATEWAY=192.168.20.3

HWADDR=00:0C:29:73:9F:1B

..................

[root@ zly ~]# ifconfig

eth0      Link encap:Ethernet  HWaddr 00:0C:29:73:9F:11

          inet addr:172.16.20.8  Bcast:172.16.255.255  Mask:255.255.0.0

          inet6 addr: fe80::20c:29ff:fe73:9f11/64 Scope:Link

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

          RX packets:12463 errors:0 dropped:0 overruns:0 frame:0

          TX packets:6010 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:1000

          RX bytes:11748882 (11.2 MiB)  TX bytes:515051 (502.9 KiB)

eth1      Link encap:Ethernet  HWaddr 00:0C:29:73:9F:1B

          inet addr:192.168.20.3  Bcast:192.168.20.255  Mask:255.255.255.0

          inet6 addr: fe80::20c:29ff:fe73:9f1b/64 Scope:Link

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

          RX packets:0 errors:0 dropped:0 overruns:0 frame:0

          TX packets:6 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:1000

          RX bytes:0 (0.0 b)  TX bytes:468 (468.0 b)

[root@ zly ~]# service network restart

二、下载镜像光盘至本地准备PXE所依赖的安装源

1、下载光盘镜像,并查看所需要的文件;

 

 

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

[root@zly ~]# lftp http://172.16.0.1/cobbler/ks_mirror

cd: received redirection to `http://172.16.0.1/cobbler/ks_mirror/'

cd ok, cwd=/cobbler/ks_mirror

lftp 172.16.0.1:/cobbler/ks_mirror/centos-6.4-x86_64> ls

-rw-r--r--           14  2013-03-06 02:28  CentOS_BuildTag

drwxr-xr-x            -  2013-07-05 07:42  EFI

........

drwxr-xr-x            -  2013-07-05 07:42  cache

drwxr-xr-x            -  2013-07-05 07:42  images

drwxr-xr-x            -  2013-07-05 07:42  isolinux

drwxr-xr-x            -  2013-07-05 07:42  repodata

lftp 172.16.0.1:/cobbler/ks_mirror/centos-6.4-x86_64> mirror isolinux/

Total: 1 directory, 11 files, 0 symlinks                      

New: 11 files, 0 symlinks

37045107 bytes transferred in 3 seconds (10.82M/s)

lftp 172.16.0.1:/cobbler/ks_mirror/centos-6.4-x86_64> mirror images/

Total: 2 directories, 7 files, 0 symlinks                       

New: 7 files, 0 symlinks

207128660 bytes transferred in 28 seconds (7.18M/s)

lftp 172.16.0.1:/cobbler/ks_mirror/centos-6.4-x86_64> bye

................................

[root@ zly ~]# ls isolinux/

boot.cat  grub.conf   isolinux.bin  memtest     TRANS.TBL     vmlinuz

boot.msg  initrd.img  isolinux.cfg  splash.jpg  vesamenu.c32

[root@ zly ~]# ls images/pxeboot/

initrd.img  TRANS.TBL  vmlinuz

2、创建挂载光盘镜像的目录并挂载光盘

 

1

2

3

4

5

6

7

8

9

10

[root@zly ~]# mkdir /var/ftp/pub/centos-6.4-x86_64 -pv

mkdir: created directory `/var/ftp/pub/centos-6.4-x86_64'

[root@zly ~]# mount -r /dev/cdrom /var/ftp/pub/centos-6.4-x86_64/

[root@zly ~]# cd /var/ftp/pub/centos-6.4-x86_64/

[root@zly centos-6.4-x86_64]# 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

 

三、安装PXE实现部署所依赖的服务

1、安装vsftpd服务,并启动服务;

 

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

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

Loaded plugins: fastestmirror, refresh-packagekit, security

Loading mirror speeds from cached hostfile

Setting up Install Process

Resolving Dependencies

--> Running transaction check

---> Package vsftpd.x86_64 0:2.2.2-11.el6_3.1 will be installed

--> Finished Dependency Resolution

.................................

Installed:

  vsftpd.x86_64 0:2.2.2-11.el6_3.1

Complete!

.................................

[root@ zly ~]# service vsftpd start

Starting vsftpd for vsftpd:                                [  OK  ]

[root@ zly ~]# ss -tanlp | grep vsftpd

LISTEN     0      32                        *:21                       *:*      users:(("vsftpd",8968,3))

2、确认已配置好的yum源,并安装dhcp

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

[root@zly ~]# vim /etc/yum.repos.d/centos.repo

[yum1]

name=centos6.4

baseurl=http://172.16.0.1/cobbler/ks_mirror/centos-6.4-x86_64/

enable=1

gpgcheck=0

[yum2]

name=fedora

baseurl=http://172.16.0.1/fedora-epel/6/x86_64/

enable=1

gpgcheck=0

[yum3]

name=extr

baseurl=http://172.16.0.1/centos/6/extras/x86_64/

enable=1

gpgcheck=0

........................

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

Loaded plugins: fastestmirror, refresh-packagekit, security

Loading mirror speeds from cached hostfile

Setting up Install Process

Resolving Dependencies

--> Running transaction check

---> Package dhcp.x86_64 12:4.1.1-34.P1.el6.centos will be installed

--> Finished Dependency Resolution

.................

Installed:

  dhcp.x86_64 12:4.1.1-34.P1.el6.centos                                      

Complete!

四、修改dhcp的配置文件

1、dhcp服务是使用PXE的前提,通过dhcp服务可以告知tftp服务的地址,以及要加载的文件;

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

[root@zly ~]# cp /usr/share/doc/dhcp

dhclient-4.1.1/    dhcp-4.1.1/        dhcp-common-4.1.1/

[root@zly ~]# cp /usr/share/doc/dhcp-4.1.1/dhcpd.conf.sample /etc/dhcp/dhcpd.conf

cp: overwrite `/etc/dhcp/dhcpd.conf'? y

[root@zly ~]# vim /etc/dhcp/dhcpd.conf

option domain-name "xiaozheng.com";

option domain-name-servers 172.16.20.8;

default-lease-time 43200;

max-lease-time 86400;

..................

subnet 192.168.20.0 netmask 255.255.255.0 {

        range 192.168.20.1 192.168.20.100

        option routers 192.168.20.3

}

:.,$s@^\([^#]\)@#\1@g  注释当前行及其之后的行

[root@ zly ~]# service dhcpd start

Starting dhcpd:                                            [  OK  ]

[root@ zly ~]# ss -uanlp | grep dhcp

UNCONN     0      0                         *:67                       *:*      users:(("dhcpd",6578,7))

2、在配置文件中添加指向tftp服务器及PXE文件目录

 

 

1

2

3

4

5

6

7

8

9

10

11

[root@ zly ~]# vim /etc/dhcp/dhcpd.conf

subnet 192.168.20.0 netmask 255.255.255.0{

        range 192.168.20.1 192.168.20.100;

        option routers 192.168.20.3;

}

next-server 192.168.20.3;

filename="pxelinux.0";

........

[root@ zly ~]# service dhcpd restart

Shutting down dhcpd:                                       [  OK  ]

Starting dhcpd:                                            [  OK  ]

五、tftp服务的安装配置

1、安装使用tftp服务,查看tftp根目录的‘pxelinux'存放路径,并启动xinetd服务;

 

 

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

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

Loaded plugins: fastestmirror, refresh-packagekit, security

Loading mirror speeds from cached hostfile

Setting up Install Process

Resolving Dependencies

--> Running transaction check

---> Package syslinux.x86_64 0:4.02-8.el6 will be installed

---> Package tftp.x86_64 0:0.49-7.el6 will be installed

---> Package tftp-server.x86_64 0:0.49-7.el6 will be installed

........................

Installed:

  syslinux.x86_64 0:4.02-8.el6               tftp.x86_64 0:0.49-7.el6         

  tftp-server.x86_64 0:0.49-7.el6         

Dependency Installed:

  xinetd.x86_64 2:2.3.14-38.el6                                                

Complete!

.........................

[root@ zly ~]# cd /etc/xinetd.d/

[root@ zly xinetd.d]# ls

chargen-dgram   daytime-stream  echo-dgram   tcpmux-server  time-stream

chargen-stream  discard-dgram   echo-stream  tftp

daytime-dgram   discard-stream  rsync        time-dgram

[root@ zly xinetd.d]# vim tftp

        server                  = /usr/sbin/in.tftpd

        server_args             = -s /var/lib/tftpboot

        disable                 = yes

..............................

[root@ zly xinetd.d]# chkconfig tftp on

[root@ zly xinetd.d]# service xinetd restart

Stopping xinetd:                                           [  OK  ]

Starting xinetd:                                           [  OK  ]

[root@ zly xinetd.d]# ss -uanlp

State       Recv-Q Send-Q        Local Address:Port          Peer Address:Port

UNCONN      0      0                         *:751                      *:*      users:(("rpc.statd",1423,5))

UNCONN      0      0                         *:111                      *:*      users:(("rpcbind",1404,6))

UNCONN      0      0                         *:631                      *:*      users:(("cupsd",1547,9))

UNCONN      0      0                         *:67                       *:*      users:(("dhcpd",6664,7))

UNCONN      0      0                         *:69                       *:*      users:(("xinetd",6752,5))

六、配置PXE部署OS所需的安装源

1、从所下载的镜像文件中添加PXE部署OS所需要的相关文件;

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

[root@ zly ~]# ls

anaconda-ks.cfg  install.log         isolinux     pxelinux.0

images           install.log.syslog  package.xml

[root@ zly ~]# cd isolinux/

[root@ zly isolinux]# ls

boot.cat  grub.conf   isolinux.bin  memtest     TRANS.TBL     vmlinuz

boot.msg  initrd.img  isolinux.cfg  splash.jpg  vesamenu.c32

......................

[root@ zly isolinux]# cp {boot.msg,splash.jpg,vesamenu.c32} /var/lib/tftpboot/

[root@ zly isolinux]# cd /var/lib/tftpboot/

[root@ zly tftpboot]# ls

boot.msg  pxelinux.0  splash.jpg  vesamenu.c32

......................

[root@ zly ~]# cp images/pxeboot/{vmlinuz,initrd.img} /var/lib/tftpboot/

[root@ zly ~]# ls /var/lib/tftpboot/

boot.msg  initrd.img  pxelinux.0  splash.jpg  vesamenu.c32  vmlinuz

2、创建PXE配置文件

 

 

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

[root@ zly ~]# mkdir /var/lib/tftpboot/pxelinux.cfg

[root@ zly ~]# cd /var/lib/tftpboot/pxelinux.cfg/

[root@ zly pxelinux.cfg]# ls

[root@ zly pxelinux.cfg]# cp /root/isolinux/isolinux.cfg default

[root@ zly pxelinux.cfg]# ls

default

[root@ zly pxelinux.cfg]# vim default

label linux

  menu label ^Install or upgrade an existing system

  menu default

  kernel vmlinuz

  append initrd=initrd.img ks=ftp://192.168.20.3/pub/kickstart/centos6.cfg

  ...............

[root@ zly pxelinux.cfg]# chmod +x default

七、配置PXE所需的kickstart文件

1、创建kickstart文件;

 

1

2

3

4

5

6

7

8

9

10

11

12

[root@ zly pxelinux.cfg]# mkdir -pv /var/lib/pub/kickstart/

mkdir: created directory `/var/lib/pub'

mkdir: created directory `/var/lib/pub/kickstart/'

[root@ zly pxelinux.cfg]# vim default

[root@ zly pxelinux.cfg]# yum -y install system-config-kickstart

[root@ zly pxelinux.cfg]#  system-config-kickstart

Xlib:  extension "RANDR" missing on display "localhost:11.0".

/usr/share/system-config-kickstart/kickstartGui.py:103: GtkWarning: GtkSpinButton: setting an adjustment with non-zero page size is deprecated

  xml = gtk.glade.XML ("/usr/share/system-config-kickstart/system-config-kickstart.glade", domain="system-config-kickstart")

Loaded plugins: fastestmirror, refresh-packagekit

Loading mirror speeds from cached hostfile

.................

*(基图形化界面创建)

115752594.jpg

需要修改内容如下,其他选项使用默认配置

1)修改安装方法

115828261.jpg

2)修改磁盘分区

115829818.jpg

3)修改安装后脚本,并保存

115830298.jpg

至此kickstart文件创建完毕保存则可以使用

2、修改已经创建的kickstart文件,并重启vsftpd服务

 

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

[root@ zly ~]# ls

anaconda-ks.cfg  images       install.log.syslog  package.xml

centos6.cfg      install.log  isolinux            pxelinux.0

[root@ zly ~]# cat anaconda-ks.cfg

[root@ zly ~]# vim centos6.cfg

url --url="ftp://192.168.20.3/pub/centos-6.4-x86_64"

............

clearpart --all --initlabel

part /boot --fstype=ext4 --size=200

part pv.008002 --size=61440

volgroup vg0 --pesize=8192 pv.008002

logvol / --fstype=ext4 --name=root --vgname=vg0 --size=20480

logvol swap --name=swap --vgname=vg0 --size=2048

logvol /usr --fstype=ext4 --name=usr --vgname=vg0 --size=10240

logvol /var --fstype=ext4 --name=var --vgname=vg0 --size=20480

...........

[root@ zly ~]# service vsftpd restart

Shutting down vsftpd:                                      [  OK  ]

Starting vsftpd for vsftpd:                                [  OK  ]

 

八、使用PXE完成自动化部署OS

新建虚拟机安装OS,将其网卡连接模式改为内网模式vmnet2,启动安装流程,部署过程如下:

1)OS安装选择界面

121642645.jpg

2)等待NetworkManager配置网卡

121842255.jpg

3)从属检测

121950136.jpg

4)安装OS包

122030636.jpg

5)安装完毕后,重启主机即可使用已安装的系统。

 

 

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服务起来提供。整体框架如下图:

wKioL1m_PC7DGeR7AACEZ7Zh8E4228.png

方案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做如下配置:

subnet 192.168.14.0 netmask 255.255.255.0 { 

        range 192.168.25.50 192.168.25.100; 

        next-server 192.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 ~ ]#setenforce 0     # 临时关闭selinux 

[ root@vinsent ~ ]#vim /etc/selinux/config     # 修改文件永久关闭selinux 

...前面省略 

SELINUX=disabled                 # 设置SELINUX的值为disabled 

...后面省略

5.2配置静态IP地址

      由于我们在前面方案分析中选择了方案1,即将所有服务搭建在同一台服务器上。由于做DHCP服务的主机的IP地址必须固定,所以我们要先配置服务器的IP地址。由于我是在CentOS7系统上搭建的服务器,所以有许多命令只有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 ~ ]#systemctl restart network.service     #重启网络服务 

[ root@vinsent ~ ]#ip a                                  # 查看自己的IP是否设置成功

5.3安装服务

      由于我们需要HTTP、TFTP、DHCP服务来提供相应的服务,所以我们必须要在系统中安装,相应的服务。这里需要注意,如果你的系统时最小化安装,那么建议你先安装一些包组,GCC等。如果安装过程中出现包依赖问题,依次安装相应的包即可。

[ root@vinsent ~ ]#yum -y install dhcp tftp-server httpd syslimux  #安装相应的服务包 

[ root@vinsent ~ ]#yum -y install xinetd             # 安装超级守护进程xinetd 

[ root@vinsent ~ ]#systemctl enable dhcp             # 设置dhcp开机启动 

[ root@vinsent ~ ]#systemctl enable tftp             # 设置tftp开机启动 

[ root@vinsent ~ ]#systemctl start tftp              # 启动tftp服务  

[ root@vinsent ~ ]#systemctl enable httpd              

[ root@vinsent ~ ]#systemctl start httpd             # 启动http服务 

[ root@vinsent ~ ]#chkconfig tftp on     # 如果这天命令不能使用,请修改配置文件 

[ root@vinsent ~ ]#vim /etc/xinetd.d/tftp 

service tftp 

... 

    disable     =yes         # 修改这一项为"disable     =no" 

... 

[ root@vinsent ~ ]#systemctl restart xinetd     # 修改之后,一定要重启xinetd服务

5.4配置DHCP服务

        DHCP服务是保证我们能够自动化批量安装的前提,上面已经有提到过dhcp的配置,这里做补充,详细说明。主要是配置子网范围,用于ip地址分配。

[ root@vinsent ~ ]#rpm -ql dhcp         # 查询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 ~ ]#mv dhcpd.conf.example dhcpd.conf     # 改名为dhcpd.conf,顶替以前的配置文件 

[ root@vinsent ~ ]#vim dhcpd.conf         # 打开模板文件并添加一下内容 

...前面省略... 

subnet 192.168.14.0 netmask 255.255.255.0{         # 这里写的ip地址为子网的地址,故为192.168.14.0 

    range 192.168.14.10 192.168.14.200;     # 子网的范围,之后主机请求获取的ip地址就是这其中的一个 

    next-server 192.168.14.201;     # 指明tftp服务器的地址 

    filename "pxelinux.0"           # 指明PXE文件位置,这个在申请ip的时候会发送给安装主机 

...后面省略... 

[ root@vinsent ~ ]#systemctl dhcpd start     # 重启服务

        注意:如果你设置的子网有问题,那么你将不能重启dhcp服务,请检查你配置的子网是否正确。dhcp服务器的地址必须固定,不能是自动获取的ip。

5.5 准备yum源文件及kickstart文件

        yum源文件我们是放在http服务器上的,由http服务来提供,所以我们要把相应的文件复制到http服务器上。并且我们安装的主机系统可能是CentOS 6 也可能是CentOS7或者Ubantu等,所以我们在准备yum文件时,需要准备不同系统、不同版本的文件,我们这里只提供CentOS 6  与CentOS 7的两种系统的安装。向我们先规划一下目录文件,在进行复制。如下所示。

wKioL1m_VvORjWdpAAA7kXw6DxU127.png

        我们规划好了目录结构,接下来便是创建这些目录结构,并提供相应的文件。

[ root@vinsent ~ ]#cd /var/www/html 

[ root@vinsent html ]#mkdir -p centos/{6,7} 

[ root@vinsent html ]#mkdir ksdir 

[ root@vinsent html ]#

        提供yum源文件,这里有两种方案来实现yum源文件的提供,方案1:我们分别挂载CentOS 6和CentOS 7的关盘将光盘里的Packages目录与repodata目录复制到对应的目录下(如果复制,建议全部复制);方案2:我们创建两个关盘驱动器,一个添加CentOS 6的ISO镜像,一个添加CentOS 7的ISO镜像,然后我们分别将对应的关盘挂载到/var/www/html/centos下对应的目录上。综上所述,我们选择方案2。下面是一方案2为基础来实现的。

[ root@vinsent html ]#mount /dev/sr0 centos/6     # 挂载CentOS 6光盘值6目录下 

mount/dev/sr0 is write-protected,mounting read-only 

[ root@vinsent html ]#mount /dev/sr1 centos/7     # 挂载CentOS 7光盘值7目录下 

mount/dev/sr1 is write-protected,mounting read-only

        接下来准备ksdir目录下的安装引导文件ks#.cfg。ks#.cfg文件的获取方法有两种,一种是通过工具来生成。不过这个工具需要自己安装:

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

[ root@vinsent ~ ]#system-config-kickstart

wKiom1m_ZfKgNmCjAAF22SwMgnQ582.png

另外这一种是复制/root目录下的anaconda-ks.cfg文件加以修改。我们选择后者。

[ root@vinsent html ]#cp /root/anaconda-ks.cfg ksdir/ks7.cfg 

[ root@vinsent html ]#vim ksdir/ks7.cfg 

.... 

[ root@vinsent html ]#chmod +r ksdir/ks7.cfg    # "这里的文件需要加读权限,非常重要" 

[ root@vinsent html ]#cat ksdir/ks7.cfg         # centos 7的kickstart文件 

#version=DEVEL 

# System authorization information 

auth --enableshadow --passalgo=sha512 

# Use CDROM installation media 

url --url=     #  指明yum源的路径 

# Use graphical install 

text             # 将cdrom修改为text,我们不是基于光盘安装的,我们是基于字符界面安装 

# Run the Setup Agent on first boot 

firstboot --enable

ignoredisk --only-use=sda 

# Keyboard layouts 

keyboard --vckeymap=us --xlayouts='us'

# System language 

lang en_US.UTF-8 

  

# Network information 

network  --bootproto=dhcp --device=ens33 --onboot=on --ipv6=auto --activate   # --bootproto必须是dhcp获取,--onboot=on 

network  --hostname=centos7.magedu.com 

  

# Root password 

rootpw --iscrypted $6$Z7LBEUpwj3iQdYZ3$olYQ.Lj1xV2VAGS1UiNflKF0oMGip3b6tU9QFcp0i2JBjwKlY/Yaexul57NHpIJc.Y2V1hWAOueaqwjuWDGMk0 

# System services 

services --disabled="chronyd"

# System timezone 

timezone Asia/Shanghai --isUtc --nontp 

user --name=wang --password=$6$v.VphW/puRblcrFB$uaSrdEhGAwMXap27WIKTn5lyOOfoFyB/SNxyyL3og6s9/VQoAKoL2KQjKmeYFmoYTuYkSNL7BBxgbJzeryKr9. --iscrypted --gecos="wang"

# X Window System configuration information 

xconfig  --startxonboot 

# System bootloader configuration 

bootloader --append=" crashkernel=auto" --location=mbr --boot-drive=sda 

# Partition clearing information 

zerombr         # 添加zerombr ,表示清除旧磁盘上原有的mbr,新磁盘安装可不写 

clearpart --all     # 清除所有分区信息,新磁盘安装可不写 

# Disk partitioning information 

part swap --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 

  

%addon com_RedHat_kdump --enable --reserve-mb='auto'

%end 

  

%anaconda 

pwpolicy root --minlen=6 --minquality=50 --notstrict --nochanges --notempty 

pwpolicy user --minlen=6 --minquality=50 --notstrict --nochanges --notempty 

pwpolicy luks --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 <<eof 

[base] 

name=base 

baseurl=file:///misc/cd

gpgcheck=0 

eof 

%end 

  

************下面是CentOS 6的kickstart文件************* 

*******方法同上,这里你到别的主机上复制一份过来******* 

[ root@vinsent html ]#cat ksdir/ks6.cfg 

#version=DEVEL 

install

text             # 基于字符界面安装 

lang en_US.UTF-8 

keyboard us 

network --onboot yes --device eth0 --bootproto dhcp --noipv6 

rootpw  --iscrypted $6$hfb25YOYZDU3YZTl$VxTkHGGJGGBbr59OPnY5kTJzvJ9hb9NRwrh5FMHLIAlXh9VQ74PYoK7QzPWYN0zaJrm3mv/IP0fDkHxFglNi6/

firewall --service=ssh

authconfig --enableshadow --passalgo=sha512 

url --url=     # yum源的路径  

selinux --disabled     # 关闭selinux 

timezone Asia/Shanghai

bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet"

# The following is the partition information you requested 

# Note that any partitions you deleted are not expressed 

# here so unless you clear all partitions first, this is 

# not guaranteed to work 

zerombr             # 清除mbr 

clearpart --all     # 清除分区信息 

reboot              # 安装完成后重启 

part /boot --fstype=ext4 --size=1000         # 分区信息 

part / --fstype=ext4 --size=50000 

part /app --fstype=ext4 --size=40000 

part swap --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 <<eof 

[base] 

name=base 

baseurl=file:///misc/cd

gpgcheck=0 

eof 

%end

5.6准备内核文件菜单文件

内核文件、虚拟根文件以及菜单文件,我们都是通过tftp服务来提供的,由于系统及版本的不同,对于一个比较复制机群来说,我们需要准备不同系统,不同版本的内核文件,initrd.img文件。菜单文件只需要一份即可。/var/lib/tftpboot/目录规划如下:

wKiom1m_cy6SiJlbAAA_L04ibS4664.png

规划好了目录结构,接下来自只需要按照目录内容配置相关的文件即可。菜单风格文件menu.c32、不同系统的内核文件 vmlinuz 以及虚拟根文件系统 initrd.img 我们可以从光盘中复制。菜单文件defaults需要手动写

[ root@vinsent ~ ]#cd /var/lib/tftpboot/ 

[ root@vinsent tftpboot ]#mkdir -p centos{6,7}     # 创建目录文件 

[ root@vinsent tftpboot ]#cp /var/www/html/centos/6/{vmlinuz,initrd.img} centos6/     # 复制内核,虚拟根文件 

[ root@vinsent tftpboot ]#cp /var/www/html/centos/7/{vmlinuz,initrd.img} centos7/     # 由于之前挂载了不同系统,直接复制对应文件即可 

[ root@vinsent tftpboot ]#cp /usr/share/syslinux/pxelinux.0 . # pxelinux文件来自syslinux包,直接复制即可 

[ root@vinsent tftpboot ]#mkdir pxelinux.cfg 

[ root@vinsent tftpboot ]#cp /var/www/html/centos/6/isolinux/isolinux.cfg pxelinux.cfg/default # 复制并改名 

[ root@vinsent tftpboot ]#vim pxelinux.cfg/default 

...     # 修改过程省略, 

[ root@vinsent tftpboot ]#cat pxelinux.cfg/default     # 查看修改过后的菜单文件内容 

default menu.c32     # 指定菜单风格 

timeout 600          # 安装倒计时,1/10 s为单位 

menu title Auto Install | www.vinsent.cn 

  

label centos7 

  menu label Auto Install CentOS Linux ^7 

  kernel centos7/vmlinuz

  append initrd=centos7/initrd.img ks=   # 指明ks文件位置  

  

label centos6 

  menu label Auto Install CentOS Linux ^6 

  kernel centos6/vmlinuz

  append initrd=centos6/initrd.img ks=http://192.168.14.201/ksdir/ks6.cfg 

  

label manual7 

  menu label ^Manual Install CentOS Linux 7 

  kernel centos7/vmlinuz

  append initrd=centos7/initrd.img inst.repo=http://192.168.14.201/centos/7

  

label manual6 

  menu label Manual ^Install CentOS Linux 6 

  kernel centos6/vmlinuz

  append initrd=centos6/initrd.img inst.repo=http://192.168.14.201/centos/6

label local

  menu default        # 默认光标停在这一行 

  menu label Boot from ^local drive 

  localboot 0xffff 

menu end

 

到此所有的配置就完成了。

 

6 调试并安装


新创建一台虚拟机,设置网络段在上述DHCP服务所在的网络段,选择使用物理驱动器。

wKiom1m_lDqRvxhBAAGBpkC4NAY706.png

点击启动项开始安装,选择网络安装。

wKiom1m_gOrTgTzuAAAUBq9KRP0493.png

点击网络安装后,我们就能看到我们的菜单了。

wKioL1m_gTmB5AA2AAAWDG5GwCQ981.png

然后选择你要启动的项即可。

 

7 错误分析


最初还不是很熟悉PXE原理的时候,遇到了很多问题,在最后给处我与到的几个问题,即解决方法。

问题1:ks.cfg文件出错

wKioL1m_hISh5STnAAAlB0xKnTk100.png

解决方法:检查tftp服务是否启动,ks#.cfg文件路径是否正确,ks#.cfg文件是否具有读权限。出现这个问题大概就是这几个地方出了问题

问题2:yum源文件路径出错

wKioL1m_he7hcHTCAAEy60gBACE831.png

解决方法:寻找yum源出现错误,该错误是ks.cfg文件中url路径写错了,修改该路径为正确的yum源所在的地址即可。

问题3:iptables与selinux出问题

    遗憾忘记截图给大家了,见谅,安装前检查一下iptables与selinux是否关闭(实验环境,生产中不建议这么粗暴!)

 

8 总结


        本文通过分析PXE实现批量自动化安装的原理,再到一步步实现PXE的配置,再到后面的排错思路。在这里总结几个要点:关闭selinux,iptables很重要,ks文件读权限不可少,服务千万不能down掉,文件路径不能乱抄。

没有更多推荐了,返回首页