如何通过PXE实现一键自动化安装操作系统

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何通过PXE实现一键自动化安装操作系统相关的知识,希望对你有一定的参考价值。

因为之前的工作需要搭建红帽实验室环境,由于机器数量比较多,所有需要批量自动化无人值守安装系统,所以我尝试使用RHEL5+PXE+DHCP+Apache+Kickstart安装了RHCE5.1 i386实验室环境,并取得了成功,不过过程比较漫长,所以我特地记录下PXE+DHCP+Apache+Kickstart无人值守安装的过程。现阶段,由于需要大规模应用CentOS5.8 x86_64系统用于集群环境,所以将此方法主要用于在公司内网批量安装新服务器系统,这极大地简化了用光盘重复安装CentOS5.8 x86_64的过程,再加上分布式自动化运维工具puppet进行批量部署,达到了自动化运维的目的,避免了重复性劳动,极大的提高了工作效率。
  首先,我们来介绍一下与之相关的原理和概念。
  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 服务器时需要增加相应的 PXE 设置。此外,在 PXE Client 的 ROM 中,已经存在了 TFTP Client,那么它就可以通过 TFTP 协议到 TFTP Server 上下载所需的文件了。
  2. 什么是Kickstart
  Kickstart是一种无人值守的安装方式。它的工作原理是在安装过程中记录典型的需要人工干预填写的各种参数,并生成一个名为 ks.cfg的文件。如果在安装过程中(不只局限于生成Kickstart安装文件的机器)出现要填写参数的情况,安装程序首先会去查找 Kickstart生成的文件,如果找到合适的参数,就采用所找到的参数;如果没有找到合适的参数,便需要安装者手工干预了。所以,如果Kickstart文件涵盖了安装过程中可能出现的所有需要填写的参数,那么安装者完全可以只告诉安装程序从何处取ks.cfg文件,然后就去忙自己的事情。等安装完毕,安装程序会根据ks.cfg中的设置重启系统,并结束安装。
  3. PXE + Kickstart的安装条件和详细步骤
  执行PXE+Kickstart安装需要的设备为:
  DHCP服务器。
  TFTP 服务器。
  Kickstart所生成的ks.cfg配置文件。
  一台存放系统安装文件的服务器,如 NFS、HTTP 或 FTP 服务器。
  一个带有 PXE 支持网卡的主机。
  系统环境绍如下:
  服务器系统为CentOS 5.6 x86_64,IP为192.168.11.29(此服务器并非一定要限定为CentOS 5.8 x86_64系统),由于是最小化安装的,我们在后面要用到system-config-kickstart工具,它必须依赖于X windows,所以我们要提前安装好X windows及gnome并重启系统,步骤如下所示:
  先装X windows和GNOME桌面环境,命令如下所示:
  yum -y groupinstall 'X Window System'
  yum -y groupinstall 'GNOME Desktop Environment'
  然后修改/etc/inittab文件并重启服务器,使其运行在图形模式下,主要修改文件内容如下所示:
  id:5:initdefault:
  重启服务器命令如下:
  reboot
  完成上述的准备工作后,PXE+DHCP+Apache+Kickstart无人值守安装CentOS5.8安装的步骤如下:
  (1)我们先下载CentOS5.8 x86_64光盘至/usr/local/src下,并挂载至/mnt/cdrom目录下,并确认系统已安装好httpd服务,如下:
  cd /usr/local/src
  wget //mirror.neu.edu.cn/CentOS/5.8/isos/x86_64/CentOS-5.8-x86_64-bin-DVD-1of2.iso
  mkdir –p /mnt/cdrom
  接下来我们挂载光盘ISO文件至/mnt/cdrom目录下,如下命令:
  mount -o loop CentOS-5.8-x86_64-bin-DVD-1of2.iso /mnt/cdrom
  CetnOS5.x x86_64系列已默认安装Apache,我们可以用命令看下其版本号,如下所示:
  rpm -q httpd
  命令显示结果如下所示:
  httpd-2.2.3-65.el5.CentOS
   (2)接下来我们复制光盘下的所有内容(文件和文件夹)到/var/html/www(此目录为Apache默认DocumentRoot目录)下,无论是红帽系统还是CentOS 5.x系统,如果是最小化安装,基本上第一张DVD光盘文件就够了,复制命令如下所示:
  cp -rf /mnt/cdrom /var/html/www
  (3)安装 tftp-server,并启用tftp服务,同时启动xinetd进程,步骤如下所示。
  1.我们用命令安装tftp-server,命令如下:
  yum -y install tftp-server
  2.接着修改/etc/xinetd.d/tftp文件,将disable的值由yes变为no,内容如下所示:

  3.接着重启xinetd进程,命令如下所示:
  service xinetd restart
   (4)配置支持PXE的启动程序(注意:前面已经将CentOS5.8 x86_64第一张光盘的内容复制到/var/www/html目录中了,所以需要的文件只需要从/var/www/html目录中复制就行了)。
  a) 建立tftpboot文件夹,如下所示,若该文件夹已经存在则不用建立。
  mkdir -p /tftpboot
  b) 复制pxelinux.0文件至tftpboot文件夹中,如下所示。
  cp /usr/lib/syslinux/pxelinux.0 /tftpboot
  c) 把DVD光盘上的/image/pxeboot/initrd.img和vmlinux复制到/tftpboot/中,如下所示。
  cp /var/www/html/images/pxeboot/vmlinuz /tftpboot
  d) 复制DVD光盘上的isolinux/*.msg到/tftpboot目录下,如下所示:
  cp /var/www/html/isolinux/*.msg /tftpboot/
  e) 在tftpboot中新建一个pxelinux.cfg目录:
  mkdir pxelinux.cfg
  f) 将isolinux目录中的isolinux.cfg复制到pxelinux.cfg目录中,同时更改文件名称为default,命令如下所示:
  cd pxelinux.cfg
  cp /var/www/html/isolinux/isolinux.cfg /tftpboot/pxelinux.cfg/default
  g) 在上一个步骤,即第6点中,暂时不要修改default文件,进行到这一步时,虽然已经可以通过网络来引导并手动安装Kickstart了,但是由于这里讨论的是无人值守安装,所以先不修改这个default文件。
  (5)安装dhcp服务,同时修改如下配置:
  yum –y install dhcp
  然后复制配置模板文件到指定的目录中,并重新命名。
  cp /usr/share/doc/dhcp-3.0.5/dhcpd.conf.sample /etc/dhcpd.conf
  接着修改/etc/dhcpd.conf配置文件,文件最后修改内容如下所示:

  最后启动dhcp服务:
  service dhcpd start
  注:如果机器数量过多的话,注意dhcp服务器的地址池,不要因为耗尽IP而导致dhcpd服务器没有IP地址release情况。
  (6)用yum工具自动安装Kickstart,同时配置system-config-kickstart。
  a) 首先我们需要安装Kickstart这个工具包,在CentOS最小化安装系统时,此软件包并没有默认安装,yum安装命令如下所示:
  yum –y install system-config-kickstart
  b) 在gnome环境下配置Kickstart,命令如下所示:
  system-config-Kickstart
  运行上面的命令后可以对系统的一些基本配置进行设置,例如选择时区、设置root的密码等。
  c) 接下来便要进行安装了,建议选择httpd安装,切记不要输入任何账号,而是采用匿名安装。
  在安装过程中,根据引导选择安装选项,不需要做更改。
  d) Kickstart会让我们选择需要批量安装的CentOS5.8分区信息,按照上一节所介绍的CentOS5.5 x86_64的安装方法,我们创建四个分区,即/、/boot、/data和swap分区。
  e) 在进行网络配置时,我使用的静态分配地址(动态同样如此),这里跟前面进行光盘安装是一样的。
  f) 设置显示配置时可以按照我们的习惯选择。
  g) 关于软件包的选择,大家可以根据实际的工作需求来选择自己需要的软件包,由于服务器安装后用途都是不一样的,建议大家这里选择最小化安装。
  h) 其他都选择默认设置,不需要修改。
  i) 最后将生成的文件ks.cfg保存到/var/www/html下,此为自动化无人值守安装的重难点,此文件稍有配置不当的话就会需要人为干预了,如果大家遇到问题,建议参考我下面的ks.cfg配置文件。
  (7)修改/tftpboot/pxelinux.cfg/default文件,指定读取ks.cfg的方法,即修改文件第一行内容,改动后文件第一行内容如下所示:
  default text ks=192.168.11.29/ks.cfg
  另外,也建议将timeout时间由原先的600改为1,timeout时间是引导时等待用户手动选择的时间,设为“1”可直接引导。
  (8)/var/www/html/ks.cfg文件内容如下所示(此内容是整个实验过程的重难点,请关注):

  此配置过程中的重难点我这里说明下:
  分区操作按照目前线上分区来操作,即分成/、/boot、/data及swap四个分区,其中/data分区是存放数据的,我们这里用--grow --size=1参数来将其余的剩余空间全部分配给/data分区。
  key --skip如果是红帽系统,此选项可以跳过输入序列号过程;如果是CentOS 5.x系列,则可以不保留此项内容;
  reboot 此选项必须存在,也必须文中设定位置,不然kickstart显示一条消息,并等待用户按任意键后才重新引导,此问题是很多朋友在论坛上发言提问的,我在实验过程中也遇到此问题,建议多做几次实验;
  clearpart --all --initlabel此条命令必须添加,不然系统会让用户手动选择是否清除所有数据,这就需要人为干预了,从而导致自动化过程失败;
  其它方面选项较容易看懂,我这里就不再重复了。
  (9)将Kickstart需要的服务器均启动后,此自动化安装系统的过程就完成了,我们就可以在内网机柜中全自动同时安装CentOS5.8 x86_64系统了,服务器端启动相应命令如下:
  service httpd start
  chkconfig httpd on
  service dhcpd start
  chkconfig dhcpd on
  service xinetd restart
  系统完成最小化后安装后,大家可以根据自己公司的实际情况来进行系统的优化,此最小化优化脚本init.sh还可以让puppet服务器进行推送,此脚本内容如下所示:

  注意:
  #tune kernel parametres为内核优化部分,在这里我只做了基础处理,大家有需求可以自行修改,记住:一切以系统稳定为原则。
  #vim setting选项为vim的个性化配置,如果想vim语法高亮,则必须安装vim-enhanced包,另外,vim在使用搜索功能,搜索选中内容为高亮,感觉不是特别舒服,所以我这里用了set nohlsearch选项,如果大家不介意此项功能,则不需要添加此语句;
  #disable ipv6选项我在测试时发现,在CentOS5.8 x86_64系统下,如果不添加install ipv6 /bin/true此语句到/etc/modprobe.conf文件里,是关闭不了ipv6选项的,而测试的CentOS5.5 | 5.6不添加此句均可以顺利关闭ipv6,这点请大家注意,当然了,最后要reboot系统让此配置生效。

  引申:相信大家的开发环境应该有不少Xen虚拟机,虽然Xen有自身的模板文件操作,但我们也可以利用Kickstart的方式快速无人值守安装Xen虚拟机系统,命令如下所示:
  virt-install -n vm4 -r 300 -f /data/vm/vm4.img -s 8 -p -l -x ks=192.168.11.29/ks.cfg
我们单位有个叫noc-ps的服务器,可以通过他自动安装各种操作系统,把镜像都做好,可以像给任务一样都完全自动化,比PXE还简单,原本是一个老员工做的,他走了,老板让我现在做一个功能就是让他能自动破解windows密码,我只会家里平时用用GHOST里的工具去破解,赛光盘直接进软件然后选择磁盘的sam文件,但是通过noc-ps我就不是很清楚,老板叫我做个WINPE,然后通过脚本方式实现,既然是winpe我想论坛很多GHOST系统里开机都有WINPE的,我猜想把这个系统镜像里的系统GHOST文件去除,减少点容量,然后想办法通过NOC-PS引导到像家里光驱启动一样的界面,让他自己进入WINPE,然后系统启动后自动让他执行破解软件的脚本,不知道是这样否,现在我把系统镜像上传上去,引导就是引导不起来,不知道论坛下载的ISO文件本身带自己引导吗?因为我通常把ISO放到虚拟机里CD/DVD光驱,虚拟机只要按运行虚拟机自动会启动的,不知道NOC-ps是不是要我手工把ISO这个文件制作成带启动功能的,请大侠指点我
参考技术A 1、获取windows 10 ISO安装镜像:正版用户可前往微软社区获取windows 10 Technical Preview Build安装镜像,其他用户可前往MSDN I tell you-操作系统- Windows-Technical Preview Build获取X86或X64的系统镜像安装文件,请根据你的内存容量进行位数选择
2、U盘启动盘刻录:Windows 10的安装方法和Windows 8的安装方法没有很大的区别,推荐将系统ISO镜像通过UltraISO刻录至4GB U盘,通过U盘来启动win 10的安装过程
windows10 U盘启动盘刻录的方法
3、boot快捷启动快捷键:刻录windows10 U盘启动盘后重启计算机,按下boot快捷键进入启动快捷菜单,不同的机型有不同的启动快捷键,部分机型无启动快捷键就需要进入BIOS设置第一启动项。我是联想笔记本,启动LOGO也提示了按F12进入快捷启动菜单
4、Boot Options Menu:进入快捷启动菜单后方向键选择你插入的windows 10 U盘启动盘,回车键确认。如果是进入BISO将U盘设置为第一启动项则保存修改后直接启动U盘
5、Windows安装程序:启动U盘后自动读取刻录在U盘的系统启动信息,出现Windows安装程序窗口,要安装的语言,时间和货比格式,键盘和输入方法都默认,直接点击下一步
6、现在安装:弹出Windows安装程序,点击现在安装。左下角的修复计算机是用于已安装windows10操作系统进行系统修复的
注:如果出现鼠标无法使用请更换无需驱动的鼠标或无线鼠标
7、微软预发行软件许可条款:这是微软的预发行Windows操作系统的许可条款,大概浏览一遍了解相关事项勾选我接受许可条款,点击下一步
8、Windows安装类型:windows10和以前的windows版本一样提供了升级安装和自定义安装两种安装方式,升级安装在保留你的windows设置的前提下直接升级,自定义安装则是完全重新安装新的系统,一般建议选择自定义安装。
9、主分区选择:windows10操作系统需要安装到主分区,不能安装至逻辑分区,选择你的系统分区后点击格式化,格式化完毕点击下一步
10、正在安装Windows:选择windows10安装分区后自动展开ISO镜像文件,这个过程可能需要一段时间,请耐心等待
11、正在准备设备:成功完成镜像文件展开和安装后会自动重启计算机,重启完毕进入正在准备设备过程
12、基本步骤:接下来windows10安装程序提示完成基本步骤,包括上网,设置和登陆
13、跳过网络连接:如果你没有WIFI可点击跳过网络连接,直接点击下一步
14、快速设置:我们建议使用这些设置,其中某些设置有时会发送信息到Microsoft,这里建议点击使用快速设置,即系统默认设置
15、创建在线/本地账户:从windows8起系统就提供了本地账户和在线账户两种微软账户的支持,上一步骤连接了WIFI的话可设置在线账号,未连接WIFI则只能点击创建本地账户,在线账号可安装系统完毕后再去创建和登陆
16、相关设置:设置账户信息后点击下一步进入相关设置流程,包括从应用商店获取应用等步骤,自动化完成
17、桌面图标:成功完成后进入windows 10系统桌面,有回收站和Welcome to -Tech preview图标,在桌面右键-个性化-桌面图标-勾选计算机,用户的文件-应用-确定,将计算机和用户文件夹添加至桌面
18、windows10安装完毕:至此Windows 10成功安装完毕,点击左下角菜单图标可看见windows10独具风格的Windows7风格开始菜单

自动化运维-PXE实现自动安装系统

一、PXE介绍

Preboot Excution Environment预启动执行环境
基于Client/Server的网络模式,支持远程主机通过网络从远端服务器下载映像,并由此支持通过网络安装操作系统
PXE可以引导和安装Windows,Linux等多种操作系统,此处只用pxe实现centos系统的自动化安装

二、操作前准备:仅主机模式,关闭vmware 的dhcp服务

三、操作步骤

1.安装HTTP

yum install httpd
systemctl enable httpd
system start httpd

技术图片
2.添加光盘用来挂载centos6的镜像文件,使用命令刷新

echo ‘- - -‘ > /sys/class/scsi_host/host0/scan  //如未刷新出,可将host0换为host1,host2再试

技术图片
技术图片
技术图片
3.准备KS文件

cp /root/anaconda-ks.cfg /var/www/html/ksdir/miniks7.cfg  //在已安装好的centos7主机上复制/root/anaconda-ks.cfg作为模板文件,修改后做centos7的ks文件
vim  /var/www/html/ksdir/miniks7.cfg

技术图片
技术图片

cp /root/anaconda-ks.cfg  /var/www/html/ksdir/miniks6.cfg  //在已安装好的centos6主机上复制/root/anaconda-ks.cfg作为模板文件,修改后做centos6的ks文件
vim  /var/www/html/ksdir/miniks6.cfg

技术图片
技术图片
4.安装TFTP服务(将后面要用到的文件放置在它生成的/var/lib/tftpboot/目录中用来共享)

yum install tftp-server
systemctl start tftp
systemctl enable tftp

5.安装DHCP服务

yum install dhcp

技术图片

cp  /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example   /etc/dhcp/dhcpd.conf
vim /etc/dhcp/dhcpd.conf   //配置dhcp服务

技术图片
技术图片

systemctl start dhcpd  //启动服务
systemctl enable dhcpd  //设为开机启动

6.准备启动文件

yum install syslinux  //安装syslinux包
cp /usr/share/syslinux/pxelinux.0  /var/lib/tftpboot //复制启动文件
cp /usr/share/syslinux/menu.c32    /var/lib/tftpboot  //复制启动菜单格式
cp /var/www/html/centos/7/isolinux/vmlinuz  /var/lib/tftpboot/kernel7  //复制centos7内核(centos6同此操作)
cp/var/www/html/centos/7/isolinux/initrd.img  /var/lib/tftpboot/kernel7  //复制centos7进程启动项(centos6同此操作)
mkdir /var/lib/tftpboot/pxelinux.cfg/    
cp /var/www/html/centos/7/isolinux/isolinux.cfg  /var/lib/tftpboot/pxelinux.cfg/default  //复制默认菜单引导文件放入刚创建的/var/lib/tftpboot/pxelinux.cfg文件夹中
tree /var/lib/tftpboot/  // 查看用于自动启动需要的文件

技术图片
7.准备启动菜单文件
技术图片
技术图片
8.创建一个新的虚拟机,开始安装
技术图片
9.快捷键M为选择安装centos7,n为选择安装centos6(此处可用快捷键和上下键选择,只是显示较不明显)
技术图片

以上是关于如何通过PXE实现一键自动化安装操作系统的主要内容,如果未能解决你的问题,请参考以下文章

实验:实现PXE的网络自动化安装

自动化运维-PXE实现自动安装系统

KickStart+PXE实现自动化部署安装

PXE+Kickstack实现无人值守安装CentOS 7操作系统

PXE+Kickstack实现无人值守安装CentOS 7操作系统

CentOS使用PXE网络启动自动安装操作系统