Fedora System Extensions: Tuyệt chiêu vọc vạch thư mục /usr mà không cần Reboot

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

Nỗi khổ mang tên Reboot trên Fedora Immutable

Dùng Fedora Silverblue hay Kinoite sướng nhất là sự ổn định. Thư mục /usr được khóa chặt (read-only), giúp hệ thống gần như không thể bị hỏng do lỡ tay. Thế nhưng, cái giá phải trả là mỗi khi cần cài thêm một công cụ bằng rpm-ostree install, bạn lại phải khởi động lại máy.

Cảm giác chờ đợi 30-60 giây chỉ để dùng một thư viện tạm thời thực sự rất ức chế. Với một người dùng Fedora làm máy dev chính như mình, việc này làm gián đoạn luồng công việc liên tục. May mắn thay, systemd-sysext (System Extensions) sinh ra để giải quyết đúng bài toán này.

Cơ chế của nó khá thông minh: thay vì sửa trực tiếp vào image gốc, nó tạo một lớp phủ (overlay) các binary và library vào /usr ngay lúc hệ thống đang chạy. Bạn có thêm công cụ mới mà không cần chạm vào sự toàn vẹn của OS gốc. Cực kỳ linh hoạt!

Chuẩn bị vũ khí

Tin tốt là systemd-sysext đã có sẵn trên hầu hết các bản Fedora hiện đại. Bạn chỉ cần kiểm tra xem systemd có đạt bản v248 trở lên hay không bằng lệnh:

systemd --version

Tiếp theo, hãy tạo nơi trú ngụ cho các bản mở rộng. Mình khuyên bạn nên dùng /var/lib/extensions vì nó nằm ngoài phân vùng read-only, giúp việc quản lý dễ dàng hơn:

sudo mkdir -p /var/lib/extensions

Thực hành: Tạo Extension cho trình soạn thảo ‘Micro’

Thay vì dùng ví dụ “Hello World” sáo rỗng, hãy thử đưa trình soạn thảo micro vào hệ thống mà không cần cài qua RPM hay Flatpak.

Bước 1: Xây dựng cấu trúc thư mục

Mỗi extension cần mô phỏng đúng cấu trúc của /usr. Chúng ta sẽ tải bản portable của micro về và đặt vào đúng vị trí.

# Tạo thư mục tạm
mkdir -p ~/micro-ext/usr/bin

# Tải binary micro (ví dụ cho kiến trúc x86_64)
cd ~/micro-ext/usr/bin
curl -L https://github.com/zyedidia/micro/releases/download/v2.0.11/micro-2.0.11-linux64.tar.gz | tar xvz --strip-components=1 micro-2.0.11/micro

Bước 2: Khai báo Metadata (Bắt buộc)

Để systemd chấp nhận “gắn” extension này, bạn phải chứng minh nó tương thích với phiên bản Fedora hiện tại. File metadata này là tấm thẻ căn cước của extension.

mkdir -p ~/micro-ext/usr/lib/extension-release.d/

# Lấy ID và Version của OS hiện tại
source /etc/os-release

cat <<EOF > ~/micro-ext/usr/lib/extension-release.d/extension-release.micro
ID=$ID
VERSION_ID=$VERSION_ID
EOF

Mẹo nhỏ: Nếu bạn muốn extension này chạy trên mọi bản Fedora, hãy dùng ID=_any. Tuy nhiên, nếu extension chứa thư viện .so phức tạp, hãy chỉ định chính xác phiên bản để tránh lỗi segfault.

Bước 3: Triển khai

Copy toàn bộ thư mục vừa tạo vào vùng quản lý của hệ thống:

sudo cp -r ~/micro-ext /var/lib/extensions/micro

Kích hoạt: Không cần đợi chờ

Bây giờ là lúc tận hưởng thành quả. Hãy yêu cầu systemd trộn extension mới vào hệ thống:

sudo systemd-sysext refresh

Kiểm tra xem micro đã có mặt trong /usr/bin chưa:

which micro
# Kết quả: /usr/bin/micro

Bạn có thể gõ micro để soạn thảo ngay lập tức. Mọi thứ diễn ra trong tích tắc, không cần khởi động lại, không cần rpm-ostree transaction.

Xử lý sự cố và Dọn dẹp

Đôi khi mọi thứ không suôn sẻ như ý muốn. Dưới đây là vài kinh nghiệm thực tế của mình.

Lỗi quyền truy cập (SELinux)

Fedora rất khắt khe. Nếu bạn thấy file trong /usr/bin nhưng không chạy được (Permission Denied), khả năng cao là do SELinux context bị sai. Hãy chạy lệnh này để sửa:

sudo restorecon -Rv /var/lib/extensions

Gỡ bỏ extension

Muốn hệ thống sạch sẽ như cũ? Chỉ cần unmerge và xóa thư mục:

sudo systemd-sysext unmerge
sudo rm -rf /var/lib/extensions/micro
sudo systemd-sysext refresh

Sử dụng systemd-sysext là cách chuyên nghiệp để tùy biến Fedora Immutable. Nó giữ cho image gốc luôn sạch sẽ nhưng vẫn đảm bảo bạn có đủ công cụ cần thiết để làm việc hiệu quả.

Share: