Vấn đề thực tế: Ám ảnh mang tên “Cài đặt lặp lại”
Năm ngoái, team mình nhận dự án triển khai cụm 30 server cho một ngân hàng. Yêu cầu cực kỳ khắt khe: mọi server phải đồng nhất cấu hình bảo mật, cài sẵn bộ tool giám sát, tắt hết service thừa và phải cài đặt offline 100%.
Ban đầu, mình chọn cách truyền thống là cấu hình máy mẫu rồi dùng Clonezilla để “nhân bản”. Kết quả thật tệ. Chỉ cần phần cứng khác đời là driver lỗi ngay. Việc quản lý các bản vá (patch) sau đó cũng trở thành gánh nặng. Nếu bạn từng phải cắm USB vào từng server hoặc thức đêm chạy script hậu cài đặt cho hàng chục VM, bạn sẽ hiểu cảm giác muốn đổi nghề ngay lập tức.
Tại sao các phương pháp cũ dần hụt hơi?
Thực tế triển khai cho thấy các cách làm như tạo Template máy ảo hay dùng Shell Script bộc lộ rất nhiều rủi ro:
- Thiếu tính nhất quán: Script thường xuyên lỗi giữa chừng do repo thay đổi hoặc kết nối mạng chập chờn.
- Bảo trì cực thân: Mỗi lần cần thêm một package vào bộ cài gốc, bạn gần như phải làm lại từ đầu hoặc chỉnh sửa file Kickstart dài dằng dặc.
- Phân mảnh nền tảng: Việc duy trì thủ công 3-4 định dạng khác nhau cho VMware, AWS và máy vật lý tốn gấp ba lần công sức bình thường.
Điểm qua các giải pháp phổ biến hiện nay
Trước khi tìm thấy “chân ái”, mình đã ném mình vào đủ loại công cụ:
- Kickstart: Rất mạnh nhưng file cấu hình cực khó đọc, chỉ cần sai một dấu gạch ngang là lỗi cả quá trình.
- HashiCorp Packer: Công cụ tuyệt vời cho dân DevOps chuyên nghiệp, nhưng rào cản kỹ thuật và pipeline khá phức tạp cho nhu cầu nhanh gọn.
- Manual Image: Cài thủ công rồi export sang QCOW2. Cách này chỉ phù hợp với quy mô dưới 5 máy, hoàn toàn không có khả năng mở rộng.
Image Builder (osbuild-composer): Cứu cánh cho Sysadmin
Sau 6 tháng thực chiến, mình tin rằng Image Builder là công cụ đáng dùng nhất trên CentOS Stream 9. Đây là giải pháp kế thừa từ RHEL, cho phép bạn định nghĩa một “Blueprint” (bản thiết kế) duy nhất. Từ đó, hệ thống sẽ tự động xuất ra đủ loại định dạng từ ISO, QCOW2 cho KVM, AMI cho AWS đến VHD cho Azure.
Bước 1: Cài đặt các thành phần cốt lõi
Để bắt đầu, bạn cần cài đặt osbuild-composer. Mình khuyên dùng giao diện Web Cockpit để quản lý trực quan hơn, giúp giảm bớt việc phải nhớ quá nhiều dòng lệnh phức tạp.
# Cài đặt Image Builder và plugin Cockpit
sudo dnf install -y osbuild-composer composer-cli cockpit-composer bash-completion
# Kích hoạt service ngay lập tức
sudo systemctl enable --now osbuild-composer.socket cockpit.socket
# Tải bash-completion để hỗ trợ gợi ý lệnh
source /etc/bash_completion.d/composer-cli
Bước 2: Truy cập giao diện quản lý
Nếu server đã cài Cockpit, hãy truy cập https://<IP-Server>:9090. Bạn sẽ thấy mục Image Builder ở menu bên trái. Mọi thao tác từ chọn package đến build image sẽ thực hiện tại đây.
Bước 3: Thiết kế Blueprint – “Bản vẽ” hệ thống
Blueprint là một file định nghĩa chứa danh sách package, user và cấu hình. Giả sử mình cần tạo bản ISO chuẩn cho Web Server tích hợp sẵn Docker và Vim.
- Chọn Create Blueprint và đặt tên
web-server-base. - Tại mục Packages, tìm và thêm
docker-ce,vim,git. - Trong phần Customizations, hãy thêm User và dán sẵn SSH key để đăng nhập từ xa ngay sau khi cài.
Nếu bạn là fan của dòng lệnh (CLI), hãy tạo file blueprint.toml với nội dung đơn giản như sau:
name = "web-server-base"
description = "Bản cài đặt chuẩn cho Web Server"
version = "0.0.1"
[[packages]]
name = "vim"
version = "*"
[customizations.services]
enabled = ["sshd"]
Sau đó, đẩy cấu hình này vào hệ thống bằng lệnh:
composer-cli blueprints push blueprint.toml
Bước 4: Build và xuất Image thành phẩm
Công đoạn này hoàn toàn tự động. Bạn chỉ cần nhấn Create Image và chọn định dạng đầu ra mong muốn:
- Installer ISO: Dùng để cài máy vật lý qua USB, tự động chạy từ A-Z không cần can thiệp.
- Guest Device (QCOW2): Dành cho KVM hoặc Proxmox. Bạn chỉ việc import vào là chạy, bỏ qua bước cài OS tốn thời gian.
Quá trình build thường mất 5-10 phút. Hệ thống sẽ tự tải package từ repo chính thức về nên tốc độ phụ thuộc vào đường truyền của bạn.
Lưu ý quan trọng để tránh “ăn hành”
Dưới đây là vài kinh nghiệm thực tế giúp bạn tiết kiệm hàng giờ debug:
- Kiểm tra Repository: Image Builder chỉ lấy được package từ các repo đang active. Muốn cài Docker, bạn phải add repo Docker vào CentOS trước.
- Không gian đĩa: Tiến trình build cực kỳ ngốn dung lượng tại
/var/lib/osbuild-composer. Hãy đảm bảo phân vùng/varcòn trống ít nhất 20GB. - Đọc log khi lỗi: Nếu trạng thái báo Fail, hãy dùng lệnh
composer-cli compose log <UUID>. Log ở đây rất chi tiết, thường sẽ chỉ ra bạn đang thiếu dependency nào.
Sử dụng Image Builder giúp quy trình triển khai chuyên nghiệp và nhàn nhã hơn hẳn. Thay vì tốn 2 tiếng cấu hình mỗi server, giờ đây bạn chỉ mất vài phút để có một bản cài chuẩn xác 100%. Nếu đang vận hành CentOS Stream 9, bạn hãy thử ngay công cụ này để nâng cấp quy trình làm việc của mình.

