Cơn ác mộng lúc 2 giờ sáng: Khi bản cập nhật làm sập trạm Edge
Cảnh tượng này chắc hẳn nhiều anh em làm IoT đã gặp: Bạn vận hành dàn Raspberry Pi làm Gateway tại một kho hàng cách xa trung tâm 50km. Đúng 2 giờ sáng, hệ thống báo mất kết nối. Một bản cập nhật dnf upgrade bị lỗi giữa chừng do sụt áp hoặc mất mạng, khiến hệ điều hành hỏng hoàn toàn (corruption).
Với các distro truyền thống, cách duy nhất là lái xe đến tận nơi, rút thẻ nhớ và flash lại từ đầu. Cực kỳ tốn thời gian và công sức. Đó là lý do mình chuyển sang Fedora IoT. Sau 2 năm sử dụng, mình nhận ra sức mạnh thực sự của nó không chỉ ở tốc độ cập nhật, mà nằm ở “chìa khóa” công nghệ: OSTree.
Tại sao các hệ thống Edge thông thường lại dễ ‘đột tử’?
Vấn đề nằm ở cách quản lý file hệ thống của Raspberry Pi OS hay Fedora Server. Khi bạn cài package, trình quản lý gói ghi đè trực tiếp lên /usr hoặc /bin.
- Hệ thống mất nhất quán: Nếu việc ghi file bị ngắt, OS sẽ rơi vào trạng thái “nửa cũ nửa mới”. Lỗi kernel panic là điều khó tránh khỏi.
- Rollback là điều xa xỉ: Bạn gần như không thể quay lại trạng thái ổn định trước đó nếu không có bản backup image nặng hàng GB.
- Rủi ro bảo mật: Quyền root có thể thay đổi file hệ thống bất cứ lúc nào, tạo kẽ hở cho malware xâm nhập sâu vào nhân OS.
Fedora IoT và OSTree: Cách tiếp cận ‘Git-like’ cho hệ điều hành
Thay vì cài đè file, OSTree hoạt động giống như Git. Toàn bộ file hệ thống được để ở chế độ Read-only (chỉ đọc). Mỗi lần cập nhật sẽ tạo ra một “commit” mới.
Nếu bản cập nhật lỗi? Bạn chỉ cần chọn bản commit cũ tại menu boot để hệ thống hoạt động bình thường ngay lập tức. Đây là một bước tiến lớn so với việc dùng Snapshot (Btrfs) vốn rất phức tạp trong việc cấu hình bootloader.
Hướng dẫn triển khai thực tế trên Raspberry Pi
1. Flash image bằng công cụ chuyên dụng
Bạn hãy tải bản Fedora IoT (aarch64) cho Raspberry Pi. Thay vì dùng BalenaEtcher, mình ưu tiên arm-image-installer để tối ưu độ tương thích.
# Cài đặt installer trên máy Fedora
sudo dnf install arm-image-installer
# Flash image và tự động mở rộng phân vùng thẻ nhớ
sudo arm-image-installer --image=Fedora-IoT-40.raw.xz --target=rpi4 --media=/dev/sda --resizefs --addkey=~/.ssh/id_rsa.pub
Mẹo nhỏ: Flag --addkey cực kỳ quan trọng. Fedora IoT mặc định chặn login bằng mật khẩu qua SSH để tăng tính bảo mật.
2. Quản lý hệ thống bằng rpm-ostree
Quên lệnh dnf đi. Trên Fedora IoT, chúng ta dùng rpm-ostree. Khi cài thêm một công cụ như htop, hệ thống sẽ tạo ra một layer mới thay vì sửa trực tiếp vào OS gốc.
# Kiểm tra các phiên bản OS đang có trên máy
rpm-ostree status
# Cài đặt package mới
sudo rpm-ostree install htop
sudo reboot
Việc phải reboot có thể gây khó chịu lúc đầu. Tuy nhiên, đây là cái giá xứng đáng để đảm bảo hệ thống luôn sạch sẽ và có thể dự đoán trước (predictable).
3. Chạy ứng dụng với Podman
Triết lý của Fedora IoT là: Giữ Host OS cực gọn (minimal), đẩy mọi ứng dụng vào container. Podman được tích hợp sẵn, cho phép bạn chạy container mà không cần quyền root (rootless), giảm thiểu rủi ro bị tấn công leo thang.
# Chạy một MQTT Broker cho dự án IoT
podman run -d --name mosquitto -p 1883:1883 eclipse-mosquitto
# Tạo file systemd để container tự khởi động cùng Pi
podman generate systemd --name mosquitto --files --new
Tính năng ‘cứu mạng’: Rollback và Greenboot
Nếu sau khi nâng cấp mà hệ thống gặp trục trặc, bạn chỉ cần gõ đúng một lệnh:
sudo rpm-ostree rollback
Ngay lập tức, thiết bị sẽ tráo đổi boot deployment và quay về phiên bản ổn định trước đó.
Đặc biệt hơn, Fedora IoT có Greenboot. Công cụ này tự động chạy các script kiểm tra sau khi boot. Nếu ứng dụng của bạn không phản hồi sau 3 lần khởi động lại, Greenboot sẽ tự kích hoạt lệnh rollback mà không cần con người can thiệp. Đây chính là tính năng giúp mình ngủ ngon hơn mỗi đêm.
Lời khuyên từ thực tế triển khai
Sau nhiều dự án lắp đặt thiết bị tại hiện trường, mình rút ra 3 kinh nghiệm then chốt:
- Đầu tư thẻ nhớ High Endurance: Dù OS là Read-only, nhưng log và dữ liệu container vẫn ghi liên tục. Hãy dùng các dòng thẻ chuyên dụng (như Samsung Pro Endurance) để tránh lỗi phần cứng sau 6-12 tháng.
- Sử dụng Cockpit: Nếu ngại gõ lệnh, hãy cài
cockpit. Bạn sẽ có một giao diện web mượt mà để theo dõi CPU, RAM và quản lý container ngay trên trình duyệt. - Tận dụng Zezere: Nếu triển khai số lượng lớn (hàng trăm node), hãy tìm hiểu cơ chế provisioning qua Zezere để cấu hình thiết bị từ xa mà không cần cắm màn hình.
Chuyển sang Immutable OS như Fedora IoT đòi hỏi bạn thay đổi thói quen quản lý server. Nhưng khi hệ thống của bạn tự phục hồi giữa đêm mà không cần bạn rời khỏi giường, bạn sẽ thấy sự thay đổi này hoàn toàn xứng đáng.

