Chuyên mục
Linux Network

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:

  • 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 /ksCode language: Bash (bash)

Đầ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
Code language: YAML (yaml)

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 <<< PASSWORDCode language: Nginx (nginx)

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-dataCode language: Dockerfile (dockerfile)

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

Valid cloud-config: /ks/user-dataCode language: JavaScript (javascript)

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-dataCode language: YAML (yaml)

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.confCode language: JavaScript (javascript)

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>

Code language: Bash (bash)

Khởi động lại apache để kích hoạt cấu hình mới

systemctl restart apache2Code language: Nginx (nginx)

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 endCode language: YAML (yaml)

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=<seedlocation>: đườ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
}Code language: Bash (bash)

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

Nếu bài viết của mình mang đến thông tin, kiến thức hữu ích cho bạn, đừng ngại mời mình ly bia để có thêm động lực chia sẻ nhiều hơn nữa. Cám ơn bạn!

Lưu ý: Nếu bạn cần hỗ trợ kỹ thuật, vui lòng gửi câu hỏi trực tiếp ở phần Thảo luận bên dưới, mình sẽ trả lời sớm. Đừng mò vào hỏi trong fanpage Yêu Chạy Bộ, sẽ không có phản hồi đâu!

Bởi Thuận Bùi

Runner at Yêu Chạy Bộ. Blogger at Ba Lô & Dép Lào. Web Developer at TB's Blog.
Follow me: Facebook / Instagram

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *