本身在mac m1芯片的开发机上开发,在当前mac上搭建了ubuntu arm64的虚拟机。在ubuntu虚拟机上搭建了一套开发环境,期望完成electron在linux arm芯片上的编译和打包。
背景
已经做了前期的一些工作,已验证代码本身没有问题,在ubuntu x86架构的物理机上编译、打包成功,运行也正常。 原期望在ubuntu x86物理机上打一个linux arm64的程序,打包没有报错,但是放在linux arm64的机器上安装也安装成功了,但是运行的时候就报错了。
不得已,期望在mac上搭建了ubuntu arm64的虚拟机,完成electron在linux arm芯片上的编译和打包。
错误日志
• building target=deb arch=arm64 file=outtest/ee-linux-1.0.12-arm64.deb
• downloading url=https://registry.npmmirror.com/-/binary/electron-builder-binaries/fpm-1.9.3-2.3.1-linux-x86/fpm-1.9.3-2.3.1-linux-x86.7z size=4.6 MB parts=1
• downloaded url=https://registry.npmmirror.com/-/binary/electron-builder-binaries/fpm-1.9.3-2.3.1-linux-x86/fpm-1.9.3-2.3.1-linux-x86.7z duration=826ms
⨯ cannot execute cause=exit status 1
errorOut=/home/cai/.cache/electron-builder/fpm/fpm-1.9.3-2.3.1-linux-x86/lib/ruby/bin/ruby: line 6: /home/cai/.cache/electron-builder/fpm/fpm-1.9.3-2.3.1-linux-x86/lib/ruby/bin.real/ruby: cannot execute binary file: Exec format error
/home/cai/.cache/electron-builder/fpm/fpm-1.9.3-2.3.1-linux-x86/lib/ruby/bin/ruby: line 6: /home/cai/.cache/electron-builder/fpm/fpm-1.9.3-2.3.1-linux-x86/lib/ruby/bin.real/ruby: Success
command=/home/cai/.cache/electron-builder/fpm/fpm-1.9.3-2.3.1-linux-x86/fpm -s dir --force -t deb -d libgtk-3-0 -d libnotify4 -d libnss3 -d libxss1 -d libxtst6 -d xdg-utils -d libatspi2.0-0 -d libuuid1 -d libsecret-1-0 --deb-recommends libappindicator3-1 --deb-compression xz --architecture arm64 --after-install /tmp/t-ECrR2y/1-after-install --after-remove /tmp/t-ECrR2y/0-after-remove --description '
出错原因分析
- 命名是arm64架构,但是却去下载x86架构的包。
- 在fpm命令执行时报错,架构不符。
- fpm是最后一步骤,把某个程序打包成.deb的包。
- 访问registry.npmmirror.com/-/binary/el… ,在返回的数据中没有 fpm linux arm64的记录。
解决方法
- 参考这篇博客中内容 关于vue项目用electron_bulider打包的经历
其实最严重的问题是fpm的问题,electron-builder 使用 fpm 进行打包,但是没有 arm64 架构的包,下载的是 x86 的包 ,x86在arm上没办法运行的。所以我们可以直接用sudo下载ruby,然后下载fpm,并在打包命令前指定使用本地的fpm.
- 不再使用electron-builder中的fpm,而是使用系统中fpm
- 首先卸载npm中fpm ,npm uninstall fpm
- 安装系统的fpm
- 更改package.json中打包命令,指定系统fpm
sudo apt-get install ruby-full
sudo gem install fpm
更改package.json文件打包命令
USE_SYSTEM_FPM=true electron-builder --arm64 --linux deb
- 如此,就能mac arm架构的虚拟机ubuntu arm64上,打包出linux arm64的.deb包了。
查看linux出错日志
打包后运行可能会出现程序运行异常的情况。可以通过查看系统日志的方法确定错误原因。
系统日志
cd /var/log
cat syslog
- 在日志中找到你的进程名等于打包的包名,多对应的就是该程序的系统日志了。
程序日志
- 程序一般会自动安装在/opt下
cd /opt/ee/logs
tail -n 1000 -f logfile.log