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 /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ố:
- 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-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
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 /
Options Indexes MultiViews
AllowOverride All
Require all granted
Options Indexes MultiViews
AllowOverride All
Require all granted
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 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-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 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ố
- 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ình
user-data
và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_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