{"id":13560116,"url":"https://github.com/fossable/goldboot","last_synced_at":"2025-05-14T15:11:21.858Z","repository":{"id":37935476,"uuid":"448603390","full_name":"fossable/goldboot","owner":"fossable","description":"Immutable infrastructure for the desktop!","archived":false,"fork":false,"pushed_at":"2025-04-12T18:09:06.000Z","size":32517,"stargazers_count":598,"open_issues_count":20,"forks_count":7,"subscribers_count":8,"default_branch":"master","last_synced_at":"2025-04-15T05:16:15.365Z","etag":null,"topics":["ansible","chef","devops-tools","dualboot","golden-image","infrastructure","linux","macos","puppet","steamdeck","windows"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/fossable.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":"cilki"}},"created_at":"2022-01-16T16:05:11.000Z","updated_at":"2025-04-12T18:05:43.000Z","dependencies_parsed_at":"2024-01-22T22:18:18.436Z","dependency_job_id":"d44cf049-2211-4427-b72d-ad790151e259","html_url":"https://github.com/fossable/goldboot","commit_stats":{"total_commits":255,"total_committers":5,"mean_commits":51.0,"dds":0.5333333333333333,"last_synced_commit":"67763501c6a2052194eb7a1888d4b1764b430584"},"previous_names":["goldboot/goldboot"],"tags_count":20,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fossable%2Fgoldboot","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fossable%2Fgoldboot/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fossable%2Fgoldboot/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fossable%2Fgoldboot/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fossable","download_url":"https://codeload.github.com/fossable/goldboot/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":249010221,"owners_count":21197796,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ansible","chef","devops-tools","dualboot","golden-image","infrastructure","linux","macos","puppet","steamdeck","windows"],"created_at":"2024-08-01T13:00:37.853Z","updated_at":"2025-04-15T05:16:21.774Z","avatar_url":"https://github.com/fossable.png","language":"Rust","readme":"\u003cp align=\"center\"\u003e\n\t\u003cimg src=\"https://raw.githubusercontent.com/goldboot/goldboot/master/.github/images/goldboot-256.png\" /\u003e\n\u003c/p\u003e\n\n![License](https://img.shields.io/github/license/goldboot/goldboot)\n![build](https://github.com/goldboot/goldboot/actions/workflows/test.yml/badge.svg)\n[![Discord](https://img.shields.io/discord/981695209492606986)](https://discord.gg/Vzr7gT5dsd)\n![GitHub repo size](https://img.shields.io/github/repo-size/fossable/goldboot)\n[![Turbine](https://turbine.goldboot.org/xmr/balance)](https://turbine.goldboot.org)\n![Stars](https://img.shields.io/github/stars/goldboot/goldboot?style=social)\n\u003chr\u003e\n\nPeople usually don't reinstall their OS from scratch very often. When they do,\nchaos ensues the moment they reach that pristine desktop or terminal. Settings\nget changed, applications are installed, bloatware is removed, files are downloaded\nhere and there. The system is generally altered from its original state into a new\n\"customized\" state by a manual flurry of mouse clicks and key presses.\n\nThis standard approach is like _mutable infrastructure_, meaning you mutate the\nstate of your system repeatedly until it eventually suits your needs. And when\nsomething goes awry, you have to make the necessary changes to get it back in line.\n\nFor most people, mutable infrastructure works out fine until something major\nbreaks or they have to migrate to a new computer altogether. In these cases,\nthey probably end up starting over from scratch and reapply their changes again\n(and probably slightly differently this time).\n\nSophisticated computer elites probably practice _immutable infrastructure_. Meaning\nthat, every time they boot their system, its state begins almost identically to\nthe time before. Any changes that are made during the course of runtime vanish on\nreboot. This approach has some real benefits, but requires quite a bit of effort\nfrom the user.\n\n`goldboot` is a tool that builds machine images for real hardware that can help\nyou achieve something close to immutable infrastructure without creating a lot\nof extra work for yourself.\n\nIn the `goldboot` approach, you create a declarative configuration file for each\nmachine that you want to deploy. Using this configuration, `goldboot` builds an\nimage either on your local machine or on a CI platform like Github Actions. The\nresulting image can be deployed to real hardware via a USB drive or through PXE boot.\n\n**Warning: this tool is totally unfinshed and should be used for testing only!\nProceed at your own risk!**\n\u003chr\u003e\n\u003cp align=\"center\"\u003e\n\t\u003cimg src=\"https://raw.githubusercontent.com/goldboot/goldboot/master/.github/images/overview.png\" /\u003e\n\u003c/p\u003e\n\n`goldboot` is approximately what you would get if [`docker`](https://www.docker.com) and [`packer`](https://www.packer.io)\nwere mixed together. Instead of building containers or virtual machines, `goldboot`\nbuilds images for real hardware.\n\nThese machine images (also known as _golden images_) contain your operating\nsystem(s), applications, software patches, and configuration all rolled into one\neasily deployable package.\n\nLike Docker images, your `goldboot` images can be stored in a registry and pulled\nonto real hardware.\n\n## Installation\n\n\u003cdetails\u003e\n\u003csummary\u003eDocker\u003c/summary\u003e\n\n![Docker Pulls](https://img.shields.io/docker/pulls/fossable/goldboot)\n![Docker Image Size](https://img.shields.io/docker/image-size/fossable/goldboot)\n![Docker Stars](https://img.shields.io/docker/stars/fossable/goldboot)\n\n#### Install from DockerHub\n\n```sh\nalias goldboot=\"docker run --rm -v .:/root fossable/goldboot\"\n```\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eCrates.io\u003c/summary\u003e\n\n![Crates.io Total Downloads](https://img.shields.io/crates/d/goldboot)\n\n#### Install from crates.io\n\n```sh\ncargo install goldboot\n```\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eArch Linux\u003c/summary\u003e\n\n![AUR Votes](https://img.shields.io/aur/votes/goldboot)\n![AUR Version](https://img.shields.io/aur/version/goldboot)\n![AUR Last Modified](https://img.shields.io/aur/last-modified/goldboot)\n\n#### Install from the AUR\n\n```sh\n  cd /tmp\n  curl https://aur.archlinux.org/cgit/aur.git/snapshot/goldboot.tar.gz | tar xf -\n  makepkg -si\n```\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eGithub Releases\u003c/summary\u003e\n\n![GitHub Downloads](https://img.shields.io/github/downloads/fossable/goldboot/total)\n\n#### Install manually from Github releases\n\n```sh\ncurl -o /usr/bin/goldboot https://github.com/fossable/goldboot/releases/download/goldboot-v0.0.7/goldboot_\u003cplatform\u003e\nchmod +x /usr/bin/goldboot\n```\n\n##### Dependencies\n```sh\napt-get install -y libudev1 libgtk-4-1 libglib2.0-0\n```\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eGithub Actions\u003c/summary\u003e\n\n#### Running on Github actions\n\nBuilding golden images with CI is common practice, so there's also a [Github\naction](https://github.com/fossable/goldboot-action) to make it easy:\n\n```yml\nsteps:\n  - name: Checkout\n    uses: actions/checkout@v4\n\n  - name: Build goldboot image\n    uses: fossable/goldboot-action@main\n    with:\n      config-path: goldboot.json\n      output-path: image.gb\n\n  - name: Save image artifact\n    uses: actions/upload-artifact@v3\n    with:\n      name: my_image.gb\n      path: image.gb\n```\n\u003c/details\u003e\n\n## Examples\n\nThe [goldboot-examples](https://github.com/fossable/goldboot-examples) repo contains example\nconfigurations of all supported OS types and system architectures. They are built on a weekly\nschedule against the latest version of `goldboot`.\n\n| Linux | Windows | macos |\n| ----- | ------- | ----- |\n| ![Alpine](goldboot/src/foundry/os/alpine/icon.png)         ![x86_64](https://github.com/fossable/goldboot-examples/workflows/Alpine/badge.svg)    | ![Windows 10](goldboot/src/foundry/os/windows_10/icon.png) ![x86_64](https://github.com/fossable/goldboot-examples/workflows/Windows10/badge.svg) | ![macOS](goldboot/src/foundry/os/arch_linux/mac_os.png) ![x86_64](https://github.com/fossable/goldboot-examples/workflows/Macos/badge.svg) |\n| ![Arch Linux](goldboot/src/foundry/os/arch_linux/icon.png) ![x86_64](https://github.com/fossable/goldboot-examples/workflows/ArchLinux/badge.svg) | |\n| ![Debian](goldboot/src/foundry/os/debian/icon.png)         ![x86_64](https://github.com/fossable/goldboot-examples/workflows/Debian/badge.svg)    | |\n| ![Pop!_OS](goldboot/src/foundry/os/pop_os/icon.png)        ![x86_64](https://github.com/fossable/goldboot-examples/workflows/Pop!_OS/badge.svg)   | |\n| ![Steam Deck](goldboot/src/foundry/os/steam_deck/icon.png) ![x86_64](https://github.com/fossable/goldboot-examples/workflows/SteamDeck/badge.svg) | |\n| ![Steam OS](goldboot/src/foundry/os/steam_os/icon.png)     ![x86_64](https://github.com/fossable/goldboot-examples/workflows/SteamOs/badge.svg)   | |\n\n## Example walkthrough\n\nLet's build a basic Arch Linux ![ArchLinux](goldboot/src/foundry/os/arch_linux/icon.png)\nimage to prove we're _real_ Linux users.\n\nFirst, create a directory to hold our configuration (which can later be tracked\nin version control):\n\n```sh\nmkdir Test \u0026\u0026 cd Test\n```\n\nInitialize the directory and choose `ArchLinux` to start with:\n\n```sh\ngoldboot init \\\n  --name Test \\\n  --os ArchLinux \\\n  --size 10G \\\n  --format json\n```\n\nThis will create `goldboot.json` which contains configuration options that can\nbe tweaked to suit your needs. For example:\n\n```json\n{\n  \"alloy\": [\n    {\n      \"os\": {\n        \"ArchLinux\": {\n          \"hostname\": \"YeahIUseArch\",\n          \"root_password\": {\n            \"plaintext\": \"123456\"\n          }\n        }\n      },\n      \"source\": {\n        \"Iso\": {\n          \"url\": \"https://mirrors.edge.kernel.org/archlinux/iso/2024.01.01/archlinux-2024.01.01-x86_64.iso\",\n          \"checksum\": \"sha256:12addd7d4154df1caf5f258b80ad72e7a724d33e75e6c2e6adc1475298d47155\"\n        }\n      }\n    }\n  ],\n  \"arch\": \"Amd64\",\n  \"name\": \"Test\",\n  \"size\": \"10G\"\n}\n```\n\nThere are many ways to customize the image, but for now just build it:\n\n```sh\ngoldboot cast .\n```\n\nOnce the build succeeds, the image will be saved to the system's library\ndirectory. To deploy it to a physical disk, you can include the image on a\nnew bootable USB drive:\n\n```sh\n# THIS WILL OVERWRITE /dev/sdX!\ngoldboot liveusb --output /dev/sdX --include Test\n```\n\nOnce the USB is created, you can use it to boot into the goldboot live\nenvironment and select an image to deploy:\n\n\u003cp align=\"center\"\u003e\n\t\u003cimg src=\"https://raw.githubusercontent.com/goldboot/goldboot/master/.github/images/select_image.png\" /\u003e\n\u003c/p\u003e\n\nOnce the image has been deployed, remove the bootable USB drive and reboot the\nmachine.\n","funding_links":["https://github.com/sponsors/cilki"],"categories":["Rust","Lower level tools"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffossable%2Fgoldboot","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffossable%2Fgoldboot","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffossable%2Fgoldboot/lists"}