{"id":15286594,"url":"https://github.com/metal-stack/metal-images","last_synced_at":"2026-05-22T07:15:47.336Z","repository":{"id":39590641,"uuid":"241173477","full_name":"metal-stack/metal-images","owner":"metal-stack","description":"CI-Builds for the metal-stack OS images","archived":false,"fork":false,"pushed_at":"2026-01-28T12:34:50.000Z","size":777,"stargazers_count":15,"open_issues_count":22,"forks_count":1,"subscribers_count":7,"default_branch":"master","last_synced_at":"2026-01-29T04:59:24.117Z","etag":null,"topics":["containers","debian","linux","metal-images","ubuntu"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/metal-stack.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":"CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2020-02-17T17:58:57.000Z","updated_at":"2026-01-26T13:35:49.000Z","dependencies_parsed_at":"2023-10-02T13:12:34.484Z","dependency_job_id":"197c1f2e-a536-4ea9-9671-ef9cae56563f","html_url":"https://github.com/metal-stack/metal-images","commit_stats":null,"previous_names":[],"tags_count":43,"template":false,"template_full_name":null,"purl":"pkg:github/metal-stack/metal-images","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/metal-stack%2Fmetal-images","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/metal-stack%2Fmetal-images/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/metal-stack%2Fmetal-images/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/metal-stack%2Fmetal-images/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/metal-stack","download_url":"https://codeload.github.com/metal-stack/metal-images/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/metal-stack%2Fmetal-images/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29121689,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-05T10:47:47.471Z","status":"ssl_error","status_checked_at":"2026-02-05T10:45:08.119Z","response_time":65,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["containers","debian","linux","metal-images","ubuntu"],"created_at":"2024-09-30T15:17:18.289Z","updated_at":"2026-02-05T12:16:52.186Z","avatar_url":"https://github.com/metal-stack.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# metal-images\n\nThis project builds operating system images that can be used for bare metal server deployments with [metal-stack](https://metal-stack.io).\nEvery OS image is built from a Dockerfile, exported to a lz4 compressed tarball, and uploaded to \u003chttps://images.metal-stack.io/\u003e.\n\nMore information about the image store is available in [IMAGE_STORE.md](./IMAGE_STORE.md).\n\nInformation about our initial architectural decisions can be found in [ARCHITECTURE.md](./ARCHITECTURE.md).\n\n## Supported Images\n\nCurrently these images are supported:\n\n1. Debian 12\n1. Ubuntu 24.04\n1. Firewall 3.0-ubuntu (based on Ubuntu 24.04)\n1. Nvidia (based on Debian 12)\n\n## Unsupported Images\n\nWe also publish images that we need for special purposes but do not officially support. Use at your own risk.\n\n1. Almalinux 9\n\n### GPU Support\n\nWith the nvidia image a worker has GPU support. Please check our official documentation on [docs.metal-stack.io](https://metal-stack.io/docs/gpu-workers) on how to get this running on Kubernetes.\n\n## How new images become usable in a metal-stack partition\n\nImages are synchronized to partitions using a service called [metal-image-cache-sync](https://github.com/metal-stack/metal-image-cache-sync). The service mirrors the public operating system images to the management servers and transparently serves the metal images within a partition.\n\nReleased images are tagged with the release date and can be accessed using the following image URL pattern:\n\n`https://images.metal-stack.io/metal-os/20240913/debian/12/img.tar.lz4`\n\nImages built from the master branch are accessible at an image URL like this:\n\n`https://images.metal-stack.io/metal-os/stable/debian/12/img.tar.lz4`\n\nFor other branches, the URL pattern is as follows:\n\n`https://images.metal-stack.io/metal-os/pull_requests/${CI_COMMIT_REF_SLUG}/debian/12/img.tar.lz4`\n\nThese URLs can be used to define an image at the metal-api.\n\n## Local development and integration testing\n\nPlease also refer to our documentation on docs.metal-stack.io on [Build Your Own Images](https://metal-stack.io/docs/operating-systems#building-your-own-images) to check for the contract an OS image is expected to fulfill.\n\nBefore you can start developing changes for metal-images or even introduce new operating systems, you should install the following tools:\n\n- **docker**: for sure\n- **golang**\n- **kvm**: hypervisor used for integration tests\n- **lz4**: to compress tarballs\n- enable docker's [**containerd image store**](https://docs.docker.com/engine/storage/containerd/#enable-containerd-image-store-on-docker-engine)\n- **[cloud-hypervisor](https://github.com/cloud-hypervisor/cloud-hypervisor)**: virtual machine monitor running on top of KVM to spin up MicroVMs for integration tests\n\nYou can build metal-images like that:\n\n```bash\n# for debian images\nmake debian\n\n# for ubuntu images\nmake ubuntu\n\n# for firewall images\nmake firewall\n\n# for nvidia images\nmake nvidia\n\n# for almalinux images\nmake almalinux\n```\n\n*IMPORTANT* if you prefer the old docker build output instead of the fancy buildx srolling behind output, do the following:\n\n```bash\nBUILDKIT_PROGRESS=plain make debian\n```\n\nFor integration testing the images are started as [cloud-hypervisor](https://www.cloudhypervisor.org) VMs and basic properties like interfaces to other metal-stack components, kernel parameters, internet accessibility, DNS resolution etc. are checked with [goss](https://github.com/aelsabbahy/goss) in a GitHub action workflow. Integration tests are also executed if you build an image locally.\n\n### Debugging Image Provisioning\n\nIn some cases it may be necessary to manually figure out the commands for provisioning a machine image. To do this in a real server environment, it is possible to hook into the metal-hammer through the machine's serial console.\n\nYou can interrupt the metal-hammer at any time by sending a keyboard interrupt. The metal-hammer takes a short break before booting into the operating system kernel, which is a good time to send the interrupt.\n\nTo prevent the machine from rebooting, you should immediately issue the following command:\n\n```bash\nwhile true; do echo \"1\" \u003e /dev/watchdog \u0026\u0026 sleep 55; done \u0026\n```\n\nIf you want to enter the operating system through `chroot`, you need to remount some file systems that were mounted by the metal-hammer during provisioning:\n\n```bash\n# the mount points also depend on the file system layout of the machine, so please only take this as an example:\nmount /dev/sda2 /rootfs\nmount -t vfat /dev/sda1 /rootfs/boot/efi\nmount -t proc /proc /rootfs/proc\nmount -t sysfs /sys /rootfs/sys\nmount -t efivarfs /sys/firmware/efi/efivars /rootfs/sys/firmware/efi/efivars\nmount -t devtmpfs /dev /rootfs/dev\n```\n\nFinally, you can then enter the provisioned OS image.\n\n```bash\nchroot /rootfs\n\n# maybe you can mount further file systems here, which was not possible in the u-root environment of the metal-hammer\nvgchange -ay\nmount /dev/csi-lvm/varlib /var/lib/\n```\n\nKeep in mind that you are still running on the metal-hammer kernel, which is different from the kernel that will be run in the operating system after provisioning. For further information on the metal-stack machine provisioning sequence, check out documentation on [docs.metal-stack.io](https://metal-stack.io/docs/architecture/#Machine-Provisioning-Sequence). The kernel used by the metal-hammer is built on our own inside the [kernel repository](https://github.com/metal-stack/kernel).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmetal-stack%2Fmetal-images","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmetal-stack%2Fmetal-images","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmetal-stack%2Fmetal-images/lists"}