Skip to content
Thuan Bui's Blog
Go back

Cài đặt Ubuntu 20.04 tự động sử dụng cloud-init trên PXE Boot Server

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

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:

Mình sẽ tạo cả hai file này trong thư mục /ks.

Terminal window
mkdir /ks
cd /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-config
autoinstall:
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 -y

Password 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 <<< PASSWORD

Giải thích sơ lược về các thông số:

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

Kết quả trả về thế này là ổn

Valid cloud-config: /ks/user-data

Thư mục /ks giờ sẽ gồm có 2 file như dưới đây

root@ubuntu:/# ls -ls /ks
total 4
0 -rw-r--r-- 1 root root 0 Dec 23 12:41 meta-data
4 -rw-r--r-- 1 root root 505 Dec 23 09:01 user-data

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

Terminal window
nano /etc/apache2/sites-available/000-default.conf

Sử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

Terminal window
systemctl restart apache2

Kiể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-datameta-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

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 autoinstall ds=nocloud-net;s=http://192.168.0.150/ks/ cloud-config-url=/dev/null ip=dhcp fsck.mode=skip ---
menu end

Giải thích nhanh các thông số

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_US
fi
terminal_output gfxterm
set menu_color_normal=white/black
set 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


Share this post on:

Previous Post
[XCP-ng] Hướng dẫn clone, snapshot và backup máy ảo sử dụng Xen Orchestra
Next Post
Thiết lập PXE Boot Server cài đặt Ubuntu 20.04 qua mạng cho UEFI