4.82PXE+dhcp+tftp+nfs+Kickstart(网络装机)
DHCP:Dynamic Host Configure Protocol
动态主机配置协议,由IETF(Internet网络工程师任务小组)组织制定,用来简化主机地址的分配和管理。
主要分配以下入网参数:
IP地址/子网掩码/广播地址
默认网关地址、DNS服务器地址
PXE引导设置(TFTP服务器地址、引导文件名)
DHCP地址分配的四次会话
DISCOVERY--》OFFER--》REQUEST--》ACK
DISCOVERY:客户端开机时,如果发现自己没有IP地址,会向网络中发出一个请求
OFFER:当服务器主机接收到客户端的请求后,会回应一句话,会给客户端分配IP地址等,这个叫做offer
REQUEST:客户机接收到IP地址后,会回应request,告诉服务端,已收到IP地址。
ACK:当客户端收到地址后,服务端还要确认网络中有没有人使用这个IP地址,避免IP地址冲突,如果没有的话,就告诉客户机,你可用使用这个IP地址了。
服务器端基本概念:
租期:允许客户机组使用IP地址的时间期限,单位为秒
作用域:分配给客户机的IP地址所在网段
地址池:用来动态分配的IP地址范围
安装centos7 linux系统(带GUI界面才行)
#关闭防火墙
[root@localhost ~]# systemctl stop firewalld
#设置防火墙开机不自动启动
[root@localhost ~]# systemctl disable firewalld
#关闭selinux内核安全机制(临时生效)
[root@localhost ~]# setenforce 0
#关闭selinux内核安全机制(永久生效)
[root@localhost ~]# vim /etc/selinux/config
SELINUX= disabled
#删除所有yum仓库
[root@localhost ~]# rm -rf /etc/yum.repos.d/*
[root@localhost ~]# ls /etc/yum.repos.d
#搭建本地yum仓库
[root@localhost ~]# vim /etc/yum.repos.d/local.repo
[local]
name=local_centos
baseurl=file:///mnt/centos
enabled=1
gpgcheck=0
#列出已经搭建好的yum仓库
[root@localhost ~]# yum repolist
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
file:///mnt/centos/repodata/repomd.xml: [Errno 14] curl#37 - "Couldn't open file /mnt/centos/repodata/repomd.xml"
Trying other mirror.
file:///mnt/centos/repodata/repomd.xml: [Errno 14] curl#37 - "Couldn't open file /mnt/centos/repodata/repomd.xml"
Trying other mirror.
repo id repo name status
local local_centos 0
repolist: 0
#创建目录
[root@localhost ~]# mkdir /mnt/centos
[root@localhost ~]# ls /mnt
centos
#挂载(临时生效)
[root@localhost ~]# mount /dev/cdrom /mnt/centos
mount: /dev/sr0 is write-protected, mounting read-only
#挂载(永久)
[root@localhost ~]# echo "/dev/cdrom /mnt/centos iso9660 defaults 0 0 " >> /etc/fstab
#查看是否挂载成功
[root@localhost ~]# vim /etc/fstab
#
# /etc/fstab
# Created by anaconda on Fri May 17 11:34:23 2024
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root / xfs defaults 0 0
UUID=a27ab0fe-d43e-4bab-b632-b6974366ca8b /boot xfs defaults 0 0
/dev/mapper/centos-swap swap swap defaults 0 0
/dev/cdrom /mnt/centos iso9660 defaults 0 0
#设置开机按照配置文件挂载
[root@localhost ~]# mount -a
#查看已配置的yum仓库
[root@localhost ~]# yum repolist
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
development | 3.6 kB 00:00:00
(1/2): development/group_gz | 153 kB 00:00:00
(2/2): development/primary_db | 3.3 MB 00:00:00
repo id repo name status
development local_mnt_centos 4,070
repolist: 4,070
服务名:dhcpd
配置文件:/etc/dhcp/dhcpd.conf
安装软件包:
[root@localhost ~]# yum -y install dhcp
#编辑配置文件(编辑好文件,保存,重启dhcpd服务)
[root@localhost ~]# vim /etc/dhcp/dhcpd.conf
# DHCP Server Configuration file.
# see /usr/share/doc/dhcp*/dhcpd.conf.example
# see dhcpd.conf(5) man page
#导入文件。在底线命令模式下输入
……
:r /usr/share/doc/dhcp*/dhcpd.conf.example
#导入文件后,需要保留的内容如下,其他删除
[root@localhost ~]# vim /etc/dhcp/dhcpd.conf
#
# DHCP Server Configuration file.
# see /usr/share/doc/dhcp*/dhcpd.conf.example
# see dhcpd.conf(5) man page
#
subnet 192.168.0.0 netmask 255.255.255.0 { #子网和子网掩码
range 192.168.0.100 192.168.0.110; #分配10个IP地址
option domain-name-servers 192.168.0.92; #DNS服务器,本机就是DNS服务器
#option domain-name "internal.example.org";
option routers 192.168.0.254; #网关地址
#option broadcast-address 10.5.5.31;
default-lease-time 600; #IP地址租约时间,默认600秒
max-lease-time 7200; #最大IP地址租约时间7200秒
}
#重启dhcpd服务
[root@localhost ~]# systemctl restart dhcpd
#设置dhcpd服务随机自启
[root@localhost ~]# systemctl enable dhcpd
Created symlink from /etc/systemd/system/multi-user.target.wants/dhcpd.service to /usr/lib/systemd/system/dhcpd.service.
#查看dhcpd服务是否运行
[root@localhost ~]# systemctl status dhcpd
● dhcpd.service - DHCPv4 Server Daemon
Loaded: loaded (/usr/lib/systemd/system/dhcpd.service; enabled; vendor preset: disabled)
Active: active (running) since Fri 2024-05-17 16:56:37 CST; 1min 3s ago
网络装机的优势
规模化:同时装配多台主机
自动化:自动装系统,配置各种服务
远程实现:不需要光盘、U盘等物理介质
PXE: Pre-boot eXecution Environment
预启动执行环境,在操作系统之前运行
可用于远程安装
PXE client 集成在网卡的启动芯片中
当计算机引导时,从网卡芯片中把PXE client调入内存执行,获取PXE server配置,实现菜单PXE server配置、显示菜单,根据用户选择远程引导程序下载到本机运行。
PXE需要用到的服务及组件
——DHCP 服务,用于分配IP地址,定位引导程序
——TFTP服务(简单文件传输协议),提供引导程序下载
——FTP服务(或HTTP/NFS),提供yum安装源
客户端应具备的条件
——网卡芯片必须支持PXE协议
——主板支持从网卡启动
上面有
4.82.7.2.1TFTP(Trivial File Transfer Protocol)简单的文件传输协议,端口69
软件包:tftp-server
服务名:tftp
配置文件路径:/etc/xinetd.d/tftp
默认共享路径:/var/lib/tftpboot
dhcp服务的日志:/var/log/messages,如果dhcp服务启动不了,可以查看此文件。
#如果服务端有多张网卡的话,也可以指定监听的网卡
[root@localhost ~]# vim /etc/sysconfig/dhcpd
#command line options here
DHCPDARGS=ens33 #指定监听的网卡
#安装软件包
[root@localhost ~]# yum -y install tftp-server
#启动tftp服务
[root@localhost ~]# systemctl start tftp
或
#重新启动服务
[root@localhost ~]# systemctl restart tftp
#进入dhcp的配置文件中,添加一些参数
[root@localhost ~]# vim /etc/dhcp/dhcpd.conf
#
# DHCP Server Configuration file.
# see /usr/share/doc/dhcp*/dhcpd.conf.example
# see dhcpd.conf(5) man page
#
subnet 192.168.0.0 netmask 255.255.255.0 { #子网和子网掩码
range 192.168.0.100 192.168.0.110; #分配10个IP地址
option domain-name-servers 192.168.0.92; #DNS服务器,本机就是DNS服务器
#option domain-name "internal.example.org";
option routers 192.168.0.254; #网关地址
#option broadcast-address 10.5.5.31;
default-lease-time 600; #IP地址租约时间,默认600秒
max-lease-time 7200; #最大IP地址租约时间7200秒
next-server 192.168.0.92; #指定TFTP服务器(服务端)
filename "pxelinux.0"; #在TFTP服务器中找一个叫pxelinux.0的文件
}
#重启服务dhcpd
[root@localhost ~]# systemctl restart dhcpd
#查看tftp服务是否运行
[root@localhost ~]# systemctl status tftp
● tftp.service - Tftp Server
Loaded: loaded (/usr/lib/systemd/system/tftp.service; indirect; vendor preset: disabled)
Active: active (running) since Fri 2024-05-17 16:47:54 CST; 9min ago
Docs: man:in.tftpd
#设置tftp服务随机自启(先激活tftp服务,再设置开机自启)
[root@localhost ~]# systemctl enable tftp
Created symlink from /etc/systemd/system/sockets.target.wants/tftp.socket to /usr/lib/systemd/system/tftp.socket.
#安装syslinux软件包才会出现pxelinux.0这个文件,或者自己写
[root@localhost ~]# yum -y install syslinux
#查看软件包syslinux安装后,pxelinux.0这个文件的路径,看看这个文件在哪里。
[root@localhost ~]# rpm -ql syslinux
/usr/bin/gethostip
/usr/bin/isohybrid
/usr/bin/memdiskfind
/usr/bin/syslinux
/usr/share/doc/syslinux-4.05
/usr/share/doc/syslinux-4.05/COPYING
/usr/share/doc/syslinux-4.05/CodingStyle.txt
/usr/share/doc/syslinux-4.05/NEWS
/usr/share/doc/syslinux-4.05/README
/usr/share/doc/syslinux-4.05/SubmittingPatches.txt
/usr/share/doc/syslinux-4.05/comboot.txt
/usr/share/doc/syslinux-4.05/distrib.txt
/usr/share/doc/syslinux-4.05/extlinux.txt
/usr/share/doc/syslinux-4.05/gpt.txt
/usr/share/doc/syslinux-4.05/isolinux.txt
/usr/share/doc/syslinux-4.05/keytab-lilo.txt
/usr/share/doc/syslinux-4.05/logo
/usr/share/doc/syslinux-4.05/logo/syslinux-100.png
/usr/share/doc/syslinux-4.05/mboot.txt
/usr/share/doc/syslinux-4.05/memdisk.txt
/usr/share/doc/syslinux-4.05/menu.txt
/usr/share/doc/syslinux-4.05/pxelinux.txt
/usr/share/doc/syslinux-4.05/rfc5071.txt
/usr/share/doc/syslinux-4.05/sample
/usr/share/doc/syslinux-4.05/sample/Makefile
/usr/share/doc/syslinux-4.05/sample/m16-640x640-syslinux.jpg
/usr/share/doc/syslinux-4.05/sample/sample.msg
/usr/share/doc/syslinux-4.05/sample/syslinux_splash.jpg
/usr/share/doc/syslinux-4.05/sample/syslogo.lss
/usr/share/doc/syslinux-4.05/sample/syslogo.ppm.gz
/usr/share/doc/syslinux-4.05/sdi.txt
/usr/share/doc/syslinux-4.05/syslinux.txt
/usr/share/doc/syslinux-4.05/usbkey.txt
/usr/share/man/man1/gethostip.1.gz
/usr/share/man/man1/isohybrid.1.gz
/usr/share/man/man1/memdiskfind.1.gz
/usr/share/man/man1/syslinux.1.gz
/usr/share/man/man1/syslinux2ansi.1.gz
/usr/share/syslinux
/usr/share/syslinux/altmbr.bin
/usr/share/syslinux/altmbr_c.bin
/usr/share/syslinux/altmbr_f.bin
/usr/share/syslinux/cat.c32
/usr/share/syslinux/chain.c32
/usr/share/syslinux/cmd.c32
/usr/share/syslinux/config.c32
/usr/share/syslinux/cpuid.c32
/usr/share/syslinux/cpuidtest.c32
/usr/share/syslinux/diag
/usr/share/syslinux/diag/geodsp1s.img.xz
/usr/share/syslinux/diag/geodspms.img.xz
/usr/share/syslinux/diag/handoff.bin
/usr/share/syslinux/disk.c32
/usr/share/syslinux/dmitest.c32
/usr/share/syslinux/dosutil
/usr/share/syslinux/dosutil/copybs.com
/usr/share/syslinux/dosutil/eltorito.sys
/usr/share/syslinux/dosutil/mdiskchk.com
/usr/share/syslinux/elf.c32
/usr/share/syslinux/ethersel.c32
/usr/share/syslinux/gfxboot.c32
/usr/share/syslinux/gptmbr.bin
/usr/share/syslinux/gptmbr_c.bin
/usr/share/syslinux/gptmbr_f.bin
/usr/share/syslinux/gpxecmd.c32
/usr/share/syslinux/gpxelinux.0
/usr/share/syslinux/gpxelinuxk.0
/usr/share/syslinux/hdt.c32
/usr/share/syslinux/host.c32
/usr/share/syslinux/ifcpu.c32
/usr/share/syslinux/ifcpu64.c32
/usr/share/syslinux/ifplop.c32
/usr/share/syslinux/int18.com
/usr/share/syslinux/isohdpfx.bin
/usr/share/syslinux/isohdpfx_c.bin
/usr/share/syslinux/isohdpfx_f.bin
/usr/share/syslinux/isohdppx.bin
/usr/share/syslinux/isohdppx_c.bin
/usr/share/syslinux/isohdppx_f.bin
/usr/share/syslinux/isolinux-debug.bin
/usr/share/syslinux/isolinux.bin
/usr/share/syslinux/kbdmap.c32
/usr/share/syslinux/linux.c32
/usr/share/syslinux/ls.c32
/usr/share/syslinux/lua.c32
/usr/share/syslinux/mboot.c32
/usr/share/syslinux/mbr.bin
/usr/share/syslinux/mbr_c.bin
/usr/share/syslinux/mbr_f.bin
/usr/share/syslinux/memdisk
/usr/share/syslinux/memdump.com
/usr/share/syslinux/meminfo.c32
/usr/share/syslinux/menu.c32
/usr/share/syslinux/pcitest.c32
/usr/share/syslinux/pmload.c32
/usr/share/syslinux/poweroff.com
/usr/share/syslinux/pwd.c32
/usr/share/syslinux/pxechain.com
/usr/share/syslinux/pxelinux.0
/usr/share/syslinux/reboot.c32
/usr/share/syslinux/rosh.c32
/usr/share/syslinux/sanboot.c32
/usr/share/syslinux/sdi.c32
/usr/share/syslinux/sysdump.c32
/usr/share/syslinux/syslinux.com
/usr/share/syslinux/syslinux.exe
/usr/share/syslinux/syslinux64.exe
/usr/share/syslinux/ver.com
/usr/share/syslinux/vesainfo.c32
/usr/share/syslinux/vesamenu.c32
/usr/share/syslinux/vpdtest.c32
/usr/share/syslinux/whichsys.c32
/usr/share/syslinux/zzjson.c32
#拷贝引导文件pxelinux.0到TFTP共享路径下
[root@localhost ~]# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
#查看是否拷贝过去
[root@localhost ~]# ls /var/lib/tftpboot/
pxelinux.0
#进入目录下
[root@localhost ~]# cd /mnt/centos
#查看目录下内容
[root@localhost centos]# 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 centos]# cd /mnt/centos/isolinux
#查看目录下内容
[root@localhost isolinux]# ls
boot.cat grub.conf isolinux.bin memtest TRANS.TBL vmlinuz
boot.msg initrd.img isolinux.cfg splash.png vesamenu.c32
套接字文件
#创建目录/var/lib/tftpboot/pxelinux.cfg
[root@localhost isolinux]# mkdir /var/lib/tftpboot/pxelinux.cfg
#把文件/mnt/centos/isolinux/isolinux.cfg拷贝到目录/var/lib/tftpboot/pxelinux.cfg/defaul,并改名为default
[root@localhost isolinux]# cp /mnt/centos/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
#查看是否拷贝成功
[root@localhost isolinux]# ls /var/lib/tftpboot/pxelinux.cfg/
default
#拷贝引导启动时的背景图片splash.png
[root@localhost isolinux]# ls /mnt/centos/isolinux
boot.cat grub.conf isolinux.bin memtest TRANS.TBL vmlinuz
boot.msg initrd.img isolinux.cfg splash.png vesamenu.c32
这个黑色的背景就是splash.png
#把目录 /mnt/centos/isolinux/下图片splash.png拷贝到目录/var/lib/tftpboot/下
[root@localhost isolinux]# cp /mnt/centos/isolinux/splash.png /var/lib/tftpboot/
#查看内核文件、驱动程序文件
[root@localhost isolinux]# ls /mnt/centos/isolinux/
boot.cat grub.conf isolinux.bin memtest TRANS.TBL vmlinuz
boot.msg initrd.img isolinux.cfg splash.png vesamenu.c32
vmlinuz(启动内核文件)
initrd.img(驱动程序文件)
vesamenu.c32(图形模块)
#拷贝内核文件、驱动文件、图形模块文件到TFTP共享路径下
[root@localhost isolinux]# cp /mnt/centos/isolinux/vmlinuz /var/lib/tftpboot
[root@localhost isolinux]# cp /mnt/centos/isolinux/initrd.img /var/lib/tftpboot
[root@localhost isolinux]# cp /mnt/centos/isolinux/vesamenu.c32 /var/lib/tftpboot
#查看文件是否拷贝成功
[root@localhost isolinux]# ls /var/lib/tftpboot
initrd.img pxelinux.0 pxelinux.cfg splash.png vesamenu.c32 vmlinuz
驱动文件 引导文件 菜单文件 背景图片 图形模块 内核文件
目录 套接字文件 二进制文件
#修改菜单文件default(包第65行后面的全部删掉,把第64行的inst.sage2=hd:LABEL=CentOS\x207\x20x86_64删掉)
[root@localhost isolinux]# vim /var/lib/tftpboot/pxelinux.cfg/default
52 menu color cmdline 0 #ffffffff #00000000 none
53
54 # Do not display the actual menu unless the user presses a key. All that is displayed is a timeout mes sage.
55
56 menu tabmsg Press Tab for full configuration options on menu items.
57
58 menu separator # insert an empty line
59 menu separator # insert an empty line
60
61 label linux
62 menu label ^Install CentOS 7
63 menu default
64 kernel vmlinuz
65 append initrd=initrd.img ks=nfs://192.168.0.92/mnt/ks.cfg
#inst.sage2=hd:LABEL=CentOS\x207\x20x86_64如果有u盘 、光盘安装,这一行不能删除,或许还要修改一下,使系统能识别到u盘等,否则无法安装。
66
#把tftp、dhcpd这两服务重启一下
[root@localhost isolinux]# systemctl restart tftp
[root@localhost isolinux]# systemctl restart dhcpd
[root@localhost isolinux]# systemctl restart nfs-server
部署nfs服务共享镜像所有内容(把ISO映像文件放在nfs服务共享目录下)
#安装nfs-utils软件包
[root@localhost isolinux]# yum -y install nfs-utils
#激活nfs-server服务
[root@localhost isolinux]# systemctl start nfs-server
[root@localhost isolinux]# systemctl enable nfs-server
Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.
#查看nfs-server服务的状态
[root@localhost ~]# systemctl status nfs-server
#挂载镜像内容
[root@localhost isolinux]# mount /dev/cdrom /mnt/centos
mount: /dev/sr0 is write-protected, mounting read-only
#查看
[root@localhost isolinux]# ls /mnt/centos
CentOS_BuildTag EULA images LiveOS repodata RPM-GPG-KEY-CentOS-Testing-7
EFI GPL isolinux Packages RPM-GPG-KEY-CentOS-7 TRANS.TBL
#nfs-server服务的配置文件中,指定共享目录/mnt
[root@localhost ~]# vim /etc/exports
/mnt 192.168.0.0/24(no_root_squash,rw)
#在共享目录/mnt下创建目录local
[root@localhost ~]# mkdir /mnt/local
#把映像文件中的内容全部复制到/mnt/local/目录下
[root@localhost ~]# cp -rf /mnt/centos/* /mnt/local/
[root@localhost ~]# ls /mnt/local
CentOS_BuildTag EULA images LiveOS repodata RPM-GPG-KEY-CentOS-Testing-7
EFI GPL isolinux Packages RPM-GPG-KEY-CentOS-7 TRANS.TBL
作用:在安装系统时自动选择语言、时区、分区等之类的
#安装软件包system-config-kickstart
[root@localhost ~]# yum -y install system-config-kickstart
#执行命令
[root@localhost ~]# system-config-kickstart
执行上面的命令后,“软件包选择”位置要出现下图内容。
但是运行后在“软件包选择”选项中,没有发现任何内容,如下图所示;这是什么原因?
解决方法:
把本机yum源的名称从local改为development,再运行命令就正常了。
[root@localhost ~]# vim /etc/yum.repos.d/local.repo
[development] #一定要使用development这个名字
name=local_centos
baseurl=file:///mnt/centos
enabled=1
gpgcheck=0
开始配置
第一步:
第二步:
配置安装方式:所有映像文件在FTP服务器中,目录为nfs://192.168.0.92/mnt/local
第三步:
第四步:
第五步:
第六步:
第七步:
第八步:
第九步:
第十步:保存配置。保存在root目录下,命令为ks.cfg
#查看root目录下是否有ks.cfg这个应答文件
[root@localhost ~]# ls /root
20240515212034.png Desktop Downloads ks.cfg Pictures Templates
anaconda-ks.cfg Documents initial-setup-ks.cfg Music Public Videos
#把这个应答文件放到/mnt/这个共享目录下,因为这个文件是给客户端服务器看的,它们要按照这个配置文件装机。
[root@localhost ~]# cp /root/ks.cfg /mnt/
[root@localhost ~]# ls /mnt/
local ks.cfg
下面红色部分不要:
#修改文件的权限
[root@localhost ~]# chmod 755 /var/ftp/pub/ks.cfg
#查看文件的权限
[root@localhost ~]# ls -lh /var/ftp/pub/ks.cfg
-rwxr-xr-x 1 root root 966 May 21 11:19 /var/ftp/pub/ks.cfg
#修改这个菜单文件。
[root@localhost ~]# vim /var/lib/tftpboot/pxelinux.cfg/default
default vesamenu.c32
timeout 60 #读秒,把600改为60即6秒。
……
label linux
menu label ^Install CentOS 7
menu default #6秒后,直接安装系统;要加入这一行,否则启动后一直停在菜单界面。
kernel vmlinuz
append initrd=initrd.img ks=http://192.168.0.92/mnt/ks.cfg #增加这一行,指定这个ks.cfg应答文件
#重启下面3个服务
[root@localhost ~]# systemctl restart dhcpd
[root@localhost ~]# systemctl restart tftp
[root@localhost ~]# systemctl restart nfs-server
#验证:
新建一台虚拟机,安装方式选择 "网络引导安装(PXE)"
网络类型选择"private1"
内存必须2G以上
在VMware Workstation中添加一台虚拟机,然后开机,验证是否安装。如果是物理机的话,需要先进入BIOS设置客户机为从网卡启动,然后保存退出。
注意点:
1.客户机需要通过BIOS设置为从网卡启动,因为安装前还没有其他设备,所以也可不设置;
2.虚拟机的内存设置2G以上,否则会报错No space left on device
3.客户机和服务器要能够通信
4.SELinux与防火墙单独设置
5.default和cfg文件说明