Skip to content

Unable to install arm64 version of nodejs on alpine #3616

@malice00

Description

@malice00

Operating system and version:

nvm debug output:

nvm --version: v0.40.3
$SHELL: 
$SHLVL: 1
whoami: 'root'
${HOME}: /root
${NVM_DIR}: '${HOME}/.nvm'
${PATH}: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
$PREFIX: ''
${NPM_CONFIG_PREFIX}: ''
$NVM_NODEJS_ORG_MIRROR: ''
$NVM_IOJS_ORG_MIRROR: ''
/bin/sh: --version: not found
shell version: ''
uname -a: 'Linux 6.8.0-50-generic #51-Ubuntu SMP PREEMPT_DYNAMIC Sat Nov 9 18:03:35 UTC 2024 x86_64 Linux'
checksum binary: 'sha256sum'
OS version: Welcome to Alpine Linux 3.22
awk: warning: option -W is ignored
BusyBox v1.37.0 (2025-05-26 20:04:45 UTC) multi-call binary.

Usage: awk [OPTIONS] [AWK_PROGRAM] [FILE]...

	-v VAR=VAL	Set variable
	-F SEP		Use SEP as field separator
	-f/-E FILE	Read program from FILE
	-e AWK_PROGRAM
awk: /usr/bin/awk, 
curl: /usr/bin/curl, curl 8.14.1 (x86_64-alpine-linux-musl) libcurl/8.14.1 OpenSSL/3.5.0 zlib/1.3.1 brotli/1.1.0 zstd/1.5.7 c-ares/1.34.5 libidn2/2.3.7 libpsl/0.21.5 nghttp2/1.65.0
wget: unrecognized option: V
BusyBox v1.37.0 (2025-05-26 20:04:45 UTC) multi-call binary.

Usage: wget [-cqS] [--spider] [-O FILE] [-o LOGFILE] [--header STR]
	[--post-data STR | --post-file FILE] [-Y on/off]
	[-P DIR] [-U AGENT] [-T SEC] URL...

Retrieve files via HTTP or FTP

	--spider	Only check URL existence: $? is 0 if exists
	--header STR	Add STR (of form 'header: value') to headers
	--post-data STR	Send STR using POST method
	--post-file FILE	Send FILE using POST method
	-c		Continue retrieval of aborted transfer
	-q		Quiet
	-P DIR		Save to DIR (default .)
	-S    		Show server response
	-T SEC		Network read timeout is SEC seconds
	-O FILE		Save to FILE ('-' for stdout)
	-o LOGFILE	Log messages to FILE
	-U STR		Use STR for User-Agent header
	-Y on/off	Use proxy
wget: /usr/bin/wget, 
git: not found
grep: /bin/grep, BusyBox v1.37.0 (2025-05-26 20:04:45 UTC) multi-call binary.
sed: /bin/sed, BusyBox v1.37.0 (2025-05-26 20:04:45 UTC) multi-call binary.
cut: /usr/bin/cut, BusyBox v1.37.0 (2025-05-26 20:04:45 UTC) multi-call binary.
basename: /usr/bin/basename, BusyBox v1.37.0 (2025-05-26 20:04:45 UTC) multi-call binary.
rm: /bin/rm, BusyBox v1.37.0 (2025-05-26 20:04:45 UTC) multi-call binary.
mkdir: /bin/mkdir, BusyBox v1.37.0 (2025-05-26 20:04:45 UTC) multi-call binary.
xargs: /usr/bin/xargs, BusyBox v1.37.0 (2025-05-26 20:04:45 UTC) multi-call binary.
nvm current: none
which node: 
which iojs: 
which npm: 
npm config get prefix: /bin/sh: npm: not found
npm root -g: /bin/sh: npm: not found

nvm ls output:

ls: unrecognized option: q
BusyBox v1.37.0 (2025-05-26 20:04:45 UTC) multi-call binary.

Usage: ls [-1AaCxdLHRFplinshrSXvctu] [-w WIDTH] [FILE]...

List directory contents

	-1	One column output
	-a	Include names starting with .
	-A	Like -a, but exclude . and ..
	-x	List by lines
	-d	List directory names, not contents
	-L	Follow symlinks
	-H	Follow symlinks on command line
	-R	Recurse
	-p	Append / to directory names
	-F	Append indicator (one of */=@|) to names
	-l	Long format
	-i	List inode numbers
	-n	List numeric UIDs and GIDs instead of names
	-s	List allocated blocks
	-lc	List ctime
	-lu	List atime
	--full-time	List full date/time
	-h	Human readable sizes (1K 243M 2G)
	--group-directories-first
	-S	Sort by size
	-X	Sort by extension
	-v	Sort by version
	-t	Sort by mtime
	-tc	Sort by ctime
	-tu	Sort by atime
	-r	Reverse sort order
	-w N	Format N columns wide
	--color[={always,never,auto}]
ls: unrecognized option: q
BusyBox v1.37.0 (2025-05-26 20:04:45 UTC) multi-call binary.

Usage: ls [-1AaCxdLHRFplinshrSXvctu] [-w WIDTH] [FILE]...

List directory contents

	-1	One column output
	-a	Include names starting with .
	-A	Like -a, but exclude . and ..
	-x	List by lines
	-d	List directory names, not contents
	-L	Follow symlinks
	-H	Follow symlinks on command line
	-R	Recurse
	-p	Append / to directory names
	-F	Append indicator (one of */=@|) to names
	-l	Long format
	-i	List inode numbers
	-n	List numeric UIDs and GIDs instead of names
	-s	List allocated blocks
	-lc	List ctime
	-lu	List atime
	--full-time	List full date/time
	-h	Human readable sizes (1K 243M 2G)
	--group-directories-first
	-S	Sort by size
	-X	Sort by extension
	-v	Sort by version
	-t	Sort by mtime
	-tc	Sort by ctime
	-tu	Sort by atime
	-r	Reverse sort order
	-w N	Format N columns wide
	--color[={always,never,auto}]
            N/A *
ls: unrecognized option: q
ls: unrecognized option: q
BusyBox v1.37.0 (2025-05-26 20:04:45 UTC) multi-call binary.

Usage: ls [-1AaCxdLHRFplinshrSXvctu] [-w WIDTH] [FILE]...

List directory contents

	-1	One column output
	-a	Include names starting with .
	-A	Like -a, but exclude . and ..
	-x	List by lines
	-d	List directory names, not contents
	-L	Follow symlinks
	-H	Follow symlinks on command line
	-R	Recurse
	-p	Append / to directory names
	-F	Append indicator (one of */=@|) to names
	-l	Long format
	-i	List inode numbers
	-n	List numeric UIDs and GIDs instead of names
	-s	List allocated blocks
	-lc	List ctime
	-lu	List atime
	--full-time	List full date/time
	-h	Human readable sizes (1K 243M 2G)
	--group-directories-first
	-S	Sort by size
	-X	Sort by extension
	-v	Sort by version
	-t	Sort by mtime
	-tc	Sort by ctime
	-tu	Sort by atime
	-r	Reverse sort order
	-w N	Format N columns wide
	--color[={always,never,auto}]
BusyBox v1.37.0 (2025-05-26 20:04:45 UTC) multi-call binary.

Usage: ls [-1AaCxdLHRFplinshrSXvctu] [-w WIDTH] [FILE]...

List directory contents

	-1	One column output
	-a	Include names starting with .
	-A	Like -a, but exclude . and ..
	-x	List by lines
	-d	List directory names, not contents
	-L	Follow symlinks
	-H	Follow symlinks on command line
	-R	Recurse
	-p	Append / to directory names
	-F	Append indicator (one of */=@|) to names
	-l	Long format
	-i	List inode numbers
	-n	List numeric UIDs and GIDs instead of names
	-s	List allocated blocks
	-lc	List ctime
	-lu	List atime
	--full-time	List full date/time
	-h	Human readable sizes (1K 243M 2G)
	--group-directories-first
	-S	Sort by size
	-X	Sort by extension
	-v	Sort by version
	-t	Sort by mtime
	-tc	Sort by ctime
	-tu	Sort by atime
	-r	Reverse sort order
	-w N	Format N columns wide
	--color[={always,never,auto}]
ls: unrecognized option: q
BusyBox v1.37.0 (2025-05-26 20:04:45 UTC) multi-call binary.

Usage: ls [-1AaCxdLHRFplinshrSXvctu] [-w WIDTH] [FILE]...

List directory contents

	-1	One column output
	-a	Include names starting with .
	-A	Like -a, but exclude . and ..
	-x	List by lines
	-d	List directory names, not contents
	-L	Follow symlinks
	-H	Follow symlinks on command line
	-R	Recurse
	-p	Append / to directory names
	-F	Append indicator (one of */=@|) to names
	-l	Long format
	-i	List inode numbers
	-n	List numeric UIDs and GIDs instead of names
	-s	List allocated blocks
	-lc	List ctime
	-lu	List atime
	--full-time	List full date/time
	-h	Human readable sizes (1K 243M 2G)
	--group-directories-first
	-S	Sort by size
	-X	Sort by extension
	-v	Sort by version
	-t	Sort by mtime
	-tc	Sort by ctime
	-tu	Sort by atime
	-r	Reverse sort order
	-w N	Format N columns wide
	--color[={always,never,auto}]
iojs -> N/A (default)
node -> stable (-> N/A) (default)
unstable -> N/A (default)

How did you install nvm?

Using the script from the readme.

What steps did you perform?

I ran an install with an alternate mirror:
NVM_NODEJS_ORG_MIRROR=<my internal server> nvm install v24.3.0

What happened?

I got a 404, because nvm is trying to download the x64 version instead of the correct arm64:

Downloading and installing node v24.3.0...
Downloading <my internal server>/v24.3.0/node-v24.3.0-linux-x64-musl.tar.gz...
##O=-#    #                                                                                                                                                                     curl: (22) The requested URL returned error: 404

Nvm then continues to download the source and tries to build it, but ultimately fails with a segmentation fault.

What did you expect to happen?

I had exprected nvm to download and install the arm64 version

Is there anything in any of your profile files that modifies the PATH?

No

Other

I've checked the sources and it appears that for alpine, the architecture ist always set to 'x64-musl':

nvm/nvm.sh

Lines 2118 to 2120 in 9602f4f

if [ -f "/etc/alpine-release" ]; then
NVM_ARCH=x64-musl
fi

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions