Chuyên mục
Linux Network

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

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

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