Flatpak,它是一种 Linux 跨发行版的通用软件包管理,使用沙箱隔离环境来运行程序,为了解决发行版应用分发碎片化、依赖冲突、权限管理混乱问题。开发者可以把应用统一封装成 flatpak 格式进行分发,这样就不用关心那些杂七杂八的问题,主要用于桌面应用(当然如果想打包 cli 也是可以的)
这里以 Debian 系为例。
# Debian / Ubuntu
sudo apt install flatpak
添加 flathub 官方仓库
flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo
如果使用 gnome 桌面,可以安装
sudo apt install gnome-software-plugin-flatpak
如果使用 kde plasma 桌面,可以安装
sudo apt install plasma-discover-backend-flatpak
# 安装应用
flatpak install <appid>
# 更新应用
flatpak update <appid>
# 卸载应用
flatpak uninstall <appid>
# 运行应用
flatpak run <appid>
# 列出正在运行的应用
flatpak ps
# 列出已安装的包
flatpak list
# 杀掉应用
flatpak kill 实例
首先编写一个 .yml 的文件,比如可以为:cn.glumi.hello.yml,而内容格式为:
id: cn.glumi.hello
runtime: org.freedesktop.Platform
runtime-version: '25.08'
sdk: org.freedesktop.Sdk
command: hello.sh
modules:
- name: hello
buildsystem: simple
build-commands:
- install -D hello.sh /app/bin/hello.sh
sources:
- type: file
path: hello.sh
其中这里 id 就是我们的应用 appid, runtime 和 runtime-version 是它所依赖的运行时环境和版本。
sdk 这里也是必须的基础环境,command 是我们应用的启动命令。
我们可以这样去安装它们:
flatpak install org.freedesktop.Platform/x86_64/25.08 org.freedesktop.Sdk/x86_64/25.08
这里我们只有一个模块,叫 hello,它的源文件是一个 hello.sh 的shell 脚本,内容非常简单:
echo "Hello Flatpak"
buildsystem 为构建类型,它可以是 make(makefile) 而 simple 是一个通用的构建方式,用于那些不使用那些构建系统的项目。你可以手动指定构建和安装命令。而 build-commands 就是我们的所做的自定义命令,这里我只做了 install 操作(相当于文件拷贝,但可设置权限和所有者等)
但为什么会是 /app/bin/hello.sh 呢?
你可以简单理解为:/app 相当于 flatpak 应用的根目录
Flatpak 的核心设计理念之一就是应用沙箱化,即每个应用都运行在一个隔离的环境中,与系统和其他应用隔离开来。 系统目录是只读的:在 Flatpak 构建过程中,你可以把整个构建环境想象成一个微型操作系统。系统级的目录,比如 /usr、/bin、/lib 等,都属于只读的运行时(runtime)。你无法在构建脚本中向这些目录写入任何文件。
所以 Flatpak 也提供了一个专门的目录 /app,作为你应用的专属安装空间。你打包的所有文件(可执行文件、库、图标、配置等)都应该安装到这个目录下。
在我们搞清楚基本情况后,就开始构建吧。 此时假如我们当前目录下文件是这样的
├── cn.glumi.hello.yml
└── hello.sh
接下来执行:flatpak-builder --force-clean --user --repo=repo --install build-dir cn.glumi.hello.yml
这里有非常多参数,具体作用:
--user:将最终构建好的应用安装到当前用户的 Flatpak 目录中
--repo:这里是你要指定的本地仓库名,为什么需要呢?因为 Flatpak 应用的安装通常是从一个仓库(无论是本地的还是远程的,如 Flathub)进行的
build-dir:这里是我们构建过程所产生的应用程序文件夹
--force-clean : 在开始新的构建之前,会删除之前同名的构建过程文件夹比如 build-dir
执行命令后如果一切按预期工作,没有报错的话,接下来目录是这样的:
├── build-dir
├── cn.glumi.hello.yml
├── hello.sh
└── repo
接下来我们可以使用以下命令来导出一个 flatpak 文件:
flatpak build-bundle ./repo hello.flatpak cn.glumi.hello
命令说明:这里 ./repo 是我们选的本地仓库,而 hello.flatpak 是要导出的软件包文件名,cn.glumi.hello 就是 appid.
不出意外就是这样:

可以使用 flatpak install 去安装,并运行。
