Fedora Silverblue: Cài đặt và quản lý hệ thống với rpm-ostree và Toolbox

Fedora tutorial - IT technology blog
Fedora tutorial - IT technology blog

Khởi động nhanh — làm trong 5 phút

Sau gần 6 tháng chạy Fedora Silverblue trên máy laptop development, mình có thể nói thẳng: đây là distro khó bỏ nhất từng dùng — không phải vì nó dễ, mà vì sau khi quen, bạn không muốn quay lại cách cũ nữa.

Tải ISO tại fedoraproject.org/silverblue, cài với Anaconda installer như Fedora thông thường. Không có gì khác biệt ở bước này. Sau khi boot vào desktop, mở terminal và chạy ngay:

# Xem trạng thái hệ thống hiện tại
rpm-ostree status

# Output sẽ hiện deployment đang chạy
● default ostree://fedora:fedora/41/x86_64/silverblue
             Version: 41.20241010.0 (2024-10-10)
          BaseCommit: a1b2c3d4e5f6...
  LayeredPackages: (trống nếu chưa cài thêm gì)

Giờ tạo Toolbox — đây mới là phần hay. Toàn bộ dev tools sẽ nằm trong container, host system không bị đụng đến:

# Tạo toolbox container (Fedora 41 mặc định)
toolbox create

# Vào trong toolbox
toolbox enter

# Bây giờ bạn đang trong container — cài gì tùy thích
sudo dnf install -y git nodejs python3 gcc make

Xong. Host system vẫn sạch, toàn bộ dev tools nằm trong container.

rpm-ostree hoạt động như thế nào

Nếu đã quen với dnf install trên Fedora thông thường, cách rpm-ostree hoạt động ban đầu có thể hơi lạ. Mình dùng Fedora làm máy development chính đã 2 năm và khá hài lòng với tốc độ cập nhật package — nhưng Silverblue thay đổi hoàn toàn triết lý quản lý hệ thống.

Silverblue dùng OSTree — một hệ thống quản lý filesystem hoạt động tương tự Git nhưng dành cho cả OS. Thay vì cài package trực tiếp vào /usr, mỗi trạng thái hệ thống được lưu thành một commit. Ba hệ quả cụ thể:

  • /usrread-only — không ai viết thẳng vào được, kể cả root
  • /home, /var, /etc vẫn ghi được bình thường
  • Mọi thay đổi OS đi qua rpm-ostree và chỉ có hiệu lực sau reboot

Cài package vào host system

Đôi khi cần cài thứ gì đó thẳng vào host — driver, kernel module, hoặc tool cần tích hợp sâu với hệ thống:

# Cài package (staged — cần reboot mới có hiệu lực)
rpm-ostree install vim htop

# Xem những gì đã được layer lên base image
rpm-ostree status
# LayeredPackages: htop vim

# Gỡ package đã layer
rpm-ostree uninstall htop

Khác với dnf, các package này được “layer” lên base image — base image vẫn nguyên vẹn, bạn có thể gỡ bỏ layer bất cứ lúc nào mà không ảnh hưởng gì.

Rollback khi update lỗi

Dùng 6 tháng, mình cần rollback đúng 2 lần. Lần đầu vì kernel mới phá Wi-Fi driver, lần sau vì update Mesa gây flickering màn hình. Cả hai lần xử lý xong trong 30 giây:

# Cập nhật hệ thống (staged, chưa áp dụng ngay)
rpm-ostree upgrade

# Reboot để áp dụng bản mới
systemctl reboot

# Nếu có vấn đề sau reboot, rollback ngay
rpm-ostree rollback
systemctl reboot

Silverblue giữ 2 deployment trong GRUB boot menu. Nếu sau reboot mọi thứ tệ hơn, chọn thủ công deployment cũ ngay từ boot screen. Chính tính năng này khiến mình không còn ngại update OS nữa — worst case là 2 phút reboot lại, không phải ngồi debug mấy tiếng.

Toolbox — môi trường development trong container

Toolbox là thứ biến Silverblue từ “thú vị” thành “thực sự dùng được hàng ngày”. Về bản chất, nó tạo Podman container với /home được mount vào, nên bạn truy cập toàn bộ file của mình từ trong container mà không cần copy gì.

Quản lý nhiều toolbox cho từng dự án

# Tạo toolbox với tên riêng
toolbox create --container python-dev
toolbox create --container node-dev
toolbox create --container rust-dev

# Liệt kê tất cả toolbox
toolbox list

# Vào toolbox cụ thể
toolbox enter python-dev

# Xóa toolbox không dùng nữa
toolbox rm python-dev

Trên máy mình có 3 toolbox thường trực: Python projects, Node.js, và một cái sandbox để thử nghiệm lung tung. Mỗi toolbox có bộ package độc lập — xung đột dependency giữa các project không còn là vấn đề nữa.

Dùng distro khác trong Toolbox

Không nhất thiết phải dùng Fedora trong toolbox. Nếu project yêu cầu Ubuntu hoặc cần test package trên distro khác:

# Toolbox chạy Ubuntu 22.04
toolbox create --distro ubuntu --release 22.04 --container ubuntu-env

# Toolbox chạy Fedora 40 (phiên bản cũ hơn để test)
toolbox create --distro fedora --release 40 --container fedora40-test

# Vào ubuntu toolbox
toolbox enter ubuntu-env

Nâng cao: override và rebase

Override package từ base image

Scenario thực tế: Mesa 23.2 có bug flickering với một số GPU Intel — cần override về 22.3 mà không rebuild toàn bộ hệ thống, hoặc đơn giản hơn là gỡ app mặc định không dùng đến:

# Gỡ package ra khỏi base image
rpm-ostree override remove gnome-tour

# Thay package bằng version cụ thể từ file RPM
rpm-ostree override replace ./mesa-libGL-22.3.0.x86_64.rpm

# Xem danh sách overrides hiện tại
rpm-ostree status
# RemovedBasePackages: gnome-tour

Rebase lên phiên bản mới hoặc spin khác

Thay vì reinstall khi muốn lên Fedora 42, bạn rebase trực tiếp — toàn bộ layered packages và config được giữ nguyên:

# Rebase lên Fedora 42 Silverblue
rpm-ostree rebase ostree://fedora:fedora/42/x86_64/silverblue

# Hoặc thử Fedora Kinoite (KDE Plasma thay vì GNOME)
rpm-ostree rebase ostree://fedora:fedora/41/x86_64/kinoite

# Reboot để áp dụng
systemctl reboot

Nếu Fedora 42 có vấn đề, rollback về Silverblue 41 chỉ mất vài giây.

Tips thực tế sau 6 tháng dùng

Flatpak cho tất cả GUI apps

Với Silverblue, triết lý đúng là: GUI apps dùng Flatpak, dev tools dùng Toolbox, driver/kernel dùng rpm-ostree. Đừng cài VS Code hay Slack qua rpm-ostree layer.

# Cài VS Code, Spotify, Slack qua Flatpak
flatpak install flathub com.visualstudio.code
flatpak install flathub com.spotify.Client

# Update tất cả Flatpak apps
flatpak update

# Script update toàn bộ hệ thống
alias sysupdate='rpm-ostree upgrade && flatpak update'

Alias giúp workflow nhanh hơn

# Thêm vào ~/.bashrc
alias tbe='toolbox enter'
alias tbl='toolbox list'
alias rpmst='rpm-ostree status'
alias rpmup='rpm-ostree upgrade'

Khi nào không nên dùng Silverblue

Sau 6 tháng, mình nhận ra Silverblue không phải cho tất cả mọi người:

  • Gaming với NVIDIA proprietary driver: Setup phức tạp hơn đáng kể — dùng Nobara Linux sẽ nhẹ đầu hơn.
  • Server production: Silverblue là desktop OS. Với server, Fedora CoreOS (cùng OSTree) phù hợp hơn.
  • Người mới hoàn toàn với Linux: Fedora Workstation thông thường ít friction hơn để bắt đầu.

Còn với developer — Python, Node.js, Go — Silverblue cộng Toolbox là setup sạch nhất mình từng có. Host system không bị lộn xộn bởi dev dependencies. Update OS an toàn hơn hẳn. Và khi có sự cố, rollback trong vài chục giây — không phải ngồi reinstall mấy tiếng.

Share: