Trong quá trình nghiên cứu về máy ảo và quản trị mạng, mình đã nhiều lần chạm mặt thuật ngữ PXE Boot nhưng không biết nó là gì và nguyên lý hoạt động ra sao. Hiện tại, mình đang muốn cài đặt cho 3 cái máy Lenovo mini để mò về Cluster / Kubernetes nên mới bắt đầu tìm hiểu về PXE và cách cài đặt.
Mục Lục
1. PXE là gì?
PXE (Preboot eXecution Environment) là một môi trường cho phép khởi động máy tính bằng việc sử dụng card mạng cùng với RAM. Hiểu một cách đơn giản PXE là cơ chế cho phép khởi động một phần mềm thông qua mạng.
Với PXE, các máy trạm có thể khởi động và cài đặt hệ điều hành thông qua mạng, không cần phải sử dụng Bootable USB hay CD/DVD như cách thông thường.
Yêu cầu cần thiết để thực hiện PXE Boot
- Hệ thống mạng có máy chủ DHCP, HTTP và TFTP. Có thể cài đặt tất cả trên cùng 1 máy chủ Boot Server
- Máy trạm (client) được trang bị card mạng NIC hỗ trợ PXE Boot.
Bài viết này mình sẽ hướng dẫn cách thiết lập PXE Boot Server để cài đặt Ubuntu 20.04 qua mạng dành cho máy trạm / máy ảo sử dụng Legacy BIOS.
Thao tác thực hiện sẽ gồm các bước chính như sau
- Tải Ubuntu ISO (ubuntu-20.04.5-live-server-amd64.iso)
- Cài đặt và cấu hình Apache HTTP server
- Cài đặt và cấu hình TFTP server
- Cài đặt và cấu hình DHCP server
- Thực hiện PXE Boot
2. Chuẩn bị môi trường lab
Mình sẽ sử dụng 2 máy ảo để thực hiện các hướng dẫn trong bài viết hôm nay.
- Một máy ảo chạy Ubuntu 20.04 sẽ đóng vai trò làm PXE Boot Server. Mình sẽ gọi là PXE Server. (IP: 192.168.0.150)
- Một máy ảo sử dụng Legacy BIOS sẽ được khởi động bằng PXE để cài đặt Ubuntu 20.04 qua mạng.. Mình sẽ gọi là PXE Client.
Bạn có thể tạo máy ảo trên bất kỳ nền tảng nào Hyper-V, Proxmox, XCP-ng,… hoặc nếu có máy tính vật lý thì càng tốt.
Ngoài ra, cần phải có kết nối Internet để tải Ubuntu ISO về PXE Server. PXE Server và PXE Client cần phải kết nối vào cùng mạng LAN nội bộ.
3. Tải Ubuntu ISO về PXE Server
Mình sẽ tải Ubuntu Server về PXE Server, lưu ở thư mục /images
mkdir /images
cd images
wget https://mirrors.nhanhoa.com/ubuntu-releases/20.04/ubuntu-20.04.5-live-server-amd64.iso
Code language: JavaScript (javascript)
4. Cài đặt và cấu hình Apache Server
Apache sẽ đóng vai trò làm HTTP Server để PXE Client có thể kết nối khi khởi động và tải về các file cấu hình và file ISO của Ubuntu.
apt install apache2 -y
Code language: Nginx (nginx)
Chỉnh sửa lại cấu hình mặc định của Apache
nano /etc/apache2/sites-available/000*
Code language: Nginx (nginx)
Sửa lại nội dung như sau và lưu lại
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /
<Directory /images>
Options Indexes MultiViews
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Code language: Bash (bash)
Kích hoạt Apache
systemctl enable apache2 --now
Code language: Bash (bash)
Kiểm tra lại xem Apache đã hoạt động chưa
systemctl status apache2
Code language: Nginx (nginx)
● apache2.service - The Apache HTTP Server
Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2022-12-21 10:58:52 UTC; 13h ago
Docs: https://httpd.apache.org/docs/2.4/
Main PID: 5621 (apache2)
Tasks: 55 (limit: 1065)
Memory: 65.9M
CGroup: /system.slice/apache2.service
├─5621 /usr/sbin/apache2 -k start
├─5622 /usr/sbin/apache2 -k start
└─5623 /usr/sbin/apache2 -k start
Code language: YAML (yaml)
Truy cập vào địa chỉ http://192.168.0.150/images
, sẽ thấy hiện ra file ubuntu-20.04.05-live-server-amd64.iso trong danh sách.
5. Cài đặt TFTP Server
Tiếp theo, mình sẽ cài đặt TFTP Server để lưu trữ các file boot của PXE dùng để kích hoạt cài đặt qua mạng.
apt install tftpd-hpa -y
systemctl enable tftpd-hpa --now
Code language: Bash (bash)
6. Cấu hình PXE Boot Server
Để máy trạm có thể khởi động qua mạng, chúng ta cần phải chuẩn bị PXE Boot files. Mình sẽ lấy các file này từ file ISO của Ubuntu đã tải về trước đó.
Mount file ISO vào thư mục /mnt
ount /iamges/ubuntu-20.04.5-live-server-amd64.iso /mnt
Code language: Nginx (nginx)
Copy 3 tập tin initrd
, vmlinux
, and ldlinux.c32
vào thư mục /srv/tftp/
find /mnt/ \( -name "initrd" -o -name "vmlinuz" -o -name "ldlinux.c32" \) -exec cp -apv {} /srv/tftp/ \;
Code language: Bash (bash)
Tiếp theo, cần phải có thêm file pxelinux.0
để hoàn tất cấu hình PXE Server. Cài đặt pxelinux
bằng lệnh
apt install pxelinux -y
Code language: Nginx (nginx)
Tìm đường dẫn chứa pxelinux.0
bằng lệnh find /usr/ -name pxelinux.0
. Kết quả trả về
/usr/lib/PXELINUX/pxelinux.0
Copy file này vào thư mục /srv/tftp/
cp -apv /usr/lib/PXELINUX/pxelinux.0 /srv/tftp/
Code language: Nginx (nginx)
Thư mục /srv/tftp/
sẽ gồm các file như dưới đây
root@ubuntu:/mnt# ls -l /srv/tftp
total 97940
-r--r--r-- 1 root root 86448612 Aug 31 07:04 initrd
-r--r--r-- 1 root root 120820 Aug 31 07:37 ldlinux.c32
-rw-r--r-- 1 root root 43140 Dec 23 2019 pxelinux.0
-r--r--r-- 1 root root 13660416 Aug 31 07:04 vmlinuz
Code language: YAML (yaml)
Tiếp theo, tạo file cấu hình PXE
mkdir /srv/tftp/pxelinux.cfg
nano /srv/tftp/pxelinux.cfg/default
Code language: JavaScript (javascript)
Nhập vào nội dung sau và lưu lại
timeout 60
ontimeout 1
default 1
prompt 0
label 1
menu label ^Install Ubuntu 20.04
kernel vmlinuz
initrd initrd
append url=http://192.168.0.150/images/ubuntu-20.04.5-live-server-amd64.iso cloud-config-url=/dev/null ip=dhcp fsck.mode=skip ---
menu end
Code language: YAML (yaml)
7. Cấu hình DHCP Server
Tiếp theo, cần phải cấu hình thông số Next Server
và Boot File Name
trên DHCP Server. Mình đang dùng Mikrotik, truy cập vào DHCP Server và sửa lại như hình bên dưới.
Nếu router đang sử dụng không có tính năng cấu hình Next Server và Boot File Name, bạn có thể cài đặt DHCP Server lên PXE Server.
apt install isc-dhcp-server -y
Code language: Nginx (nginx)
Cấu hình DHCP Server bằng cách chỉnh sửa file dhcpd.conf
nano /etc/dhcp/dhcpd.conf
Code language: Nginx (nginx)
Bạn cần chỉnh lại thông số ở các mục subnet
, netmask
, routers
, next-server
cho phù hợp với mạng nội bộ đang sử dụng.
allow bootp;
allow booting;
max-lease-time 1200;
default-lease-time 900;
log-facility local7;
option ip-forwarding false;
option mask-supplier false;
subnet 192.168.0.0 netmask 255.255.255.0 {
option routers 192.168.0.1;
option domain-name-servers 1.1.1.1;
range 192.168.0.200 192.168.0.222;
next-server 192.168.0.150;
filename "pxelinux.0";
}
Code language: YAML (yaml)
Kích hoạt DHCP Server
systemctl enable isc-dhcp-server.service --now
Code language: Bash (bash)
8. Thực hiện PXE Boot
Máy sử dụng máy ảo tạo trên ESXI 7.0, sử dụng Legacy BIOS. Hệ thống khởi động qua mạng PXE thành công và hiện ra trình cài đặt Ubuntu 20.04.
Mình có thể cấu hình thêm cài đặt tự động Ubuntu sử dụng tính năng Cloud-init. Từ từ rãnh có thời gian mò sẽ chia sẻ tiếp.
Chúc bạn thực hiện thành công!
Nguồn: golinuxcloud, Ubuntu
Thank you very much for your info! It really worked.