Build from source fails on ARM
paulwratt opened this issue · 12 comments
Technical information
Using version:
-
master
(running from GitHub-published source code, currentlyv3.0.0-pre
) -
latest
(latest release, currentlyv2.2.2
) -
vX.X.X
(specify other version)
Running on:
- Linux
- Windows
- macOS
How comfortable you are with your system and/or IT in general:
- I'm kind of lost, honestly
- I know what's up, I could help you run some commands or checks
- My machine is fully under my control, tell me what you need
- I attended Defcon last year
Problem
I am on a RPi4 with RaspberryPiOS Buster (32bit). I tried Building from the README.md
- `npm install` (NOT `install-linux` or `install-windows`)
- `npm run build-linux` or `build-windows` or `build-darwin`
Both the Master (GitHub Repo) and the v2.2.2 (.tgz) fail to build (with different errors).
I wont paste the .tgz build error, but it looked stupid. Lots of:
/home/pi/.cache/node-gyp/14.15.0/include/node/v8.h:6475:46: note: candidate expects 1 argument, 0 provided
../src/unix/pty.cc:714:68: error: no matching function for call to 'v8::_function-name_'
Building from the repo gets further, but it fails with the following error:
> edex-ui@3.0.0-pre build-linux /home/pi/fix-repo/edex-ui
> electron-builder build -l -p never
• electron-builder version=22.8.0 os=5.4.72-v7l+
• loaded configuration file=package.json ("build" field)
• writing effective config file=dist/builder-effective-config.yaml
• rebuilding native dependencies dependencies=node-pty@0.9.0 platform=linux arch=x64
⨯ cannot execute cause=exit status 1
out=
> node-pty@0.9.0 install /home/pi/fix-repo/edex-ui/prebuild-src/node_modules/node-pty
> node scripts/install.js
make: Entering directory '/home/pi/fix-repo/edex-ui/prebuild-src/node_modules/node-pty/build'
CXX(target) Release/obj.target/pty/src/unix/pty.o
make: Leaving directory '/home/pi/fix-repo/edex-ui/prebuild-src/node_modules/node-pty/build'
errorOut=g++: error: unrecognized command line option ‘-m64’
make: *** [pty.target.mk:113: Release/obj.target/pty/src/unix/pty.o] Error 1
gyp ERR! build error
gyp ERR! stack Error: `make` failed with exit code: 2
gyp ERR! stack at ChildProcess.onExit (/home/pi/n/lib/node_modules/npm/node_modules/node-gyp/lib/build.js:194:23)
gyp ERR! stack at ChildProcess.emit (events.js:315:20)
gyp ERR! stack at Process.ChildProcess._handle.onexit (internal/child_process.js:277:12)
gyp ERR! System Linux 5.4.72-v7l+
gyp ERR! command "/home/pi/n/bin/node" "/home/pi/n/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
gyp ERR! cwd /home/pi/fix-repo/edex-ui/prebuild-src/node_modules/node-pty
gyp ERR! node -v v14.15.0
gyp ERR! node-gyp -v v5.1.0
gyp ERR! not ok
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! node-pty@0.9.0 install: `node scripts/install.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the node-pty@0.9.0 install script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /home/pi/.npm/_logs/2020-11-03T12_27_22_559Z-debug.log
command=/home/pi/n/bin/node /home/pi/n/lib/node_modules/npm/bin/npm-cli.js rebuild node-pty@0.9.0
workingDir=
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! edex-ui@3.0.0-pre build-linux: `electron-builder build -l -p never`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the edex-ui@3.0.0-pre build-linux script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /home/pi/.npm/_logs/2020-11-03T12_27_22_634Z-debug.log
I dont know about you but:
• rebuilding native dependencies dependencies=node-pty@0.9.0 platform=linux arch=x64
seems to me like it will always fail on ARM (actually anything NOT x64 - which is everything else)
This seems like it is not picking up a setting from somewhere, or making a presumption.
Presuming this is the only thing in the Master Repo that needs fixing, can another release be made asap
I installed Node.js (14.15.0) & NPM (6.14.8) using curl -L https://git.io/n-install | bash
.
Cheers
Paul
ARM is unsupported. See #804 for somebody trying to make it work, but it's really hacky.
This seems like it is not picking up a setting from somewhere, or making a presumption.
It is, something like x32 ? X : Y
, meaning default to x64. As said above ARM is not handled.
can another release be made asap
Nope. #769
So I used the right command line to build it? Would it be any different if I used v15 of Node.js (I dont think so)?
If you point me to the right place(-ish) I can at least try some (non-hacky) patches, so (at least) this error will not occur, and then it can work on any architecture (including RISC-V & Power).
I have built Electron apps on ARM before, they work fine.
eDEX has some native dependencies written in C/C++, like node-pty... and others I think, I don't really remember as i haven't seriously worked on this repo for about a year now. You should look into arm support in those projects first.
it appears v2.2.2 has some issues with headers.
Am I right in understanding that electron-builder
is a seperate project that may be failing, or (my guess) a configuration is being passed to electron-builder
which is in the edex-ui repo?
EDIT: I just did a quick grep, and (in node_modules/app-builder-lib/out/platformPackager.js.map:1:
) there is an issue link (about halfway down) for electron-builder right at the point where arch
is set and x64
is the default, but that issue is from 2018, and talks about AppImage (is that correct, am I actually building an AppImage version of edex-ui?)
Should maybe I rather be using Starting from source instead, with:
npm run install-linux
npm start
a configuration is being passed to electron-builder which is in the edex-ui repo?
Yup, from this line onwards:
Line 45 in 459e50e
See also the scripts section in this same file.
am I actually building an AppImage version of edex-ui?
Yes, that's what "building" means in the context of this repo, packaging dependencies, eDEX source code and assets and Electron white-label binaries into a single executable.
Should maybe I rather be using Starting from source instead
Normally you try starting it before bundling it (which what "build" really means here).
If dependencies successfully installed, npm start
will start the app in development mode.
Bah, Starting from source instructions works fine!
EDIT: re: edex-ui/package.json yeah there are arch
targets for linux
, and a doc says:
For example, if you don’t want to pass --ia32 and --x64 flags each time, but instead build by default NSIS target for all archs for Windows:
It seems like the Build will work too, but its late/early - I will try take it out or modify it tomorrow
EDIT: could not wait (I set arch to armv7l
):
> edex-ui@3.0.0-pre build-linux /home/pi/fix-repos/edex-ui
> electron-builder build -l -p never
• electron-builder version=22.8.0 os=5.4.72-v7l+
• loaded configuration file=package.json ("build" field)
• writing effective config file=dist/builder-effective-config.yaml
• rebuilding native dependencies dependencies=node-pty@0.9.0 platform=linux arch=armv7l
• packaging platform=linux arch=armv7l electron=9.3.1 appOutDir=dist/linux-armv7l-unpacked
• downloading url=https://github.com/electron/electron/releases/download/v9.3.1/electron-v9.3.1-linux-armv7l.zip size=63 MB parts=8
• downloaded url=https://github.com/electron/electron/releases/download/v9.3.1/electron-v9.3.1-linux-armv7l.zip duration=1m40.248s
• building target=AppImage arch=armv7l file=dist/eDEX-UI Linux (armv7l).AppImage
• downloading url=https://github.com/electron-userland/electron-builder-binaries/releases/download/appimage-12.0.1/appimage-12.0.1.7z size=1.6 MB parts=1
• downloaded url=https://github.com/electron-userland/electron-builder-binaries/releases/download/appimage-12.0.1/appimage-12.0.1.7z duration=6.833s
⨯ cannot execute cause=exit status 1
errorOut=/home/pi/.cache/electron-builder/appimage/appimage-12.0.1/linux-arm32/mksquashfs: Compressor "xz" is not supported!
/home/pi/.cache/electron-builder/appimage/appimage-12.0.1/linux-arm32/mksquashfs: Compressors available:
gzip (default)
command=/home/pi/.cache/electron-builder/appimage/appimage-12.0.1/linux-arm32/mksquashfs /home/pi/fix-repos/edex-ui/dist/__appImage-armv7l '/home/pi/fix-repos/edex-ui/dist/eDEX-UI Linux (armv7l).AppImage' -offset 143620 -all-root -noappend -no-progress -quiet -no-xattrs -no-fragments -comp xz -Xdict-size 100% -b 1048576
workingDir=/home/pi/fix-repos/edex-ui/dist/__appImage-armv7l
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! edex-ui@3.0.0-pre build-linux: `electron-builder build -l -p never`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the edex-ui@3.0.0-pre build-linux script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /home/pi/.npm/_logs/2020-11-03T16_19_05_346Z-debug.log
Close, but no cigar. Here it needs gzip
instead of the default xz
, which is crazy because RPiOS has had ARM .xz since Jessy /Wheezy (like 8 years now) - tomorrow
But I would say edex-ui does support ARM, it just doesn't know it yet (needs some config tweaks). ie forget the v2.2.2 patch effort, there does not seem a need when some minor changes for 3.0.0-pre will have it working out of the box.
@parkerlreed cheers. I just edited that post again, and I think its even simpler than what you did. But I am starting to see a pattern here with electron-builder
:)
EDIT: I just noticed I had this (2018) #313 post by @thallada (last post), open the whole time, but did not get around to reading it until just now (the original workaround is mentioned here ) . It mentions everything so far. And "hey presto", edex-ui 3.0.0-pre Master does actually in fact Build out of the box. Ho hum.
recap:
To get eDex-UI to work on RaspberryPi OS, follow the instructions in this comment starting at number 2
@parkerlreed That photo looks dope. Well done!
A note in a file/readme would help out here I think, a RaspberryPi text specific or "ToubleShooting" text (either should be fine), or simply just mention it on the front page (README.md) - thanks for everyones help and screenshots btw.
Raspberry Pi 4 + Ubuntu Mate
I just changed the package.json to make it work
"linux": { "target": [ { "target": "AppImage", "arch": [ "arm64" ] } ],
![123951145_10224721077400246_1791131814938718594_o]
@marceltoma Can you post your build instructions or your working build as a release?