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

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.isoCode 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 -yCode 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 --nowCode language: Bash (bash)

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

systemctl status apache2Code 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 startCode 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 --nowCode 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 /mntCode 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 -yCode 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 vmlinuzCode language: YAML (yaml)

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

mkdir /srv/tftp/pxelinux.cfg
nano /srv/tftp/pxelinux.cfg/defaultCode 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 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 -yCode language: Nginx (nginx)

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

nano /etc/dhcp/dhcpd.confCode 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 --nowCode 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

Lưu ý: Nếu bạn cần hỗ trợ kỹ thuật, vui lòng gửi câu hỏi trực tiếp ở phần Thảo luận bên dưới, mình sẽ trả lời sớm. Đừng vào hỏi trong fanpage Yêu Chạy Bộ, sẽ không có phản hồi đâu!

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *


One Comment