本篇主要包含以下内容:
PXE 概述
Preboot Execution Environment 远程预启动执行环境,就是使计算机通过网络启动。
要达成 PXE 必须要有两个环节:
- 客户端的网卡必须要支持 PXE 用户端功能,并且开机时选择从网卡启动,这样系统才会以网卡进入 PXE 客户端的程序
- PXE 服务器必须要提供至少含有 DHCP 以及 TFTP 的服务
- DHCP 服务必须要能够提供客户端的网络参数,还要告知客户端 TFTP 所在的位置;
- TFTP 则提供客户端的
boot loader
及kernel file
下载路径。
可选的其他服务:NFS、FTP、HTTP 等
完整的 PXE 交互过程:
- Client 向 DHCP 发送 IP 地址请求消息,DHCP 检测 Client 是否合法(主要是检测 Client 的网卡 MAC 地址),如果合法则返回 Client 的 IP 地址,同时将启动文件 pxelinux.0 的位置信息一并传送给 Client
- Client 向 TFTP 发送获取 pxelinux.0 请求消息,TFTP 接收到消息之后再向 Client 发送 pxelinux.0 大小信息,试探 Client 是否满意,当 TFTP 收到 Client 发回的同意大小信息之后,正式向 Client 发送 pxelinux.0,Client 接收并执行 pxelinux.0 文件
- Client 向 TFTP Server 发送获取针对本机的配置信息文件的请求(在 TFTP 服务的 pxelinux.cfg 目录下,这是系统菜单文件,格式和 isolinux.cfg 格式一样,功能也是类似),TFTP 将配置文件发回 Client,继而 Client 根据配置文件执行后续操作。
- Client 向 TFTP 发送 Linux 内核请求信息,TFTP 接收到消息之后将内核文件发送给 Client
- Client 向 TFTP 发送根文件请求信息,TFTP 接收到消息之后返回 Linux 根文件系统 Client 启动 Linux 内核
- Client 从 FTP 或 HTTP 下载安装源文件,读取自动化安装脚本
引用自Cobbler 原理解析
Kickstart
Kickstart 概述
Kickstart 是通过自动应答文件,将安装系统过程中手动设置的语言、密码、网络等参数自动设置。
Kickstart 文件有三种生成方式:
- 手动书写
system-config-kickstart
图形化配置- 红帽系系统自带的
Anaconda
生成
Kickstart 准备
服务分工介绍:
- DHCP:为安装的新主机分配 IP 地址
- TFTP:仅仅提供引导文件
- VSFTP|HTTP|NFS:提供系统镜像中所有文件,然后会根据 Kickstart 文件自动选择要安装的软件,并配置
防止访问出现错误,先将 selinux 设为 Permissive。setenforce 0
DHCP 配置
首先配置 DHCP 服务。yum install dhcp
修改配置文件/etc/dhcp/dhcpd.conf
# 日志级别 |
重新加载并设置开机自启systemctl restart dhcpd
systemctl enable dhcpd
若开启了防火墙应该放行服务
firewall-cmd --permanent --add-service=dhcp |
TFTP 配置
配置 TFTP 服务,首先需要安装xinetd
服务,因为 TFTP 是被 Xinetd 动态管理的服务。yum install xinetd tftp-server
修改配置文件/etc/xinetd.d/tftp
service tftp |
重启 Xinted 服务systemctl restart xinetd.service
通过查看服务是否开启 |
若开启了防火墙,需要放行服务和端口
firewall-cmd --permanent --add-service=tftp |
使用 VSFTP 搭建镜像源
安装 VSFTPD 服务yum install vsftpd
systemctl start vsftpd
systemctl enable vsftpd
将光盘镜像挂载在/var/ftp/pub
中。mount /dev/cdrom /var/ftp/pub
若开启了防火墙,应该放行端口和服务
firewall-cmd --permanent --add-port=20/tcp --add-port=21/tcp |
在浏览器中输入ftp://192.168.10.100
访问成功。
使用 HTTP 搭建镜像源
安装 HTTPD 服务yum install httpd
systemctl start httpd
systemctl enable httpd
将光盘镜像挂载在/var/www/html/centos7
上。mount /dev/cdrom /var/www/html/centos7
若开启了防火墙,应该放行端口和服务
firewall-cmd --permanent --add-port=80/tcp |
在浏览器中输入192.168.10.100/centos7
访问成功。
Syslinux 配置
安装 syslinux 服务
syslinux 是一个功能强大的引导加载程序,用于获取引导文件。yum install syslinux
将引导文件复制到 TFTP 主目录cp /usr/share/syslinux/pxelinux.0 /tftpboot
若要图形化菜单功能(仅仅是可以上下键切换,最好一起复制了),可将/usr/share/syslinux
中的menu.32
或vesamenu.c32
复制到/tftpboot
。这里就复制vesamenu.c32
,比menu.32
更好。
并在/tftpboot
中创建目录pxelinux.cfg
用于存放默认开机选项,并在该目录中创建default
文件
创建存放 CentOS7 内核文件的目录mkdir /tftpboot/centos7
,并将挂载镜像目录/var/ftp/pub/isolinux/
中vmlinuz
和initrd.img
两个内核文件复制到该目录中。cp /var/ftp/pub/isolinux/{vmlinuz,initrd.img} /tftpboot/centos7/
最好将isolinux
目录下的isolinux.cfg
也复制过去,该文件提供了开机选项,可以以它作为修改开机选项和菜单的模板。可以直接将内容拷贝过去,cat /var/ftp/pub/isolinux/isolinux.cfg > /tftpboot/pxelinux.cfg/default
。
default
即isolinux.cfg
简单解析
default vesamenu.c32 # 必须指定,填/tftpboot中复制的图形化文件 |
整个/tftpboot
的目录结构如下
/tftpboot/ |
网络安装试验
做这个实验时,要先修改/tftpboot/pxelinux.cfg/default
找到以下内容 |
创建一个新的虚拟机,不指定镜像。
进入虚拟机的 BIOS 设置
进入 Boot 菜单,通过-
或+
改变启动顺序,将Network boot from Intel E1000
移到最上面。
保存退出,会自动启动主机,通过网络读取 FTP 镜像源。
最后进入图形化安装界面
Kickstart 配置
手动配置
首先创建ks.cfg
,存放在/var/ftp/ks_config
(FTP 源)或/var/www/html/centos/ks_config
(HTTP 源)。
修改/tftpboot/pxelinux.cfg/default
仍然找到这段内容,修改initrid后的内容 |
在主目录中有系统自动创建的anaconda-ks.cfg
,可以此为模板。在图像化配置安装时就是向该文件中添加配置,直到点击安装时,安装程序就会根据该配置文件安装。
anaconda-ks.cfg
简单解析
分为三个部分: |
注:
%addon
、%anaconda
、%packages
、%onerror
、%pre
、%post
必须以%end
结尾
官方并不建议手工创建 kickstart 文件,因为太过复杂,且容易出错。因此,可通过system-config-kickstart
图形化工具快速生成 kickstart 文件。
system-config-kickstart 配置
需要安装该工具yum install system-config-kickstart
打开工具后,按照以下界面配置即可。
若需要修改,则直接打开修改即可。若图形化无法添加安装软件包,就在生成的ks.cfg
中添加。最终修改后的ks.cfg
文件如下
install |
再次进行安装,进入下面画面时,发现配置已根据 kickstart 文件填写完成。
Cobbler
Cobbler 与 Kickstart 类似,是一个 Linux 服务器快速网络安装的服务,可以通过 PXE 快速安装、重装物理服务器和虚拟机。基于 Python 开发,支持命令行管理、web 界面管理、提供 API 接口。可以管理 DHCP,DNS,TFTP、RSYNC 以及 yum 仓库、构造系统 ISO 镜像。
Cobbler 会在请求内核文件后,再请求 Kickstart 文件(即 ks.cfg)和 OS 镜像。然后 Cobbler 加载 Kickstart 文件并接收安装 OS 镜像。
Cobbler 常见术语:
- distro:发行版,相当于一个操作系统镜像,包含内核和 initrd 信息以及软件包等
- repository:保存一个 yum 或 rsync 存储库的镜像信息
- profile:配置文件,包含 distro、kickstart 文件和 repository 等信息,作用为了修改
/tftpboot/pxelinux.cfg/default
文件,每生成或修改一次 profile,都会在 default 文件中修改或追加对应的 label - system:目标系统,即要安装的主机,包含配置文件或镜像,IP 地址等信息
- image:系统镜像
system、image、repository 用的很少,主要用 distro 和 profile。
Cobbler 安装
仍然使用之前 Kickstart 的环境。必须关闭 selinux。
首先安装epel-release
,因为 Cobbler 位于 epel 源中。
然后安装 Cobbler 及其他工具程序yum install cobbler cobbler-web pykickstart
其中 cobbler-web 是 cobbler 的网页端配置工具,可不用安装。
pykickstart 是用于检查 kickstart 文件语法的工具
cobbler 的运行依赖于 dhcp、tftp、rsync 及 dns 服务,因此在现有环境下还要安装 rsync。yum install rsync
systemctl enable rsyncd
systemctl start rsyncd
systemctl enable cobblerd.service
systemctl start cobblerd.service
使用命令cobbler check
进行检查,对查出的错误一一解决。
1 : The 'server' field in /etc/cobbler/settings must be set to something other than localhost, |
这两个问题需要设置/etc/cobbler/settings
,修改以下内容:
# 将127.0.0.1修改为本机的IP地址 |
3 : Some network boot-loaders are missing from /var/lib/cobbler/loaders, you may run 'cobbler get-loaders' to download them, or, if you only want to handle x86/x86_64 netbooting, you may ensure that you have installed a *recent* version of the syslinux package installed and can ignore this message entirely. Files in this directory, should you want to support all architectures, should include pxelinux.0, menu.c32, elilo.efi, and yaboot. The 'cobbler get-loaders' command is the easiest way to resolve these requirements. |
问题是需要获取 bootloaders 文件,执行cobbler get-loaders
自动下载,但要求联网。也可复制,但需要的文件很多,有的不好找,最好直接执行命令。
4 : debmirror package is not installed, it will be required to manage debian deployments and repositories |
安装debmirror
软件包并将/etc/debmirror.conf
中的dists
和arches
注释。
#@dists="sid"; |
5 : The default password used by the sample templates for newly installed machines (default_password_crypted in /etc/cobbler/settings) is still set to 'cobbler' and should be changed, try: "openssl passwd -1 -salt 'random-phrase-here' 'your-password-here'" to generate new one |
需要使用 openssl 生成加密密码来取代默认的密码。
openssl passwd -1 -salt 'cobbler' '123456' |
6 : fencing tools were not found, and are required to use the (optional) power management features. install cman or fence-agents to use them |
安装cman
和fence-agents
,cman
可能会找不到这个包,但只安装fence-agents
就够了。
最后使用命令cobbler sync
应用调整的参数或重启cobblerd
服务,再执行一次cobbler check
检查,若还有错就继续排错,若没有错误就会显示No configuration problems found. All systems go.
Cobbler 默认管理 tftp 服务,默认不管理 dhcp,因此 tftp 的根目录变为/var/lib/tftpboot
。如果让 Cobbler 管理 DHCP,则 Cobbler 管理 DHCP 的模板文件/etc/cobbler/dhcp.template
会覆盖/etc/dhcp/dhcpd.conf
。
将光盘挂载到本地,mount /dev/cdrom /mnt/mirror
,然后执行cobbler import --name=CentOS7 --path=/mnt/mirror
生成 distro,从本地导入的过程实际上是将系统镜像中的文件复制到/var/www/cobbler/ks_mirror/CentOS7
中。在/var/www/cobbler/images
中也会生成一个CentOS7-x86_64
的目录,其中存放了initrd.img
和vmlinuz
文件。
然后,需要提供 kickstart 文件,这里继续使用 Kickstart 实验用的ks.cfg
文件,将文件移动到/var/lib/cobbler/kickstarts
中,并改名为CentOS7.ks
,需要修改以下内容。
#如果存在ignoredisk设置,一定要注释掉,cobbler编译时不支持此语法 |
在导入镜像生成 distro 的过程中,会自动生成一个 profile。使用cobbler profile list
查看。使用cobbler profile report --name=CentOS7-x86_64
查看 profile 信息。
# cobbler profile report --name=CentOS7-x86_64 |
需要通过cobbler profile edit --name=CentOS7-x86_64 --kickstart=/var/lib/cobbler/kickstarts/CentOS7.ks
修改。
最好再修改内核启动参数net.ifnames
和biosdevname
使网卡名为ethN
系列而不是用enoXXXXXX
随机名。cobbler profile edit --name=CentOS7-x86_64 --kopts="net.ifnames=0 biosdevname=0"
若要手动添加一个 profile,可使用cobbler profile add --name=XXX --distro=distro名 --kickstart=ks文件路径
。每添加一个 profile,就是在/var/lib/tftpboot/pxelinux.cfg/default
中添加一个 label,一个 label 就是开机启动时的引导选项。
LABEL CentOS7-x86_64 |
在配置完成后,执行cobbler sync
同步设置。
通过浏览器访问default
文件中ks
参数指定的 ks 文件路径,看是否能访问,若能显示文件内容,则配置没有问题。
重启xinetd
、cobblerd
、dhcpd
服务,以防配置未刷新。
仍然使用一台裸机进行安装,会自动进入安装界面。
使用 cobbler-web 图形化配置
如果开启了防火墙,需要放行 443 端口和 https 服务,因为 Cobbler 在 CentOS7 只支持 https。
在浏览器访问https://IP地址/cobbler_web
即可,输入账号密码,均为cobbler
。
首先进行镜像的导入,左侧菜单的Import DVD
选项配置。
菜单的Events
查看事件日志。
进入distros
配置,添加内核选项。也可以通过profiles
配置。
设置网卡名为 ethN 系列
修改或编写 ks 文件
也可进入菜单system
进行 system 配置。
参考文章
骏马金龙–无人值守 CentOS7 > kickstart 文件详解 > KICKSTART 无人值守安装 > Cobbler-自动化部署神器 > cobbler 无人值守批量安装 Linux 系统 > Cobbler 原理解析
Linux 就该这么学
Linux 运维之道(第二版)