前言

   如果要给很多台客户端主机安装操作系统,要是每一台都拿张安装光盘一台一台主机的去装系统那就太浪费时间和精力了。在生产环境中也不实际,要实现为多台主机自动安装操作系统,那我们怎么实现自动化安装呢,这就要来讲讲PXE了,PXE就是为这种给多台主机自动化安装操作系统而生的,那接下来我们就来基于DHCP完成自动化为多台主机安装操作系统。





正文

   要实现自动安装之前先确保几个包已经安装好了:

   1、DHCP:动态主机配置协议、他是使用UDP协议工作的

   2、tfpt-server:这个是服务器端提供需要的安装的包

   3、xinetd:这个是唤醒tftp这个服务的服务

   4、syslinux:这个程序包是提供pxelinux.0

   5、准备安装树、就是要安装的各种rpm包、centos6.5安装光盘





基本原理及工作流程:

   首先,在客户端主机的网卡要支持网络引导,当开机时网卡就会激活当中的程序,自行通过网络向DHCP请求IP地址,并配置在自己的网卡上。

   其次,DHCP服务器回应给我们的主机,分配了IP地址,掩码,网管等网络相关参数,再让DHCP服务器告诉我们的客户端主机tftp服务器在什么位置。

   接着,客户端主机就去请求tftp服务器,当然,这里的DHCP服务器和tftp服务器可以是同一台,也可以不是同一台,看情况而定。

   而后,tftp服务器就会给客户端主机提供一个pxe的文件、这个文件就是pxelinux.0,他相当于我们的bootloader、而这个文件是由syslinux这个程序包提供的。

   再则,客户端主机利用tftp服务器提供的pxelinux.0这个文件,再次尝试到tftp服务器上获取内核,因为要启动安装就要启用引导内核。

   之后,当引导内核启动后,客户端主机通过改名后的default(由pxelinux.0改名而来)文件成功的引导Linux安装内核后,通过httpd服务获取该文件中指定的自动应答文件ks.cfg所在位置,根据该位置请求下载该文件。

   最后,将ks.cfg文件下载回来后,通过该文件找到ks.cfg文件的配置请求下载安装过程所需要的软件包,这样就可以实现生动化安装了。









自动化安装过程实现:

1、将光盘做成yum源:

# cd /etc/yum.repos.d/

# vim media.repo

[base1]
name=media
baseurl=file:///mnt
enabled=1
gpgcheck=0
cost=100

# yum clean all

2、安装并配置DHCP和httpd服务

# yum -y install dhcp httpd





   安装好dhcp之后、就去配置dhcp服务里的一些参数了、能让dhcp服务告诉客户端主机tftp服务器在什么位置,用net-server IP设定、还要设定文件名为pxelinux.0、这些设定可以放在全局、也可以放在某个子网中,复制/usr/share/doc/dhcp-4.1.1/dhcpd.conf.sample文件替换原配置文件/etc/dhcp/dhcpd.conf、然后编辑/etc/dhcp/dhcpd.conf

   # cp /usr/share/doc/dhcp-4.1.1/dhcpd.conf.sample /etc/dhcp/dhcpd.conf

   # vim /etc/dhcp/dhcpd.conf





将subnet 10.152.187.0 netmask 255.255.255.0 {

}

段以后不是以#开头的内容注释掉

:,.$s/^[^#]/#&/g 



:set nohlsearch  #去掉编辑器颜色

subnet 192.168.8.0 netmask 255.255.255.0 { # 定义网段、掩码
range 192.168.8.210 192.168.8.215; # 地址池
option routers 192.168.8.254; # 网关
next-server 192.168.8.42; # tftp服务器
filename "pxelinux.0";
}





配置完成后,启动DHCP服务,并将它设为开机自启动、也重启一下dhcp服务

# service dhcpd restart

# chkconfig dhcpd on

# chkconfig --list dhcpd

dhcpd           0:off1:off2:on3:on4:on5:on6:off

3、安装tftp服务

由于tftp服务由xinetd服务管理并由xinetd来唤醒的、所以也要安装xinetd服务、tftp-server是服务器端要安装的、tftp是客户端要安装的。

# yum -y install tftp-server

   # yum -y install xinetd

看一下安装完后生成的文件、有几个我们需要关注一下的:





然后启动这两个服务:

   # chkconfig tftp on

   # service xinetd restart





在这里我们应该挂载我们的安装光盘、我这里的安装光盘已经挂载好了:





# mount /dev/cdrom /mnt

4、准备自动安装系统需要的启动内核及其他文件

现在我们从刚挂载的光盘中开始复制内核文件以及init等一些文件到/tftp/lib/tftpboot目录下:

# cp /mnt/images/pxeboot/{vmlinuz,initrd.img} /var/lib/tftpboot/
# cp /mnt/isolinux/boot.msg /var/lib/tftpboot/
# cp /mnt/isolinux/splash.jpg /var/lib/tftpboot/
# cp /mnt/isolinux/vesamenu.c32 /var/lib/tftpboot/



还要复制一个叫pxelinux.0这个文件、这个文件是由syslinux提供的、要安装这个程序包才会有这个文件,那我们就装吧!

# yum -y install syslinux





安装好了之后就复制这个文件吧:

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





在这里pxelinux.0取代了isolinux、他工作时要依赖的配置文件叫isolinux.cfg,虽然pxelinux.0取代了isolinux、但是依然需要一个配置文件、这样我们就复制isolinux.cfg到/var/lib/tftpboot/pxelinux.cfg/目录下、这里pxelinux.cfg目录要我们事先创建好、同时复制过来的配置文件要改名为default:

# cd /var/lib/tftpboot/
# mkdir pxelinux.cfg
# cp /mnt/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default

5、配置自动化安装kickstart文件

此时还需要系统能够自动化安装,我们还没有ks自动应答文件,也没有安装树、在安装时必须提供所依赖的各种rpm包,我们知道HTTP可以向外提供安装树、那就用到我们的httpd了、我这里已经安装好了httpd服务了,httpd的服务路径在/var/www/html下、这时我们可以绑定我们之前挂载好的光盘到这个目录,这样就有安装树了,当然在html下创建个目录会好点,这里我们创建成centos6.5:

   # mkdir /var/www/html/centos6.5

   # mount --bind /mnt/ /var/www/html/centos6.5/





启动httpd服务,并检查80端口是否正常启用:

# service httpd start

# ss -tnl





这样子文件共享服务就设定OK了,可以用:http://本机服务器IP地址/centos6.5

这样就可以访问得到了,安装树安装完成





接下来我们需要使用system-config-kickstart来定制我们的kickstart.cfg文件,建议也使用/root/anaconda-ks.cfg作为模板来进行





# cp anaconda-ks.cfg ks.cfg





安装kickstart工具

# yum install -y system-config-kickstart

启动配置工具进行配置

# system-config-kickstart &

验证文件是否OK

# ksvalidator ks.cfg



提供ks.cfg文件供参考(这个安装模板是基本服务软件包安装)

# cat ks.cfg

# Kickstart file automatically generated by anaconda.

#version=DEVEL
install
url --url=http://192.168.8.42/centos6.5
lang en_US.UTF-8
keyboard us
network --onboot yes --device eth0 --bootproto dhcp --noipv6
rootpw --iscrypted $6$Zo9OJ.qLqnykyR3A$oMfNInpeoBafrlems1hl/yb4Qast3q4AXTloF7ZdqbszFmYlG9cLYgobocFBsc11wGGy/nleM8liSRU.kqvsy0
reboot
firewall --disabled
authconfig --enableshadow --passalgo=sha512
selinux --disabled
timezone --utc 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
clearpart --all
zerombr
text part /boot --fstype=ext4 --size=300
part pv.008002 --grow --size=61440 volgroup vg_node4 --pesize=8192 pv.008002
logvol /data --fstype=ext4 --name=data --vgname=vg_node4 --size=20000
logvol / --fstype=ext4 --name=root --vgname=vg_node4 --size=20000
logvol swap --name=swap --vgname=vg_node4 --size=4000
logvol /usr/local --fstype=ext4 --name=usr --vgname=vg_node4 --size=10000
logvol /web --fstype=ext4 --name=web --vgname=vg_node4 --size=20000 repo --name="CentOS" --baseurl=http://192.168.8.42/centos6.5 --cost=100 %packages
@base
@console-internet
@core
@debugging
@directory-client
@hardware-monitoring
@java-platform
@large-systems
@network-file-system-client
@performance
@perl-runtime
@server-platform
@server-policy
@workstation-policy
pax
oddjob
sgpio
device-mapper-persistent-data
samba-winbind
certmonger
pam_krb5
krb5-workstation
perl-DBD-SQLite
%end

而后我们就开始复制Kickstart文件了,这个文件在/root/目录下,叫anaconda-ks.cfg、我们把他复制到/var/www/html/下,改名为ks.cfg

# cp /root/ks.cfg /var/www/html/ks.cfg





由于这个文件只有管理员可以访问、复制过来之后要给个可读的权限他:

# chmod +r /var/www/html/ks.cfg





再编辑一个这个ks.cfg里面的配置跟我们设定好的一致、要不然找不到文件路径:

# vim /var/www/html/ks.cfg





怎么让启动时加载kickstart.cfg文件呢,那就要在/var/lib/tftpboot/pxelinux.cfg/default文件的label为linux下的append后面补上 ks=http://192.168.8.42/ks.cfg





   编辑/var/lib/tftpboot/pxelinux.cfg/default

   # vim /var/lib/tftpboot/pxelinux.cfg/default





   改好后:wq!强行写入、退出即可





到这里我们已经配置好了我们的自动化安装环境接下来创建一个虚拟机来测试一下,看一下我们的自动化安装界面是否可以启动

步骤总结:

1、配置DHCP服务器

        # yum -y install dhcp

        # vim /etc/dhcp/dhcpd.conf

        自定义subnet、同时配置tftp服务的信息:

        subnet {

            ...

            next-server TFTP-SERVER-IP;

            filename "pxelinux.0";

        }





        # service dhcpd restart





    2、配置tftp-server

        # yum -y install xinetd tftp-server tftp

        # chkconfig xinetd on

        # chkconfig tftp on

        # service xinetd start

        # ss -unl | grep ":69"





    3、准备安装树、也就是我们的安装包

        # mkdir /var/www/html/centos6.5

        # mount --bind /media/cdrom /var/www/html/centos6.5

        # service httpd start





    4、复制文件到tftpboot下的文件

        # yum -y install syslinux

        # cp /mnt/images/pxeboot/{vmlinuz,initrd.img}  /var/lib/tftpboot/

        # cp /mnt/isolinux/{boot.msg,vesamenu.c32,splash.jpg}  /var/lib/tftpboot/

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

        # mkdir /var/lib/tftpboot/pxelinux.cfg

        # cp /mnt/isolinux/isolinux.cfg  /var/lib/tftpboot/pxelinux.cfg/default





    5、提供kickstart文件

       直接从/root/anaconda-ks.cfg复制到/var/www/html目录下,注意:url及repo后的路径要修改为可用安装树的路径;         





    6、配置引导程序能自动加载此kickstart文件

        编辑/var/lib/tftpboot/pxelinux.cfg/default

        在label为linux项的append一行后附加:

            ks=http://HTTP_SERVER_IP/ks.cfg





    最后,祝你测试成功!

CentOS 6.5自动化运维之基于DHCP和TFTP服务的PXE自动化安装centos操作系统详解的更多相关文章

  1. CentOS 6.5自动化运维之基于cobbler服务的自动化安装操作系统详解

    一.Cobbler安装 前提:cobbler由epel源提供,故此需要事先配置指向epel的yum源方可进行类似下面的安装过程. # yum install -y epel-release # yum ...

  2. centos6.5环境自动化运维之puppet实现nginx反向代理功能及puppet安装配置详解

    puppet是一种Linux.Unix.windows平台的集中配置管理系统,使用自有的puppet描述语言,可管理配置文件.用户.cron任务.软件包.系统服务等.puppet把这些系统实体称之为资 ...

  3. 轻量级自动化运维工具Fabric的安装与实践

    一.背景环境 在运维工作中,经常会遇到重复性的劳动,这个时候为了效率就必须要使用自动化运维工具. 这里我给大家介绍轻量级自动化运维工具Fabric,Fabric是基于Python语言开发的,是开发同事 ...

  4. 真正云原生的智能运维体系,阿里云发布ECS自动化运维套件

    云计算的发展,推动了自动化运维.DevOps.AIOps 等趋势的兴起,在业务快速变化的今天,企业希望通过一套自动化运维的专家系统提高运维效率,为业务提供支撑. 传统的方式下,打造一套成熟的 DevO ...

  5. 【目录】Python自动化运维

    目录:Python自动化运维笔记 Python自动化运维 - day2 - 数据类型 Python自动化运维 - day3 - 函数part1 Python自动化运维 - day4 - 函数Part2 ...

  6. python自动化运维篇

    1-1 Python运维-课程简介及基础 1-2 Python运维-自动化运维脚本编写 2-1 Python自动化运维-Ansible教程-Ansible介绍 2-2 Python自动化运维-Ansi ...

  7. Linux Shell交互式自动化运维程序

    Expect是Linux操作系统下的一个用来处理交互操作,系统默认是没有安装expect库,所以执行expect会提示找不到命令,需要手动安装,其它安装也比较简单,可以通过二进制源码包编译配置进行安装 ...

  8. saltstack自动化运维系列11基于etcd的saltstack的自动化扩容

    saltstack自动化运维系列11基于etcd的saltstack的自动化扩容 自动化运维-基于etcd加saltstack的自动化扩容# tar -xf etcd-v2.2.1-linux-amd ...

  9. 基于Linux平台的自动化运维Devops-----之自动化系统部署

    一.自动化运维的背景网站业务上线,需要运维人员在短时间内完成几百台服务器部署,包括系统安装.系统初始化.软件的安装与配置.性能的监控......所谓运维自动化,即在最少的人工干预下,利用脚本与第三方工 ...

随机推荐

  1. A1050. String Subtraction

    Given two strings S1 and S2, S = S1 - S2 is defined to be the remaining string after taking all the ...

  2. A1055. The World's Richest

    Forbes magazine publishes every year its list of billionaires based on the annual ranking of the wor ...

  3. [luogu2657][windy数]

    luogu2657 思路 数位dp,记录下上个位置的数,如果当前的数字与上个数字的差值小于2,就不再转移.还是要注意排除前导0.在记忆化的时候,全都是前导0的情况不能记忆化. 代码 #include& ...

  4. spread与react

    我们写react组件的过程中会遇到这个 我们知道react中的{},浏览器会知道说是以js的形式进行解析出来.那么怎么解析...props呢? 这个就涉及到es6中的扩展运算符了,我们先看下面的一些运 ...

  5. 爬虫acm比赛成绩(多页成绩整合在一起、获取复制不了的数据)(hihocoder、计蒜客)

    https://github.com/congmingyige/web-crawler_rank-of-competition-in-JiSuanKe-and-hihocoder 1. 计蒜客(获取复 ...

  6. C#控件及常用设计整理

    1.窗体  1.常用属性  (1)Name属性:用来获取或设置窗体的名称,在应用程序中可通过Name属性来引用窗体.  (2) WindowState属性:  用来获取或设置窗体的窗口状态. 取值有三 ...

  7. python自定义函数的参数之四种表现形式

    (1)def a(x,y):print x,y 这是最常见的定义方式,调用该函数,a(1,2)则x取1,y取2,形参与实参相对应,如果a(1)或者a(1,2,3)则会报错 (2)def a(x,y=3 ...

  8. $使用dom4j可解析 返回&#x等字样的 html转义字符【转】

    如果以GET或POST请求某个系统返回,带有 $#x 那很有可能是axis服务器返回的. <?xml version="1.0" encoding="UTF-8&q ...

  9. groovy.lang.GroovyRuntimeException: Conflicting module versions

    在运行groovy的junit方法时,报了这个错误: java.lang.ExceptionInInitializerError at org.codehaus.groovy.reflection.C ...

  10. QT_校园导航Update

    //MainWidget.h #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include " ...