Nỗi ám ảnh mang tên “Next – Next – Finish” cho 100 Server
Hồi mới vào nghề, mình từng nhận một task nhớ đời: Cài đặt OS cho hơn 20 máy chủ vật lý trong một buổi chiều để bàn giao cho đội Dev. Lúc đó, mình chỉ biết làm thủ công: Cắm USB, chọn ngôn ngữ, chia ổ đĩa, đặt user/pass… lặp lại đúng 20 lần. Kết quả là mình mất hơn 5 tiếng đồng hồ, mắt mỏi nhừ, và tệ nhất là 2 con server bị đặt sai hostname do gõ nhầm lúc mệt.
Nếu bạn đang quản lý một phòng Lab, hạ tầng Cloud hoặc đơn giản là cần tạo nhanh vài chục VM để test, việc ngồi click chuột từng bước là một sự lãng phí thời gian khủng khiếp. Ubuntu Autoinstall (dựa trên Subiquity và cloud-init) chính là cứu cánh. Công cụ này giúp định nghĩa toàn bộ cấu hình trong một file duy nhất. Bạn chỉ cần cắm ISO, nhấn khởi động và đi pha cafe; 5 phút sau server đã sẵn sàng.
Quick Start: Chạy thử Autoinstall trong 5 phút
Để thấy rõ sự lợi hại, hãy thử tạo một file cấu hình tối giản. File này sẽ tự động thiết lập ngôn ngữ, layout bàn phím và tạo user quản trị mà không cần bạn động tay.
Hãy tạo file user-data với nội dung sau:
#cloud-config
autoinstall:
version: 1
identity:
hostname: itfromzero-server
password: "$6$exDY1SdbMBRfv89B$2lsE9mU78788.16n9E.D0bw9.6.D0bw9.6.D0bw9.6"
realname: IT Admin
username: itadmin
locale: en_US.UTF-8
keyboard:
layout: us
ssh:
install-server: true
allow-pw: true
storage:
layout:
name: direct
Lưu ý quan trọng: Password trong file phải ở dạng hash để bảo mật. Bạn có thể tạo chuỗi hash này bằng một dòng lệnh Python nhanh gọn: python3 -c 'import crypt; print(crypt.crypt("mypassword", crypt.mksalt(crypt.METHOD_SHA512)))'.
Cách test nhanh nhất là dùng KVM/QEMU hoặc VMware. Bạn chỉ cần gắn file user-data này như một ổ đĩa phụ (NoCloud data source). Khi boot ISO Ubuntu Server, hệ thống sẽ tự tìm file này và tự động hóa toàn bộ quá trình cài đặt từ đầu đến cuối.
Cơ chế hoạt động: Tại sao Autoinstall lại mạnh mẽ?
Từ bản 20.04 LTS trở đi, Ubuntu đã khai tử Debian Installer (preseed) cũ kỹ để chuyển sang Subiquity. Điểm nâng cấp đáng giá nhất là việc sử dụng định dạng YAML dễ đọc và khả năng tùy biến cực sâu thông qua cloud-init.
1. File user-data: Trái tim của hệ thống
Đây là bản thiết kế cho server tương lai của bạn. Nó chứa mọi chỉ thị từ việc chia phân vùng đĩa cho đến việc cài đặt phần mềm. Mọi file cấu hình chuẩn luôn phải bắt đầu bằng dòng #cloud-config.
2. Những thành phần không thể thiếu
- storage: Quyết định số phận ổ cứng. Bạn có thể dùng
layout: directđể xài toàn bộ đĩa hoặc cấu hình LVM, RAID phức tạp cho các dòng máy chủ chuyên dụng. - identity: Nơi khai báo danh tính server như hostname và thông tin đăng nhập.
- packages: Tự động cài sẵn các công cụ như
vim,git,docker-cengay khi máy vừa khởi động lần đầu. - late-commands: Những lệnh “chốt hạ” trước khi reboot. Bạn có thể dùng nó để tải SSH key từ GitHub hoặc gửi thông báo về Telegram khi cài xong.
Nâng cao: Build bản ISO “Cắm là chạy”
Việc cung cấp file cấu hình qua ổ đĩa ảo đôi khi vẫn hơi rườm rà. Nếu bạn muốn chuyên nghiệp hơn, hãy nhúng thẳng file cấu hình vào file ISO gốc. Lúc này, bạn chỉ cần một chiếc USB duy nhất để đi “càn quét” mọi server vật lý.
Quy trình build ISO tùy chỉnh thường gồm các bước:
# 1. Giải nén ISO gốc (Ví dụ bản 22.04.3)
mkdir -p /tmp/iso
7z x ubuntu-22.04.3-live-server-amd64.iso -o/tmp/iso
# 2. Đưa file cấu hình vào thư mục nocloud
mkdir -p /tmp/iso/nocloud
cp my-user-data /tmp/iso/nocloud/user-data
touch /tmp/iso/nocloud/meta-data
# 3. Chỉnh sửa tham số boot trong grub.cfg
# Thêm 'autoinstall ds=nocloud;s=/cdrom/nocloud/' để trình cài đặt biết chỗ lấy dữ liệu
sed -i 's/---/autoinstall ds=nocloud;s=\/cdrom\/nocloud\/ ---/g' /tmp/iso/boot/grub/grub.cfg
# 4. Đóng gói lại ISO bằng xorriso
Mẹo nhỏ: Nếu ngại gõ lệnh xorriso dài dằng dặc, bạn hãy tìm công cụ ubuntu-autoinstall-generator trên GitHub. Nó sẽ giúp bạn đóng gói ISO chỉ với một dòng lệnh duy nhất, tiết kiệm cực nhiều thời gian.
Kinh nghiệm thực tế để tránh “ăn hành”
Qua nhiều lần triển khai thực tế, mình rút ra 4 lưu ý quan trọng giúp bạn tránh các lỗi ngớ ngẩn:
Cẩn thận với cú pháp YAML
YAML cực kỳ khó tính với khoảng trắng (indentation). Chỉ cần thừa một dấu cách, trình cài đặt sẽ đứng hình và bắt bạn can thiệp thủ công. Hãy luôn kiểm tra file qua các bộ linter online trước khi build.
Ưu tiên SSH Key thay vì Password
Để bảo mật và tiện quản lý, hãy khai báo SSH Key ngay trong file cấu hình. Điều này giúp bạn có thể SSH vào server ngay lập tức mà không cần nhớ mật khẩu hash phức tạp.
ssh:
install-server: true
authorized-keys:
- ssh-rsa AAAAB3Nza... user@itfromzero
Đừng quên cấu hình Network tĩnh
Trong môi trường Data Center không có DHCP, server sẽ bị treo khi cố gắng xin IP. Hãy khai báo Static IP cụ thể trong phần network để quá trình cài đặt diễn ra trơn tru.
Tận dụng late-commands để cài Agent
Mình thường dùng late-commands để cài đặt Zabbix Agent hoặc Prometheus Exporter. Nhờ vậy, server vừa cài xong là tự động xuất hiện trên dashboard giám sát, không cần cấu hình hậu kỳ.
late-commands:
- curtin in-target -- target apt-get update
- curtin in-target -- target apt-get install -y qemu-guest-agent
Tóm lại, Ubuntu Autoinstall không chỉ dành cho những hệ thống khổng lồ. Dù bạn chỉ có 2-3 server, việc tạo một file cấu hình chuẩn sẽ giúp môi trường luôn nhất quán và chuyên nghiệp. Hãy để máy móc làm những việc lặp đi lặp lại, còn bạn dành thời gian đó để nghiên cứu những thứ thú vị hơn.

