内容转自社区论坛 by ^9星守辰^ | 原文链接
此篇教程适用于将deb, appimage, 打包好的二进制包转为如意玲珑包的学习。
官方有ll-pica转制工具,但一直觉得不好用,所以一直都是手动打包
手动打包也很简单, 下面以打包appimage的微信为例
第一次写, 不好地方请见谅, 欢迎大家补充纠正
基础工作目录: baselinglong.zip
- 首先创建玲珑的基本工作目录, 如图所示
bin/AppRun.sh: 软件的启动文件,文件名自定义
lib: 依赖库目录
share/applications: desktop文件目录
share/icons: 图标目录 - 获取对应的软件包,并解压
appimage包命令行解压: chmod +x xxx.appiamge ./xxx.appimage –appimage-extract
deb包命令行解压: dpkg-deb -x xxx.deb ./ - appimage包解压后会获得一个 squashfs-root 目录, 将这个目录放到步骤一的基本工作目录里, 我习惯性的都会将这个目录重命名为软件名
- 修改调整好 linglong.yaml, desktop文件就可以打包了
ll-builder build
ll-builder export –layer
linglong.yaml关键配置
package:
id: com.tencent.wechat.linyaps #软件包的唯一标识, 建议最后以linyaps结尾
name: 微信 #软件名
version: 4.0.0.23 #软件版本号, 但是这个版本号必须要四位, 即0.0.0.0的结构
kind: app
description: | #软件描述,建议一句话就可以
微信
base: org.deepin.base/23.1.0 #所需的基础库
runtime: org.deepin.runtime.dtk/23.1.0 #所需的runtime, 可选的, 我打的包很少用到这个
command:
- /opt/apps/com.tencent.wechat.linyaps/files/bin/AppRun.sh #启动命令
build: |
SOURCES="linglong/sources" #固定的
export PATH=$PATH:/usr/libexec/linglong/builder/helper #固定的
#install_dep $SOURCES $PREFIX #这是使用ll-pica adep安装依赖时才会用到
#install -d $PREFIX/lib
#下面4行cp都是将基础工作目录复制到玲珑容器的对应目录里
# $PREFIX = /opt/apps/com.tencent.wechat.linyaps/files/
cp -r bin/ $PREFIX
cp -r wechat/ $PREFIX
cp -r share/ $PREFIX
cp -r lib/ $PREFIX
缺依赖
appimage包一般很少缺依赖,如果发生了缺依赖的情况
官方工具ll-pica adep好像不如最开始好用
所以我都是手动从宿主机里复制出来,放到基础工作目录的lib里
以/usr/lib/x86_64-linux-gnu/libnotify.so.4.0.0依赖为例
具体文件叫libnotify.so.4.0.0但是软件里需要的名是libnotify.so.4
这种情况可以在工作目录的lib里给这个依赖创建个软连接
ln -s libnotify.so.4.0.0 libnotify.so.4
如果系统没有这个依赖, 可以到debian官网去搜索下载对应的deb包, 然后解压放进去
desktop文件关键配置
Exec=AppRun.sh #这个配置就是基础工作目录bin/AppRun.sh 这个文件名, 因为最终玲珑容器里的PATH会包含这个bin目录所以可以找到对应的文件
Icon=wechat #不要加图标文件的后缀, 推荐用png格式
bin/AppRun.sh
#!/bin/bash
/opt/apps/com.tencent.wechat.linyaps/files/wechat/AppRun "$@"
# appiamge包解压后一般都有一个AppRun文件,大部分是shell文件
# 可能会遇到打包完成后, 安装了点图标软件不启动的状况
# 大概率就是 AppRun 里的 APPDIR="$(dirname "$(readlink -f "$0")")" 在玲珑里有问题
# 这时候直接 APPDIR="/opt/pps/com.tencent.wechat.linyaps/files/wechat" 即可
# $APPDIR变量也可能叫别的名字
# 如果是其他类型的包或者二进制文件, 可以直接指定为对应的二进制文件
发表回复