适配loongnix:我的electron应用也要上龙芯
环境信息
OS: Loongnix 20.6.SP2
CPU: 3A6000
参考开发环境搭建参考龙芯开源社区
关键挑战
electron-builder 没有适配龙芯架构,解决办法fork项目源码增加对loong64支持。代码我已经提交github,需要自取
electron-builder适配loongnix github仓库
问题1:不支持loong64架构
修改app-builder-lib、builder-util、electron-builder增加支持,具体参考给出的github仓库。
问题2:nodejs和app-builder-bin架构不一致
- 采用
process.arch获取到loong64,采用uname -m拿到的是loongarch64 - 下载
app-builder可执行二进制文件被存放到 node_modules/app-builder-bin/linux/loongarch64 electron-builder/builder-util中使用process.arch拼接的路径 node_modules/app-builder-bin/linux/loong64找不到app-builder可执行二进制文件
实际上按照官方介绍golang的环境变量也要配置为GOARCH=loong64,语言标准库取值和系统架构不一致算是个历史遗留问题。
问题3:下载app-builder在打包时候下载路径错误
方法1:修改electron-builder.js配置
# 龙芯提供的地址
https://ftp.loongnix.cn/electron/LoongArch/vX.X.X/electron-vX.X.X-linux-loong64.zip
# app-builder 拼接出的下载地址
https://ftp.loongnix.cn/electron/LoongArch/X.X.X/electron-vX.X.X-linux-loong64.zip
解决办法,按照#6636给出的方案
electronDownload: { customDir: 'vX.X.X' }
方法2:直接从龙芯ftp服务器下载electron二进制包自己托管,再通过ELECTRON_MIRROR=your-electron-mirror环境变量切换到自己托管源
问题4:缺少fpm命令
⨯ cannot execute cause=exec: "fpm": executable file not found in $PATH
sudo gem install fpm
# 如果安装fpm报错,按照提示先安装dotenv即可
Fetching: dotenv-3.1.8.gem (100%)
ERROR: Error installing fpm:
The last version of dotenv (>= 0) to support your Ruby & RubyGems was 2.8.1. Try installing it with `gem install dotenv -v 2.8.1` and then running the current command again
dotenv requires Ruby version >= 3.0. The current ruby version is 2.5.0.
安装deb缺少依赖
安装你的应用包deb如果出现以下提示
sudo apt install ./your-app_6.0.44_loong64.deb
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成 0
注意,选中 'your-app:loong64' 而非 './your-app_6.0.44_loong64.deb'
有一些软件包无法被安装。如果您用的是 unstable 发行版,这也许是
因为系统无法达到您要求的状态造成的。该版本中可能会有一些您需要的软件
包尚未被创建或是它们已被从新到(Incoming)目录移出。
下列信息可能会对解决问题有所帮助:
下列软件包有未满足的依赖关系:
your-app:loong64 : 依赖: libgtk-3-0:loong64 但无法安装它
依赖: libnotify4:loong64 但无法安装它
依赖: libnss3:loong64 但无法安装它
依赖: libxss1:loong64 但无法安装它
依赖: libxtst6:loong64 但无法安装它
依赖: libatspi2.0-0:loong64 但无法安装它
依赖: libuuid1:loong64 但无法安装它
依赖: libsecret-1-0:loong64 但无法安装它
推荐: libappindicator3-1:loong64 但无法安装它
E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。
首先尝试安装依赖
sudo apt install -y libgtk-3-0 libnotify4 libnss3 libxss1 libxtst6 libatspi2.0-0 libuuid1 libsecret-1-0 libappindicator3-1
安装完毕后,再次安装应用deb包依然出现依赖错误,实际原因依然是架构不一致问题引起的
# arch 或 uname -m
loongarch64
# 使用node process.arch
loong64
解决办法修改deb中的架构信息,通过AI生成针对这一操作的脚本如下:
#!/bin/bash
set -eo pipefail
# 参数验证
if [ $# -ne 2 ]; then
echo "用法: $0 <原始deb文件> <目标架构>" >&2
exit 1
fi
# 清理旧文件
[ -f "../modified.deb" ] && rm -v "../modified.deb"
ORIG_DEB="$1"
NEW_ARCH="$2"
TEMP_DIR=$(mktemp -d)
trap 'rm -rf "$TEMP_DIR"' EXIT
# 文件检查
if [ ! -f "$ORIG_DEB" ]; then
echo "错误: 文件 $ORIG_DEB 不存在" >&2
exit 2
fi
# 解压deb包
cd "$TEMP_DIR"
if ! ar x "$ORIG_DEB"; then
echo "错误: 解压deb包失败" >&2
exit 3
fi
# 处理control文件
CONTROL_TAR=$(ls control.tar.* 2>/dev/null | head -1)
[ -n "$CONTROL_TAR" ] && tar -xf "$CONTROL_TAR"
if [ ! -f control ]; then
echo "错误: 未找到control文件" >&2
exit 4
fi
# 修改架构并重新压缩
sed -i "s/^Architecture: .*/Architecture: $NEW_ARCH/" control
if ! tar -cJf "$CONTROL_TAR" control; then
echo "错误: 压缩control文件失败" >&2
exit 5
fi
# 重新打包
ar r ../modified.deb debian-binary "$CONTROL_TAR" data.tar.* || {
echo "错误: 重新打包失败" >&2
exit 6
}
echo "生成成功: $(realpath ../modified.deb)"
执行后修改结果文件放在/tmp/modified.deb路径下。
总结
可以看出整个过程虽麻烦不过只会做一次,还算不错。目前开发体验上还是感觉龙芯官方镜像源中对各类三方库支持的版本较少,对开发者动手能力要求较高,整体来看还处于开荒时期。

浙公网安备 33010602011771号