Build your own

You do not need to build anything to use pipeOS. This page is for building the image, changing it, and running a fleet on your own keys. Everything the image contains is at securedataresearch/pipeOS: overlay/ is the filesystem, scripts/ the pipeline in numbered order, and CI gates every piece.

Building the image

$ ./scripts/00-host-setup.sh   # deps for Arch, Debian, Fedora or Alpine; fetches and verifies the Alpine ISO
$ make chroot                  # the Alpine build chroot (sudo, once)
$ make apks                    # build and sign the package repos
$ make usb                     # out/pipeos-usb.img: write it with dd as on the live disk page
$ make vm                      # or boot it in qemu first: the wizard at http://localhost:8080/

The scripts are host-portable. A config-only change is make image; a package change reruns make apks first. For a shell, bake a public key in with AUTH_KEYS=~/.ssh/id_ed25519.pub; SSH is key-only and root has no password.

Your fleet, your keys, your origin

Nothing in a self-built pipeOS phones home to the vendor or trusts them:

signing keythe first make chroot generates a fresh keypair, kept outside the repository (~/.pipeos/keys or /data/keys/pipeos). Every image you build trusts your key only. Guard it; the build refuses to continue if it finds two different keys claiming to be yours
update originoverlay/etc/pipeos/selfupdate.conf ships pointing at the project's GitHub Releases. Blank UPDATE_RELEASE_URL and your boxes never self-update; point it at your own Releases (make release) or any static host serving the digest file and pipeos-repo.tar.gz, and your fleet updates from you, hourly, through the same verified, atomic, self-rolling-back path
support relayVendor support access dials out only to the relay in /etc/pipeos/support.conf. It ships as [email protected] with the switch off; a box never switched on never speaks to it. Point it at your own relay, or blank it and the service refuses to start
pipeoptional and off by default

Updates are trusted by signature: the box verifies the repository index against its trusted keys before anything touches the media, so a wrong origin fails verification and leaves the box untouched.

Running a fleet

Serve the built repository directory over HTTP, set UPDATE_URL to it and blank the release URL, save, and the hourly run takes it from there. make stick CARD=… bakes a model card into the image so a named box boots as itself; the fence explains what the card generates. A plain image ships the generic card and is nobody's until claimed.

When something goes wrong

Troubleshooting for the box; an issue on the repository with the boot report text for the build.

Next

The box: back to the start of the manual.