Quản lý ứng dụng Flatpak trên Fedora: Cài đặt, sandbox và tối ưu dung lượng

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

Lúc ổ cứng báo đầy mà không biết tại sao

Hôm đó mình đang làm việc bình thường thì nhận thông báo “No space left on device” khi đang build Docker image. Kiểm tra df -h — partition / đã 97% đầy. Chạy du -sh /* để truy tìm thủ phạm, kết quả khiến mình ngạc nhiên:

$ du -sh /var/lib/flatpak
18G	/var/lib/flatpak

18GB. Chỉ riêng Flatpak. Mình dùng Fedora làm máy development chính gần 2 năm, khá hài lòng với tốc độ cập nhật package — nhưng chưa bao giờ chú ý đến cái khoản runtime âm thầm gom theo từng lần cài app. Bài này là kết quả buổi tối ngồi dọn dẹp và mổ xẻ xem Flatpak thực sự hoạt động như thế nào.

Flatpak là gì và tại sao Fedora dùng nó

Flatpak đóng gói app chạy trong sandbox, tách biệt với phần còn lại của hệ thống. Mỗi app mang theo runtime riêng — bộ thư viện cần thiết để chạy. Nên chuyện cài một app 100MB mà kéo theo vài trăm MB runtime là bình thường, không phải bug.

Fedora Workstation tích hợp Flatpak và Flathub theo mặc định từ Fedora 38. Lý do chính:

  • Ứng dụng GUI như Spotify, Discord, Slack không có RPM chính thức — Flatpak là cách duy nhất để cài sạch.
  • Sandbox giúp cô lập ứng dụng, giảm rủi ro ảnh hưởng đến hệ thống.
  • Cập nhật độc lập với DNF — app mới nhất không cần chờ Fedora release.

Sandbox không đồng nghĩa với an toàn tuyệt đối. Còn dung lượng — để mặc một năm là biết.

Thực hành: Quản lý Flatpak từ A đến Z

Cài đặt và thiết lập Flathub

Trên Fedora Workstation mới cài, Flatpak đã có sẵn. Chỉ cần thêm Flathub repository:

# Thêm Flathub repo (chính thức, nhiều app nhất)
flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo

# Kiểm tra các remote đang có
flatpak remotes

Ngoài Flathub, Fedora còn có fedora remote mặc định — chứa bản build của Fedora team. Thực tế mình ít dùng vì Flathub cập nhật nhanh hơn nhiều.

Cài, tìm kiếm và gỡ ứng dụng

# Tìm kiếm app
flatpak search firefox

# Cài đặt (--user: chỉ cho user hiện tại, tiết kiệm dung lượng hơn)
flatpak install flathub org.mozilla.firefox
flatpak install --user flathub com.spotify.Client

# Chạy app
flatpak run org.mozilla.firefox

# Liệt kê app đã cài
flatpak list --app

# Gỡ app
flatpak uninstall org.mozilla.firefox

# Gỡ app VÀ xóa dữ liệu người dùng
flatpak uninstall --delete-data org.mozilla.firefox

Cần biết: flatpak uninstall mặc định không xóa dữ liệu người dùng. Data vẫn nằm ở ~/.var/app/ — nếu muốn gỡ hẳn, thêm --delete-data.

Hiểu sandbox và quyền truy cập

Cài xong là chạy — hầu hết người dùng dừng lại ở đó. Nhưng permissions mới là chỗ đáng chú ý hơn. Mỗi Flatpak app chạy với quyền hạn được khai báo trong manifest, và một số app khai báo khá rộng tay. Kiểm tra:

# Xem permissions của app
flatpak info --show-permissions com.spotify.Client

# Hoặc dùng flatpak-override để xem/chỉnh sửa
flatpak override --show com.spotify.Client

Một app có thể khai báo quyền truy cập filesystem, network, thiết bị âm thanh… Nếu thấy app có filesystem=home — nghĩa là nó đọc được toàn bộ thư mục home của bạn, không khác gì app native. Sandbox lúc này không còn nhiều ý nghĩa.

Để hạn chế quyền:

# Thu hồi quyền truy cập filesystem
flatpak override --nofilesystem=home com.someapp.App

# Cho phép truy cập thư mục cụ thể
flatpak override --filesystem=~/Downloads com.someapp.App

# Reset về permissions mặc định
flatpak override --reset com.someapp.App

Cách trực quan hơn là dùng Flatseal — GUI quản lý permissions, mình dùng cái này hàng ngày:

flatpak install flathub com.github.tchx84.Flatseal

Tối ưu dung lượng — phần hay bị bỏ qua nhất

Trở lại vấn đề ban đầu: 18GB Flatpak. Nguyên nhân chính là unused runtimes — những runtime cũ còn sót lại sau khi update hoặc gỡ app.

# Kiểm tra tất cả runtimes đang có (bao gồm cả không dùng)
flatpak list --runtime

# Xem dung lượng từng thứ
du -sh /var/lib/flatpak/runtime/*
du -sh ~/.local/share/flatpak/runtime/*  # nếu cài --user

Lệnh mình chạy đầu tiên khi nghi ngờ dung lượng bất thường:

# Xóa tất cả runtimes và apps không còn dùng
flatpak uninstall --unused

# Xem trước sẽ xóa gì (không thực sự xóa)
flatpak uninstall --unused --dry-run

Sau lần đó, mình giải phóng được gần 11GB chỉ bằng một lệnh. Flatpak giữ lại runtime cũ mỗi lần update để rollback khi cần — cơ chế hợp lý, nhưng tốn dung lượng nếu không dọn định kỳ.

Update đều đặn cũng giúp tránh tích lũy version cũ:

# Update tất cả apps và runtimes
flatpak update

# Update một app cụ thể
flatpak update org.mozilla.firefox

# Sau khi update, dọn unused
flatpak uninstall --unused

Cài đặt system-wide vs per-user

Mình hay thấy người dùng Fedora cài Flatpak theo kiểu mặc định (system-wide) cho tất cả mọi thứ. Thực ra nên cân nhắc:

  • System-wide (không có --user): runtime nằm ở /var/lib/flatpak, cần sudo, dùng chung cho tất cả user trên máy.
  • Per-user (--user): runtime nằm ở ~/.local/share/flatpak, không cần sudo, chỉ cho user hiện tại.

Máy cá nhân chỉ có một user — dùng --user cho hầu hết app để không cần sudo và dễ quản lý hơn. Máy nhiều user hoặc server thì system-wide hợp lý hơn.

Script dọn dẹp định kỳ

Mình tạo một script nhỏ và cho vào cron hàng tuần:

#!/bin/bash
# /usr/local/bin/flatpak-cleanup.sh

echo "=== Flatpak cleanup: $(date) ==="
echo "Before:"
du -sh /var/lib/flatpak 2>/dev/null
du -sh ~/.local/share/flatpak 2>/dev/null

flatpak update -y
flatpak uninstall --unused -y

echo "After:"
du -sh /var/lib/flatpak 2>/dev/null
du -sh ~/.local/share/flatpak 2>/dev/null
# Cấp quyền thực thi và chạy thử
chmod +x /usr/local/bin/flatpak-cleanup.sh
/usr/local/bin/flatpak-cleanup.sh

# Thêm vào crontab (chạy mỗi Chủ nhật 3 giờ sáng)
crontab -e
# Thêm dòng:
# 0 3 * * 0 /usr/local/bin/flatpak-cleanup.sh >> /var/log/flatpak-cleanup.log 2>&1

Kết luận

Flatpak đúng là tiện — Spotify, Discord, Slack cài sạch không cần mò RPM unofficial hay thêm repo lạ. Nhưng nếu không chủ động dọn dẹp, dung lượng sẽ leo lên hàng chục GB trong lúc bạn không hay — đúng kiểu mình đã gặp phải.

Nhớ hai lệnh là đủ: flatpak uninstall --unused để dọn runtime thừa, và flatpak override (hoặc Flatseal) để kiểm soát permissions. Script cleanup hàng tuần lo phần còn lại.

Sau khi dọn dẹp và chuyển sang per-user install, máy mình giảm từ 18GB xuống còn khoảng 4GB. Vẫn không phải con số nhỏ — nhưng xứng đáng với những gì Flatpak mang lại.

Share: