作者:克亮 原文链接:https://bbs.deepin.org/post/291716
什么是pica ?pica 怎么用?
官方文档介绍:https://linyaps.org.cn/guide/ll-pica/introduction.html
玲珑pica是一套用于将不同格式的应用包(deb、AppImage、Flatpak)转换为玲珑(Linglong)格式应用包工具集。该工具集由二进制程序和脚本组成,形成了一个完整的应用包转换生态系统。
deepin V23-25系统可以通过右键打开终端 输入 apt download linglong-pica 获取安装deb包
目前仓库最新版本是 linglong-pica_1.2.4-1+u005_amd64.deb

我们可以通过dpkg-deb -R 命令来解包deb包,一探究竟里面都有些什么内容(里面包含二进制文件及相关脚本)


- ll-pica – 主要工具,用于将 DEB 包转换为 玲珑应用(layer 、uab-离线包)
- ll-pica-flatpak – 用于将 Flatpak 应用转换为玲珑应用
- ll-appimage-convert – 用于将 AppImage 应用转换为玲珑应用
- ll-convert-tool – 一个辅助脚本,提供各种工具函数
DEB 包转换(ll-pica)/ AppImage 应用转换(ll-appimage-convert)/ Flatpak 应用转换(ll-pica-flatpak)
DEB 包转换(ll-pica)
https://linyaps.org.cn/guide/ll-pica/convert.html
AppImage 应用转换(ll-appimage-convert)
https://linyaps.org.cn/guide/ll-appimage-convert/convert-appimage.html
Flatpak 应用转换(ll-pica-flatpak)
https://linyaps.org.cn/guide/ll-flatpak-convert/convert-flatpak.html
我们来重点学习和理解 如何利用ll-pica-flatpak convert 实现将flatpak的应用转换成 玲珑应用
ll-pica-flatpak convert 工作原理详解
1. 初始化和配置-(首次运行有点久)
- 环境设置:
- 设置 Flathub 缓存目录:
$HOME/.cache/linglong-pica-flathub
- 设置配置文件:
$HOME/.pica/ll-pica-flatpak-config.json
- 设置引用文件:
$HOME/.pica/ll-pica-flatpak-refs.txt
- 设置 Flathub 缓存目录:
- 参数处理:
- 接收应用 ID
- 处理可选参数:
--base
:指定基础镜像名称--base-version
:指定基础镜像版本--version
:指定应用版本--build
:是否构建 UAB 包--layer
:是否导出为layer格式安装包
- 初始化 ostree 仓库:
- 创建 ostree 仓库:
ostree init --repo="$FLATHUB_CACHE" --mode bare-user-only
- 添加 Flathub 远程仓库:
ostree --repo="$FLATHUB_CACHE" remote add --if-not-exists --no-sign-verify flathub "$FLATHUB_URL"
- 创建 ostree 仓库:
2. 应用获取和提取
- 生成引用缓存:
- 如果引用文件不存在,生成引用缓存:
ll-pica-flatpak-utils generate_ref_cache
- 如果引用文件不存在,生成引用缓存:
- 拉取应用:
- 使用 ostree 拉取应用:
ostree --repo="$FLATHUB_CACHE" pull "$REF"
- 其中
$REF
的格式为:flathub:app/$APPID/$ARCH/stable
- 使用 ostree 拉取应用:
- 检出应用:
- 创建工作目录:
mkdir -p "$WORKDIR"
- 检出应用:
ostree --repo="$FLATHUB_CACHE" checkout "$REF" "$WORKDIR/flatpak"
- 创建工作目录:
3. 元数据提取和处理
- 提取 Flatpak 元数据:
- 从 metadata 文件中提取命令:
grep '^command=' $WORKDIR/flatpak/metadata
- 提取运行时信息:
grep '^runtime=' "$WORKDIR"/flatpak/metadata
- 从 metadata 文件中提取命令:
- 确定玲珑基础镜像:
- 基于 Flatpak 运行时生成玲珑基础镜像名称:
org.deepin.base.flatpak.$(echo "$FLATPAK_RUNTIME"|awk -F'.' '{print $2}')
- 生成基础镜像版本:将 Flatpak 运行时版本转换为玲珑版本格式
- 基于 Flatpak 运行时生成玲珑基础镜像名称:
4. 路径调整
- 处理桌面文件:
- 查找所有 .desktop 文件
- 提取 Exec 行
- 将
/app
路径替换为/opt/apps/$APPID/files
- 确定二进制文件路径:
- 从 Exec 行提取二进制文件名
- 根据路径类型(绝对/相对)确定最终路径
5. 生成玲珑配置文件
1.创建 linglong.yaml
2.创建 profile 文件
6. 构建和导出
- 构建 UAB 包:
- 如果指定了
--build
选项,执行:ll-builder build
- 如果指定了
- 导出:
- 如果指定了
--layer
选项,执行:ll-builder export --layer
- 否则执行:
ll-builder export
- 如果指定了
经过大量应用测试,发现通过ostree 拉取应用时间比想象中的要久,而且非常不稳定,为了解决这个问题。作了好几套方案,把心路历程跟大家交流如下:
对于新手来说 首先要先本地配置好Flatpak 商店,打开网址 https://flathub.org/zh-Hans 根据自己的发行版 安装Flatpak,这里以Deepin 来演示。


安装 Flatpak
sudo apt install flatpak
添加 Flathub 仓库
flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo
更换为国内镜像——(这里提供上海交大的两个国内高速镜像站点-思源–致远)
sudo flatpak remote-modify flathub --url=https://mirror.sjtu.edu.cn/flathub
sudo flatpak remote-modify flathub --url=https://mirrors.sjtug.sjtu.edu.cn/flathub
如果想恢复官方源:
flatpak remote-modify flathub --url=https://dl.flathub.org/repo
如果想查看flatpak仓库的详细信息
flatpak remotes --show-details

到这里,针对Flatpak 部分就已经介绍完毕,如有错误,请多执教!
方法一:将Flathub 缓存目录 config 里面的默认仓库 改为上海交大的国内镜像站点)如下图

补充几个非常重要的命令 在这里分享
1.玲珑base 和 runtime查询方法
仅显示最新版
ll-cli search . --type=runtime

查看仓库中所有版本
ll-cli search . --type=runtime --show-all-version

下面红色框选部分就是 基于 Flatpak 运行时生成玲珑基础镜像名称
(部分flatpak 应用如果没有对应的runtime版本,可以手动修改linglong.yaml里面的版本号来测试是否可以正常运行)

2.Flatpak 查询应用程序的元数据信息(无需本地安装该应用)
flatpak remote-info [远程仓库名] [应用ID]
比如我想查询一个应用ID为 net.nokyan.Resources 在终端输入以下命令
flatpak remote-info flathub net.nokyan.Resources

发表回复