1.什么是 pxe
PXE 的全称是 preboot execute environment它其实是Intel在很久以前提出来的一项用于通过网络来引导系统的标准。允许客户机通过网络从远程服务器上下载引导镜像,并加载安装文件或者整个操作系统。
pxe是通过网卡引导启动
1.1实现的硬件条件
1.BIOS支持
2.网卡支持(现在基本都已支持)
3.需要在bios中开启开关,服务器一般没打开(bmc界面里打开)
4.网络中有一台 DHCP 服务器以便为客户机自动分配地址、指定引导文件位置 网卡自带DHCP功能 dhcp 指明分配的ip地址
vsftpd tftp
5.服务器通过 tftp服务(简单文件传输协议)来提供系统内核和引导镜像的下载 udp()协议 网卡自带这个功能(不支持其他的远程共享服务)
自带的站点(/var/lib/tftp?) initrd.img(驱动) vmlinuz(内核) pxelinux.cfg/default(引导文件) pxelinux.0(小型的grub程序) tftp 指明?
2.实现过程讲解
1.网卡需要查找相关的dhcp服务器(获取地址时间)
2.找到后dhcp服务器提供ip地址,和引导程序(boot loader)的地址 还提供给客户机TFTPserver地址(dhcp本身不提供tftp服务)
3.网卡使用tftp客户端吧引导程序加载到内存中来
4.bios执行引导程序
5.引导程序会去TFTP去查找配置文件
6.根据配置文件去引导安装系统
7.系统安装过程
3.搭建过程中服务详解
PXE 远程安装服务器集成了 CentOS 7 安装源、TFTP 服务、DHCP 服务,能 够向客户机裸机发送 PXE 引导程序、Linux 内核、启动菜单等数据,以及提供安装文件。
3.1TFTP服务
TFTP(简单文件传输协议):内核和引导文件
是一种基于UDP协议实现的用于在客户机和服务器之间进行简单文件传输的协议,适合于小型文件传输的应用场合。TFTP服务默认由xinetd服务进行管理,使用UDP69端口。
3.2 vsftp:安装系统镜像文件获取方式
可以使用http ftp等方式,ftp文件传输的一种。
3.3 syslinux
syslinux是一个功能强大的引导加载程序,而且兼容各种介质。它的目的是简化首次安装Linux的时间,并建立修护或其它特殊用途的启动盘。它的安装很简单,一旦安装syslinux好之后,sysLinux启动盘就可以引导各种基于DOS的工具,以及MS-DOS/Windows或者任何其它操作系统。
pxelinux.0 启动pxe pxe可以支持
3.4 DHCP服务
略
4.pxe 优点
1.规模化:同时装配多台服务器 2.自动化:安装系统、配置各种服务 3.远程实现:不需要光盘、U盘等安装介质
5.操作过程
大概过程
-
分配给同一局域网内新加机器的地址(配置文件) dhcp 分配地址 指明tftp 服务器的地址
-
tftp服务端开启 udp 配置 默认关闭
-
安装syslinux 取得 pxelinux.0 文件
-
安装vsftpd服务挂载软件安装源(mount /dev/sr0 /var/ftp/centos7)
-
将四大文件拷入 (/var/lib/tftpboot )
-
initrd.img
-
pxelinux.0 (类似grub)
-
pxelinux.cfg/default (手写)
-
vmlinuz
6.将服务开启,关闭防火墙,selinux
具体操作步骤:
[root@localhost ~]#yum install tftp-server vsftpd syslinux dhcp -y 已加载插件:fastestmirror, langpacks Loading mirror speeds from cached hostfile 软件包 12:dhcp-common-4.2.5-58.el7.centos.x86_64 已安装并且是最新版本 软件包 12:dhcp-libs-4.2.5-58.el7.centos.x86_64 已安装并且是最新版本 正在解决依赖关系 --> 正在检查事务 ---> 软件包 dhcp.x86_64.12.4.2.5-58.el7.centos 将被 安装 --> 解决依赖关系完成 依赖关系解决 ========================================================================= Package 架构 版本 源 大小 ========================================================================= 正在安装: dhcp x86_64 12:4.2.5-58.el7.centos abc 513 k 事务概要 ========================================================================= 安装 1 软件包 总下载量:513 k 安装大小:1.4 M Downloading packages: Running transaction check Running transaction test Transaction test succeeded Running transaction 正在安装 : 12:dhcp-4.2.5-58.el7.centos.x86_64 1/1 验证中 : 12:dhcp-4.2.5-58.el7.centos.x86_64 1/1 已安装: dhcp.x86_64 12:4.2.5-58.el7.centos 完毕!
2.将配置文件模板复制到dhcp目录下
[root@localhost ~]# cat /etc/dhcp/dhcpd.conf # # DHCP Server Configuration file. # see /usr/share/doc/dhcp*/dhcpd.conf.example //配置文件模板在此目录下 # see dhcpd.conf(5) man page [root@localhost ~]# cp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf //将模板文件覆盖掉配置文件 cp:是否覆盖"/etc/dhcp/dhcpd.conf"? y [root@test2 ~]# vim /etc/dhcp/dhcpd.conf subnet 192.168.20.0 netmask 255.255.255.0 { range 192.168.20.50 192.168.20.100; option routers 192.168.20.90; # next-server 192.168.20.90; #指定tftp的服务器地址 # filename "pxelinux.0"; #指定启动文件 } [root@localhost isolinux]# rpm -ql tftp-server /etc/xinetd.d/tftp /usr/lib/systemd/system/tftp.service /usr/lib/systemd/system/tftp.socket /usr/sbin/in.tftpd /usr/share/doc/tftp-server-5.2 /usr/share/doc/tftp-server-5.2/CHANGES /usr/share/doc/tftp-server-5.2/README /usr/share/doc/tftp-server-5.2/README.security /usr/share/man/man8/in.tftpd.8.gz /usr/share/man/man8/tftpd.8.gz /var/lib/tftpboot 主要文件: #/etc/xinetd.d/tftp //配置文件 #/var/lib/tftpboot //站点 [root@localhost isolinux]# vim /etc/xinetd.d/tftp #14行改成no,启动服务 1 # default: off 2 # description: The tftp server serves files using the trivial file transfer \ 3 # protocol. The tftp protocol is often used to boot diskless \ 4 # workstations, download configuration files to network-aware printers, \ 5 # and to start the installation process for some operating systems. 6 service tftp 7 { 8 socket_type = dgram 9 protocol = udp 10 wait = yes 11 user = root 12 server = /usr/sbin/in.tftpd 13 server_args = -s /var/lib/tftpboot # 14 disable = no #14行改成no,启动服务 15 per_source = 11 16 cps = 100 2 17 flags = IPv4 18 } [root@localhost isolinux]# rpm -ql syslinux |grep pxelinux.0 //安装完成后找到该文件的地址 /usr/share/syslinux/gpxelinux.0 /usr/share/syslinux/pxelinux.0 //地址 [root@localhost isolinux]# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/ //拷贝到站点文件里 [root@localhost centos7]#rpm -ql vsftpd /var/ftp [root@localhost centos7]# mkdir centos7 [root@localhost centos7]# mount /dev/sr0 /var/ftp/centos7/ mount: /dev/sr0 写保护,将以只读方式挂载 [root@localhost centos7]# cd /var/ftp/centos7/ [root@localhost centos7]# ls CentOS_BuildTag EULA images LiveOS repodata RPM-GPG-KEY-CentOS-Testing-7 EFI GPL isolinux Packages RPM-GPG-KEY-CentOS-7 TRANS.TBL [root@localhost centos7]# cd images/ [root@localhost images]# ls efiboot.img pxeboot TRANS.TBL [root@localhost images]# cd pxeboot/ [root@localhost pxeboot]# ls initrd.img TRANS.TBL vmlinuz [root@localhost pxeboot]# cp initrd.img vmlinuz /var/lib/tftpboot/ [root@localhost pxeboot]# cd /var/lib/tftpboot/ [root@test2 tftpboot]# mkdir pxelinux.cfg [root@test2 tftpboot]# cd pxelinux.cfg/ [root@test2 pxelinux.cfg]# vim default default linux prompt 1 label linux kernel vmlinuz append initrd=initrd.img method=ftp://192.168.20.90/centos7 ks=ftp://192.168.20.90/ks.cfg label linux text kernel vmlinuz append text initrd =initrd.img method=ftp://192.168.20.90/centos7 label linux rescue kernel vmlinuz append rescue initrd=initrd.img method=ftp://192.168.20.90/centos7 [root@test2 tftpboot]# ls #四大文件 initrd.img pxelinux.0 pxelinux.cfg/default vmlinuz [root@localhost pxeboot]# systemctl stop firewalld.service [root@localhost pxeboot]# systemctl start dhcpd [root@localhost pxeboot]# systemctl start tftp [root@localhost pxeboot]# systemctl start vsftpd [root@localhost pxeboot]# setenforce 0
6. kickstart 无人值守安装
具体过程:
然后保存到/var/ftp/
客户机内存需2G以上
7 Cobbler的工作原理
-
client裸机配置了从网络启动后,开机后会广播包请求DHCP服务器(cobbler server)发送其分配好的一个IP
-
DHCP服务器(cobbler server)收到请求后发送responese,包括其ip地址
-
client裸机拿到ip后再向cobbler server发送请求OS引导文件的请求
-
cobbler server告诉裸机OS引导文件的名字和TFTP server的ip和port
-
client裸机通过上面告知的TFTP server地址通信,下载引导文件
-
client裸机执行执行该引导文件,确定加载信息,选择要安装的os,期间会再向cobbler server请求kickstart文件和os image
-
cobbler server发送请求的kickstart和os iamge
-
client裸机加载kickstart文件
-
client裸机接收os image,安装该os image
7.1 实际操作
安装相关包并启动服务
[root@centos7 ~]#yum install epel-release.noarch -y [root@centos7 ~]#yum install cobbler dhcp httpd -y [root@centos7 ~]#systemctl enable --now cobblerd httpd tftp dhcpd
修改cobbler相关的配置
[root@centos7 ~]#cobbler check #生成新密码,默认安装好的系统root密码为cobbler [root@centos7 ~]#openssl passwd -1 '123123' $1$1spuisnh$j34LNmyTQWs3l6xKxCZY60 #根据以上提示,只需要做1,2,8这三项即可,修改下面四行 [root@centos7 ~]#vim /etc/cobbler/settings default_password_crypted: "$1$1spuisnh$j34LNmyTQWs3l6xKxCZY60" next_server:< tftp服务器的 IP 地址> 192.168.91.100 server:<cobbler服务器的 IP 地址> manage_dhcp:1 #设置为1,表示通过cobbler生成dhcpd.conf配置文件 pxe_just_once: 1 #设置为1,防止重复安装系统 [root@centos7 ~]#systemctl restart cobblerd
实现dhcp服务
#修改dhcp的模版文件下面的行,用来生成dhcp的配置文件 [root@centos7 ~]#vim /etc/cobbler/dhcp.template subnet 192.168.100.0 netmask 255.255.255.0 { option routers 192.168.100.1; option domain-name-servers 180.76.76.76,223.6.6.6; option subnet-mask 255.255.255.0; range dynamic-bootp 192.168.100.1 192.168.100.200; #自动生成dhcp配置文件并启动 [root@centos7 ~]#cobbler sync
下载启动的相关文件
[root@centos7 ~]#cobbler get-loaders [root@centos7 ~]#ls /var/lib/cobbler/loaders [root@centos7 ~]#tree /var/lib/tftpboot/ [root@centos7 ~]#cobbler sync
导入CentOS系统的安装文件,生成相应的YUM源
[root@centos7 ~]#cobbler import --name=centos-7-x86_64 --path=/mnt --arch=x86_64 #也可以在导入yum源的同时进行关联自定义的kickstart文件 [root@centos7 ~]#cobbler import --name=centos-7.7-x86_64 --path=/mnt --arch=x86_64 --kickstart=/var/lib/cobbler/kickstarts/centos7.cfg [root@centos7 ~]#du -sh /var/www/cobbler/ks_mirror/* #设置默认安装菜单, 这样未装系统的设备会自动从pxe引导启动你需要安装的系统, 不需要再手动接显示器选了 [root@centos7 ~]#cobbler system add --name=default --profile=centos-7-x86_64 das nas 只能管理文件 san 可以管理文件系统