Tổng quan về công nghệ PXE
PXE (Preboot Execution Environment) là giao thức khởi động qua mạng do Intel phát triển, hoạt động theo mô hình Client/Server. Công nghệ này cho phép máy khách (client) tải xuống image khởi động từ máy chủ từ xa và tiến hành cài đặt hệ điều hành mà không cần đến các thiết bị lưu trữ vật lý như USB hay đĩa CD.
Ưu điểm nổi bật
- Khả năng mở rộng: Hỗ trợ triển khai hệ điều hành cho hàng loạt máy chủ cùng lúc.
- Tự động hóa cao: Tích hợp cài đặt hệ thống và thiết lập các dịch vụ đi kèm.
- Triển khai từ xa: Loại bỏ hoàn toàn sự phụ thuộc vào phương tiện cài đặt vật lý.
Điều kiện tiên quyết
- Card mạng (NIC) của máy khách phải hỗ trợ chuẩn PXE (tích hợp BOOTROM) và BIOS/UEFI được cấu hình cho phép khởi động từ mạng (Network/LAN Boot).
- Hệ thống mạng phải có máy chủ DHCP để cấp phát IP động và trỏ đường dẫn đến file khởi động.
- Máy chủ TFTP (Trivial File Transfer Protocol) để cung cấp các file image khởi động.
- File ISO của hệ điều hành cần cài đặt.
Thiết lập máy chủ PXE trên CentOS 7
Máy chủ PXE sẽ đóng vai trò cung cấp dịch vụ TFTP, DHCP và kho chứa bộ cài đặt (Installation Source) để phân phối kernel, menu khởi động và các gói tin cài đặt cho máy khách.
1. Cấu hình dịch vụ TFTP
TFTP sử dụng giao thức UDP (port 69) để truyền tải các file dung lượng nhỏ. Trên CentOS, TFTP thường được quản lý bởi xinetd.
# Cài đặt các gói phần mềm cần thiết
yum install -y tftp-server xinetd
# Chỉnh sửa file cấu hình /etc/xinetd.d/tftp
# Đảm bảo các thông số sau được thiết lập:
# protocol = udp
# wait = no
# server_args = -s /var/lib/tftpboot
# disable = no
# Khởi động và kích hoạt dịch vụ
systemctl enable --now tftp xinetd
2. Thiết lập dịch vụ DHCP
DHCP chịu trách nhiệm cấp phát địa chỉ IP và thông báo cho máy khách biết địa chỉ của máy chủ TFTP cũng như tên file bootloader.
yum install -y dhcp
# Tạo file cấu hình từ template có sẵn
cp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf
Chỉnh sửa file /etc/dhcp/dhcpd.conf với nội dung tùy chỉnh:
ddns-update-style none;
next-server 172.16.10.5; # Địa chỉ IP của máy chủ TFTP
filename "pxelinux.0"; # Tên file bootloader
subnet 172.16.10.0 netmask 255.255.255.0 {
range 172.16.10.100 172.16.10.200; # Dải IP cấp phát
option routers 172.16.10.1; # Default Gateway
}
systemctl enable --now dhcpd
3. Chuẩn bị Kernel và Initrd
Trích xuất nhân Linux và file image khởi tạo từ bộ cài đặt ISO.
# Mount file ISO (giả sử ổ đĩa là /dev/cdrom)
mount /dev/cdrom /mnt
# Sao chép kernel và initrd vào thư mục gốc của TFTP
cp /mnt/images/pxeboot/{vmlinuz,initrd.img} /var/lib/tftpboot/
4. Cung cấp PXE Bootloader
Sử dụng gói syslinux để lấy file pxelinux.0.
yum install -y syslinux
cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
5. Thiết lập FTP Server làm kho chứa bộ cài
Sử dụng vsftpd để chia sẻ thư mục chứa bộ cài đặt CentOS.
yum install -y vsftpd
mkdir -p /var/ftp/repo-centos
# Sao chép toàn bộ dữ liệu từ ISO vào thư mục FTP
cp -a /mnt/* /var/ftp/repo-centos/
systemctl enable --now vsftpd
6. Tạo Menu khởi động (Boot Menu)
File cấu hình menu mặc định nằm tại /var/lib/tftpboot/pxelinux.cfg/default.
mkdir -p /var/lib/tftpboot/pxelinux.cfg
Nội dung file default:
default auto
prompt 0
label auto
menu label ^Install CentOS 7 (Graphical)
kernel vmlinuz
append initrd=initrd.img inst.repo=ftp://172.16.10.5/repo-centos
label text
menu label Install CentOS 7 (Text Mode)
kernel vmlinuz
append initrd=initrd.img inst.repo=ftp://172.16.10.5/repo-centos inst.text
# Tắt firewall và SELinux để tránh chặn kết nối trong quá trình thử nghiệm
systemctl stop firewalld
setenforce 0
Tích hợp Kickstart để cài đặt không cần can thiệp (Unattended Installation)
Để tự động hóa hoàn toàn quá trình cài đặt (bỏ qua các bước chọn ngôn ngữ, phân vùng ổ đĩa, đặt mật khẩu...), chúng ta sử dụng Kickstart. File cấu hình Kickstart (ks.cfg) sẽ chứa toàn bộ các câu trả lời cho trình cài đặt Anaconda.
1. Tạo file cấu hình ks.cfg
Bạn có thể dùng công cụ system-config-kickstart (giao diện đồ họa) hoặc tự viết file cấu hình. Dưới đây là một mẫu ks.cfg tối ưu cho môi trường server:
# Phiên bản Kickstart
install
url --url="ftp://172.16.10.5/repo-centos"
lang en_US.UTF-8
keyboard us
timezone Asia/Ho_Chi_Minh --isUtc
rootpw --iscrypted $6$randomsalt$encryptedpasswordhash
# Cấu hình mạng
network --bootproto=dhcp --device=eth0 --onboot=on --activate
network --hostname=node-local
# Phân vùng ổ đĩa
clearpart --all --initlabel
autopart --type=lvm
# Bootloader
bootloader --append="crashkernel=auto" --location=mbr --boot-drive=sda
# Tắt firewall và SELinux
firewall --disabled
selinux --disabled
# Khởi động lại sau khi cài đặt
reboot
# Các gói phần mềm cài đặt
%packages --nobase
@core
chrony
wget
net-tools
%end
# Script chạy sau khi cài đặt hoàn tất
%post --interpreter=/bin/bash
# Thiết lập repo nội bộ
rm -f /etc/yum.repos.d/*.repo
cat <<EOF > /etc/yum.repos.d/internal.repo
[internal-base]
name=Internal CentOS Repository
baseurl=ftp://172.16.10.5/repo-centos
enabled=1
gpgcheck=0
EOF
# Tùy biến môi trường shell
echo 'export PS1="\[\e[32m\][\u@\h \W]\$\[\e[0m\] "' >> /root/.bash_profile
# Cấu hình vim cơ bản
cat <<EOF > /root/.vimrc
syntax on
set number
set autoindent
set tabstop=4
EOF
%end
2. Phân phối file ks.cfg
Đặt file ks.cfg vào thư mục gốc của FTP server để máy khách có thể tải xuống.
cp /path/to/your/ks.cfg /var/ftp/ks.cfg
chmod 644 /var/ftp/ks.cfg
3. Cập nhật Boot Menu trỏ đến Kickstart
Chỉnh sửa lại file /var/lib/tftpboot/pxelinux.cfg/default để thêm tham số ks vào kernel boot parameters.
default auto
prompt 0
label auto
menu label ^Automated Install CentOS 7
kernel vmlinuz
append initrd=initrd.img inst.repo=ftp://172.16.10.5/repo-centos ks=ftp://172.16.10.5/ks.cfg
4. Kiểm tra hoạt động
Khởi động máy khách (Client) và thiết lập BIOS boot từ mạng (PXE). Hệ thống sẽ tự động nhận IP từ DHCP, tải kernel, initrd và file ks.cfg, sau đó tiến hành cài đặt CentOS 7 mà không yêu cầu bất kỳ thao tác nào từ người dùng. Sau khi quá trình hoàn tất và máy chủ khởi động lại, kiểm tra kết quả của script post-install:
cat /etc/yum.repos.d/internal.repo