作者:克亮 原文链接: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

image.png

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

image.png
image.png
  1. ll-pica – 主要工具,用于将 DEB 包转换为 玲珑应用(layer 、uab-离线包)
  2. ll-pica-flatpak – 用于将 Flatpak 应用转换为玲珑应用
  3. ll-appimage-convert – 用于将 AppImage 应用转换为玲珑应用
  4. 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. 初始化和配置-(首次运行有点久)

  1. 环境设置
    • 设置 Flathub 缓存目录: $HOME/.cache/linglong-pica-flathub
    • 设置配置文件: $HOME/.pica/ll-pica-flatpak-config.json
    • 设置引用文件: $HOME/.pica/ll-pica-flatpak-refs.txt
  2. 参数处理
    • 接收应用 ID
    • 处理可选参数:
      • --base :指定基础镜像名称
      • --base-version :指定基础镜像版本
      • --version :指定应用版本
      • --build :是否构建 UAB 包
      • --layer :是否导出为layer格式安装包
  3. 初始化 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"

2. 应用获取和提取

  1. 生成引用缓存
    • 如果引用文件不存在,生成引用缓存: ll-pica-flatpak-utils generate_ref_cache
  2. 拉取应用
    • 使用 ostree 拉取应用: ostree --repo="$FLATHUB_CACHE" pull "$REF"
    • 其中 $REF 的格式为: flathub:app/$APPID/$ARCH/stable
  3. 检出应用
    • 创建工作目录: mkdir -p "$WORKDIR"
    • 检出应用: ostree --repo="$FLATHUB_CACHE" checkout "$REF" "$WORKDIR/flatpak"

3. 元数据提取和处理

  1. 提取 Flatpak 元数据
    • 从 metadata 文件中提取命令: grep '^command=' $WORKDIR/flatpak/metadata
    • 提取运行时信息: grep '^runtime=' "$WORKDIR"/flatpak/metadata
  2. 确定玲珑基础镜像
    • 基于 Flatpak 运行时生成玲珑基础镜像名称: org.deepin.base.flatpak.$(echo "$FLATPAK_RUNTIME"|awk -F'.' '{print $2}')
    • 生成基础镜像版本:将 Flatpak 运行时版本转换为玲珑版本格式

4. 路径调整

  1. 处理桌面文件
    • 查找所有 .desktop 文件
    • 提取 Exec 行
    • 将 /app 路径替换为 /opt/apps/$APPID/files
  2. 确定二进制文件路径
    • 从 Exec 行提取二进制文件名
    • 根据路径类型(绝对/相对)确定最终路径

5. 生成玲珑配置文件

1.创建 linglong.yaml

2.创建 profile 文件

6. 构建和导出

  1. 构建 UAB 包
    • 如果指定了 --build 选项,执行: ll-builder build
  2. 导出
    • 如果指定了 --layer 选项,执行: ll-builder export --layer
    • 否则执行: ll-builder export

经过大量应用测试,发现通过ostree 拉取应用时间比想象中的要久,而且非常不稳定,为了解决这个问题。作了好几套方案,把心路历程跟大家交流如下:

对于新手来说 首先要先本地配置好Flatpak 商店,打开网址 https://flathub.org/zh-Hans 根据自己的发行版 安装Flatpak,这里以Deepin 来演示。

image.png
image.png

安装 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
image.png

到这里,针对Flatpak 部分就已经介绍完毕,如有错误,请多执教!

方法一:将Flathub 缓存目录 config 里面的默认仓库 改为上海交大的国内镜像站点)如下图

image.png

补充几个非常重要的命令 在这里分享

1.玲珑base 和 runtime查询方法

仅显示最新版

ll-cli search . --type=runtime
image.png

查看仓库中所有版本

ll-cli search . --type=runtime --show-all-version
image.png

下面红色框选部分就是 基于 Flatpak 运行时生成玲珑基础镜像名称

(部分flatpak 应用如果没有对应的runtime版本,可以手动修改linglong.yaml里面的版本号来测试是否可以正常运行)

image.png

2.Flatpak 查询应用程序的元数据信息(无需本地安装该应用)

flatpak remote-info [远程仓库名] [应用ID]

比如我想查询一个应用ID为 net.nokyan.Resources 在终端输入以下命令

flatpak remote-info flathub net.nokyan.Resources
image.png


评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注