PXE安装系统(X86的系统)
什么是PXE
PXE(Pre-boot Execution Environment,预启动执行环境)是由Intel公司开发的最新技术,工作于Client/Server的网络模式,支持工作站通过网络从远端服务器下载映像,并由此支持通过网络启动操作系统,在启动过程中,终端要求服务器分配IP地址,再用TFTP(trivial file transfer protocol)或MTFTP(multicast trivial file transfer protocol)协议下载一个启动软件包到本机内存中执行,由这个启动软件包完成终端基本软件设置,从而引导预先安装在服务器中的终端操作系统。
严格来说,PXE 并不是一种安装方式,而是一种引导方式。进行 PXE 安装的必要条件是在要安装的计算机中必须包含一个 PXE 支持的网卡(NIC),即网卡中必须要有 PXE Client。PXE 协议可以使计算机通过网络启动。此协议分为 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 上下载所需的文件了。
PXE工作流程
1. PXE Client 从自己的PXE网卡启动,向本网络中的DHCP服务器索取IP;
2. DHCP 服务器返回分配给客户机的IP 以及PXE文件的放置位置(该文件一般是放在一台TFTP服务器上) ;
3. PXE Client 向本网络中的TFTP服务器索取pxelinux.0 文件;
4. PXE Client 取得pxelinux.0 文件后之执行该文件;
5. 根据pxelinux.0 的执行结果,通过TFTP服务器加载内核和文件系统;
6. 进入安装画面, 此时可以通过选择HTTP、FTP、NFS 方式之一进行安装;
开始部署
环境介绍
[root@master ~]# cat /etc/redhat-release CentOS Linux release 7.8.2003 (Core) [root@master ~]# uname -r 3.10.0-1127.el7.x86_64 [root@master ~]# uname -m x86_64 [root@master ~]# ifconfig eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 10.0.0.60 netmask 255.255.255.0 broadcast 10.0.0.255 inet6 fe80::20c:29ff:fe44:15d7 prefixlen 64 scopeid 0x20<link> ether 00:0c:29:44:15:d7 txqueuelen 1000 (Ethernet) RX packets 19278 bytes 24593071 (23.4 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 6365 bytes 478120 (466.9 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.1.60 netmask 255.255.255.0 broadcast 192.168.1.255 inet6 fe80::20c:29ff:fe44:15e1 prefixlen 64 scopeid 0x20<link> ether 00:0c:29:44:15:e1 txqueuelen 1000 (Ethernet) RX packets 60890 bytes 3685732 (3.5 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 260684 bytes 389641148 (371.5 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> loop txqueuelen 1000 (Local Loopback) RX packets 108 bytes 5724 (5.5 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 108 bytes 5724 (5.5 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
安装DHCP服务
[root@master ~]# yum install dhcp -y [root@master ~]# vim /etc/dhcp/dhcpd.conf subnet 192.168.1.0 netmask 255.255.255.0 { range 192.168.1.100 192.168.1.200; #可分配的起始IP-结束IP option subnet-mask 255.255.255.0; #设定netmask default-lease-time 21600; #设置默认的IP租用期限 max-lease-time 43200; #设置最大的IP租用期限 next-server 192.168.1.60; #告知客户端TFTP服务器的ip filename "pxelinux.0"; } [root@master ~]# systemctl start dhcpd
安装TFTP
[root@master ~]# yum -y install tftp-server xinetd [root@master ~]# vim /etc/xinetd.d/tftp disable = no #将原先的disable = yes更改为disable = no [root@master ~]# systemctl start xinetd.service
引导配置
Syslinux是一个功能强大的引导加载程序,而且兼容各种介质。SYSLINUX是一个小型的Linux操作系统,它的目的是简化首次安装Linux的时间,并建立修护或其它特殊用途的启动盘。如果没有找到pxelinux.0这个文件,可以安装一下。
[root@master ~]# yum -y install syslinux [root@master ~]# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/ [root@master ~]# cd /var/lib/tftpboot/ 切换到站点中查看 [root@master tftpboot]# ll total 28 -rw-r--r-- 1 root root 26759 2021-03-03 21:36 pxelinux.0 [root@master tftpboot]# mount /dev/cdrom /mnt/ [root@master tftpboot]# cd /mnt/images/pxeboot/ [root@master pxeboot]# cp initrd.img vmlinuz /var/lib/tftpboot/ [root@master pxeboot]# mkdir /var/lib/tftpboot/pxelinux.cfg [root@master tftpboot]# cd /var/lib/tftpboot/pxelinux.cfg [root@master pxelinux.cfg]# touch default [root@master pxelinux.cfg]# cd /mnt/ [root@master mnt]# cd isolinux/ [root@master isolinux]# cp isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default [root@master isolinux]# cp * /var/lib/tftpboot/
新建虚拟机通过网络启动
kickstart实现无人值守
Kickstart是一种无人值守的安装方式。它的工作原理是在安装过程中记录人工干预填写的各种参数,并生成一个名为ks.cfg的文件。如果在自动安装过程中出现要填写参数的情况,安装程序首先会去查找ks.cfg文件,如果找到合适的参数,就采用所找到的参数;如果没有找到合适的参数,便会弹出对话框让安装者手工填写。所以,如果ks.cfg文件涵盖了安装过程中所有需要填写的参数,那么安装者完全可以只告诉安装程序从何处下载ks.cfg文件,然后就去忙自己的事情。等安装完毕,安装程序会根据ks.cfg中的设置重启/关闭系统,并结束安装。
创建ks.cfg文件,生成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配置文件。
[root@master ~]# yum -y install httpd [root@master ~]# mkdir /var/www/html/{centos,ks_config} [root@master ~]# mount /dev/cdrom /var/www/html/centos/ [root@master ~]# systemctl start httpd.service
浏览器测试一下(能访问接着往下走)
生成kickstart配置文件(这里我们找一台已经装好的系统拷贝anaconda-ks.cfg 修改修改)
[root@master ~]# cat anaconda-ks.cfg >/var/www/html/ks_config/ks.cfg [root@master ~]# egrep -v "^#" /var/www/html/ks_config/ks.cfg install auth --enableshadow --passalgo=sha512 url --url="http://192.168.1.60/centos/" text firstboot --enable ignoredisk --only-use=sda keyboard --vckeymap=us --xlayouts='us' lang en_US.UTF-8 network --bootproto=dhcp --device=link --onboot=yes network --hostname=localhost.localdomain rootpw --iscrypted $6$OugkG6HWAQL6yRRP$mIfoCTd7II7bDhEjOiOJ0z.jOy3gEvNkM5eZEzjwsOPGVjxDEkaqrtJgEPpRU3jZtXXCDgP/M9hMZz.ftCWki0 services --disabled="chronyd" timezone Asia/Shanghai --isUtc --nontp bootloader --location=mbr --boot-drive=sda clearpart --none --initlabel part /boot --fstype="xfs" --ondisk=sda --size=200 part pv.253 --fstype="lvmpv" --ondisk=sda --size=20279 volgroup centos --pesize=4096 pv.253 logvol swap --fstype="swap" --size=869 --name=swap --vgname=centos logvol / --fstype="xfs" --size=19403 --name=root --vgname=centos %packages @^minimal @compat-libraries @core @debugging @development %end [root@master ~]# vim /var/lib/tftpboot/pxelinux.cfg/default label linux ..... # 在linux后添加 label ks kernel vmlinuz append initrd=initrd.img ks=http://192.168.1.60/ks_config/ks.cfg
关于ks.cfg文件说明
- 命令段
- 键盘类型,语言,安装方式等系统的配置,有必选项和可选项,如果缺少某项必选项,安装时会中断并提示用户选择此项的选项
- 软件包段
%packages
@groupname:指定安装的包组
package_name:指定安装的包
-package_name:指定不安装的包
在安装过程中默认安装的软件包,安装软件时会自动分析依赖关系。
- 脚本段(可选)
%pre:安装系统前执行的命令或脚本(由于只依赖于启动镜像,支持的命令很少)
%post:安装系统后执行的命令或脚本(基本支持所有命令)
install | 告知安装程序,这是一次全新安装,而不是升级upgrade 。 |
url --url=" " |
通过FTP 或HTTP 从远程服务器上的安装树中安装。url --url="http://10.0.0.60/CentOS7/" url --url ftp://<username>:<password>@<server>/<dir> |
nfs |
从指定的NFS 服务器安装。nfs --server=nfsserver.example.com --dir=/tmp/install-tree |
text |
使用文本模式安装。 |
lang |
设置在安装过程中使用的语言以及系统的缺省语言。lang en_US.UTF-8 |
keyboard |
设置系统键盘类型。keyboard us |
zerombr |
清除mbr 引导信息。 |
bootloader |
系统引导相关配置。bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet" --location= ,指定引导记录被写入的位置.有效的值如下:mbr (缺省),partition (在包含内核的分区的第一个扇区安装引导装载程序)或none (不安装引导装载程序)。--driveorder ,指定在BIOS 引导顺序中居首的驱动器。--append= ,指定内核参数.要指定多个参数,使用空格分隔它们。 |
network |
为通过网络的kickstart 安装以及所安装的系统配置联网信息。network --bootproto=dhcp --device=eth0 --onboot=yes --noipv6 --hostname=CentOS6 --bootproto=[dhcp/bootp/static] 中的一种,缺省值是dhcp 。bootp 和dhcp 被认为是相同的。static 方法要求在kickstart 文件里输入所有的网络信息。network --bootproto=static --ip=10.0.0.100 --netmask=255.255.255.0 --gateway=10.0.0.2 --nameserver=10.0.0.2 请注意所有配置信息都必须在一行上指定,不能使用反斜线来换行。 --ip= ,要安装的机器的IP 地址.--gateway= ,IP地址格式的默认网关.--netmask= ,安装的系统的子网掩码.--hostname= ,安装的系统的主机名.--onboot= ,是否在引导时启用该设备.--noipv6= ,禁用此设备的IPv6 .--nameserver= ,配置dns 解析. |
timezone |
设置系统时区。timezone --utc Asia/Shanghai |
authconfig |
系统认证信息。authconfig --enableshadow --passalgo=sha512 设置密码加密方式为 sha512 启用shadow 文件。 |
rootpw |
root 密码 |
clearpart |
清空分区。clearpart --all --initlabel --all 从系统中清除所有分区,--initlable 初始化磁盘标签 |
part |
磁盘分区。part /boot --fstype=ext4 --asprimary --size=200 part swap --size=1024 part / --fstype=ext4 --grow --asprimary --size=200 --fstype= ,为分区设置文件系统类型.有效的类型为ext2 ,ext3 ,swap 和vfat 。--asprimary ,强迫把分区分配为主分区,否则提示分区失败。--size= ,以MB 为单位的分区最小值.在此处指定一个整数值,如500 .不要在数字后面加MB 。--grow ,告诉分区使用所有可用空间(若有),或使用设置的最大值。 |
firstboot |
负责协助配置redhat一些重要的信息。firstboot --disable |
selinux |
关闭selinux 。selinux --disabled |
firewall |
关闭防火墙。firewall --disabled |
logging |
设置日志级别。logging --level=info |
reboot |
设定安装完成后重启,此选项必须存在,不然kickstart显示一条消息,并等待用户按任意键后才重新引导,也可以选择halt 关机。 |
新建虚拟机测试
已经开始安装了(安装完成后root密码为123456)
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现
2020-03-03 django model中给密码字段加密