centos7-PXE自动安装系统
一、PXE简介
对与运维人员来说,如何安装操作系统想必并不陌生;但当我们面对大量需要安装系统的环境时,自动化安装系统就成了一项必备的技能;下面就让我们一起走进PXE这项批量自动化安装操作系统的技术吧。
PXE(Pre-boot Execution Environment,预启动执行环境)是由Intel公司开发的最新技术,工作于Client/Server的网络模式,支持工作站通过网络从远端服务器下载映像,并由此支持通过网络启动操作系统,在启动过程中,终端要求服务器分配IP地址,再用TFTP(trivial file transfer protocol)或MTFTP(multicast trivial file transfer protocol)协议下载一个启动软件包到本机内存中执行,由这个启动软件包完成终端基本软件设置,从而引导预先安装在服务器中的终端操作系统。PXE可以引导和安装Windows,linux等多种操作系统。
1、工作原理
(1) Client向PXE Server上的DHCP发送IP地址请求消息,DHCP检测Client是 否合法(主要是检测Client的网卡MAC地址),如果合法则返回Client的 IP地址,同时将启动文件pxelinux.0的位置信息一并传送给Client (2) Client向PXE Server上的TFTP发送获取pxelinux.0请求消息,TFTP接收 到消息之后再向Client发送pxelinux.0大小信息,试探Client是否满意,当 TFTP收到Client发回的同意大小信息之后,正式向Client发送pxelinux.0 (3) Client执行接收到的pxelinux.0文件 (4) Client向TFTP Server发送针对本机的配置信息文件(在TFTP 服务的 pxelinux.cfg目录下),TFTP将配置文件发回Client,继而Client根据配 置文件执行后续操作。 (5) Client向TFTP发送Linux内核请求信息,TFTP接收到消息之后将内核文件 发送给Client ? Client向TFTP发送根文件请求信息,TFTP接收到消息之后返回Linux根文 件系统 (6) Client启动Linux内核 (7) Client下载安装源文件,读取自动化安装脚本
2、PXE客户机的启动流程
1、 PXE客户机从DHCP服务器获取IP地址,以及tftp服务器IP和PXE启动文件的路径。 2、 PXE客户机从TFTP服务器获取pxelinux.0启动文件。 3、 PXE客户机从TFTP服务器获取pxelinux.cfg/default启动菜单文件、内核文件vmlinuz、系统镜像initrd.img 4、 PXE客户机根据default菜单文件的设置启动安装程序。 5、 用户手动进行系统安装,或PXE客户根据ks.cfg自动应答文件来全自动安装系统。
二、部署
1.1、系统环境介绍
root@centos7-test ~]# hostnamectl Static hostname: centos7-test Icon name: computer-vm Chassis: vm Machine ID: 8dd8387e9e6847de9ebf22d7d1efeaaf Boot ID: 2f0863e52b274506b23b49c6b875f976 Virtualization: vmware Operating System: CentOS Linux 7 (Core) CPE OS Name: cpe:/o:centos:centos:7 Kernel: Linux 3.10.0-1160.62.1.el7.x86_64 Architecture: x86-64
1.2、服务器初始环境准备
关闭selinux
在/etc/selinux/config文件中把SELINUX=enforcing修改为SELINUX=disabled
修改后重启系统使配置生效
查看SELinux的状态
[root@centos7-test ~]# sestatus SELinux status: disabled
1.3、安装并配置DHCP服务,创建DHCP作用域,启动服务
安装dhcp服务 yum install -y dhcp 查看dhcp配置文件 root@centos7-test ~]# locate dhcpd.conf /etc/dhcp/dhcpd.conf /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example 修改DHCP服务的配置文件,如下: # # DHCP Server Configuration file. # see /usr/share/doc/dhcp*/dhcpd.conf.example # see dhcpd.conf(5) man page # subnet 192.168.200.0 netmask 255.255.255.0 { #指定为哪个网段分配网络参数 option subnet-mask 255.255.255.0; #设置子网掩码 option domain-name-servers 114.114.114.114; #设置分配给客户端的DNS服务器地址 range 192.168.200.200 192.168.200.254; #设置准备为客户端分配的IP地址范围 default-lease-time 21600; # 地址租赁时间 600秒后失效 max-lease-time 43200; next-server 192.168.200.101; # 下一个要访问的地址,就是tftp地址。 filename "pxelinux.0"; #要访问tftp上哪一个文件。 } 重启dhcp服务,并设为开机自启 systemctl restart dhcpd.service systemctl enable dhcpd.service 在防火墙开放dhcp服务 firewall-cmd --permanent --zone=public --add-service=dhcp 重启firewalld使配置生效 systemctl restart firewald 查看服务端口 ss -tulanp|grep -w 67
1.4、安装并TFTP文件共享服务,并进行配置
yum install -y tftp-server xinetd syslinux 修改tftp服务配置文件 cat /etc/xinetd.d/tftp 把disable = yes 改为disable = no 重启xinetd服务并设为开机自启 systemctl restart xinetd.service systemctl enable xinetd.service 在防火墙开放tftp服务 firewall-cmd --permanent --zone=public --add-service=tftp 重启firewalld使配置生效 systemctl restart firewald
1.5、准备PXE启动文件
PXE服务器上tftp服务要准备的启动文件如下:
pxe启动文件:/var/lib/tftpboot目录中的文件列如下
pxelinux.0 启动的引导程序。在系统中安装syslinux软件后得到的。(查:updatedb;locate pxelinux.0)
pxelinux.cfg/default 启动时的菜单文件,相当于grub.conf。从系统光盘的isolinux/isolinux.cfg复制得到。
vmlinuz 内核文件,从系统光盘的pxeboot/vmlinuz复制得到
initrd.img 系统映像文件,从系统光盘的pxeboot/initrd.img复制得到
*.msg 消息文件,从系统光盘的isolinux/*.msg复制得到。
vesamenu.c32 grub菜单的32位管理程序。从系统光盘的isolinux/ vesamenu.c32复制得到。
splash.jpg grub界面的背景图片。从系统光盘的isolinux/ splash.jpg复制得到。
准备PXE启动文件的具体实施:(此案例的系统光盘是挂载在/dvd目录下)
挂载centos7镜像
创建挂载目录 mkdir /dvd 将centos7镜像挂载到/dvd目录 mount /var/www/html/centos7/CentOS-7.7-x86_64-Everything-1908.iso /dvd 说明:如果系统内没有镜像文件,可以上传货下载一个镜像文件进行挂载
进入/var/lib/tftpboot目录,复制一些PXE启动需要的文件
进入/var/lib/tftpboot目录 cd /var/lib/tftpboot 将pxelinux.0复制到该目录 cp -v /usr/share/syslinux/pxelinux.0 ./ 创建pxelinux.cfg目录 mkdir -v pxelinux.cfg 复制/dvd/isolinux/* 下的所有文件到当前目录 cp -v /dvd/isolinux/* ./ 查看是否复制成功 [root@centos7-test /var/lib/tftpboot]# ls boot.cat grub.conf isolinux.bin memtest pxelinux.cfg TRANS.TBL vmlinuz boot.msg initrd.img isolinux.cfg pxelinux.0 splash.png vesamenu.c32 将isolinux.cfg文件移动到pxelinux.cfg目录下并从命名为default mv isolinux.cfg pxelinux.cfg/default
最后重启PXE客户机测试,可以看到启动到安装菜单界面
1.6、安装Nginx服务,并配置使其显示目录文件列表
安装Nginx服务 yum install -y nginx 修改Nginx服务配置文件,使其显示目录列表 找到http模块,修改如下 cat /etc/nginx/nginx.conf ... http { log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; #自动显示目录 tcp_nopush on; #人性化方式显示文件大小否则以byte显示 tcp_nodelay on; #按服务器时间显示,否则以gmt时间显示 keepalive_timeout 65; types_hash_max_size 4096; include mime.types; default_type application/octet-stream; autoindex on; autoindex_exact_size off; #默认为on,显示出文件的确切大小,单位是bytes。改为off后,显示出文件的大概大小,单位是kB或者MB或者GB autoindex_localtime on; #默认为off,显示的文件时间为GMT时间。改为on后,显示的文件时间为文件的服务器时间 server_names_hash_bucket_size 128; client_header_buffer_size 32k; large_client_header_buffers 4 32k; client_max_body_size 8m; limit_conn_zone $binary_remote_addr zone=one:10m; gzip on; gzip_min_length 1k; gzip_buffers 4 16k; gzip_http_version 1.0; gzip_comp_level 2; gzip_types text/plain application/x-javascript text/css application/xml; gzip_vary on; log_format wwwlogs '$remote_addr - $remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for'; include vhost/*.conf; server { listen 80; listen [::]:80; server_name _; # root /usr/share/nginx/html; root /var/www/html; # Load configuration files for the default server block. include /etc/nginx/default.d/*.conf; error_page 404 /404.html; location = /404.html { } error_page 500 502 503 504 /50x.html; location = /50x.html { } } ... 检查配置是否正确 root@centos7-test /var/lib/tftpboot]# nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful 重启Nginx服务,并设为开机自启 systemctl restart nginx.service systemctl enable nginx.service 在防火墙开放nginx服务 firewall-cmd --permanent --zone=public --add-service=nginx 重启firewalld使配置生效 systemctl restart firewald
1.7、准备centos系统安装源
在/var/www/html/下创建os7、os8、os9三个目录 [root@centos7-test ~]# mkdir /var/www/html/{os7,os8,os9} [root@centos7-test ~]# ls /var/www/html/ centos7 centos8 centos9 os7 os8 os9 将上面挂载到/dvd目录下的centos7镜像文件全部复制到os7目录下 cp -rf /dvd/* /var/www/html/os7/ 之后卸载centos7镜像文件 umount /dvd 挂载centos8系统镜像到/dvd目录下,挂载成功后拷贝到os8目录下 mount /var/www/html/centos8/CentOS-Stream-8-x86_64-latest-dvd1.iso /dvd cp -rf /dvd/* /var/www/html/os8/ 卸载centos8镜像文件 umount /dvd 挂载centos9系统镜像到/dvd目录下,挂载成功后拷贝到os9目录下 mount /var/www/html/centos9/CentOS-Stream-9-latest-x86_64-dvd1.iso /dvd cp -rf /dvd/* /var/www/html/os9/ 至此,三个安装源均准备完毕 重启nginx服务,并进行访问测试 systemctl restart nginx.service 在浏览器输入服务器IP地址进行访问
1.8、kickstart文件准备
说明:
生成kickstart配置文件的三种方法:
方法1、 每安装好一台Centos机器,Centos安装程序都会创建一个kickstart配置文件,记录你的真实安装配置。如果你希望实现和某系统类似的安装,可以基于该系统的kickstart配置文件来生成你自己的kickstart配置文件。(生成的文件名字叫anaconda-ks.cfg位于/root/anaconda-ks.cfg)
方法2、Centos提供了一个图形化的kickstart配置工具。在任何一个安装好的Linux系统上运行该工具,就可以很容易地创建你自己的kickstart配置文件。kickstart配置工具命令为redhat-config-kickstart(RHEL3)或system-config-kickstart(RHEL4,RHEL5).网上有很多用CentOS桌面版生成ks文件的文章,如果有现成的系统就没什么可说。但没有现成的,也没有必要去用桌面版,命令行也很简单。
方法3、阅读kickstart配置文件的手册。用任何一个文本编辑器都可以创建你自己的kickstart配置文件。
创建存放ks文件的目录,并创建ks.cfg文件
创建ks文件目录 mkdir -p /var/www/html/ks 将根目录下的anaconda-ks.cfg复制到/var/www/html/ks目录下,并重命名为centos7_ks.cfg cp anaconda-ks.cfg /var/www/html/ks/centos7_ks.cfg
编辑centos7_ks.cfg文件