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

 

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.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

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

systemctl enable apache2 --now

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

systemctl status apache2
● 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.

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

ount /iamges/ubuntu-20.04.5-live-server-amd64.iso /mnt

Copy 3 tập tin initrdvmlinux, 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/ \;

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

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/

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

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

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

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

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

nano /etc/dhcp/dhcpd.conf

Bạn cần chỉnh lại thông số ở các mục subnetnetmaskroutersnext-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

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.

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.

Post a Comment

Previous Post Next Post