Installing From Tarballs

Node.js is a dependency that I usually need to install from tarballs due to it being out of date in most package managers. Here's the unit I use to do that:

#node_install.sysu

# [ install.sh ]
meta() params !version:string;
deps() {
    dep ./download_source.sh version=$version -> !dir:node_dir:string;
    dep pkg.sh name=make
    dep pkg.sh name=build-essential
}

check() {
    if which node >/dev/null; then
        present
    fi
}

apply {
    cd $node_dir
    ./configure
    make
    sudo make install
}

remove {
    cd $node_dir
    sudo make uninstall
}

# [ download_source.sh ]
meta() params !verson:string;

deps() {
    dep pkg.sh name=curl
}

check() {
    if [ -d /tmp/node_build/node-$version ]; then
        present
    fi
}

apply() {
    mkdir -p /tmp/node_build
    cd /tmp/node_build
    url="https://github.com/nodejs/node/archive/refs/tags/${version}.tar.gz"
    curl -L $url | tar -xz
    cd node-$version
    emit_value dir `pwd`
}

remove() {
    rm -rf /tmp/node_build
}

This unitfile splits the job into two units so the node source isn't unnecessarily downloaded if there are errors.

It can be run with sysunit apply ./node_install.sysu/install.sh version=14.17.0