= Getting Spectrum :page-parent: Build and Run :page-nav_order: 2 // SPDX-FileCopyrightText: 2022-2024 Alyssa Ross // SPDX-License-Identifier: GFDL-1.3-no-invariants-or-later OR CC-BY-SA-4.0 To get Spectrum, you need to build it from source. As long as you're running Linuxfootnote:[Building from other operating systems might work, but hasn't been tested. Patches are welcome to support building from other operating systems, as long as they're not too invasive.] and have https://nixos.org/download.html[Nix] and https://git-scm.com/[git] installed, it's very easy to do. TIP: Before you start, consider setting up the xref:binary-cache.adoc[Spectrum binary cache], which will save you a lot of time waiting for builds. TIP: If you encounter build failures, especially timeouts or out-of-memory (OOM) kills, Nix might be configured to run too many builds at once, with too many cores per build. See Nix's documentation for https://nix.dev/manual/nix/2.24/advanced-topics/cores-vs-jobs.html[tuning cores and jobs]. == Trying Spectrum If you want to try Spectrum out to get a feel for it, without installing it, you can run it in a development VM with some example applications. [source,shell] ---- git clone https://spectrum-os.org/git/spectrum cd spectrum/host/rootfs nix-shell --run 'make run' ---- This builds just enough of Spectrum to try it out in a VM, but it will still take a very long time. == Installing Spectrum To install Spectrum on a computer, you can use a USB drive as a bootable Spectrum installer device. You will need to choose whether to try out Spectrum without installing it on your system (as a live image), or to install it to your computer's internal storage. === Building A Live Image First, you need to build the Spectrum image: [source,shell] ---- git clone https://spectrum-os.org/git/spectrum nix-build spectrum/release/live ---- If you haven't set up the xref:binary-cache.adoc[binary cache], this will take a very long time. When it's done, a symbolic link named "result" will appear in the current directory, pointing to the installer image. Write that image to a USB drive, for example using `dd` (command line) or https://gitlab.com/bztsrc/usbimager[`usbimager`] (graphical, available in Nixpkgs). Boot your system from the USB drive, and Spectrum should be ready for you to use. === Building The Installer First, you need to build the Spectrum image: [source,shell] ---- git clone https://spectrum-os.org/git/spectrum nix-build spectrum/release/combined ---- If you haven't set up the xref:binary-cache.adoc[binary cache], this will take a very long time. When it's done, a symbolic link named "result" will appear in the current directory, pointing to the installer image. Write that image to a USB drive, for example using `dd` (command line) or https://gitlab.com/bztsrc/usbimager[`usbimager`] (graphical, available in Nixpkgs). Boot your system from the USB drive, and you should see a menu allowing you to "Install Spectrum". NOTE: While it's possible to install Spectrum to your internal storage, at this point in Spectrum's development there is not much reason to, as persistent storage is not yet exposed to VMs. Currently, Spectrum does not provide an update server, so you must provide your own. You can do this via xref:../development/build-configuration.adoc[build configuration]. The default sets the signing key to `/dev/null` and the server URL to an invalid value, so updates won't work. To enable updates, set `update-url` to the URL of your server and `update-signing-key` to a binary GnuPG keyring to verify the updates with. Not all possible URLs will work, but most invalid URLs will cause an error during the build rather than runtime misbehavior. In the running system, the signing key is located at `/etc/systemd/import-pubring.gpg`. The update URL is in various files under `/etc/updates`. These files are read-only, but one can mount an overlayfs on top of `/etc/systemd` and `/etc/updates` if one wants to make changes. CAUTION: Do not use Spectrum for anything important or sensitive as it is not yet suitable for real-world use. Many important security properties are currently missing.