女主宣言

对于单台服务器上的os安装,我们可以手动进行。那若是一个集群中的大量节点服务器需要安装os,手动安装显然是费时费力。作为系统运维工程师,自动化运维是我们必不可少的技能。下来就跟随作者去探索下PXE是如何通过网络来实现批量系统安装的吧。

PS:丰富的一线技术、多元化的表现形式,尽在“360云计算”,点关注哦!

1

PXE简介

PXE(preboot execute environment,预启动执行环境)是由Intel公司开发的最新技术,工作于Client/Server的网络模式,支持工作站通过网络从远端服务器下载镜像,并由此支持通过网络启动操作系统,在启动过程中,终端要求服务器分配IP地址,再用TFTP(trivial file transfer protocol)或MTFTP(multicast trivial file transfer protocol)协议下载一个启动软件包到本机内存中执行,由这个启动软件包完成终端(客户端)基本软件设置,从而引导预先安装在服务器中的终端操作系统。PXE可以引导多种操作系统。严格来说,PXE 并不是一种安装方式,而是一种引导方式。进行PXE安装的必要条件是在要安装的计算机中必须包含一个PXE支持的网卡(NIC),即网卡中必须要有 PXE Client。PXE协议可以使计算机通过网络启动。此协议分为 Client端和 Server 端,而PXE Client则在网卡的 ROM 中。当计算机引导时,BIOS 把 PXE Client调入内存中执行,然后由PXE Client将放置在远端的文件通过网络下载到本地运行。运行 PXE 协议需要设置 DHCP 服务器和 TFTP 服务器。DHCP 服务器会给 PXE Client(将要安装系统的主机)分配一个 IP 地址,由于是给 PXE Client 分配 IP 地址,所以在配置 DHCP 服务器时需要增加相应的 PXE 设置。此外,在 PXE Client 的 ROM 中,已经存在了 TFTP Client,那么它就可以通过 TFTP 协议到 TFTP Server 上下载所需的文件了。

PXE的工作流程

  1. PXE Client 从自己的PXE网卡启动,向本网络中的DHCP服务器索取IP;

  2. DHCP 服务器返回分配给客户机的IP*以及PXE文件的放置位置(该文件一般是放在一台TFTP服务器上) ;

  3. PXE Client 向本网络中的TFTP服务器索取pxelinux.0 文件;

  4. PXE Client 取得pxelinux.0 文件后执行该文件;vmlinuz是可引导的、压缩的内核,initrd.img文件是设备(/dev/ram0)的映像文件;

  5. 根据pxelinux.0 的执行结果,通过TFTP服务器加载内核和文件系统 ;

  6. 进入安装画面, 此时可以通过选择HTTP、FTP、NFS 方式之一进行安装;

达成PXE必须要有两个环节

  1. 其一客户端的网卡必须要支持PXE用户端功能,并且开机时选择从网卡启动,这样系统才会通过网卡进入PXE客户端的程序;

  2. 其二PXE服务器必须要提供至少含有DHCP以及TFTP的服务,其中:

  • DHCP服务必须要能够提供客户端的网络参数,还要告知客户端TFTP所在的位置;

  • TFTP则提供客户端的boot loader及kernel file下载路径。

还要加上NFS/FTP/HTTP(选择一样即可)等提供安装文件(安装镜像的解压文件),才算是比较完整的PXE服务器。一般TFTP和DHCP服务都由同一台服务器提供,且大多数时候还提供NFS/FTP/HTTP服务,所以PXE服务器一般是提供3合一的服务。

什么是Kickstart

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

满足Kickstart安装系统的需求

  1. 网卡必须支持PXE引导;

  2. 客户端需要有与Kickstart通信的IP地址,这里一般都是通过DHCP自动分配IP地址来实现;

  3. 提供引导所需的文件,内核文件,内核镜像文件等,此时一般通过tftp-server等实现;

  4. kickstart文件,它主要实现自动化安装的过程,比如配置主机名、添加用户等安装系统后的相关操作;

  5. 提供安装源,一般就是NFS/ftp/httpd等。

2

环境介绍及初绍化

环境介绍

  • 操作系统:CentOS Linux release 7.4.1708 (Core)。

  • 网卡地址:192.168.221.129。

  • 光盘镜像:CentOS-7-x86_64-DVD-1708.iso。

  • 安装工具:kickstart + dhcp + tftp-server + tftp + httpd。

准备工作

# cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)
# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
# setenforce 0
# getenforce
Permissive 或者 Disabled
# systemctl stop firewalld.service
# systemctl disable firewalld.service
# yum install -y httpd dhcp tftp-server tftp syslinux

3

配置

修改dhcp配置

# vim /etc/dhcp/dhcpd.conf
option domain-name "pxe.com";
option domain-name-servers ns1.pxe.com, pxe.com;
default-lease-time 600;
max-lease-time 7200;
log-facility local7;
subnet 192.168.221.0 netmask 255.255.255.0 {  //服务端IP网段及掩码
option routers 192.168.221.2; //网关
option subnet-mask 255.255.255.0; //掩码
option domain-name-servers 192.168.221.129;
range dynamic-bootp 192.168.221.130 192.168.10.230;  //dhcp分发的地址范围
default-lease-time 21600; //设置默认的IP租用期限
max-lease-time 43200; //设置最大的IP租用期限
next-server 192.168.221.129;  //TFTP服务器地址
filename "pxelinux.0"; //指定引导文件位置,这里是TFTP根目录下的pxelinux.0
}
# systemctl start dhcpd.service
# systemctl enable dhcpd.service
# netstat -tunpl |grep dhcpd

Httpd服务配置

# mkdir -pv /var/www/html/centos7
# mount --bind /media/cdrom/ /var/www/html/centos7/
# systemctl start httpd.service
# systemctl enable httpd.service
# netstat -tunpl |grep httpd

tftp服务配置

# vim /etc/xinetd.d/tftp
service tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /var/lib/tftpboot //修改tftp的根目录
disable = no  //认disable是yes的,把它改为no即可  per_source = 11
cps = 100 2
flags = IPv4
}
# systemctl start tftp.socket
# systemctl enable tftp.socket
# systemctl start tftp.service
# systemctl enable tftp.service
# netstat -tunpl |grep 69

添加引导文件

# cp /usr/share/syslinux/pxelinux.0  /var/lib/tftpboot/
# cp /media/cdrom/images/pxeboot/{vmlinuz,initrd.img} /var/lib/tftpboot/
# cp /media/cdrom/isolinux/{vesamenu.c32,boot.msg,splash.png} /var/lib/tftpboot/
# cp /usr/share/syslinux/{chain.c32,mboot.c32,menu.c32,memdisk} /var/lib/tftpboot/
# mkdir /var/lib/tftpboot/pxelinux.cfg/
# cp /media/cdrom/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default

# vim /var/lib/tftpboot/pxelinux.cfg/default
default vesamenu.c32
timeout 60
display boot.msg
menu clear
menu background splash.png
menu title HQHY PXE BootMenu:Installcentos6.2 or 7.4
menu vshift 8
menu rows 18
menu margin 8
#menu hidden
menu helpmsgrow 15
menu tabmsgrow 13
label linux 1   menu label ^Install CentOS 7.4  menu default    kernel centos7.4/vmlinuz net.ifnames=0 biosdevname=0  append initrd=centos7.4/initrd.img inst.repo=http://192.168.221.129/centos7.4 inst.ks=http://192.168.221.129/ks74.cfg

# vim /var/www/html/ks74.cfg
install
url --url="http://192.168.221.129/centos7.4"
lang en_US.UTF-8
keyboard us
skipx
text
reboot
rootpw --iscrypted $1$PChLniYo$DG6raNbcIO5AIPRiP/js20
user --name=qihoo --groups=wheel --password=$6$IK2rvMJD$TGIckBiHXQk8U9vAlfKy4KnxEgB0uQf5TR2aQVM4PhdmivzyhxWXSNxU2wo0wTdnFUOtGq6b59tjQmrNcglnm0 --iscrypted --uid=1111
timezone Asia/Shanghai
firewall --enabled --port=22:tcp
authconfig --enableshadow --enablemd5
selinux --permissive
clearpart --all --initlabel
%include /tmp/part
%packages
@core
@base
@mail-server
-dovecot
-system-config-httpd
-system-config-printer-gui
-system-config-nfs
-system-config-samba
-ivtv-firmware
-iwl1000-firmware
-iwl100-firmware
-iwl105-firmware
-iwl135-firmware
-iwl2000-firmware
-iwl2030-firmware
-iwl3160-firmware
-iwl3945-firmware
-iwl4965-firmware
-iwl5000-firmware
-iwl5150-firmware
-iwl6000-firmware
-iwl6000g2a-firmware
-iwl6000g2b-firmware
-iwl6050-firmware
-iwl7260-firmware
-kernel-tools
-libertas-sd8686-firmware
-libertas-sd8787-firmware
-libertas-usb8388-firmware
-microcode_ctl
-NetworkManager
-NetworkManager-tui
-ql2100-firmware
-ql2200-firmware
-ql23xx-firmware
-abrt-addon-ccpp
-abrt-addon-python
-abrt-cli
-abrt-console-notification
-words
-pinfo
-plymouth
@Development tools
ncurses-devel
ntp
telnet
net-snmp
sysstat
iptraf
device-mapper-multipath
psmisc
mcelog
%end
%pre
#!/bin/bash
set $(list-harddrives)
let numd=$#/2
d1=$1
disk_size=`echo $2 |cut -d "." -f 1`
pv=`pvs | grep $d1 | awk '{print $1}'`
if ["X$pv" != "X"]; then   vg=`pvs | grep $d1 | awk '{print $2}'` if ["X$vg" != "X"]; then   for lv in `ls /dev/$vg/*` do  echo "y" | lvremove $lv   done    fi  if [$? -eq 0]; then echo "y" | vgremove $vg   fi  if [$? -eq 0]; then echo "y" | pvremove $pv   fi
fi
ps=`lsblk -l |grep $d1 | awk '{if ( $1 ~ /[0-9]$/) print $1 }' | sed "s/$d1//g"`
if [ "X$ps" != "x" ]; then for i in $ps    do  /usr/sbin/parted /dev/$d1 rm Si done
fi
list-harddrives |grep md127
if [ $? -eq 0 ]
then
d1=sda
fi
dd if=/dev/zero of=/dev/$d1 bs=512 count=1
/usr/sbin/parted -s /dev/Sd1 mklabel msdos
echo "bootloader --location=mbr --driveorder=$d1" > /tmp/part
if [ ${disk_size} -gt 2050000 ]; then   /usr/sbin/parted -s /dev/$d1 mklabel gpt    echo "part biosboot --fstype=biosboot --size=1 --ondisk=$d1" >> /tmp/part
else    echo "clearpart --drives=$d1 --all --initlabel" >> /tmp/part
fi
echo "ignoredisk --only-use=$d1" >>/tmp/part
echo "part /boot --fstype xfs --size=500 --ondisk=$d1 --asprimary" >> /tmp/part
echo "part pv.7 --fstype="lvmpv" --size=100 --ondisk=$d1 --grow" >> /tmp/part
echo "volgroup VolGroup00 --pesize=32768 pv.7" >> /tmp/part
echo "logvol swap --fstype swap --name=Vol_swap --vgname=VolGroup00 --size=4000" >> /tmp/part
echo "logvol / --fstype xfs --name=Vol_sys --vgname=VolGroup00 --size=10000" >> /tmp/part
echo 'qihoo ALL = (ALL) ALL' >> /etc/sudoers
cd /root/
wget http://192.168.221.129/chushihua/centos7.4_init-1.1.3.tar.gz
%end

360云计算

由360云平台团队打造的技术分享公众号,内容涉及数据库、大数据、微服务、容器、AIOps、IoT等众多技术领域,通过夯实的技术积累和丰富的一线实战经验,为你带来最有料的技术分享

PXE自动化安装系统工具介绍与部署相关推荐

  1. Ansible自动化运维工具介绍与部署

    ansible自动化运维工具介绍与部署 文章目录 一.什么是自动化运维? 二.常用的自动化运维工具 2.1 Ansible 2.2 SaltStack 2.3 Puppet 2.4 三种自动化工具特点 ...

  2. 总结之:CentOS 6.5基于DHCP的PXE自动化安装系统详解

    前言    如果要给很多台客户端主机安装操作系统,要是每一台都拿张安装光盘一台一台主机的去装系统.那就台不现实了.在生产环境中也不会被允许的.要实现为多台主机自动安装操作系统.那我们怎么实现自动化安装 ...

  3. PXE自动化安装系统

    准备(以centos7为例) ①关闭防火墙 ②关闭selinux ③dhcp服务设置为静态IP ④安装软件包 http:充当yum源安装包仓库 tftp-server :在它的工作目录存在引导主机的工 ...

  4. 常见的自动化运维工具介绍及特点、安装ansible

    常见的自动化运维工具介绍及特点.安装ansible 一.什么是自动化运维? 简单来说,自动化运维就是将日常重复性工作按照事先设定好的规则,在一定时间范围内自动化运行,而不需要人为参与. 将周期性.重复 ...

  5. linux dhcp 安装系统,Linux上基于网络自动化安装系统(CentOS6.5+DHCP+TFTP+PXE)

    Linux上基于网络自动化安装系统(CentOS6.5+DHCP+TFTP+PXE) 一.前言 安装系统常用的方式就是,光驱安装,U盘安装,但是这种手动安装方法效率都很低,而且出错概率大. 现在网卡速 ...

  6. 自动化运维工具SaltStack详细部署

    2019独角兽企业重金招聘Python工程师标准>>> 自动化运维工具SaltStack详细部署 2014-12-28 17:30:34 标签:saltstack 原创作品,允许转载 ...

  7. windows pxe 安装linux,菜鸟学Linux 第103篇笔记 pxe自动化安装linux

    菜鸟学Linux 第103篇笔记 pxe自动化安装linux 内容总览 linux的系统安装 kickstart文件的组成部分 DHCP (Dynamic Host Configuration Pro ...

  8. PXE无人值守安装系统

    PXE无人值守安装系统 使用PXE+KickStart可以通过非交互模式完成无人值守安装操作系统. PXE 客户端从DHCP服务器获取到PXE服务端的具体IP,然后再从PXE配置文件中获取vmlinu ...

  9. pxe安装linux dhcp失败,利用PXE自动化安装Centos时启动DHCP服务时遇到错误,请求大佬指教...

    @利用PXE自动化安装Centos时启动DHCP服务时遇到错误,请求大佬指教 [root@localhost ~]# systemctl start dhcpd.service Job for dhc ...

最新文章

  1. 笔记--待解决,整理
  2. arcgis将点的属性赋值给面
  3. 睡眠音频分割及识别问题(六)--输入输出及方案讨论
  4. Facebook升级到MySQL 8.0付出的代价
  5. gc.collect()==>python的强制垃圾收集机制(不建议使用强制回收,因为可能导致错误)
  6. hadoop最新稳定版本dkhadoop版本选择介绍
  7. Node.js 初步学习总结
  8. cookies时效由谁决定_胎儿的性别,是什么时候定下来的,又是由谁决定的?
  9. 平面变压器的设计(翻译)(4)
  10. stm32使用各种传感器的教程
  11. 小程序分账系统是什么?能解决二清吗?
  12. 光学红外雨量IFR202型传感器智慧检测雨量场景等行业
  13. [节目推荐] 晓松奇谈
  14. 2021-11-02
  15. 光线微弯传感器matlab仿真,基于输出光斑旋转的光纤微弯位移传感器
  16. python学习——主要的代码结构,模块和包
  17. uniapp image 图片自适应
  18. AR研究2-生成自己的识别图片
  19. idea maven项目的依赖有红色波浪线解决
  20. [python] 圆形嵌套图Circular Packing

热门文章

  1. C main()参数
  2. Python OSError: [Errno 22] Invalid argument:的出现和解决
  3. 一般向量空间的基变换_线性代数的本质03 矩阵与线性变换
  4. 在redis取数据若存在直接取,不存在在db中取,并放到缓存中
  5. 钢筋符号怎样加入wps_钢筋知识「收藏备用」
  6. Callbacks, Promises and Async/Await
  7. [linux]关于deepin截图软件在KDE桌面下无法使用粘贴的解决方法
  8. 在SPA应用中利用JWT进行身份验证
  9. JQuery + XML作为前后台数据交换格式实践
  10. u3d外部资源加载加密