GUIX offers developers and system admins a solution to one of the most vexing issues: how to get `
GUIX performs this through three major features that removes this headache from your workflow:
1. GUIX ensures that each software program/tool (a "package") is installed in an isolated store to avoid mucking with the rest of your system. Each package is installed in a byte-reproducible manner.
2. Packages are defined in a functional configuration language (Guile Scheme), which means packages are themselves inputs and outputs of the configuration.
3. The same configuration language can be used to configure Developer environments, Containers (to be run shared and run on OCI-compliant container runners, including Kubernetes), and System configurations for VMs.
_ _ | | (_)_ __ _ ___ __ | | | | '_ \| | | \ \/ / | |___| | | | | |_| |> < |_____|_|_| |_|\__,_/_/\_\
wget https://git.savannah.gnu.org/cgit/guix.git/plain/etc/guix-install.sh chmod +x guix-install.sh sudo ./guix-install.sh
Some distributions of GNU/Linux already have a guix package available via their package manager. If this is the case, you can also use this option. For example, Ubuntu is a distribution containing a guix package. You can install it with this command:
sudo apt install guix
__ ___ _ __ __ ______ _ ____ \ \ / (_)_ __ __| | _____ _____ / / \ \ / / ___|| | |___ \ \ \ /\ / /| | '_ \ / _` |/ _ \ \ /\ / / __| / / \ \ /\ / /\___ \| | __) | \ V V / | | | | | (_| | (_) \ V V /\__ \ / / \ V V / ___) | |___ / __/ \_/\_/ |_|_| |_|\__,_|\___/ \_/\_/ |___/ /_/ \_/\_/ |____/|_____|_____|
__ __ ___ ____ __ __ __ _ ____ __ ____
| \/ | __ _ ___ / _ \/ ___| \ \/ / / / / \ | _ \| \/ \ \
| |\/| |/ _` |/ __| | | | \___ \ \ / | | / _ \ | |_) | |\/| || |
| | | | (_| | (__ | |_| |___) | / \ | |/ ___ \| _ <| | | || |
|_| |_|\__,_|\___| \___/|____/ /_/\_\ | /_/ \_\_| \_\_| |_|| |
\_\ /_/ Add the following files to the root of your project directory:
Make `dev-shell.sh` executable
chmod +x dev-shell.sh
Be sure to include your project's name, version, synopsis, and description.
./dev-shell.sh
This will create a Developer Shell with Clojure, Java, cURL, etc. No need to spend 30 minutes hunting down the correct install script!
Unfortunately, AppArmor (which runs as a service on some Linux distributions) has a bad habit of preventing Guix from creating user namespaces, which it does whenever it creates a container environment.
To fix this, you will need to install a new AppArmor profile into /etc/apparmor.d/guix with this content:
abi, include # Profile for the guix binary profile guix /usr/local/bin/guix flags=(unconfined) { userns, # Site-specific additions and overrides include if exists } # Profile for unprivileged user namespaces profile unprivileged_userns flags=(unconfined) { allow userns create, }
Then you can load it with the following command:
sudo apparmor_parser -r /etc/apparmor.d/guix
Have fun and happy hacking!