Spack is a package manager, and package managers should be trivial to install.

Overview

Update spack develop version

πŸ”‹ Spack with batteries included (linux/x86_64)

Spack is a package manager, and package managers should be trivial to install.

This repo offers a single, static executable for Spack:

$ wget -qO spack.x https://github.com/haampie/spack-batteries-included/releases/download/develop/spack-x86_64.x
$ chmod +x spack.x
$ ./spack.x install zstd +programs ~shared build_type=Release

What version of Spack is shipped?

The URL above gives you a rolling release of Spack's develop branch, which is updated hourly. The exact commit SHA is included as a file and can be retrieved like this:

$ spack.x --squashfs-extract spack_sha && cat spack/spack_sha
[prints the Spack commit sha]

Supported platforms

  • CentOS 7 and above
  • Ubuntu 14.04 and above
  • Debian 8 and above
  • Fedora 20 and above
  • SUSE Linux 13 and above
  • Arch Linux
  • Gentoo
  • Windows Subsystem for Linux 2 with any of the above distro's.

The system dependencies are glibc 2.17 and above and optionally the fusermount executable. If your system supports rootless containers it likely has fusermount installed already!

How does it work?

spack.x consists of a modified version of the AppImage runtime concatenated with a big squashfs file which includes binutils, bzip2, clingo, curl, file, git, gmake, gpg, gzip, openssl, patch, patchelf, python, py-boto3, tar, unzip, xz, zstd and their dependencies.

When you run spack.x [args] it will use fusermount to mount this squashfs file in a temporary directory, and then execute the entrypoint executable spack.

The spack executable sets some environment variables like PATH and DL_LIBRARY_PATH to the bin and lib folders of the squashfs file, and then it executes python3 spack_src/bin/spack [args].

When the command is done running, the runtime unmounts the squashfs file again.

My system doesn't allow me to use fusermount, what now?

fusermount is used to mount a squashfs file included in the binary. If you don't want that, you can just extract it:

$ spack.x --squashfs-extract
$ ./spack/spack
usage: spack [-hkV] [--color {always,never,auto}] COMMAND ...

but working with the extracted spack folder can come with a performance penalty on shared filesystems in HPC centers.

Differences and improvements over AppImage runtime

  • spack.x uses zstd for faster decompression;
  • spack.x itself is an entirely static binary;
  • spack.x does not need to dlopen libfuse.so.

Troubleshooting

immutability The squashfs mountpoint is a readonly folder, meaning that spack can't write to spack/{var,opt} folders. spack.x is configured to use some non-standard directories, see spack.x config blame config for details.

Note, spack.x applies this patch to ensure that log files are written to the config:misc_cache folder.

openssl: By default spack.x uses ca-certificates-mozilla for downloading package sources over https. If you somehow need to use system certificates, set SSL_CERT_DIR and GIT_SSL_CAINFO or SSL_CERT_FILE and GIT_SSL_CERT.

Can I run spack.x inside a container?

Yes, but please don't! Since fusermount is a setuid binary, you will need to run a privileged container, which is never a good idea.

The recommended way to run spack.x inside a container is to just extract it:

$ spack.x --squashfs-extract
$ ./spack/spack --version

If you insist on running spack.x in Docker, this is one way to do it:

$ sudo docker run --privileged --device /dev/fuse -it -v $PWD/spack.x:/bin/spack.x ubuntu:18.04
# apt update && apt install fuse # install fusermount
# spack.x --version

Running an executable shipped with spack.x directly

If you want to run an executable shipped with spack.x directly instead of invoking spack (the default entrypoint), try this:

$ NO_ENTRYPOINT= spack.x which python
/tmp/.mount_spack.h0zr1h/view/bin/python

How do I build spack.x myself?

Initially you may need docker to get a rootfs filesystem for centos 7.

Building goes like this:

make rootfs-with-spack
make

You'll find the output in

build/output
You might also like...
PMM - The C++ Package Manager Manager

PMM - The Package Manager Manager PMM is a module for CMake that manages... package managers. Wha- Why? People hate installing new software. Especiall

Utility to install kexts, Frameworks and PrivateFrameworks in the System of macOS. For macOS Monterey 12 and Big Sur 11
Utility to install kexts, Frameworks and PrivateFrameworks in the System of macOS. For macOS Monterey 12 and Big Sur 11

Command-Line-SnapShot-Mounter Credit: chris1111 Apple This utility uses the macOS terminal Command Line SnapShot Mounter is an utility that allows you

Generate and Install NDS Forwarders

NDSForwarder This app will create nds forwarders and install them to the home screen of the 3ds. The forwarders created with this app work in conjunct

Sysmon For Linux install and build instructions

The packages are available in the official Microsoft Linux repositories and instructions on how to install the packages for the different Linux distributions can be found in the Installation instructions.

Shows different icons for 64 and 32-bit DLLs. Register with RegSvr32 to install

DllIconHandler This project demonstrates how to create a Shell Icon Handler, that is loaded by Explorer.exe. An icon handler can show different icons

Install the Homebrew Channel to the vWii Menu from Wii U Mode.

Install a channel to the vWii Menu from Wii U Mode. In its current state, it simply installs the Homebrew Channel.

🎁 An easy way to install DWM + Dots
🎁 An easy way to install DWM + Dots

DWM - DOTS ━━━━━━ ❖ ━━━━━━ Window Manager β€’ DWM 🎨 Tiles Everywhere! Shell β€’ Zsh 🐚 con oh-my-zsh framework! Terminal β€’ Kitty πŸ’» Una terminal que sopo

The libxo library allows an application to generate text, XML, JSON, and HTML output using a common set of function calls. The application decides at run time which output style should be produced.

libxo libxo - A Library for Generating Text, XML, JSON, and HTML Output The libxo library allows an application to generate text, XML, JSON, and HTML

This was the first ever Computer Science project that I made back in Class XII (2016). I thought I should upload it on GitHub so that it does not get lost. :)
This was the first ever Computer Science project that I made back in Class XII (2016). I thought I should upload it on GitHub so that it does not get lost. :)

First Ever Project This was the first ever Computer Science project that I made back in Class XII (2016). I thought I should upload it on github so th

Own mod. Should be usable with VS v4 API (built with v3).

Own mod. Should be usable with VS v4 API (built with v3).

Introducing to the world - Maze Game! A game with an easily accessible, user-friendly interface that will provide you the serotonin a game should!
Introducing to the world - Maze Game! A game with an easily accessible, user-friendly interface that will provide you the serotonin a game should!

Maze-Project Maze game by Mazeβ„’ πŸ’» About Introducing to the world - Maze game! ⛏️ Used technologies C++ βœ… Features 3 levels of difficulty User-friendl

A special version of Packet Batch that utilizes AF_XDP Linux sockets (this should be faster than the standard version, but not as fast as the DPDK).

Packet Batch (AF_XDP) Description This is a special version of Packet Batch that utilizes AF_XDP sockets instead of AF_PACKETv3 (which is what the sta

Any one can add their programs here ,but program should not be repeated.
Any one can add their programs here ,but program should not be repeated.

Hactoberfest2021 To All the Beginners Guys Don't Forget to give star to this repo. Any one can add their programs here ,but program should not be repe

A special version of Packet Batch that utilizes the DPDK (this should be faster than the standard version).
A special version of Packet Batch that utilizes the DPDK (this should be faster than the standard version).

Packet Batch (DPDK) Description This is a special version of Packet Batch that utilizes the DPDK, a kernel-bypass library. This does not use any form

Tab module for imgui. Should be relatively forwardly compatible.
Tab module for imgui. Should be relatively forwardly compatible.

Tab module for imgui. Should be relatively forwardly compatible.

"Sigma File Manager" is a free, open-source, quickly evolving, modern file manager (explorer / finder) app for Windows, MacOS, and Linux.

"Sigma File Manager" is a free, open-source, quickly evolving, modern file manager (explorer / finder) app for Windows, MacOS, and Linux.

The decentralized package manager for C++ and friends 🏝️
The decentralized package manager for C++ and friends 🏝️

Buckaroo The decentralized package manager for C++ and friends. Why Buckaroo? Package managers like Yarn and Cargo have shown how productive developer

Examples of using Hunter package manager to build and run Android application.

Examples of using Hunter package manager to build and run Android application. Requirements Android NDK Go to download page and choose NDK for your pl

C++ front-end package manager for embedding and redistributing with native applications

Pacm Simple C++ package manager Homepage: https://sourcey.com/pacm Documentation: https://sourcey.com/libsourcey/api-pacm/ Dependencies: LibSourcey (b

Comments
  • move from docker to unshare+chroot

    move from docker to unshare+chroot

    fuse-overlayfs is very slow :( consuming a lot of cpu during builds. I can make everything work with unshare -rm + mount --bind ... + chroot, so why not use that.

    opened by haampie 1
Releases(v2.3.2)
Owner
Harmen Stoppels
Harmen Stoppels
PMM - The C++ Package Manager Manager

PMM - The Package Manager Manager PMM is a module for CMake that manages... package managers. Wha- Why? People hate installing new software. Especiall

Edgar 13 Dec 14, 2022
The decentralized package manager for C++ and friends 🏝️

Buckaroo The decentralized package manager for C++ and friends. Why Buckaroo? Package managers like Yarn and Cargo have shown how productive developer

LoopPerfect 903 Jan 6, 2023
πŸ“¦ CMake's missing package manager. A small CMake script for setup-free, cross-platform, reproducible dependency management.

Setup-free CMake dependency management CPM.cmake is a CMake script that adds dependency management capabilities to CMake. It's built as a thin wrapper

CPM.cmake 1.6k Jan 9, 2023
CMake driven cross-platform package manager for C/C++.

Hunter CMake driven cross-platform package manager for C/C++. Linux, Windows, macOS, iOS, Android, Raspberry Pi, etc. Documentation: https://hunter.re

null 497 Jan 3, 2023
Conan - The open-source C/C++ package manager

Conan Decentralized, open-source (MIT), C/C++ package manager.

Conan.io 6.5k Jan 6, 2023
C++ Library Manager for Windows, Linux, and MacOS

Vcpkg: Overview δΈ­ζ–‡ζ€»θ§ˆ EspaΓ±ol ν•œκ΅­μ–΄ FranΓ§ais Vcpkg helps you manage C and C++ libraries on Windows, Linux and MacOS. This tool and ecosystem are constant

Microsoft 17.5k Jan 4, 2023
C++ package retrieval

cget Cmake package retrieval. This can be used to download and install cmake packages. The advantages of using cget are: Non-intrusive: There is no ne

Paul Fultz II 420 Jan 3, 2023
BakePKG is a package archive that can install itself without without a package manager.

BakePKG A bad way of packaging applications. Introduction BakePKG is a package archive that can install itself without without a package manager. The

bread 3 Sep 3, 2022
Software ray tracer written from scratch in C that can run on CPU or GPU with emphasis on ease of use and trivial setup

A minimalist and platform-agnostic interactive/real-time raytracer. Strong emphasis on simplicity, ease of use and almost no setup to get started with

Arnon Marcus 48 Dec 28, 2022
Benchmarking a trivial replacement for std::vector

std::vector replacement benchmark Dependencies You'll need gnuplot and bash to run ./bench.sh. In addition to that, you'll need to have gcc and clang

Dale Weiler 9 Aug 27, 2022