简单网络引导安装 CentOS7
组件介绍
xinetd -- 对服务访问进行控制,这里主要是控制tftp
dhcp -- 动态分配IP
tftp-server -- 从服务器端下载pxelinux.0、default文件
syslinux -- 用于网络引导
httpd -- 在网络上提供安装源,也就是镜像文件中的内容
注:这里所有服务都运行在同一服务器中,IP地址为:192.168.22.10
安装配置组件
安装组件
# yum install xinetd dhcp tftp-server syslinux httpd
配置DHCP
# vim /etc/dhcp/dhcpd.conf
#
# DHCP Server Configuration file.
# see /usr/share/doc/dhcp*/dhcpd.conf.example
# see dhcpd.conf(5) man page
#
ddns-update-style none;
ignore client-updates;
default-lease-time 259200;
max-lease-time 518400;
option domain-name-servers 192.168.22.2;
subnet 192.168.22.0 netmask 255.255.255.0 {
range 192.168.22.101 192.168.22.110;
option routers 192.168.22.2;
option subnet-mask 255.255.255.0;
# the configuration for tftp-server
next-server 192.168.22.10;
# the configuration file for pxe boot
filename "pxelinux.0"; # 如果是UEFI模式,修改为“BOOTX64.EFI”
#filename "BOOTX64.EFI";
}
# systemctl start dhcpd.service
# systemctl enable dhcpd.service
配置TFTP
# vim /etc/xinetd.d/tftp
# default: off
# description: The tftp server serves files using the trivial file transfer \
# protocol. The tftp protocol is often used to boot diskless \
# workstations, download configuration files to network-aware printers, \
# and to start the installation process for some operating systems.
service tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /var/lib/tftpboot
disable = no # 将此值改为no,表明开启此服务
per_source = 11
cps = 100 2
flags = IPv4
}
# systemctl start xinetd.service
# systemctl start tftp.service
# ss -tunlp | grep xinetd
# ss -tunlp | grep tftp
配置HTTPD并准备安装文件
vmlinuz:可引导的、压缩的内核文件
initrd.img:包含一些模块和安装文件系统
# systemctl start httpd.service
# systemctl enable httpd.service
# mkdir /var/www/html/centos7
# mount /dev/sr0 /var/www/html/centos7
# mkdir /var/lib/tftpboot/centos7
# cp /var/www/html/centos7/images/pxeboot/initrd.img /var/lib/tftpboot/centos7/
# cp /var/www/html/centos7/images/pxeboot/vmlinuz /var/lib/tftpboot/centos7/
设置syslinux加载器
/usr/share/syslinux/menu.c32 文本模式
/usr/share/syslinux/vesamenu.c32 图形模式
/usr/share/syslinux/pxelinux.0
vesamenu.c32 和 menu.c32 是syslinux所拥有众多模块中的两个,它们的功能是指定启动器使用什么模式的背景。这里选择menu.c32,即文本模式。
pxelinux.0文件对整个引导器的作用就如同内核对系统的作用一般,它可以解释default文件(配置引导菜单的文件)中的每个配置项,并根据配置项做出不同的反应。如等待的时间、启动器背景、启动菜单、内核引导等等。
# cp /usr/share/syslinux/menu.c32 /var/lib/tftpboot
# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot
pxelinux.cfg目录:pxelinux被执行后,它会扫描该目录下是否存在指定的配置文件,如果存在,则引用被制定的配置文件。
default文件存放于pxelinux.cfg目录中,pxelinux程序最后扫描的配置文件名就是default。所以,我们经常把启动器配置项都写入该文件中。
所以我们就要建立pxelinux.cfg,并在此目录下建立default文件,编辑引导菜单。
# mkdir /var/lib/tftpboot/pxelinux.cfg
# vim /var/lib/tftpboot/pxelinux.cfg/default
default文件内容为:(BIOS引导模式)
default menu.c32
prompt 0
timeout 30
menu title ########## PXE Boot Menu ##########
label linux
menu label ^Install CentOS 7
kernel centos7/vmlinuz
append initrd=centos7/initrd.img repo=http://192.168.22.10/centos7 quiet
检查文件以及服务
此时/var/lib/tftp文件夹的结构应该是这样的:
/var/lib/tftpboot/
├── centos7
│ ├── initrd.img
│ └── vmlinuz
├── menu.c32
├── pxelinux.0
└── pxelinux.cfg
└── default
确保开启dhcpd、xinetd、tftp、http这些服务,在开启的时候没有发生错误,说明配置没问题。
验证httpd是否运行正常:http://192.168.22.10/centos7/
同时为了防止意外的发生我们需要关闭防火墙和selinux。
# systemctl stop firewalld.service
# systemctl enable firewalld.service
# setenforce 0
# vim /etc/selinux/config
...
SELINUX=permissive
...
测试
pxe服务器配置完成后,就可以在此子网中用网络引导安装了,此时和普通的安装系统差别不大,但是要选择从网络引导。
注意
如果服务器内存配置小于2GB,自动化安装会出现以下错误信息:
dracut-initqueue[629]: curl: (23) Failed writing body
相关Bug:
Bug 1595369 - rhel 7.5 installation fails with 1GB ram
https://bugzilla.redhat.com/show_bug.cgi?id=1595369
原文地址:https://www.cnblogs.com/varden/p/15179036.html
- 如何构建智能反垃圾邮件的WordPress插件
- 【深入研究】使用RNN预测股票价格系列一
- 【深入研究】使用RNN预测股票价格系列二
- 教你用一行Python代码实现并行(附代码)
- 在美国国会图书馆标题表的SKOS上运行Apache Spark GraphX算法
- 【精选】破解波动性突破实盘系统
- 从程序员的角度看神经网络的激活功能
- 在线矩阵微积分工具,可以生成 Python/Latex 代码哦!
- 机器学习应用区块链系列(一)——如何开发一套自己的智能合约系统
- 使用Botkit和Rasa NLU构建智能聊天机器人
- 【量化投资】缠论面面观(附Python源码)
- 独家 | 教你用Q学习算法训练神经网络玩游戏(附源码)
- 使用重采样评估Python中机器学习算法的性能
- Autofac正式发布2.1版
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Android 友盟第三方登录与分享的实现代码
- Android实现双击返回键退出应用实现方法详解
- [- 多媒体 -] OpenGLES3.0 接入视频实现特效 - 引言
- OpenLDAP集成sssd同步用户并集成SSH登录
- 【 FlutterUnit 食用指南】 开源篇
- Flutter中如何实现无Context跳转详解
- MySQL常见问题一
- Android WiFi热点开发的示例代码
- android实现简单计算器功能
- 【 Flutter Unit 解牛篇 】代码折叠展开面板,怎么没有线?
- Android自定义底部弹出框ButtomDialog
- Android使用SoundPool播放音效实例
- 安装OpenLDAP和客户端
- 【- Flutter 桌面篇 -】 FlutterUnit win版闪亮登场
- Android实现视频弹幕功能