PXE网络自动化安装Linux

 

在工作环境中,批量安装、无键盘鼠标、无显示器、无光驱安装操作系统都需要采用非交互式安装。

PXE安装就是可以通过网络自动加载系统内核,并启动安装程序,再配合kickstart配置文件,完成无交互式安装的方式。

 

一、基本概念

DHCP

    动态主机设置协议(Dynamic Host Configuration Protocol, DHCP)是一个局域网的网络协议,使用UDP协议工作在67号端口,主要用途是给网络中的设备自动分配IP地址。

TFTP

    TFTP(Trivial File Transfer Protocol,简单文件传输协议)是用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务。使用UDP协议端口号69。由于使用UDP协议,建议使用环境在网络传输质量高的局域网中使用,且传输文件小而少。不支持用户交互,即不能列出服务器目录内容。服务运行依赖超级守护进程xinetd。

xinetd

    超级守护进程(eXtended InterNET serivices Daemon),它是一个管理其它提供网络服务进程的进程,常驻内存。它管理一些不经常启动的网络服务,一旦客户端发起请求,它启动相应的处理服务进程,用完关闭。

    这样节省了系统资源的占用,但是有请求时才启用,就不能做到快速响应。对于频繁发起服务的请求,就会频繁创建关闭服务进程,反而导致性能下降。

PXE

    PXE,预启动执行环境(Preboot eXecution Environment,也被称为预执行环境)提供了一种使用网络接口(Network Interface)启动计算机的机制。这种机制让计算机的启动可以不依赖本地数据存储设备(如硬盘)或本地已安装的操作系统。
    PXE设备可以通过网络接口卡(NIC),使用DHCP、TFTP协议来搜寻网络服务器上的引导程序。

pxelinux.0

    PXE通过网络查找加载的引导程序,称为网络引导程序NBP。
    pxelinux.0就是一种NBP。它主要作用是装载执行指派的预引导工作所需的操作系统。
    pxelinux.0 文件是 syslinux 这一开放源代码项目的一部分的改进版本。虽然 pxelinux.0 主要是 Linux 加载器,但它也可以装载其他操作系统。它的工作方式是使用位于 TFTP 服务器上的配置文件来提供引导指令。

kickstart安装

    由红帽公司创建的安装方式,通过kickstart,系统管理员能够使用自动化方式完成系统安装。

    有一个文件/root/anaconda-ks.cfg ,它是红帽系安装过程中生成的简单的kickstart文件。

    kickstart文件分为三个部分,命令段、软件包段、脚本段,各部分要遵循一定的顺序。

需要了解的命令:

install命令

告诉系统是安装一个全新的系统而不是升级存在的系统(默认)。安装时,你可以从cdrom、硬盘驱动器、nfs、或者url(ftp,http安装)中指定安装类型。install命令和安装方法必须在不同的行设置。

url命令

支持通过FTP和HTTP从远程服务器安装。通常要使用--url选项。例如,url --url=URL

repo命令

配置另外的yum仓库,多个repo命令指定多个yum源。

    可以使用图形配置界面system-config-kickstart来配置kickstart, 可以基于/root/anaconda-ks.cfg文件,通过图形化窗口再次修改后得到新的kickstart文件。使用yum -y install system-config-kickstart安装此工具。

image

    使用ksvalidator来验证语法。

 

二、实验环境的准备

前提:

  • 安装虚拟机软件VMWare,或者其他虚拟机软件,例如VirtualBox开源小巧功能齐全,实验演示的配置都大同小异。
  • 将CentOS光盘挂载到/media/cdrom,配置本地yum源备用。配置yun请参看博主博文 《Linux的程序安装和包管理》,此类博文很多,这里不再赘述。
  • PXE启动还需要pxelinux.0,需要安装syslinux包。
  • 自动化安装,需要提供kickstart文件,可以采用HTTP/FTP协议提供此文件URL。还需要在kickstart文件中指明repo仓库。

 

环境搭建:

1、安装实验系统并设置实验网络环境

在虚拟机中安装CentOS 6.5和Windows XP系统。

按右下角网络设置CentOS和XP的网络连接为VMnet2,这样2台虚拟机就可以在一个虚拟网络中通信了。

实验环境采用192.168.23.0/24,CentOS地址为192.168.23.1,在/etc/sysconfig/network-scripts/ifcfg-eth0修改参数,如下:

image

检查CentOS的网络配置

image

 

image

2、检查CentOS的tftp服务和tftp客户端。

这里没有安装,使用yum list all tftp*,查看后安装相关包,yum �Cy install tftp* 。

image

安装完成如下,共有三个包安装了,tftp客户端、tftp-server服务和tftp-server所依赖的xinetd服务包。

image

image

3、检查CentOS的DHCP服务。安装方法同上,包名dhcp

image

4、关闭iptables防火墙服务。

QQ图片20140730133313

5、安装syslinux包

[root@localhost cdrom]# yum -y install syslinux 
[root@localhost cdrom]# rpm -ql syslinux | grep pxelinux.0 
/usr/share/syslinux/pxelinux.0

6、安装httpd包。默认已安装,否则请参照上面方法安装

到此,实验环境已经搭建成功。

 

三、服务准备

1、DHCP服务配置

image

启动失败,什么原因,查看vim /etc/dhcp/dhcpd.conf

image

原来DHCP管理的网段不在本机网段,修改配置文件

image 

再次启动DHCP,成功

image

使用XP测试DHCP,成功。至此就可以使用这台XP中的Xshell来完成其它操作。

image

[root@localhost ~]# chkconfig dhcpd on 
[root@localhost ~]# chkconfig --list dhcpd 
dhcpd              0:off    1:off    2:on    3:on    4:on    5:on    6:off

2、tftp服务配置

查看xinetd服务,配置xinet,并启动之

[root@localhost ~]# chkconfig --list xinetd 
xinetd             0:off    1:off    2:off    3:on    4:on    5:on    6:off 
[root@localhost ~]# service xinetd status 
xinetd is stopped
 
[root@localhost ~]# ls /etc/xinet* 
/etc/xinetd.conf 
 
/etc/xinetd.d: 
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@localhost ~]# vim /etc/xinetd.d/tftp 
# 修改disable    = yes为disable = no 
[root@localhost ~]# chkconfig --list xinetd 
xinetd             0:off    1:off    2:off    3:on    4:on    5:on    6:off 
[root@localhost ~]# chkconfig --list 
dhcpd              0:off    1:off    2:off    3:off    4:off    5:off    6:off 
xinetd             0:off    1:off    2:off    3:on    4:on    5:on    6:off 
 
xinetd based services: 
    chargen-dgram:     off 
    chargen-stream:    off 
    daytime-dgram:     off 
    daytime-stream:    off 
    discard-dgram:     off 
    discard-stream:    off 
    echo-dgram:        off 
    echo-stream:       off 
    rsync:             off 
    tcpmux-server:     off 
    tftp:              off 
    time-dgram:        off 
    time-stream:       off 
[root@localhost ~]# service xinetd start 
Starting xinetd:                                           [  OK  ]
 
[root@localhost ~]# chkconfig --list 
# 其他内容省略 
xinetd based services: 
    tftp:              on
 
[root@localhost ~]# netstat -unlp 
Active Internet connections (only servers) 
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name 
udp        0      0 0.0.0.0:67                  0.0.0.0:*                               3477/dhcpd 
udp        0      0 0.0.0.0:69                  0.0.0.0:*                               3854/xinetd
 
[root@localhost ~]# rpm -ql tftp-server 
/etc/xinetd.d/tftp 
/usr/sbin/in.tftpd 
/usr/share/doc/tftp-server-0.49 
/usr/share/doc/tftp-server-0.49/CHANGES 
/usr/share/doc/tftp-server-0.49/README 
/usr/share/doc/tftp-server-0.49/README.security 
/usr/share/doc/tftp-server-0.49/README.security.tftpboot 
/usr/share/man/man8/in.tftpd.8.gz 
/usr/share/man/man8/tftpd.8.gz 
/var/lib/tftpboot

由上查询的包信息可知配置文件路径和tftp的根目录

上面的多步操作中,修改了配置文件/etc/xinetd.d/tftp,将其中的disable改为no,见下图

image

然后启动了xinetd,也可以在xinetd启动后,修改了配置文件,采用重新装载xinetd,如下:

[root@localhost 6]# service xinetd status
xinetd (pid  3854) is running...
[root@localhost 6]# service xinetd help
Usage: /etc/init.d/xinetd {start|stop|status|restart|condrestart|reload}
[root@localhost 6]# service xinetd reload
Reloading configuration:                                   [  OK  ]
 
[root@localhost 6]# chkconfig --list
xinetd             0:off    1:off    2:off    3:on    4:on    5:on    6:off
 
xinetd based services:
    tftp:              on

将测试文件test.txt放在tftp的根目录/var/lib/tftpboot下

[root@localhost ~]# tftp 192.168.23.1 
tftp> get test.txt 
tftp> quit 
[root@localhost ~]# ls *.txt 
test.txt

测试成功,删除根目录的测试文件

 

3、修改DHCP配置文件

修改并重新装载。next-server被用来指定一台服务器的主机地址,这台主机是filename指定的启动文件所在的服务器。

# dhcpd.conf 
# option definitions common to all supported networks... 
option domain-name "test.com"; 
option domain-name-servers 192.168.23.1; 
 
default-lease-time 60000; 
max-lease-time 72000; 
 
# Use this to send dhcp log messages to a different log file (you also 
# have to hack syslog.conf to complete the redirection). 
log-facility local7; 
# This is a very basic subnet declaration. 
 
subnet 192.168.23.0 netmask 255.255.255.0 { 
  range 192.168.23.170 192.168.23.190; 
  option routers 192.168.23.1; 
  next-server 192.168.23.1; 
  filename "pxelinux.0; 
}
 
[root@localhost ~]# service dhcpd configtest 
Syntax: OK 
[root@localhost ~]# service dhcpd force-reload 
Shutting down dhcpd:                                       [  OK  ] 
Starting dhcpd:                                            [  OK  ]

4、配置WEB服务器

[root@localhost ~]# yum -y install httpd 
[root@localhost ~]# chkconfig --list httpd 
httpd              0:off    1:off    2:off    3:off    4:off    5:off    6:off 
[root@localhost ~]# chkconfig httpd on 
[root@localhost ~]# chkconfig --list httpd 
httpd              0:off    1:off    2:on    3:on    4:on    5:on    6:off 
# 默认WEB站点根目录为/var/www/html 
[root@localhost ~]# cat /etc/httpd/conf/httpd.conf  | grep "/var/www/html" 
DocumentRoot "/var/www/html"

 

四、PXE启动安装

1、pxelinux.0

# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/

2、在tftp服务的根目录中添加配置文件目录

名称为pxelinux.cfg。pxelinux搜索配置文件有一定的规则,pxelinux.cfg中的配置文件命名为default。而这个文件可以修改isolinux.cfg文件获得

[root@localhost ~]# cd /var/lib/tftpboot/ 
[root@localhost tftpboot]# mkdir pxelinux.cfg 
[root@localhost tftpboot]# cp /media/cdrom/isolinux/isolinux.cfg ./pxelinux.cfg/default

3、复制配置文件依赖的文件

[root@localhost tftpboot]# cp /media/cdrom/isolinux/{vesamenu.c32,boot.msg,splash.jpg} ./

4、复制内核文件、ramdisk(注意文件的位置是pxeboot目录)

[root@localhost tftpboot]# cp /media/cdrom/images/pxeboot/{initrd.img,vmlinuz} ./

5、提供安装树

将kickstart文件、安装源、yum源挂载到WEB站点目录中,使PXE启动过程可以通过HTTP协议访问URL指向的资源。

[root@localhost html]# mkdir -pv /var/www/html/centos/6/x86_64/ 
mkdir: created directory `centos' 
mkdir: created directory `centos/6' 
mkdir: created directory `centos/6/x86_64' 
[root@localhost ~]# cd /var/www/html/ 
[root@localhost html]# cp /root/anaconda-ks.cfg /var/www/html/centos/6/centos6.cfg 
[root@localhost html]# mount --bind /media/cdrom/ /var/www/html/centos/6/x86_64/

6、再次修改配置文件

1)修改/var/www/html/centos/6/centos6.cfg文件,全文如下

#platform=x86, AMD64, or Intel EM64T 
#version=DEVEL 
# Firewall configuration 
firewall --disabled 
# Install OS instead of upgrade 
install 
# Use network installation 
url --url="http://192.168.23.1/centos/6/x86_64" 
# Root password 
rootpw --iscrypted $1$nPoir2iZ$SnptkT7ZmEi7ldMq7OM3z/ 
# 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 --disabled 
# 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 --initlabel 
# Disk partitioning information 
part /boot --fstype="ext4" --size=200 
part swap --fstype="swap" --size=2048 
part / --fstype="ext4" --size=30000 
 
repo --name="CentOS"  --baseurl="http://192.168.23.1/centos/6/x86_64"
 
%packages 
@Base 
@Core 
@base 
@basic-desktop 
@chinese-support 
@client-mgmt-tools 
@core 
@desktop-platform 
@fonts 
@general-desktop 
@graphical-admin-tools 
@legacy-x 
@network-file-system-client 
@perl-runtime 
@remote-desktop-clients 
@x11 
ibus-table-cangjie 
ibus-table-erbi 
ibus-table-wubi 
lftp 
 
%end

2)修改/var/lib/tftpboot/pxelinux.cfg/default

在缺省项后面增加ks=http://192.168.23.1/centos/6/centos6.cfg

image

7、启动HTTP服务

[root@localhost cdrom]# service httpd start

image

8、创建新虚拟机,调整BIOS,让从网卡启动,网络处于VMnet2中,网卡自动获取IP地址。

image

image

image

image

image

至此,PXE安装系统成功!

特别提醒:如果在BIOS中设置了网卡为启动第一项设备,一旦系统在硬盘安装成功,如果还是从网卡启动,有可能循环安装。

参考资料

PXE
http://www.novell.com/zh-cn/documentation/zcm10/zcm10_preboot_imaging/data/bvb2dvw.html

PXELINUX

http://www.syslinux.org/wiki/index.php/PXELINUX

kickstart

https://fedoraproject.org/wiki/Anaconda/Kickstart/zh-cn#Chapter_7._.E8.AE.A9.E5.AE.89.E8.A3.85.E6.A0.91.E5.8F.AF.E7.94.A8

你可能感兴趣的:(自动化安装,pxelinux.0)