Flatpak打包应用,使用debpak列出依赖树
筛选依赖的高效流程获取声明依赖用 dpkg -I your-package.deb 获取官方依赖列表。分析实际依赖用 ldd 分析 .deb 包内的库文件找出所有实际需要的共享库。转换为包名对于 ldd 列出的每个 .so 文件用 dpkg -S 库文件路径 查找它属于哪个软件包获取递归依赖用 apt-cache depends 或 apt-rdepends 获取所有依赖包的完整列表。与 Flatpak 运行时对比查阅 org.freedesktop.Platform 的文档移除其中已包含的库可使用debpak列出依赖树一 准备工作# 添加 Flathub 远程源若未添加flatpak remote-add--user--if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo# 创建工作目录并将 libmysqlclient21 DEB 包放入 debs/ 子目录mkdir-p~/flatpak-mysql-client/debs# 假设你已经下载了 libmysqlclient21_8.0.46-1ubuntu24.04_amd64.debcp/path/to/libmysqlclient21_8.0.46-1ubuntu24.04_amd64.deb ~/flatpak-mysql-client/debs/cd~/flatpak-mysql-client二 安装 Flatpak 运行时与 SDKflatpak install --user org.freedesktop.Platform//24.08 org.freedesktop.Sdk//24.08 -y下载精确匹配的依赖包进入 debs/ 目录下载 mysql-common 和 libssl3t64。必须确保版本与你的 libmysqlclient21 完全一致可通过 apt show libmysqlclient21 在 Ubuntu 24.04 上查看依赖版本。cd~/flatpak-mysql-client/debswgethttp://archive.ubuntu.com/ubuntu/pool/main/m/mysql-8.0/mysql-common_8.0.46-1ubuntu24.04_all.debwgethttp://archive.ubuntu.com/ubuntu/pool/main/o/openssl/libssl3t64_3.0.13-0ubuntu3_amd64.deb# 确认三个 DEB 文件均存在ls-1*.deb版本一致性若官方仓库更新了版本号请访问 Ubuntu 24.04 软件包库 查找与你的 libmysqlclient21 相同构建版本的依赖包并相应调整下载命令和后续清单中的文件名。三 编写 Flatpak 清单文件 com.example.mysqlclient.json在工作目录 ~/flatpak-mysql-client/ 下创建 com.example.mysqlclient.json内容如下{app-id:com.example.mysqlclient,runtime:org.freedesktop.Platform,runtime-version:24.08,sdk:org.freedesktop.Sdk,command:entrypoint.sh,finish-args:[--socketnetwork,--filesystemhome,--envLD_LIBRARY_PATH/app/lib:/app/usr/lib/x86_64-linux-gnu,--envMYSQL_HOME/app/etc/mysql],modules:[{name:mysql-common,buildsystem:simple,sources:[{type:file,path:debs/mysql-common_8.0.46-1ubuntu24.04_all.deb,sha256:替换为实际SHA256}],build-commands:[ar x mysql-common_*.deb,zstd -d -c data.tar.zst | tar xf - -C /app,rm -f *.tar.zst control.tar.zst debian-binary]},{name:libssl3,buildsystem:simple,sources:[{type:file,path:debs/libssl3t64_3.0.13-0ubuntu3_amd64.deb,sha256:替换为实际SHA256}],build-commands:[ar x libssl3t64_*.deb,zstd -d -c data.tar.zst | tar xf - -C /app,rm -f *.tar.zst control.tar.zst debian-binary,mkdir -p /app/lib,ln -s /app/usr/lib/x86_64-linux-gnu/libssl.so.3 /app/lib/libssl.so.3,ln -s /app/usr/lib/x86_64-linux-gnu/libcrypto.so.3 /app/lib/libcrypto.so.3]},{name:libmysqlclient,buildsystem:simple,sources:[{type:file,path:debs/libmysqlclient21_8.0.46-1ubuntu24.04_amd64.deb,sha256:替换为实际SHA256}],build-commands:[ar x libmysqlclient21_*.deb,zstd -d -c data.tar.zst | tar xf - -C /app,rm -f *.tar.zst control.tar.zst debian-binary,mkdir -p /app/lib,ln -s /app/usr/lib/x86_64-linux-gnu/libmysqlclient.so.21 /app/lib/libmysqlclient.so.21]},{name:entrypoint,buildsystem:simple,sources:[{type:script,dest-filename:entrypoint.sh,commands:[#!/bin/bash,# finish-args 已保证基本路径这里再加固一次并保留原有值,export LD_LIBRARY_PATH/app/lib:/app/usr/lib/x86_64-linux-gnu${LD_LIBRARY_PATH::$LD_LIBRARY_PATH},export MYSQL_HOME/app/etc/mysql,echo MySQL client library environment is ready.,exec bash]}],build-commands:[install -Dm755 entrypoint.sh /app/bin/entrypoint.sh]}]}设计要点finish-args 中显式设置了 LD_LIBRARY_PATH确保任何通过 command 启动的程序都能自动获得库路径。入口脚本进一步追加路径保证即使外部覆盖也不会丢失。使用 ar zstd 解压 DEB 包兼容 Ubuntu 24.04 的 .zst 压缩格式。四 计算 SHA256 并填入清单cd~/flatpak-mysql-client sha256sum debs/*.deb将输出的三个哈希值分别替换清单中对应的 “sha256”: “替换为实际SHA256”。五 构建并安装 Flatpak 应用cd~/flatpak-mysql-client# 若已安装旧版本先卸载flatpak uninstall--usercom.example.mysqlclient-y2/dev/null||true# 构建并安装flatpak-builder--user--install--force-clean build-dir com.example.mysqlclient.json构建成功后应用会自动注册到用户级 Flatpak 仓库。六 测试验证启动应用进入沙箱环境flatpak run com.example.mysqlclient在打开的 Bash 中执行以下验证命令# 检查真实库文件是否存在ls-l/app/usr/lib/x86_64-linux-gnu/libmysqlclient.so.21# 检查所有动态依赖是否满足使用运行时链接器输出不应含 not found/lib64/ld-linux-x86-64.so.2--list/app/usr/lib/x86_64-linux-gnu/libmysqlclient.so.21# 查看库版本strings /app/usr/lib/x86_64-linux-gnu/libmysqlclient.so.21|grep^8\.0若上述命令均正常则打包成功。七 打包为离线安装文件.flatpakflatpak build-bundle ~/.local/share/flatpak/repo mysqlclient.flatpak com.example.mysqlclient生成的 mysqlclient.flatpak 可拷贝到其他机器安装flatpak install --user mysqlclient.flatpak集成你自己的应用直接替换 command若你想发布一个依赖 MySQL 客户端库的自己的程序例如 myapp可按以下步骤修改清单将你的可执行文件如 myapp放入工作目录 ~/flatpak-mysql-client/。修改清单文件将顶层 “command”: “entrypoint.sh” 改为 “command”: “myapp”。在 modules 末尾添加一个模块用于安装你的程序可删除 entrypoint 模块。重新构建同步骤 5。添加模块示例{name:myapp,buildsystem:simple,sources:[{type:file,path:myapp,sha256:替换为实际SHA256}],build-commands:[install -Dm755 myapp /app/bin/myapp]}因为 finish-args 已设置 LD_LIBRARY_PATH你的程序 无需任何包装脚本 即可直接加载库文件。第一步杀掉占用 8080 端口的旧进程 sudo lsof -i :8080 # 查看哪个进程占用 # 或直接 kill 所有 nginx 进程 pkill -9 nginx 彻底清理所有缓存并重新构建 cd ~/flatpak-nginx # 删除旧构建目录和缓存 rm -rf build-dir rm -rf ~/.cache/flatpak-builder/build/nginx-* rm -rf ~/.cache/flatpak-builder/build/nginx-config-* rm -rf ~/.cache/flatpak-builder/build/launch-script-* # 卸载旧版本确保干净 flatpak uninstall --user org.nginx.nginx -y rm -rf ~/.var/app/org.nginx.nginx # 重新构建并安装无缓存完全重新编译 flatpak-builder --user --install --force-clean build-dir org.nginx.nginx.json运行测试flatpak run org.nginx.nginx命令检查 /var/tmp/nginx 目录是否被正确创建flatpak run --commandls org.nginx.nginx /var/tmp/nginx不存在说明启动脚本未执行

相关新闻