Trong các bài viết trước, mình đã chia sẽ cách thiết lập PXE Boot Server để cài đặt Ubuntu 20.04 qua mạng cho máy trạm dùng BIOS lẫn UEFI. Bài viết này mình sẽ hướng dẫn cách cấu hình để Ubuntu 20.04 được cài đặt tự động lên máy trạm, không cần phải thao tác thủ công từng bước.
Trước khi tiếp tục, bạn cần phải hoàn thành việc thiết lập PXE Boot Server dựa theo một trong hai hướng dẫn dưới đây
-
Thiết lập PXE Boot Server cài đặt Ubuntu 20.04 qua mạng cho UEFI
-
Thiết lập PXE Boot Server cài đặt Ubuntu 20.04 qua mạng cho Legacy BIOS
I. Cấu hình cloud-init
Cơ chế hoạt động của cloud-init sẽ dựa vào 2 file cấu hình:
-
meta-data- chứa thông tin thiết lạp của nhà cung cấp, có thể để trống. -
user-meta- chứa thông tin cấu hình cài đặt tự động.
Mình sẽ tạo cả hai file này trong thư mục /ks.
mkdir /kscd /ksĐầu tiên, tạo file meta-data bằng lệnh touch meta-data.
Tiếp theo, tạo file user-data bằng lệnh nano user-data, nhập vào nội dung sau
#cloud-configautoinstall: version: 1 identity: hostname: ubuntu-server password: "$1$Nhd/4ltW$C25K/x7DJ4J9U.mC.fkup0" username: thuanbui keyboard: { layout: us, toggle: null, variant: "" } locale: en_US.UTF-8 ssh: allow-pw: true authorized-keys: [] install-server: true updates: security storage: layout: name: direct late-commands: - curtin in-target --target=/target -- apt update - curtin in-target --target=/target -- apt upgrade -yPassword sử dụng trong file user-data này là dạng mã hóa. Bạn cần sử dụng lệnh sau để mã hóa mật khẩu mong muốn, và nhập kết quả vào mục password ở trên. Thay thế PASSWORD bằng mật khẩu của bạn.
openssl passwd -1 -stdin <<< PASSWORDGiải thích sơ lược về các thông số:
-
Identity: cấu hình username và password của máy chủ.
-
keyboard: cấu hình layout bàn phím
-
ssh: cấu hình ssh
-
storage: cấu hình phân vùng ổ cứng
-
late-commands: cấu hình các lệnh sẽ chạy sau khi cài đặt xong.
Còn rất nhiều các thông số khác, bạn có thể xem thêm ở đây: autoinstall-reference. Các thông số nào không được thiết lập trong file user-data sẽ được tự động chọn theo mặc định của trình cài đặt.
Kiểm tra lại thông số của user-meta xem có bị lỗi gì không bằng lệnh
cloud-init schema --config-file /ks/user-dataKết quả trả về thế này là ổn
Valid cloud-config: /ks/user-dataThư mục /ks giờ sẽ gồm có 2 file như dưới đây
root@ubuntu:/# ls -ls /kstotal 40 -rw-r--r-- 1 root root 0 Dec 23 12:41 meta-data4 -rw-r--r-- 1 root root 505 Dec 23 09:01 user-dataII. Cấu hình Apache
Mình cập nhật lại file cấu hình mặc định của Apache để mở thêm phần truy cập cho thư mục /ks
nano /etc/apache2/sites-available/000-default.confSửa lại nội dung như sau
<VirtualHost *:80>
#ServerName www.example.com
ServerAdmin webmaster@localhost DocumentRoot /
<Directory /images> Options Indexes MultiViews AllowOverride All Require all granted </Directory>
<Directory /ks> Options Indexes MultiViews AllowOverride All Require all granted </Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>Khởi động lại apache để kích hoạt cấu hình mới
systemctl restart apache2Kiểm tra lại bằng trình duyệt, truy cập địa chỉ http://<IP-PXE-Boot-Server>/ks, sẽ thấy hiện ra 2 file user-data và meta-data

III. Cập nhật cấu hình PXE Boot Server
Tùy thuộc vào bạn đang thiết lập PXE Boot cho nền tảng BIOS hay UEFI hay cả hai mà lựa chọn cách tương ứng
1. Cấu hình cho BIOS
Chỉnh sửa lại nội dung của file /srv/tftp/pxelinux.cfg/default, bổ sung thêm thông số cho cloud-init khi khởi động
timeout 60ontimeout 1default 1prompt 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 autoinstall ds=nocloud-net;s=http://192.168.0.150/ks/ cloud-config-url=/dev/null ip=dhcp fsck.mode=skip ---
menu endGiải thích nhanh các thông số
-
url: đường link để tải file ISO về máy
-
autoinstall: thông số để xác nhận máy chủ sẽ không yêu cầu xác nhận trước khi cài đặt.
-
ds=nocloud-net: Tắt tính năng cloud metadata service, sử dụng thông số
s=để tải file cấu hình cài đặt tự động. -
s=
: đường dẫn để tải về 2 file cấu hìnhuser-datavàmeta-data -
cloud-config-url: Thông số
cloud-config-url=/dev/nullđể ngăn cloud-init tải tự động file ISO từ internet. -
ip=dhcp: Cấu hình địa chỉ của máy thông qua DHCP server.
-
fsck.mode=skip: Tắt tính năng kiểm tra file ISO để tối ưu thời gian cài đặt.
2. Cấu hình cho UEFI
Chỉnh sửa nội dung của file /srv/tftp/grub/grub.cfg, bổ sung thông số cho cloud-init khi khởi động
set default="0"set timeout=5
if loadfont unicode ; then set gfxmode=auto set locale_dir=$prefix/locale set lang=en_USfiterminal_output gfxterm
set menu_color_normal=white/blackset menu_color_highlight=black/light-gray
function gfxmode { set gfxpayload="${1}" if [ "${1}" = "keep" ]; then set vt_handoff=vt.handoff=7 else set vt_handoff= fi}
set linux_gfx_mode=keep
export linux_gfx_mode
menuentry 'Install Ubuntu 20.04' { #gfxmode $linux_gfx_mode linux vmlinuz ip=dhcp url=http://192.168.0.139/images/ubuntu-20.04.5-live-server-amd64.iso autoinstall ds=nocloud-net\;s=http://192.168.0.139/ks/ cloud-config-url=/dev/null fsck.mode=skip initrd initrd}IV. Trải nghiệm cài đặt tự động
Khởi động lại máy trạm và cho boot qua mạng (PXE Boot), Ubuntu 20.04 sẽ tự động được cài đặt vào máy mà không cần thao tác gì cả.
Lưu ý: Bạn cần phải chỉnh máy ảo / máy chủ ưu tiên khởi động từ ổ cứng và chỉ chọn PXE boot thông qua boot menu. Nếu chọn ưu tiên khởi động bằng PXE, máy trạm sẽ rơi vào vòng lặp: cài đặt, khởi động, rồi lại cài đặt lại từ đầu.

Với bất kỳ máy ảo nào tạo mới, mình chỉ cần cho nó boot bằng PXE, sau đó đi uống trà. 10’ sau quay lại thì Ubuntu Server 20.04 đã được cài đặt sẵn.
Chúc bạn thực hiện thành công!
Nguồn: gocloudlinux, ubuntu