news 2026/7/6 4:56:31

Flatpak打包应用,使用debpak列出依赖树

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Flatpak打包应用,使用debpak列出依赖树

筛选依赖的高效流程:

  1. 获取声明依赖:用 dpkg -I your-package.deb 获取官方依赖列表。
  2. 分析实际依赖:用 ldd 分析 .deb 包内的库文件,找出所有实际需要的共享库。
  3. 转换为包名:对于 ldd 列出的每个 .so 文件,用 dpkg -S <库文件路径> 查找它属于哪个软件包
  4. 获取递归依赖:用 apt-cache depends 或 apt-rdepends 获取所有依赖包的完整列表。
  5. 与 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 运行时与 SDK

flatpak 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":["--socket=network","--filesystem=home","--env=LD_LIBRARY_PATH=/app/lib:/app/usr/lib/x86_64-linux-gnu","--env=MYSQL_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'

若上述命令均正常,则打包成功。

七 打包为离线安装文件(.flatpak)

flatpak build-bundle ~/.local/share/flatpak/repo mysqlclient.flatpak com.example.mysqlclient
生成的 mysqlclient.flatpak 可拷贝到其他机器安装:
flatpak install --user mysqlclient.flatpak

集成你自己的应用(直接替换 command)

若你想发布一个依赖 MySQL 客户端库的自己的程序(例如 myapp),可按以下步骤修改清单:

  1. 将你的可执行文件(如 myapp)放入工作目录 ~/flatpak-mysql-client/。
  2. 修改清单文件:
    将顶层 “command”: “entrypoint.sh” 改为 “command”: “myapp”。
    在 modules 末尾添加一个模块用于安装你的程序(可删除 entrypoint 模块)。
  3. 重新构建(同步骤 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 --command=ls org.nginx.nginx /var/tmp/nginx
不存在,说明启动脚本未执行

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/6 4:56:15

微光汇聚:公益宣讲PPT怎么做才能打动人

做公益宣讲&#xff0c;最怕台上的人讲得热血沸腾&#xff0c;台下的人刷着手机无动于衷。 很多时候不是活动没意义&#xff0c;是那份PPT把意义全埋没了——要么满屏文字看得人眼晕&#xff0c;要么模板太花哨把主题冲淡了。我自己帮社区做过好几次公益宣讲的PPT&#xff0c;踩…

作者头像 李华
网站建设 2026/7/6 4:46:51

LDA主题模型实战:折肘法与困惑度结合,5步确定最优主题数K

LDA主题模型实战&#xff1a;折肘法与困惑度结合确定最优主题数的工程化实践1. 理解LDA主题模型与主题数选择的核心挑战在文本分析领域&#xff0c;LDA&#xff08;Latent Dirichlet Allocation&#xff09;是一种广泛使用的无监督主题建模方法。它能够从文档集合中自动发现潜在…

作者头像 李华
网站建设 2026/7/6 4:46:14

知识图谱赋能RAG:构建可解释、可追溯的结构化推理系统

1. 项目概述&#xff1a;为什么知识图谱正在成为RAG应用的“结构化大脑”你有没有遇到过这样的情况&#xff1a;向一个AI助手提问“张伟在哪家公司担任CTO&#xff1f;”&#xff0c;它翻遍了整篇PDF简历却只答出“张伟是技术负责人”&#xff0c;漏掉了最关键的公司名和职位全…

作者头像 李华
网站建设 2026/7/6 4:42:57

MongoDB的应用

近&#xff0c;因为工作的原因&#xff0c;我们正在使用MongoDB做一些大数据量存储的尝试。对于MongoDB的复制功能部署问题&#xff0c;有一些无奈&#xff01;首先说明一下我们的情况&#xff0c;我们需要使用的项目情况&#xff0c;对于MongoDB的期望&#xff0c;MongoDB的无…

作者头像 李华