Tại sao lập trình viên Linux không thể bỏ qua flatpak-builder?
Cảnh tượng ứng dụng chạy mượt trên máy mình nhưng lại “ngỏm” khi sang máy người dùng vì thiếu thư viện vốn chẳng xa lạ gì với dân dev Linux. Sau 2 năm dùng Fedora làm máy chính, mình nhận ra Flatpak là giải pháp cứu cánh hiệu quả nhất. Thay vì tốn thời gian build riêng cho Ubuntu (.deb), Arch (.pkg.tar.zst) hay Fedora (.rpm), bạn chỉ cần đóng gói một lần duy nhất.
Hãy coi flatpak-builder như một đầu bếp tự động. Bạn đưa cho nó một bản “công thức” (file manifest), và nó sẽ tự gom nhặt nguyên liệu, nấu nướng trong một căn bếp biệt lập (sandbox) để cho ra món ăn hoàn chỉnh. Kết quả là một gói cài đặt chạy được trên hầu hết các bản phân phối Linux hiện nay, kể cả SteamOS trên Steam Deck.
Hiện tại, Flathub đang phục vụ hàng triệu lượt tải mỗi tháng. Việc đưa app lên đây không chỉ giúp bạn tiếp cận người dùng nhanh hơn mà còn loại bỏ hoàn toàn nỗi lo về xung đột phiên bản thư viện hệ thống.
Thiết lập môi trường build trên Fedora
Fedora vốn là “người nhà” của Flatpak nên việc cài đặt cực kỳ nhanh gọn. Tuy nhiên, hãy chuẩn bị sẵn khoảng 2-3GB dung lượng ổ cứng vì các bộ SDK thường khá nặng.
1. Cài đặt công cụ cốt lõi
Mở terminal và cài đặt trình build bằng lệnh:
sudo dnf install flatpak-builder
2. Tải SDK và Runtime (Bộ khung phát triển)
Bạn cần một môi trường nền để app hoạt động. Ở đây mình chọn Freedesktop SDK 23.08 – tiêu chuẩn chung cho các app không phụ thuộc quá nhiều vào GNOME hay KDE:
flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
flatpak install flathub org.freedesktop.Sdk//23.08 org.freedesktop.Platform//23.08
Viết file Manifest: Linh hồn của gói Flatpak
File Manifest (định dạng .yml hoặc .json) là nơi bạn ra lệnh cho hệ thống. Đừng để các dòng code làm bạn rối, hãy tập trung vào ba phần chính: định danh, quyền hạn và nguồn mã nguồn.
Dưới đây là ví dụ cho một ứng dụng Python có tên itfromzero-app. Mình sẽ lưu thành file org.itfromzero.App.yml.
app-id: org.itfromzero.App
runtime: org.freedesktop.Platform
runtime-version: '23.08'
sdk: org.freedesktop.Sdk
command: itfromzero-app
finish-args:
- --socket=x11 # Hiện giao diện lên màn hình
- --share=network # Cho phép tải dữ liệu từ internet
- --filesystem=home:ro # Chỉ cho phép đọc file trong thư mục home
modules:
- name: itfromzero-app
buildsystem: simple
build-commands:
- install -D app.py /app/bin/itfromzero-app
sources:
- type: file
path: app.py
Những điểm cần lưu ý kỹ:
- app-id: Phải là duy nhất. Nếu bạn sở hữu domain
myapp.com, hãy đặt làcom.myapp.App. - finish-args: Đây là “hàng rào” bảo mật. Đừng cấp quyền quá đà. Ví dụ, nếu app không cần in ấn, đừng thêm
--socket=cups. - modules: Nếu app dùng thêm thư viện bên thứ ba (như NumPy hay Request), bạn phải khai báo chúng tại đây để builder tự tải về.
Quy trình Build và Kiểm thử nhanh
Khi đã chuẩn bị xong file manifest và file app.py, hãy bắt đầu quá trình đóng gói. Mình thường dùng tham số --force-clean để đảm bảo mỗi lần build đều sạch sẽ, không bị dính rác từ lần trước.
flatpak-builder --force-clean build-dir org.itfromzero.App.yml
Sau khi lệnh chạy xong, đừng vội xuất bản ngay. Hãy dùng lệnh dưới đây để chạy app trực tiếp từ folder build. Đây là lúc bạn kiểm tra xem các nút bấm có hoạt động không, hay app có bị crash do thiếu quyền truy cập file hay không:
flatpak-builder --run build-dir org.itfromzero.App.yml itfromzero-app
Mẹo nhỏ: Nếu app báo lỗi “Permission denied”, hãy quay lại kiểm tra phần finish-args trong manifest. 90% lỗi của người mới bắt đầu nằm ở đó.
Đưa ứng dụng lên Flathub
Flathub không lưu trữ code của bạn, họ chỉ lưu trữ manifest. Quy trình này giống như việc bạn gửi một bài báo để biên tập viên duyệt:
- Fork & Branch: Fork repo flathub/flathub và tạo một nhánh mới mang tên app-id của bạn.
- Submit PR: Gửi Pull Request chứa file manifest. Đội ngũ Flathub sẽ kiểm tra xem app của bạn có an toàn và tuân thủ tiêu chuẩn cộng đồng không.
- Bot kiểm tra: Một hệ thống bot sẽ tự động build thử app của bạn trên các kiến trúc chip x86_64 và ARM (như Raspberry Pi).
Đặc biệt, bạn cần chuẩn bị một file AppData (XML). Thiếu file này, app của bạn sẽ trông rất “trọc” trên kho ứng dụng vì không có ảnh chụp màn hình và mô tả.
Kỹ thuật Debug khi build lỗi
Build Flatpak hiếm khi thành công ngay từ lần đầu. Dưới đây là ba chiêu mình thường dùng để xử lý sự cố:
1. Truy tìm thư viện thất lạc
Nếu gặp lỗi No such file or directory khi compile, hãy kiểm tra xem thư viện đó đã được thêm vào mục modules chưa. Đôi khi bạn cần build thêm 3-4 thư viện phụ trợ (dependencies) trước khi build được app chính.
2. Soi log hệ thống
Dùng lệnh flatpak run -vv để bật chế độ verbose. Mọi hoạt động của app bên trong sandbox sẽ hiện ra rõ mồn một, giúp bạn biết chính xác tại sao app không kết nối được database hay không nhận diện được webcam.
3. Reset môi trường
Nếu mọi thứ trở nên quá hỗn loạn, hãy xóa sạch cache build bằng lệnh:
rm -rf .flatpak-builder build-dir
Làm chủ flatpak-builder không chỉ là học một công cụ, mà là cách bạn chuyên nghiệp hóa việc phân phối phần mềm trên Linux. Chúc bạn sớm có ứng dụng đầu tiên xuất hiện trên trang chủ của Flathub!

