Skip to content
Thuan Bui's Blog
Go back

Thiết lập PXE Boot Server cài đặt Ubuntu 20.04 qua mạng cho Legacy BIOS

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.

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.

Quy trình khởi động của PXE Boot
Quy trình khởi động của PXE Boot

Yêu cầu cần thiết để thực hiện 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

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.

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

Terminal window
mkdir /images
cd images
wget https://mirrors.nhanhoa.com/ubuntu-releases/20.04/ubuntu-20.04.5-live-server-amd64.iso

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

Chỉnh sửa lại cấu hình mặc định của Apache

Terminal window
nano /etc/apache2/sites-available/000*

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>

Kích hoạt Apache

Terminal window
systemctl enable apache2 --now

Kiểm tra lại xem Apache đã hoạt động chưa

Terminal window
systemctl status apache2
Terminal window
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

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.

Terminal window
apt install tftpd-hpa -y
systemctl enable tftpd-hpa --now

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

Terminal window
mount /iamges/ubuntu-20.04.5-live-server-amd64.iso /mnt

Copy 3 tập tin initrd, vmlinux, and ldlinux.c32 vào thư mục /srv/tftp/

Terminal window
find /mnt/ \( -name "initrd" -o -name "vmlinuz" -o -name "ldlinux.c32" \) -exec cp -apv {} /srv/tftp/ \;

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

Terminal window
apt install pxelinux -y

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/

Terminal window
cp -apv /usr/lib/PXELINUX/pxelinux.0 /srv/tftp/

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

Tiếp theo, tạo file cấu hình PXE

Terminal window
mkdir /srv/tftp/pxelinux.cfg
nano /srv/tftp/pxelinux.cfg/default

Nhập vào nội dung sau và lưu lại

Terminal window
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

7. Cấu hình DHCP Server

Tiếp theo, cần phải cấu hình thông số Next ServerBoot 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

Cấu hình DHCP Server bằng cách chỉnh sửa file dhcpd.conf

Terminal window
nano /etc/dhcp/dhcpd.conf

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";
}

Kích hoạt DHCP Server

Terminal window
systemctl enable isc-dhcp-server.service --now

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.

https://youtu.be/n7b0prNJXwk

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


Share this post on:

Previous Post
Thiết lập PXE Boot Server cài đặt Ubuntu 20.04 qua mạng cho UEFI
Next Post
Tạo Object Storage Server với MinIO + Docker