目录
PXE
PXE(Preboot execute environment,预启动执行环境)是目前主流的无盘启动技术,它可以使计算机通过网络而不是从本地硬盘或光驱等设备启动。
PXE 采用 C/S 架构,支持 Client 通过网络从远端 Server 下载操作系统映像,并由此支持通过网络启动操作系统。利用 PXE 进行网络安装的前提是待安装服务器具有支持 PXE 的网卡和主板 BIOS,实际上现在的网卡一般都内嵌支持 PXE 的 ROM 芯片。
iPXE 是 PXE 的扩展版,支持更多的协议,兼容性更好,不挑网卡,支持 HTTP 协议,可以通过 HTTP、ISCSI SAN、FC SAN 等方式启动。iPXE 的官方网站:http://ipxe.org/
PXE 的运行原理
当进行操作系统引导时,BIOS 首先会把 PXE Client 调入内存中执行。PXE Client 被载入内存后,它便同时具有 DHCP Client 和 TFTP Client 的功能,DHCP Client 会向 DHCP Server 请求 IP 分配给将要安装操作系统的终端主机,然后由 PXE Client 将放置在远端的启动软件包通过 TFTP(Trivial File Transfer Protocol)或 MTFTP(Multicast Trivial File Transfer Protocol)下载到本地内存中执行。由这个启动软件包完成终端的基本软件设置,从而引导预先安装在服务器中的终端操作系统。
PXE 还需要依赖 NBP(Network Bootstrap Program)技术。NBP 相当于网络版的 GRUB(Grand Unified Bootloader)或 LILO(Linux Loader),负责通过网络的方式将 OS Kernel 文件加载到主机内存中,以便 OS 可以通过网络进行引导安装。
PXE 的引导安装过程
- 远程主机开机启动网络启动,开机后会广播给 DHCP 服务器,分配给远程主机一个 IP 地址。
- 拿到 IP 地址后,远程主机向 Cobbler Server 发送请求下载 OS 启动文件。
- Cobbler Server 告诉远程主机 OS 文件的下载路径,包括 TFTP Server 的 IP 地址和端口等。
- 远程主机到 TFTP Server 下载 OS 引导文件。
- 远程主机执行 OS 引导文件,加载信息和 menu.c32,启动选择菜单,选择要安装的 OS,然后向 Cobbler Server 请求 kickstart 文件和OS 镜像文件。
- 远程主机加载 kickstart 文件,开始安装 OS。
Cobbler
Cobbler 是在 2008 年由 RedHat 发布的网络安装服务器软件项目,支持大多数 Linux 发行版,包括:Red Hat、Fedora、CentOS、Debian、Ubuntu 和 SuSE,也支持网络安装 Windows。Cobbler 的最终目的是实现无需进行人工干预即可安装主机操作系统
PXE 是由 Intel 开发的技术,支持通过网络来启动操作系统,也可以实现通过网络来批量的安装操作系统。
Cobbler 正是基于 PXE 的二次封装,将多种安装参数封装到一个菜单当中,使用简单的命令即可完成 PXE 网络安装环境的配置,同时还可以管理 DHCP、DNS、TFTP、RSYNC 以及 YUM 仓库、构造系统 ISO 镜像等。Cobbler 通过将 DHCP、TFTP、DNS、HTTP 等服务进行集成,构建了一个中央管理节点。另外,PXE 只支持 MBR 而不支持 UEFI,Cobbler 则同时支持 MBR 和 UEFI。
Cobbller 还提供了 CLI 和 WEB 两种安装方式,使用起来更加的友好。
cobbler check
cobbler list
cobbler report
cobbler sync
cobbler reposync
cobbler distro
cobbler distro list
cobbler system
cobbler profile
cobbler profile list
Cobbler 的工作原理
Server:
- 启动 Cobbler 服务进程。
- 执行 cobbler check 错误检查。
- 执行 cobbler sync 同步更新。
- 复制 OS 相关启动文件文件到 TFTP 目录中。
- 启动 DHCP 服务。
- DHCP 服务分配 IP 地址。
- TFTP 服务传输 OS 启动文件。
- Server 接收到 OS 安装请求。
- Server 发送 ISO 镜像与 Kickstart 文件。
Client:
- Client 以 PXE 方式启动。
- DHCP Client 获取到 IP 地址。
- TFTP Client 获取启动 OS 文件。
- 进入 Cobbler 安装选择界面。
- Client 确定加载信息。
- 根据配置信息准备安装 OS。
- 加载 Kickstart 文件。
- 传输 OS 安装的相关文件。
- 进行安装系统。
安装 Cobbler
$ systemctl disable firewalld.service && systemctl stop firewalld.service && systemctl status firewalld.service
$ sudo setenforce 0
$ sudo sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
$ yum install epel-release -y
$ yum install cobbler cobbler-web -y
$ yum install dhcp -y
$ yum install tftp-server xinetd -y
$ yum install httpd -y
$ yum install pykickstart -y
$ systemctl enable tftp && systemctl start tftp && systemctl status tftp
$ systemctl enable xinetd && systemctl start xinetd && systemctl status xinetd
$ systemctl enable httpd && systemctl start httpd && systemctl status httpd
$ systemctl enable rsyncd && systemctl start rsyncd && systemctl status rsyncd
$ systemctl enable cobblerd && systemctl start cobblerd && systemctl status cobblerd
配置 Cobbler
$ sed -i 's%^server: 127.0.0.1%server: 192.168.1.253%g' /etc/cobbler/settings
$ sed -i 's%^next_server: 127.0.0.1%next_server: 192.168.1.253%g' /etc/cobbler/settings
$ openssl passwd -1 <your-password-here>
$1$IIOrD77Q$LLsUPbSkOkE9g7F218SCU1
$ sed -i 's%^default_password_crypted.*%default_password_crypted: "$1$IIOrD77Q$LLsUPbSkOkE9g7F218SCU1"%g' /etc/cobbler/settings
$ sed -i 's%manage_dhcp: 0%manage_dhcp: 1%g' /etc/cobbler/settings
$ sed -i 's%manage_rsync: 0%manage_rsync: 1%g' /etc/cobbler/settings
$ vi /etc/cobbler/dhcp.template
...
subnet 192.168.1.0 netmask 255.255.255.0 {
option routers 192.168.1.1;
option domain-name-servers 114.114.114.114;
option subnet-mask 255.255.255.0;
range dynamic-bootp 192.168.1.200 192.168.1.250;
default-lease-time 21600;
max-lease-time 43200;
next-server $next_server;
...
$ vim /etc/xinetd.d/tftp
...
disable=no
$ systemctl restart xinetd.service
$ netstat -anplut | grep :69
udp 0 0 0.0.0.0:69 0.0.0.0:* 2672/xinetd
udp6 0 0 :::69 :::* 1/systemd
$ cobbler check
The following are potential configuration items that you may want to fix:
1 : Some network boot-loaders are missing from /var/lib/cobbler/loaders. 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.
2 : debmirror package is not installed, it will be required to manage debian deployments and repositories
3 : fencing tools were not found, and are required to use the (optional) power management features. install cman or fence-agents to use them
$ yum install syslinux -y
$ cp /usr/share/syslinux/pxelinux.0 /var/lib/cobbler/loaders/
$ cp /usr/share/syslinux/menu.c32 /var/lib/cobbler/loaders/
$ ls /var/lib/cobbler/loaders/
menu.c32 pxelinux.0
$ yum install debmirror -y
$ vi /etc/debmirror.conf
...
$ yum install fence-agents -y
$ cobbler check
$ systemctl restart cobblerd
$ cobbler sync
制作 OS Distro 引导选项
定义和设置 OS 系统发行版本,包含了 OS 的内核、引导文件,以及安装包等内容,就相当于一个 Linux 操作系统的 ISO 镜像。如:多个发行版本,同一发行版不同版本号。
制作 CentOS7 的 OS Distro
$ mkdir /mnt/centos7
$ mount -t iso9660 -o loop CentOS-7-x86_64-Minimal-2003.iso /mnt/centos7
$ vi /etc/fstab
...
/root/CentOS-7-x86_64-Minimal-2003.iso /mnt/centos7 iso9660 defaults,loop 0 0
$ cobbler import --path=/mnt/centos7 --name=centos7 --arch=x86_64
$ cobbler distro report
Name : centos7-x86_64
Architecture : x86_64
TFTP Boot Files : {}
Breed : redhat
Comment :
Fetchable Files : {}
Initrd : /var/www/cobbler/ks_mirror/centos7/images/pxeboot/initrd.img
Kernel : /var/www/cobbler/ks_mirror/centos7/images/pxeboot/vmlinuz
Kernel Options : {}
Kernel Options (Post Install) : {}
Kickstart Metadata : {'tree': 'http://@@http_server@@/cblr/links/centos7-x86_64'}
Management Classes : []
OS Version : rhel7
Owners : ['admin']
Red Hat Management Key : <<inherit>>
Red Hat Management Server : <<inherit>>
Template Files : {}
$ ll /var/www/cobbler/ks_mirror/centos7
...
-rw-rw-r--. 1 root root 14 4月 20 2020 CentOS_BuildTag
drwxr-xr-x. 3 root root 35 4月 20 2020 EFI
-rw-rw-r--. 1 root root 227 8月 30 2017 EULA
-rw-rw-r--. 1 root root 18009 12月 9 2015 GPL
drwxr-xr-x. 3 root root 57 4月 20 2020 images
drwxr-xr-x. 2 root root 198 4月 20 2020 isolinux
drwxr-xr-x. 2 root root 43 4月 20 2020 LiveOS
drwxr-xr-x. 2 root root 28672 4月 21 2020 Packages
drwxrwxr-x. 2 root root 4096 4月 21 2020 repodata
-rw-rw-r--. 1 root root 1690 12月 9 2015 RPM-GPG-KEY-CentOS-7
-rw-rw-r--. 1 root root 1690 12月 9 2015 RPM-GPG-KEY-CentOS-Testing-7
-r--r--r--. 1 root root 2883 4月 21 2020 TRANS.TBL
$ tree /var/lib/tftpboot/
/var/lib/tftpboot/
├── boot
│ └── grub
│ └── menu.lst
├── elilo.efi
├── etc
├── grub
│ ├── efidefault
│ ├── grub-0.97-x86_64.efi
│ ├── grub-0.97-x86.efi
│ └── images -> ../images
├── images
│ └── centos7-x86_64
│ ├── initrd.img
│ └── vmlinuz
├── images2
├── memdisk
├── menu.c32
├── ppc
├── pxelinux.0
├── pxelinux.cfg
│ └── default
├── s390x
│ └── profile_list
└── yaboot
$ cd /var/lib/cobbler/kickstarts/
$ cp /root/anaconda-ks.cfg centos7.cfg
$ cat centos7.cfg
auth --enableshadow --passalgo=sha512
url --url=$tree
reboot
text
firstboot --enable
ignoredisk --only-use=vda
keyboard --vckeymap=us --xlayouts='us'
lang en_US.UTF-8
network --hostname=localhost.localdomain
rootpw --iscrypted $6$SjBydDw0Xikc834h$X49cIZb66TZvw/g1chkoS9Jwd8c3Zk03TAPZTRIq.lHg7RWwVcmhyBEM5ms5YmGxu3gJPTbNQRKG1.x2Un.P7/
services --enabled="chronyd"
timezone Asia/Shanghai --isUtc --nontp
bootloader --append=" crashkernel=auto" --location=mbr --boot-drive=vda
zerombr
clearpart --all
autopart
%packages
@^minimal
@core
chrony
kexec-tools
%end
%addon com_redhat_kdump --enable --reserve-mb='auto'
%end
%anaconda
pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notempty
pwpolicy user --minlen=6 --minquality=1 --notstrict --nochanges --emptyok
pwpolicy luks --minlen=6 --minquality=1 --notstrict --nochanges --notempty
%end
$ cobbler distro list
centos7-x86_64
$ cobbler profile add \
--name=centos7-x86_64 \
--distro=centos7-x86_64 \
--kickstart=/var/lib/cobbler/kickstarts/centos7.cfg
$ cobbler profile list
centos7-x86_64
Name : centos7-x86_64
TFTP Boot Files : {}
Comment :
DHCP Tag : default
Distribution : centos7-x86_64
Enable gPXE? : 0
Enable PXE Menu? : 1
Fetchable Files : {}
Kernel Options : {}
Kernel Options (Post Install) : {}
Kickstart : /var/lib/cobbler/kickstarts/centos7.cfg
Kickstart Metadata : {}
Management Classes : []
Management Parameters : <<inherit>>
Name Servers : []
Name Servers Search Path : []
Owners : ['admin']
Parent Profile :
Internal proxy :
Red Hat Management Key : <<inherit>>
Red Hat Management Server : <<inherit>>
Repos : []
Server Override : <<inherit>>
Template Files : {}
Virt Auto Boot : 1
Virt Bridge : xenbr0
Virt CPUs : 1
Virt Disk Driver Type : raw
Virt File Size(GB) : 5
Virt Path :
Virt RAM (MB) : 512
Virt Type : xenpv
测试
使用 VM 环境来进行测试。
|