MIPS64el架构Electron打包工具链适配记录 - horsley/electron-builder GitHub Wiki
这里是MIPS64el架构Electron打包工具链适配记录,如果你要做类似工作的话,请确保先看完整个文档,或者至少一次看完一条再开始操作,否则你会走很多弯路
-
builder-util包里面的arch.ts做了架构限制报错,可以checkout本repo,
npm install
,然后npm run compile
,可以得到放开了mips64el架构的builder-util包,拷贝packages/builder-util/out/* 编译产物覆盖目标electron工程里node_modules/builder-util/out/* -
app-builder二进制缺失mips64el架构版本,在mips64el架构机器配置安装好go环境,配置好gopath,
git clone https://github.com/develar/app-builder
,然后go get && make
,注意go环境需要1.9.1以上版本,可能需要从源码构建新的go版本。这里需要注意app-build的构建脚本把构建产物放在了dist/linux_amd64目录下,但是实际上新构建出来的文件并不是amd64架构的,这个文件最终需要覆盖到目标electron工程里node_modules/app-builder-bin/linux/mips64el/app-builder,这个二进制在本repo的release页面有提供下载
-
deb格式打包中遇到7za二进制缺失的问题,看下系统里面是有7za的(/usr/bin/7za是个脚本,实际二进制在/usr/libexec/p7zip/7za),把它拷贝到目标electron工程里node_modules/7zip-bin/linux/mips64el/7za
-
fpm打包工具内部包了一个ruby,但是架构不对所以无法执行,可以把$HOME/.cache/electron-builder/fpm/fpm-1.9.3-2.3.1-linux-x86/lib/ruby/bin.real/ruby删除,做一个同名软链到本机/usr/bin/ruby,然而由于rbconfig.rb限制了必须2.3版本以上,本机的2.1.5版本不可用
-
尝试直接从ruby官网下载源码编译,本地gcc版本为4.9.3,make过程出现段错误,改为用rvm安装ruby,先按照rvm.io上的办法安装rvm,再
rvm install ruby-2.3.0
,可以安装成功,再rvm use 2.3.0
,可以切换到2.3.0版本,然而这个build出来的ruby缺少openssl,运行时会报错,可以rvm pkg install openssl
,再重新安装rubyrvm reinstall 2.3.0 --with-openssl-dir=$HOME/.rvm/usr
,如果你是先把openssl装上就不用编译两回ruby了。 -
研究发现fpm那个打包是用了traveling-ruby打的,我们本想用同样方式打一个mips64el的,由于其打包过程用到的ruby的二进制也是联网下载,其二进制构建有一个指引,但是构建脚本也是仅限x86_64和x86,并且依赖docker环境打包,本地docker安装后无法正常启动,因此我们放弃使用这个路子,改在rvm装好的ruby环境中直接
gem install fpm
,然后把$HOME/.cache/electron-builder/fpm/fpm-1.9.3-2.3.1-linux-x86/fpm 删掉,做一个同名的fpm软链接到$HOME/.rvm/gems/ruby-2.3.0/wrappers/fpm -
app-builder中构建AppImage类型的包也做了架构限制报错,可以修改app-builder/pkg/package-format/appimage/appImage.go 中 arch 参数的枚举限制加入mips64el,重新构建app-builder。另外app-builder会下载appImage的库,里面也是没有mips64el的,构建appImage的依赖有一个autotools也是没有对应架构的,此外还依赖cmake3.2以上,我们尝试了cmake 3.4.3可以构建成功(最新的不行),再次尝试构建AppImage,又提示要3.6以上的cmake,坑爹。
-
终于我们在cmake3.6.3安装完成后可以去构建AppImageKit,构建后产物找了半天……其中第一个缺失的文件 runtime-mips64el可以从AppImageKit/build/src/runtime拷贝到$HOME/.cache/electron-builder/appimage/appimage-9.1.0/runtime-mips64el,然后拷贝build/install_prefix/usr/lib/appimagekit/mksquashfs 到 $HOME/.cache/electron-builder/appimage/appimage-9.1.0/linux-mips64le/mksquashfs (linux-mips64le这个目录需要自己创建,注意这里是le不是el),相关二进制在本repo的release页面有提供下载
至此终于可以打包成功!