Skip to content

xz support check in nvm.sh doesn't truly detect xz support in macOS #2155

@DeeDeeG

Description

@DeeDeeG

Hi folks,

I did a bunch of research on detecting xz support, in pursuit of adding a "system supports xz?" check to shadowspawn/nvh and tj/n.

The gist of it for Linux and macOS:

  • On Linux, chances are very great that if the xz binary is on the system PATH, tar will support extracting xz-compressed tarballs.
    • Almost every Linux distro ships GNU tar. GNU tar added support for xz in version 1.22. Only very old distros ship with GNU tar older than 1.22, and those mostly don't have xz in the repos. It's therefore possible but very unlikely that a Linux machine has xz on the path but no support in tar.
    • nvm is basically already doing this check; It works great for Linux. If it works anywhere else, I would propose that that's pretty much just a coincidence or a happy accident.
  • On macOS, xz compression/decompression relies on support that is baked into the libarchive/bsdtar that macOS ships with.
    • macOS started shipping new enough libarchive/bsdtar in OS X Lion (10.7)... but had xz support toggled off in pre-compile configuration, and didn't ship the underlying liblzma library that macOS would eventually use to support xz. macOS only ships xz support in macOS 10.9 or newer.
    • Starting in OS X Mavericks (10.9), OS X actually shipped libarchive/bsdtar with xz support toggled on, and shipped liblzma to use for compressing/decompressing xz archives
    • xz on the PATH is irrelevant (and a bit of a red herring!) for xz support in tar on macOS.
    • Checking just the libarchive/bsdtar version on macOS will mostly work, but you will get a false positive for OS X Lion and Mountain Lion (10.7 and 10.8, respectively).

I would recommend checking for macOS 10.9+ before enabling xz, and not checking for xz on the PATH on macOS at all. You can conveniently check the macOS version via command-line with sw_vers.


Here are the main research findings from implementing this on nvh/n. (Scroll up/down in the issue for the whole convoluted research process, if you like!)

Metadata

Metadata

Assignees

No one assigned

    Labels

    installing nodeIssues with installing node/io.js versions.pull request wantedThis is a great way to contribute! Help us out :-D

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions