在Linux中有多种的安装方式:HD、USB、CDROM、PXE及 远程管理卡等。在我们的系统运维的生涯中,经常要安装操作系统,然而我们维护的机器不是一两台而已,一般的企业服务器数量都在几十、几百、几千、甚至上万 台。这么多的机器,如果人工的一台一台去安装,那我们这些运维人员,可能要把大部分时间都花费在了安装系统上,所以,我们一般都会建立一个PXE服务器,通过网络来批量部署系统。
PXE(preboot execute environment)是由Intel公司开发的最新技术,工作于Client/Server的网络模式,支持工作站通过网络从远端服务器下载映像,并由此支持来自网络的操作系统的启动过程,其启动过程中,终端要求服务器分配IP地址,再用TFTP(trivial file transfer protocol)或MTFTP(multicast trivial file transfer protocol)协议下载一个启动软件包到本机内存中并执行,由这个启动软件包完成终端基本软件设置,从而引导预先安装在服务器中的终端操作系统。
PXE启动原理
当计算机引导时,BIOS把 PXE Client 调入内存中执行,然后由 PXE Client 将放置在远端的文件通过网络下载到本地运行。
PXE远程装机的好处:
规模化:同时装配多台服务器
自动化:安装系统、配置各种服务
远程实现:不需要光盘、U盘等安装介质
1.部署PXE需要的环境:
首先在pxe服务器端需要有一个DHCP服务器,需要有tftp服务器和一个文件服务器,其中文件服务器可以是ftp,http,nfs等文件服务器,如果服务器性能好或者流量不是太大,这些服务器完全可以放在一台服务器上面。当然客户机的网卡需要支持PXE协议,且主板主持网络引导,并设置BIOS中允许从Network或LAN启动,现在的绝大部分的网卡已经支持这样的功能了。
2.PXE部署系统自动化安装流程
(1) 设置拥有pex功能的客户端主机开机启动项为网络启动,一般默认都此选项,如果没有可自行设置bios启动项
(2) 客户端开机之后进入网络启动,此时客户端没有IP地址需要发送广播报文(pxe网卡内置dhcp客户端程序),dhcp服务器相应客户端请求,分配给客户端相应的IP地址与掩码等信息
(3) 客户端得到IP地址之后,与tftp通信,下载pxelinux.0,default文件,根据default指定的vmlinuz,initrd.img启动系统内核,并下载指定的ks.cfg文件
(4) 根据ks.cfg文件去文件共享服务器(http/ftp/nfs)上面下载RPM包开始安装系统,注意此时的文件服务器是提供yum服务器的功能的。
1.tftp服务的安装与启用:
<1>安装tftp服务
[root@pxe-server ~]# yum install tftp-server.x86_64 -y
<2>启用tftp服务
TFTP服务默认由超级服务xinetd超级服务器进行管理,所以开启方式较为特殊
[root@pxe-server ~]# vim /etc/xinetd.d/tftp
14 disable = no ##将yes改为no
[root@pxe-server ~]# systemctl restart xinetd.service
chkconfig --list :显示所有运行级系统服务的运行状态信息(on或off)。通过该命令查看tftp服务的开启状态
通过netstat -a | grep tftp命令也可以查看tftp服务的状态
<3>tftp客户端测试:
[root@client ~]# yum install tftp -y
2.复制相关需要的内核或其它文件:
<1>其中菜单和启动引导文件等由syslinux包提供,所以安装此包即可。
[root@pxe-server ~]# yum install syslinux -y
[root@pxe-server tftpboot]# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
<2>复制相关需要的内核文件:
[root@pxe-server tftpboot]# cd /var/lib/tftpboot/
[root@pxe-server tftpboot]# scp -r [email protected]:/var/www/html/rhel7.0/isolinux .
<3>编辑default文件:
[root@pxe-server tftpboot]# mkdir pxelinux.cfg
[root@pxe-server tftpboot]# cp isolinux.cfg pxelinux.cfg/
[root@pxe-server tftpboot]# cd pxelinux.cfg/
[root@pxe-server pxelinux.cfg]# ls
isolinux.cfg
[root@pxe-server pxelinux.cfg]# mv isolinux.cfg default ##重命名[root@pxe-server pxelinux.cfg]# vim default
61 label linux
62 menu label ^Install Red Hat Enterprise Linux 7.0
63 menu default 设置安装进度条为默认
64 kernel vmlinuz
65 append initrd=initrd.img repo=http://172.25.254.81/rhel7.0/ ks=http://172.25.254.100/ks.cfg ##设置启动文件,yum源和自动安装脚本文件
/var/lib/tftpboot下各个文件及目录的说明:
(1) initrd.img该文件可以在内存当中模拟文件系统
(2) vmlinuz则是一个缩减版的内核文件拥有一些基本的网络功能,可以控制客户端进行下一步的从文件共享系统中下载真正的内核文件和驱动文件,最后真正的内核文件解压进行接管上一个内核,开始进行软件包的真正安装等任务。
(3) pxelinux.0文件它可以解释default文件中的每个配置项,并根据配置项做出不同的反应。如等待的时间、启动器背景、启动菜单、内核引导等等。
(4) vesamenu.c32和menu.c32是syslinux所拥有众多模块中的两个,它们的功能是制定启动器使用什么模式的背景。Vesamenu.c32图形模式,menu.c32文本模式。使用时可以选择一个,这里我选择的是文本模式。
(5) pxelinux.cfg目录,pxelinux被执行后,它会扫描该目录下是否存在指定的配置文件,如果存在,则引用被制定的配置文件。
(6) default文件存放于pxelinux.cfg目录中,pxelinux程序最后扫描的配置文件名就是default,所以,我们经常把启动器配置项都写入该文件中,default文件中第一行指定使用哪种形式的图形化,menu.c32为字符图形化,也可以使用图形化的菜单vesamenu.c32。prompt和timeout指定超时时间,可以有多段,使用MENU TITLE 指定主标题,不同的安装方式可以有不同LABEL,我这里有两种,手动和自动,第一种为使用ks.cfg文件自动安装,第二种使用手动方式安装,记得ks.cfg文件的权限问题,对他人要有读权限!
(7) 如果是多网卡的主机要在default文件的append传递启动网卡是哪一个,不然会在开机启动让你选择使用哪个网卡启动,并且没有默认,如:使用eth0启动则向内核传递ksdevice=eth0参数。
3.DHCP服务器安装配置:
[root@pxe-server tftpboot]# yum install dhcp -y
[root@pxe-server ~]# cp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf
[root@pxe-server ~]# vim /etc/dhcp/dhcpd.conf
7 option domain-name "westos.com";
8 option domain-name-servers 172.25.254.81;
29 subnet 172.25.254.0 netmask 255.255.255.0 {
30 range 172.25.254.20 172.25.254.80;
31 option routers 172.25.254.81;
32 next-server 172.25.254.100; ##定义引导服务器,即tftp服务器的引导文件和tftp服务器地址
33 filename "pxelinux.0"; ##此处的filename是有针对性的,此处的文件只是基于linux -X86的架构有效34 }
[root@pxe-server ~]# systemctl restart dhcpd ##重启dhcpd服务
4.http服务器安装配置
[root@pxe-server ~]# yum install httpd
[root@pxe-server ~]# systemctl start httpd
5.ks.cfg文件的生成:
Anaconda是RedHat、CentOS、Fedora等Linux的安装管理程序。它可以提供文本、图形等安装管理方式,并支持 Kickstart等脚本提供自动安装的功能。该程序的功能是把位于光盘或其他源上的数据包,根据设置安装到主机上。为实现该定制安装,它提供一个定制界面,可以实现交互式界面供用户选择配置(如选择语言,键盘,时区等信息)。
(1)Anaconda支持的管理模式:
(a)Kickstart提供的自动化安装;
(b)对一个RedHat实施upgrade;
(c)Rescuse模式对不能启动的系统进行故障排除。
要进入安装步骤,需要先有一个引导程序引导启动一个特殊的Linux安装环境系统;
(2)引导有多种方式:
(a)基于网络方式的小型引导镜像,需要提供小型的引导镜像;
(b)U盘引导,通过可引导存储介质中的小型引导镜像启动安装过程;
(c)基于PXE的网络安装方式,要提供PXE的完整安装环境;
(d)其他bootloder引导(如GRUB)。
注: 可用的安装方式:本地CDROM、硬盘驱动器、网络方式(NFS、FTP、HTTP)
<1>安装system-config-kickstart工具包:
[root@pxe-server ~]# yum install system-config-kickstart.noarch -y
<2>执行system-config-kickstart 命令打开图形化配置界面:
(a) Basic Configuration:基本配置模式
在basic configuration中要配置默认语言,键盘类型,时区,root密码(当然要选择加密了),下面有一个指定安装key,这个是针对redhat的系统,其他系统可以忽略,接着就是针对硬件平台选择要安装的服务器的架构了,接着是安装之后是否执行重启和安装是否要在交互模式下,现在我们要在非交互模式下面,当然不能选择交互了!
(b) Installation Method:安装模式可以指定光盘,网络服务器等,并指明文件共享路径。
(c) Boot Loader options:Boot Loader选项,设置是否安装bootlloader,以及是否对grub设置密码,对于一个全新的安装当然要安装bootloader了。
(d) Partition information:分区信息,手动添加分区信息,可以选择RAID,根据自己使用的硬盘大小自己定义分区方案。
这里我们给/boot 分配200M,swap分区分配500M,剩余的空间全部给/分区
(e) NetworkConfiguration,配置网络当然使用pxe安装不能手动分配地址,而是应该dhcp获取,否则会引起地址冲突,选择Add Network Device 选项卡添加网卡设备,已经获取地址的方式。
(f) Authentication:认证方式:包括登录samba等认证方式
(g) Firewall Configuration:防火墙的配置包括selinux是否启用:
(h) Display Configuration显示配置,是否启用图形化:
(i) Package Selection 安装包选择:
(j) pre-installtion Script/post-installation Script 系统安装前/后要执行的脚本
(k)最后记得保存文件!指定保存路径/var/www/html即可
<3>最后编辑配置文件ks.cfg:
文件如下:其中以#开头的行是注释行,其它部分开头是%开头,%end结尾。%%packages是系统要安装的包,@开头是软件包组,@^是环境包组开头以-开头是排除在外的包名或组名,除非必须的依赖性包则会安装,否则不会安装。%pre,%%post是脚本,%pre是在任何磁盘分区之前进行,%%post是在系统安装之后进行的系统配置。
[root@pxe-server html]# vim ks.cfg
%packages
@base
@core
@x11
%end[root@pxe-server html]# ksvalidator ks.cfg
<4>浏览器上测试该配置文件是否有效
以上,对无人值守系统安装的部署已经全部完成了
打开一个虚拟机,设置开机启动为网卡启动:
载入内核成功,能进入安装界面自动安装:
附加内容:
命令对图像大小进行修改
安装对图片进行修改的软件
[root@pxe-server ~]# yum whatprovides */convert -y ##查找有关convert命令的所有程序
[root@pxe-server ~]# yum install ImageMagick-6.7.8.9-10.el7.x86_64 -y ##安装软件
[root@pxe-server ~]# convert -resize 640x480! test.png new.png ##将test.png改为640x480的像素大小,修改完的图片另存为new.png。
[root@pxe-server ~]# convert -resize 640x480 test.png ii.png 不加!的话会保留图像的原始比例进行操作