1.导言

已经或未来将从事Linux系统运维工作的读者,经常会遇到一些机器式的重复的共走,例如:有时间同时上线几十甚至上百台服务器,而且需要我们在短时间内完成系统安装。

q  光盘安装系统===>一个的服务器DVD内置光驱百千块,百台服务器都配光驱就浪费了,因为一台服务器也就开始装系统能用的上,以后用的机会屈指可数。用USB外置光驱,插来插去也是醉了。

q  U盘安装系统===>还是同样的问题,要一台一台服务器插U盘。

q  网络安装系统(ftp,http,nfs) ===>这个方法不错,只要服务器能联网就可以安装系统了,但是还需要一台台服务器去敲键盘点鼠标。时刻想着偷懒的我们,有没有更好的方法!

1.1什么是PXE

严格来说,PXE并不是一种安装方式,而是一种引导方式。进行PXE安装的必要条件是在要安装的计算机中必须包含一个PXE支持的网卡(NIC)即网卡中必须要有PXE Client。PXE(Pre-boot Execution Environment)协议可以使计算机通过网络启动。此协议分为Client端和Server端,而PXE
Client则在网卡的ROM中。当计算机引导时,BIOS把PXE Client调入内存中执行,然后由PXE Client将放置在远端的文件通过网络下载到本地运行。运行PXE协议需要设置DHCP服务器和TFTP服务器。DHCP服务器会给PXE Client(将要安装系统的主机)分配一个IP地址,由于是给PXE Client分配IP地址,所以在配置DHCP服务器时需要增加2的PXE设置。此外,在PXE Client的ROM中,已经存在了TFTP Client,那么它就可以通过TFTP协议到TFTP Server上下载所需的文件了。

1.2什么是KickStart

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

2.DHCP工作过程的六个主要步骤

对于学习 DHCP来说,很重要的一部分就是对于DHCP工作过程的理解。那么首先DHCP分为两个部分:一个是服务器端,另一个是客户端。所有客户机的IP地址设 定资料都由DHCP服务器集中管理,并负责处理客户端的DHCP要求;而客户端则会使用从服务器分配下来的IP地址。

DHCP服务器提供三 种IP分配方式:自动分配(Automatic Allocation)、动态分配(Dynamic Allocation)和手动分配。自动分配是当DHCP客户端第一次成功地从DHCP服务器端分配到一个IP地址之后,就永远使用这个地址。动态分配是 当DHCP客户端第一次从DHCP服务器分配到IP地址后,并非永久地使用该地址,每次使用完后,DHCP客户端就得释放这个IP地址,以给其他客户端使 用,而手动分配是由DHCP服务器管理员专门指定IP地址。

DHCP客户机在启动时,会搜寻网络中是否存在DHCP服务器。如果找到,则给 DHCP服务器发送一个请求。DHCP服务器接到请求后,为DHCP客户机选择TCP/IP配置的参数,并把这些参数发送给客户端。如果已配置冲突检测设置,则 DHCP 服务器在将租约中的地址提供给客户机之前会试用Ping测试作用域中每个可用地址的连通性。这可确保提供给客户的每个IP地址都没有被使用手动 TCP/IP配置的另一台非 DHCP 计算机使用。

根据客户端是否第一次登录网络,DHCP的工作形式会有所不同。客户端从DHCP服务器上获得IP地址的整个过程分为以下六个步骤:

2.1寻找DHCP服务器

当DHCP客户端第一次登录网络的时候,计算机发现本机上没有任何IP地址设定,将以广播方式发送DHCP discover发现信息来寻找DHCP服务器,即向255.255.255.255发送特定的广播信息。网络上每一台安装了TCP/IP协议的主机都会 介绍这个广播信息,但只有DHCP服务器才会做出响应。

4.2分配IP地址

在网络中接收到DHCP
discover发现信息的DHCP服务器都会做出相应,它从尚未分配的IP地址中挑选一个分配给DHCP客户机,向DHCP客户机发送一个包含分配的IP地址和其他设置的DHCP offer提供信息。

2.3接受 IP地址

DHCP客户端接受到DHCP
offer提供信息之后,选择第一个接收到的提供信息,然后以广播的方式回答一个DHCP request请求信息,该信息包含向它所选定的DHCP服务器请求IP地址的内容。

2.4IP地址分配确认

当DHCP服务器收到DHCP客户端回答的DHCP request请求信息之后,便向DHCP客户端发送一个包含它所提供的IP地址和其他设置的DHCP ack确认信息,告诉DHCP客户端可以使用它提供的IP地址。然后,DHCP客户机便将其TCP/IP协议与网卡绑定,另外,除了DHCP客户机选中的 服务器外,其他的DHCP服务器将收回曾经提供的IP地址。

2.5重新登录

以后DHCP客户端每次重新登录网络时,就不需要再发送DHCP discover发现信息了,而是直接发送包含前一次所分配的IP地址的DHCP request请求信息。当DHCP服务器收到这一信息后,它会尝试让DHCP客户机继续使用原来的IP地址,并回答一个DHCP
ack确认信息。如果此IP地址已无法再分配给原来的DHCP客户机使用时,则DHCP服务器给DHCP客户机回答一个DHCP nack否认信息。当原来的DHCP客户机收到此DHCP nack否认信息后,它就必须重新发送DHCPdiscover发现信息来请求新的IP地址。

客户端重新登录.如图1-1

图1-1

如果客户端DHCP request 内的IP地址在服务器端没有被使用,DHCP服务器回复DHCP ACK继续使用IP。如图1-2

图1-2

如果客户端DHCP request 内的IP地址在服务器端已被使用,DHCP服务器回复DHCP NACK告诉客户端IP已被使用。图1-3

图1-3

客户端重新开始DHCP流程。如图1-4

图1-4

2.6更新租约

DHCP 服务器向DHCP客户机出租的IP地址一般都有一个租借期限,期满后DHCP服务器便会收回出租的IP地址。如果DHCP客户机要延长其IP租约,则必须更新其IP租约。DHCP客户机启动时和IP租约期限过一半时,DHCP客户机都会自动向DHCP服务器发送更新其IP租约的信息。

3.PXE+KickStart自动部署操作系统实战

执行PXE+KickStart安装需要的设备:

q  DHCP服务器

q  TFTP服务器

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

q  一台存放系统安装文件的服务器,如NFS、HTTP、或FTP服务器

q  一个带有PXE支持网卡的主机。

通过Kickstart+Dhcp+tftp+httpd实现

3.1查看当前系统版本

[root@kickstart ~]# cat /etc/redhat-release

CentOS release 6.7 (Final)

3.2准备环境

必须关闭selinux防火墙,临时关闭会不生效,建议修改配置文件后,重启操作系统。

[root@kickstart ~]# sed -i
's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config

测试环境IP地址:外网eth0为NAT模式,可以上网

[root@kickstart ~]# ifconfig eth0

eth0Link encap:Ethernet  HWaddr
00:1C:42:C4:75:DD

inet addr:10.0.0.3  Bcast:10.0.0.255  Mask:255.255.255.0

inet6 addr: fe80::21c:42ff:fec4:75dd/64 Scope:Link

UP BROADCAST RUNNING MULTICASTMTU:1500  Metric:1

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

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

collisions:0 txqueuelen:1000

RX bytes:61453 (60.0 KiB)  TX
bytes:27706 (27.0 KiB)

3.3安装DHCP服务

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

[root@kickstart ~]# cp /usr/share/doc/dhcp-4.1.1/dhcpd.conf.sample
/etc/dhcp/dhcpd.conf  #拷贝dhcp配置文件

#修改配置文件/etc/dhcpd/dhcpd.conf;添加如下

ddns-update-style none;

ignore client-updates;

subnet 10.0.0.0 netmask 255.255.255.0 {

range
10.0.0.100 10.0.0.200;

option
subnet-mask 255.255.255.0;

option
domain-name "internal.example.org";

default-lease-time 600;

max-lease-time 7200;

next-server
10.0.0.3;

filename
"/pxelinux.0";

}

[root@kickstart ~]# cat /etc/sysconfig/dhcpd  #修改/etc/sysconfig/dhcpd配置文件, 表示dhcp将只在eth0网络接口上提供DHCP服务。

# Command line options here

DHCPDARGS=eth0

[root@kickstart ~]# /etc/init.d/dhcpd start  #启动dhcpd服务

DHCP注释:

ddns-update-style none;  #设置与DHCP服务相关联的DNS数据动态更新模式,实际的DHCP应用中很少用改参数,设置为none即可。

ignore client-updates;     #不允许客户机更新DNS记录

subnet 172.16.10.0 netmask
255.255.255.0 {

range 172.16.10.100 172.16.10.200;  #可分配的起始IP-结束IP

option subnet-mask 255.255.255.0;   #设置netmask

default-lease-time 21600;           #设置默认的IP租用期限

max-lease-time 43200;                       #设置最大的IP租用期限

next-server 172.16.10.20;            #告知客户端TFTP服务器ip

filename "/pxelinux.0";              #告知客户端从TFTP根目录下载pexlinux.0

}

3.4安装TFTP服务

TFTP(Trivial File
Transfer Protocol,简单文件传输协议)是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务。端口号为69。

[root@kickstart ~]# yum -y install tftp-server  #安装tftp-server服务

#修改配置文件/etc/xinetd.d/tftp   disabled修改为no

service tftp

{

socket_type             = dgram

protocol                = udp

wait                    = yes

user                    = root

server                  =
/usr/sbin/in.tftpd

server_args             = -s
/var/lib/tftpboot  #指定目录,保持默认,不用修改

disable                 = no

per_source              = 11

cps                     = 100 2

flags                   = IPv4

}

[root@kickstart ~]# /etc/init.d/xinetd start  #启动服务xinetd代理服务

3.5安装httpd服务

可以用Apache或Nginx提供HTTP服务。Python的命令web服务不行,会有报错。

[root@kickstart ~]# yum -y install httpd  #安装httpd服务

[root@kickstart ~]#sed -i "277i ServerName
127.0.0.1:80" /etc/httpd/conf/httpd.conf #修改apache配置文件

[root@kickstart ~]# /etc/init.d/httpd start #启动apache服务

[root@kickstart ~]# mkdir /var/www/html/centos6/  #创建centos66目录

[root@kickstart ~]# mount /dev/cdrom
/var/www/html/centos6/  #挂载镜像文件

# 不管怎么弄,只要把安装光盘内容能通过web发布即可。因为是演示,如果复制镜像就有点浪费时间。但生产环境就一定要复制了,光盘读取速度有限。

3.6PXE配置引导

syslinux是一个功能强大的引导加载程序,而且兼容各种介质。SYSLINUX是一个小型的Linux操作系统,它的目的是简化首次安装Linux的时间,并建立修护或其它特殊用途的启动盘。如果没有找到pxelinux.0这个文件,可以安装一下。

[root@kickstart
~]# yum -y install syslinux  #安装syslinux

复制配置文件

[root@kickstart ~]# cp
/usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/

[root@kickstart ~]# cp -a  /var/www/html/centos6/isolinux/*  /var/lib/tftpboot/

[root@kickstart ~]# mkdir -p
/var/lib/tftpboot/pxelinux.cfg

[root@kickstart ~]# cp /var/www/html/centos6/isolinux/isolinux.cfg
/var/lib/tftpboot/pxelinux.cfg/default

添加如下,配置文件

[root@kickstart ~]# cat
/var/lib/tftpboot/pxelinux.cfg/default

default ks

prompt 0

label ks

kernel
vmlinuz

append
initrd=initrd.img ks=http://10.0.0.3/config/Centos6-ks.cfg ksdevice=eth0

# ksdevice=eth0代表当客户端有多块网卡的时候,要实现自动化需要设置从eth0安装,不指定的话,安装的时候系统会让你选择,那就不叫全自动化了。

3.6.1PXE配置文件default解析

[root@kickstart ~]# cat
/var/lib/tftpboot/pxelinux.cfg/default

default vesamenu.c32  #默认加载一个菜单

#prompt 1  #开启会显示命令行’boot:’ 提示符。prompt值为0时则不提示,将会直接启动’default’参数中指定的内容

timeout 600#timeout时间是引导等待用户手动选择的时间,设为1可直接引导,单位为1/10秒。

display boot.msg

#菜单背景图片、标题、颜色。

menu background splash.jpg

menu title Welcome to CentOS 6.7!

menu color border 0 #ffffffff #00000000

menu color sel 7 #ffffffff #ff000000

menu color title 0 #ffffffff #00000000

menu color tabmsg 0 #ffffffff #00000000

menu color unsel 0 #ffffffff #00000000

menu color hotsel 0 #ff000000 #ffffffff

menu color hotkey 7 #ffffffff #ff000000

menu color scrollbar 0 #ffffffff #00000000

#lable指定在boot:提示符下输入的关键字,比如boot:linux[ENTER],这个会启动lable
linux下标记的kernel和initrd.img文件

label linux#一个标签就是前面图片的一行选项。

menu
label ^Install or upgrade an existing system

menu
default

kernel
vmlinuz #指定要启动的内核。同样要注意路径,默认是/tftpboot目录

append
initrd=initrd.img #指定追加给内核的参数,initrd.img是一个最小的linux系统

label vesa

menu
label Install system with ^basic video driver

kernel
vmlinuz

append
initrd=initrd.img nomodeset

label rescue

menu
label ^Rescue installed system

kernel
vmlinuz

append
initrd=initrd.img rescue

label local

menu
label Boot from ^local drive

localboot
0xffff

label memtest86

menu
label ^Memory test

kernel
memtest

append -

3.7上传kscfg配置文件

[root@kickstart ~]# grub-crypt  #配置root使用密码,加入修改Centos6-ks.cfg文件

Password:

Retype password:

$6$006TOzR9rk18CPQw$t/xTyZEw60OWqAho.J1oj3PRo2ib93blCIlVuFCPc6/fuCADB02LKHfNV4x7jtpNAX98TK3K8Zpem8Qkv92111

[root@kickstart ]#mkdir /var/www/html/config  ß创建配置文件及优化脚本站点目录

[root@kickstart html]# cat /var/www/html/config/Centos6-ks.cfg

install  ß安装

url --url="http://10.0.0.3/centos6"  ß系统文件地址,这里使用http

text  ß文本界面安装

lang en_US.UTF-8ß语言

keyboard usß键盘

zerombr  ß清空mbr

bootloader --location=mbr --driveorder=sda
--append="crashkernel=auto rhgb quiet"  ß引导加载程序参数

network --bootproto=dhcp --device=eth1
--onboot=yes --noipv6 --hostname=CentOS6ßeth1网络配置

timezone --utc Asia/Shanghai  ß时区

authconfig --enableshadow --passalgo=sha512  ß验证配置

rootpw--iscrypted $6$006TOzR9rk18CPQw$t/xTyZEw60OWqAho.J1oj3PRo2ib93blCIlVuFCPc6/fuCADB02LKHfNV4x7jtpNAX98TK3K8Zpem8Qkv92111
ßroot密码,使用grub-crypt生成

clearpart --all --initlabel  ß清空分区

part /boot --fstype=ext4 --asprimary --size=100  ß分区/boot
100M

part swap --size=1500  ß分区swap
1500M

part / --fstype=ext4 --grow --asprimary
--size=200  ß分区/ 所有

firstboot --disable  ß关闭一系列服务

selinux --disabled

firewall --disabled

logging --level=info  ß日志记录等级info级别

reboot  ß重启

%packages  ß包组-软件名

@base

@compat-libraries

@debugging

@development

tree

nmap

sysstat

lrzsz

dos2unix

telnet

%post  ß安装完执行脚本

wget -O /tmp/optimization.sh http://10.0.0.3/config/optimization.sh
&>/dev/null   ß下载脚本,然后执行

/bin/sh /tmp/optimization.sh ß执行脚本

%end

3.8准备全新服务器

需要和pxe服务器内网同网段,开机通过dhcp自动获取,然后自动开始装机

3.9kickstart错误汇总

解决办法:

1)我们先证明安装源服务器是正常的,我们用其他机器下载install.img文件,使用下面的命令:

wget
spacer.gifhttp://192.168.0.3/centos6/images/install.img

若可以正常的下载这个文件,说明安装源服务器(即kickstart服务器)正常。

2)查找install.img文件的前一阶段是配置网卡、网关阶段,检查你的ks文件的配置的网卡部分,是否与安装源的ip不是一个网段,若不是一个网段就会造成网络不通,产生这个错误。这个问题也是困扰了我好几个小时的问题,迷惑性很大。

报错原因:selinux没关   解决办法:关闭Selinux防火墙,然后重启,否则不生效

Kickstart无人值守安装系统的更多相关文章

  1. 使用PXE+Kickstart无人值守安装系统

    PXE预启动执行环境(即Preboot execute environment) 是一种能够让计算机通过网络启动的引导方式,只要网卡支持PXE协议即可使用,用于在无人值守安装系统服务中引导客户机安装服 ...

  2. 其他综合-Kickstart无人值守安装系统CentOS 7

    Kickstart无人值守安装系统CentOS 7 1.概述 1.1 关于PXE Preboot Execution Environment 翻译过来就是预启动执行环境:简称 PXE :传统安装操作系 ...

  3. KickStart 无人值守安装系统

    一.简介 1.1 什么是PXE PXE(Pre-boot Execution Environment,预启动执行环境)是由Intel公司开发的最新技术,工作于Client/Server的网络模式,支持 ...

  4. PXE+Kickstart无人值守安装系统re

    PXE(Preboot Excute Environment)预启动执行环境,可以让计算机通过网络启动系统,主要用于无人值守安装系统中引导客户端主机安装Linux操作系统. 由于之前有过使用cobbl ...

  5. [ 总结 ] Linux kickstart 无人值守安装系统构建过程

    环境:Vmare + Linux虚拟机 注意:网卡桥接

  6. [转]CentOS 6.4下PXE+Kickstart无人值守安装操作系统

    一.简介 1.1 什么是PXE PXE(Pre-boot Execution Environment,预启动执行环境)是由Intel公司开发的最新技术,工作于Client/Server的网络模式,支持 ...

  7. 烂泥:kickstart无人值守安装CentOS6.5

    本文由秀依林枫提供友情赞助,首发于烂泥行天下. 在本次实验进行之前,首先我们要把公司的网络环境进行介绍. 注意这个网络拓扑图,也是生产环境的一个实例.同时服务器192.168.1.214已关闭ipta ...

  8. CentOS6 PXE+Kickstart无人值守安装

    一.简介 1.1 什么是PXE PXE(Pre-boot Execution Environment,预启动执行环境)是由Intel公司开发的最新技术,工作于Client/Server的网络模式,支持 ...

  9. CentOS 6.4下PXE+Kickstart无人值守安装操作系统 转

    一.简介 1.1 什么是PXE PXE(Pre-boot Execution Environment,预启动执行环境)是由Intel公司开发的最新技术,工作于Client/Server的网络模式,支持 ...

随机推荐

  1. 读书笔记 effective c++ Item 13 用对象来管理资源

    1.不要手动释放从函数返回的堆资源 假设你正在处理一个模拟Investment的程序库,不同的Investmetn类型从Investment基类继承而来, class Investment { ... ...

  2. stop总结

    <!DOCTYPE html><html><head><meta charset="utf-8"><script src=&q ...

  3. BZOJ 1062: [NOI2008]糖果雨(二维树状数组)

    首先嘛,这道题是非同一般的恶心= = 然后首先膜拜一下CDQ大神ORZ在考场上A了这道题ORZ 这道题看到的话,我是先想把云朵化成在0s时的位置,但很容易发现这样只能单点查询而不能查询整段 结果只能膜 ...

  4. 微信内置浏览器私有接口WinXinJsBridge介绍

    关于微信内置浏览器私有接口WeiXinJsBridge,只是之前接触过的一个微信公众号项目中遇到过,不过并没有深入研究过,可以说并没有了解过... 刚好今天无意中看到了这方面的知识,就补习一下,弥补一 ...

  5. java读取和写入txt文件

    package com.yinghuo.testDES; import java.io.BufferedReader;import java.io.BufferedWriter;import java ...

  6. Angular开发者指南(一)入门介绍

    什么是Angular AngularJS是动态Web应用程序的结构框架. 它允许您使用HTML作为模板语言,并允许您扩展HTML的语法以清晰,简洁地表达应用程序的组件.AngularJS的数据绑定和依 ...

  7. querySelectorAll与getElementsBy对比有什么不同

    querySelectorAll与getElementsBy对比有什么不同javascript中的querySelectorAll与getElementsBy都可以获取dom元素对象,但是他们又有什么 ...

  8. PCB行业ERP解决方案

    普实PCB管理系统包括PCB企业从接到订单开始,编排生产计划.制作工程指示.生产工具.准备物料.品质保障.工序生产.设备维护等一系列与企业运作密切相关的环节,使得企业的各个部门能够紧密联系.相互协调, ...

  9. TypeScript设计模式之门面、适配器

    看看用TypeScript怎样实现常见的设计模式,顺便复习一下. 学模式最重要的不是记UML,而是知道什么模式可以解决什么样的问题,在做项目时碰到问题可以想到用哪个模式可以解决,UML忘了可以查,思想 ...

  10. 让SQL再快一点儿

    文章转载自「开发者圆桌」一个关于开发者入门.进阶.踩坑的微信公众号 SQL即结构化查询语言(Structured Query Language),是一种特殊目的的编程语言,是一种数据库查询和程序设计语 ...