需要使用到的服务:PXE + DHCP+TFTP+ Kickstart+ FTP

运行原理如下图:

Linux网络安装(PXE + DHCP+TFTP+ Kickstart+ FTP)_第1张图片

 


 

原理和概念: 

1、前言

       首先,简单谈谈为什么要采用无人值守网络安装linux操作系统。一方面是运维管理的需要,因各种需要,安装操作系统在实验室内时有发生,有时候更出现批量安装某一型号操作系统的情形,这时候如果用光盘挨个安装将变得异常繁琐,并且需要人工值守。此外,因操作系统种类较多(主要是针对linux),内部人员使用频繁,也会带来管理上的问题。另一方面是当前MPX项目开发的需要,为打造一个精简、适用、高效、安全的网络存储平台,需要对当前的系统精雕细琢,在实验阶段,我很难为每一版本系统刻录一个光盘再进行系统安装,但通过网络安装的方式,可以避免频繁刻录光盘带来的不利。

2、PXE

       PXE(prebootexecute environment)是由Intel公司开发的最新技术,工作于Client/Server网络模式,支持工作站通过网络从远端服务器下载镜像,并由此支持来自网络的操作系统的启动过程。PXE Client存在于网卡的ROM中,当计算机引导时,BIOS把PXE Client调入内存中执行,并显示出命令菜单,经用户选择后,再将存放在远端服务器上的操作系统通过网络下载到本地运行。其启动过程中,终端要求服务器分配IP地址,再用TFTP(trivial file transfer protocol)或MTFTP(multicast trivial filetransfer protocol)协议下载一个启动软件包(一组文件)到本机内存中执行,由这个启动软件包完成终端基本软件设置,进而引导预先安置在服务器中的终端操作系统。

       简单说来,客户机通过支持PXE的网卡向网络中发送请求DHCP信息的广播,请求分配IP地址等信息,DHCP服务器给客户机提供IP地址和其它网络信息的同时还将提供网络安装操作系统中所需要的信息,如TFTP服务器、启动文件等,之后客户机请求并下载启动所需要的文件。在这个过程中需要一台服务器来提供启动文件、安装文件、以及安装过程中的自动应答文件等。

注:TFTP是TCP/IP协议族中一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务,端口号为69。在利用网络安装操作系统的过程中,它只负责从服务器下载最初的启动软件包到本机去执行,而终端操作系统的传输将由其它传输协议来完成(如:FTP、NFS、HTTP),具体设置参加后面章节的说明。

3、KickStart

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

设置BIOS引导顺序为:  硬盘,网络

 

模式: C/S 模式

 

实验环境: 

服务端:abiao1   IP:192.168.138.1   网卡模式: vmnet4

客户端:abiao2   IP:192.168.138.10   网卡模式: vmnet4

 

 

执行 PXE + KickStart安装需要准备内容:

·FTP 服务器用来存放系统安装文件; 

 TFTP 服务器用来存放PXE的相关文件,比如:系统引导文件;

 DHCP 服务器用来给客户机分配IP; 

 KickStart所生成的ks.cfg配置文件; 

·配置基于FTP的yum源,用于客户端安装软件;

 带有一个 PXE 支持网卡的将安装的主机;

 

 

一、配置基本环境

安装所需要的服务及修改相应配置文件:

1.搭建本地yum源或者网络yum源(其中之一就好)

本地yum源

[root@abiao1 ~]# mount /dev/cdrom /mnt

在/etc/yum.repos.d目录下创建一个以.repo结尾的文件:

[root@abiao1 ~]# cd /etc/yum.repos.d/

[root@abiao1 yum.repos.d]# vim pxe.repo

配置内容如下:

[rhel-source]

name=abiao1

baseurl=file:///mnt/

enabled=1

gpgcheck=0

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release

 

网络yum源

首先保证机器可以连接公网

[root@abiao1~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo

[root@abiao1~]# sed -i 's/$releasever/6/g' /etc/yum.repos.d/ CentOS-Base.repo

[root@abiao1~]# yum makecache

[root@abiao1~]# yum list all

 

2.安装ftp服务以及开启服务,设置为开机自动启动。

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

[root@abiao1 ~]# chkconfig vsftpd on

[root@abiao1 ~]# service vsftpd start

为 vsftpd 启动vsftpd:                                    [确定]

 

3.安装TFTP,修改tftp配置文件及开启服务

[root@abiao1 /]# yum-y install tftp tftp-server xinetd

配置tftp服务器:

[root@abiao1 /]# chkconfig tftp on/yes   启用tftp/禁用tftp

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

修改配置文件里面的13,14行。改成以下内容:

 


 

接着启动xinetd服务,然后查看服务端口是否打开。

[root@abiao1 /]#service xinetd start

停止xinetd:                                              [确定]

正在启动xinetd:                                          [确定]

[root@abiao1 ~]# lsof -i:69    #查看69端口正在被哪个进程使用

COMMAND PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME

xinetd 5646 root    5u  IPv4 25888      0t0  UDP *:tftp

[root@abiao1 ~]# netstat -anptu | grep 69     #这种方法,只能看到xinetd进程

udp       0      0 0.0.0.0:69                  0.0.0.0:*                               5646/xinetd

 

 

server_args = -s /tftpboot  # 表示服务器默认的目录是 /tftpboot

 

其中,server_args = -s/tftpboot是tftp服务器运行时的参数。-s/tftpboot表示服务器默认的目录是 /tftpboot,当你执行put a.txt时,文件会被放到服务器的/tftpboot/a.txt,省去你敲put a /tftpboot/的麻烦。你也可以加其它服务器运行参数到这,具体可以执行mantftpd命令查阅。

 

-c : 上传文件时,服务器上没有。就自动创建这个文件。

默认tftp客户端,只能上传tftp服务器已经有的文件。也就是只能传上去并覆盖服务器上的原文件。如果想上传原来目录中没有的文件,需要修改tftp服务器的配置文件并重起服务。需要修改如下:

打开/etc/xinetd.d/tftp文件,在 server_args 增加-c参数,如下所示:

server_args = -s /tftpboot -c

 

TFTP (Trivial File Transfer Protocol),中译简单文件传输协议或小型文件传输协议. 大家一定记得在2003年8月12日全球爆发冲击波(Worm.Blaster)病毒,这种病毒会监听端口69,模拟出一个TFTP服务器,并启动一个攻 击传播线程,不断地随机生成***地址,进行***。另外tftp被认为是一种不安全的协议而将其关闭,同时也是防火墙打击的对象,这也是有道理的。tftp 在嵌入式linux还是有用武之地的。需要打开防火墙,允许tftp访问网络。

 

 

4.安装dhcp,修改配置文件及开启服务:

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

配置DHCP服务器:

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

cp:是否覆盖"/etc/dhcp/dhcpd.conf"? y  #生成配置文件

[root@abiao1 ~]# vim/etc/dhcp/dhcpd.conf  #只保留一个subnet {。。。} ,取掉其它subnet,改成如下内容:

 

subnet 192.168.138.0 netmask 255.255.255.0 {

 range 192.168.138.10 192.168.138.20;

 option domain-name-servers 8.8.8.8;

 option domain-name "abiao.cn";

 option routers 192.168.138.1;

 option broadcast-address 192.168.138.255;

 default-lease-time 600;

 max-lease-time 7200;

 next-server 192.168.138.1;  #指定TFTP服务器地址

 filename "pxelinux.0";   #指定PXE引导程序的文件名

}

 

接着启动DHCP,设置为开机启动

[root@abiao1 ~]# service dhcpd start

正在启动 dhcpd:                                           [确定]

[root@abiao1 ~]# chkconfig dhcpd on

 

准备工作完成

 

二、配置使用PXE启动所需的相关文件

 

准备tftp需要共享出去的文件

#因为tftp是提供启动文件,内核文件,引导文件,启动菜单的 要把这些文件复制到根目录下

[root@abiao1 /]# mount /dev/sr0 /mnt

mount: block device /dev/sr0 iswrite-protected, mounting read-only

[root@abiao1 /]# mkdir /tftpboot           #创建tftp根目录

[root@abiao1 /]# mkdir /tftpboot/pxelinux.cfg   #创建启动文件夹(启动菜单存放位置)

[root@abiao1 /]# cp -a/usr/share/syslinux/pxelinux.0 /tftpboot/   #注,只有安装了system-config-kickstart软件包,才会有/usr/share/syslinux/目录及目录中的文件。

# pxelinux.0  PXE网络安装的引导程序

[root@abiao1 /]# cp -a /mnt/p_w_picpaths/pxeboot/initrd.img/tftpboot/   #linux内核

[root@abiao1 /]# cp -a/mnt/p_w_picpaths/pxeboot/vmlinuz tftpboot/   #初始化镜像文件

[root@abiao1 /]# cp -a/mnt/isolinux/isolinux.cfg tftpboot/pxelinux.cfg/default  #加载内核文件和初始化文件

[root@abiao1 /]# chmod 644 /tftpboot/pxelinux.cfg/default

 

三、修改default,指定安装操作系统的方式和ks.cfg文件路径

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

然后修改/tftpboot/pxelinux.cfg/default的配置文件。

改:default

为 :default  linux

#修改第1行,后面的linux意思是寻找下面18行的label linux 。如下:

Linux网络安装(PXE + DHCP+TFTP+ Kickstart+ FTP)_第2张图片然后修改下22行(即在后面添加ks=ftp://192.168.138.1/ks.cfg)。第22行的意思是使安装程序通过FTP服务器访问kickstart文件。

 

Linux网络安装(PXE + DHCP+TFTP+ Kickstart+ FTP)_第3张图片

 

以上有关default配置文件的修改就是通过ftp服务器方式来访问kickstart文件。

 

其中第1行:default linux表示指定默认入口名称;

第2行:prompt 1中prompt用来设置是否等待用户选择,1表示等待用户控制;

第18、23、27、31行label linux表示定义的引导入口,表示系统的不同安装方式,如第18行定义的入口表示图形安装。

配置文件修改完了,要开始自动安装,安装程序必须能访问kickstart文件。

有多种方法可访问kickstart文件,其中最常用的一种方法是通过网络服务器进行,

例如:ftp服务器、WEB服务器或NFS服务器,这种方法非常易于部署,并且也使管理更改变得十分简单。也可以通过USB磁盘、CD-ROM或本地硬盘。如果USB或CD-ROM中的kickstart文件非常便于访问,只需将kickstart文件放置在用来开始安装的引导介质中。而使用DHCP服务器和TFTP及PXE配置起来更为复杂。

使安装程序指向kickstart文件的书写格式如下:

ks=ftp://server/dir/file 如:ks=ftp://ftp服务器IP/ks.cfg

ks=http://server/dir/file 如:ks=http://http服务器IP/ks.cfg

ks=nfs:server:/dir/file 如:ks=nfs:nfs服务器IP:/var/ftp/pub/ks.cfg

ks=hd:device:/dir/file 如:ks=hd:sdb1:/kickstar-files/ks.cfg

ks=cdrom:/dir/file 如:ks=cdrom:/kickstart-files/ks.cfg

以上有关default配置文件的修改就是通过ftp服务器方式来访问kickstart文件。

 

接下来我们制作kickstart的无人值守安装文件。

 

安装system-config-kickstart软件包:

 [root@abiao1 ~]# yum -y install  system-config-kickstart  #安装此包时,会把syslinux软件包也安装上。

 

如果想在英文界面下打开一个软件,让它以中文界面显示,修改字符集:

[root@abiao1 /]# echo $LANG

en_US.UTF-8

[root@abiao1 /]#LANG="zh_CN.UTF-8"

[root@abiao1 /]# echo $LANG

zh_CN.UTF-8

[root@abiao1 /]# system-config-kickstart  #执行system-config-kickstart弹出来界面。

设置自己后期无人执守安装需要配置的参数:


我们设置下默认安装的语言,时区,根口令,然后勾选下面的安装后重新引导。然后选择安装方法。

 

Linux网络安装(PXE + DHCP+TFTP+ Kickstart+ FTP)_第4张图片

我们配置ftp服务器的安装方法。选择执行新安装。然后点击引导装载程序选项。

 

 Linux网络安装(PXE + DHCP+TFTP+ Kickstart+ FTP)_第5张图片

配置grub相关选项,不需要可以不配置

 

Linux网络安装(PXE + DHCP+TFTP+ Kickstart+ FTP)_第6张图片

设置分区大小。

 

Linux网络安装(PXE + DHCP+TFTP+ Kickstart+ FTP)_第7张图片

配置网络,默认没有网络设置,点击添加网络,设备名称为eth0,网络类型为dhcp

 

Linux网络安装(PXE + DHCP+TFTP+ Kickstart+ FTP)_第8张图片

验证,默认就可以了。

 

Linux网络安装(PXE + DHCP+TFTP+ Kickstart+ FTP)_第9张图片

防火墙和selinux根据自己需求选择开启或者禁用。

 

Linux网络安装(PXE + DHCP+TFTP+ Kickstart+ FTP)_第10张图片

安装图形环境

 

Linux网络安装(PXE + DHCP+TFTP+ Kickstart+ FTP)_第11张图片

自定义软件包。默认可能没有勾选桌面。根据自己需求勾选。 我们为了快速度安装,不选择安装桌面。

 Linux网络安装(PXE + DHCP+TFTP+ Kickstart+ FTP)_第12张图片

安装脚本:在"预安装脚本","安装后脚本"对话框中,可以分别添加在安装前、安装后自动动行的可执行语句。此项设置可以使服务器自动化配置变得更加容易。

例如:配置客户机在完成安装后自动设置YUM仓库。

Linux网络安装(PXE + DHCP+TFTP+ Kickstart+ FTP)_第13张图片

写入以下脚本内容:

rm -rf/etc/yum.repos.d/*

echo '[rhel-source]

name=abiao

baseurl=file:///mnt/

enabled=1

gpgcheck=0

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release'> /etc/yum.repos.d/rhel6.repo

 

 

到此所有关于安装的配置已经配置完毕,保存:

点击左上角的文件选择保存,选择下保存的路径

Linux网络安装(PXE + DHCP+TFTP+ Kickstart+ FTP)_第14张图片

 

[root@abiao1 ~]# cp ks.cfg /var/ftp/  #复制ks.cfg文件到/var/ftp目录下

注:ks.cfg就是无人值守安装时要用的Kickstart文件。

要对应:/tftpboot/pxelinux.cfg/default文件中设置过ks=ftp://192.168.138.1/ks.cfg

 

配置基于ftp的yum源,用于客户端安装时,读取软件包用:

[root@abiao1 ~]# mount /dev/sr0/var/ftp/pub/  #挂载RHEL6安装光盘到/var/ftp/pub目录下

mount: block device /dev/sr0 iswrite-protected, mounting read-only

或者将之前挂载的镜像内容复制到/var/ftp/pub下

[root@abiao1 ~]# cp /mnt/* /var/ftp/pub/ 

 

建议关闭防火墙和selinux

如果没有关闭的话,tftp服务会有问题。

[root@abiao1 ~]# getenforce

Disabled

设置防火墙:

[root@abiao1 ~]# iptables –F             #清空规则列

[root@abiao1 ~]# service iptables save    #保存

iptables:将防火墙规则保存到 /etc/sysconfig/iptables:     [确定]

 

准备一台机器,网卡设置为vmnet,用于分配IP地址

Linux网络安装(PXE + DHCP+TFTP+ Kickstart+ FTP)_第15张图片

修改机器的 BIOS启动顺序为网络优先,加电后开始启动。

Linux网络安装(PXE + DHCP+TFTP+ Kickstart+ FTP)_第16张图片

使用shift+上移

Linux网络安装(PXE + DHCP+TFTP+ Kickstart+ FTP)_第17张图片

F10保存

 

一切都准备好以后,那就开始安装把!!!

Linux网络安装(PXE + DHCP+TFTP+ Kickstart+ FTP)_第18张图片

安装完成后,启动时记得修改机器的 BIOS启动顺序修改回来

 

进入系统,查看是否成功配置yum源

Linux网络安装(PXE + DHCP+TFTP+ Kickstart+ FTP)_第19张图片