{"id":22982221,"url":"https://github.com/osism/node-image","last_synced_at":"2026-02-08T22:31:45.426Z","repository":{"id":39591150,"uuid":"421755652","full_name":"osism/node-image","owner":"osism","description":"Live ISO image to bootstrap a new OSISM node","archived":false,"fork":false,"pushed_at":"2025-10-18T20:21:12.000Z","size":62671,"stargazers_count":5,"open_issues_count":1,"forks_count":1,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-10-19T11:39:30.969Z","etag":null,"topics":["autoinstall","curtin","subiquity","ubuntu"],"latest_commit_sha":null,"homepage":"https://www.osism.tech","language":"Jinja","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/osism.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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,"zenodo":null}},"created_at":"2021-10-27T09:28:43.000Z","updated_at":"2025-10-18T20:21:16.000Z","dependencies_parsed_at":"2023-12-11T17:27:03.789Z","dependency_job_id":"14073cbc-8a3c-4392-83df-b928b3ba8659","html_url":"https://github.com/osism/node-image","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/osism/node-image","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/osism%2Fnode-image","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/osism%2Fnode-image/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/osism%2Fnode-image/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/osism%2Fnode-image/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/osism","download_url":"https://codeload.github.com/osism/node-image/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/osism%2Fnode-image/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29247572,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-08T21:42:34.334Z","status":"ssl_error","status_checked_at":"2026-02-08T21:41:38.468Z","response_time":57,"last_error":"SSL_read: 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":["autoinstall","curtin","subiquity","ubuntu"],"created_at":"2024-12-15T02:16:58.978Z","updated_at":"2026-02-08T22:31:45.419Z","avatar_url":"https://github.com/osism.png","language":"Jinja","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Node Images\n\nThe image is in maintenance mode. We are currently no longer using it ourselves\nas we have switched to a new approach for providing the nodes for ourselves and\nour customers: the Metalbox. We are not yet archiving the repository. If anyone\nis currently using it and needs changes, please open issues.\n\n| :zap: When booting from one of these images, all data on the disks will be destroyed without confirmation. :zap: |\n|------------------------------------------------------------------------------------------------------------------|\n\n## Usage of the node images\n\n## Requirements\n\nThe disks used must be at least 480 GByte in size.\n\n### Installing generic images\n\n1. Connect one ore more ethernet ports and provide DHCP with gateway- and DNS access\n2. Add the installation media to your system\n   * Copy image to USB stick\n   * Place the image on your network provisioning environment\n    (Redfish-BMC Mount)\n3. Boot from the device\n4. Mount the image in the BMC in another way\n5. Installation is performed, system shuts down afterwards\n6. Unmount the device or remove it and start system again\n7. After the first boot the system shuts down once more\n8. Start the system, system is ready for use, by default DHCP is tried on all available interfaces\n9. Perform a SSH-login\n   * user: `osism` (alternatively use `dragon` after the 2nd deployment run)\n   * password: `password`\n\n### Installing images with \"Routing on the Host\"\n\nNormally, for reasons of efficiency, you would like to use the default images provided by OSISM for the installation.\nHowever, if you want to install systems that use Routing on the Host you have to integrate a number of parameters\ninto the image for the installation.\n\nThese parameters are listed in the file `parameters-routing-on-the-host.yml.sample` as example.\n\nThe installation is then carried out as follows:\n\n1. Configure the BMC of the server hardware and configure the following properties\n   * The hostname of the system\n   * The BMC IP address\n     (the last number of the IPv4 adress is used for building the node ASN, the node IPs, ..)\n   * Configure the involved switches to have a BGP peering with the host\n2. Build a node image specific for your environment\n   (see [parameters-routing-on-the-host.yml.sample](./parameters-routing-on-the-host.yml.sample)\n3. Add the installation media to your system\n   * Copy image to USB stick\n   * Place the image on your network provisioning environment\n    (Redfish-BMC Mount)\n4. Boot from the device\n   Installation is performed, system shuts down afterwards\n5. Unmount the device or remove it and start system again\n6. After the first boot the system shuts down once more\n7. Start the system, system is ready for use\n   (System starts with a ready to use network setup: dummy interface, frr-config, ...)\n8. Perform a SSH-login\n   * user: `osism` (alternatively use `dragon` after the 2nd deployment run)\n   * password: `password`\n\n## Creation of specific images\n\nIf the node images created in the release process are not sufficient or variants are required\nthat need specific parameters (e.g. for the setup of layer 3 underlay nodes), variants of the images can be created.\n\n### The build process\n\n[Jinja2](https://jinja.palletsprojects.com) is used here as a templating mechanism. By adding new templates or\nspecific logic, operators of osism cloud environments can use their own flavor of node images.\n\nNode images are created using the [`create-image.sh`](./create-image.sh) tool, which uses\ntemplates from the [`templates`](./templates)` folder.\n\nValues used in the templates are obtained from the following sources and in the following hierarchy:\n\n1. from the `vars` section of the respective node image in `.zuul.yaml`.\n2. from parameters that are passed via the `--parameters \u003ckey\u003e=\u003cvalue\u003e` parameter.\n3. via a YAML file that is passed with `--config \u003cfilename\u003e`.\n\nLast values are effective / winning.\n\n```bash\nusage: create-image.sh [-h] (--show | --build BUILD [BUILD ...] | --env | --clean) [--parameters KEY=VALUE [KEY=VALUE ...]]\n                       [--config CONFIG] [--template-only] [--layer3_underlay]\n\n\noptions:\n  -h, --help            Show this help message and exit\n  --show, -s            Show possible images\n  --build BUILD [BUILD ...], -b BUILD [BUILD ...]\n                        Build images\n  --env, -e             Create build environment\n  --clean, -r           Drop cached build data\n  --parameters KEY=VALUE [KEY=VALUE ...], -p KEY=VALUE [KEY=VALUE ...]\n                        Extra values, see template\n  --config CONFIG, -c CONFIG\n                        A config as yaml file\n  --build-directory BUILD_DIRECTORY\n                        Overwrite the default build directory\n  --template-only, -t   Do only templating\n```\n\n### Build an image with adapted/new values\n\nIn order to just test the templating and show the effective values\n(templated files are created in the [`./build`](./build) folder):\n\n```bash\n$ ./create-image.sh --build node-image-build-osism-1 --parameters layer3_underlay=true --template\nCreated context (yaml):\n---\nasn_node_base: '42100210'\nasn_part_digits: '0'\ndescription: Two mirrored NVME disks with a enhanced set of predefined logical volumes\n  (/dev/nvme3n1 and /dev/nvme4n1)\ninterface1_asn: '65405'\ninterface1_name: enp2s0f0np0\ninterface2_asn: '65404'\ninterface2_name: enp2s0f1np1\nipv4_base: 10.10.21.\nipv6_base: 'fd0c:cc24:75a0:1:10:10:21:'\nipv6_hex: 'false'\nlayer3_underlay: 'true'\nvariant: osism-1\npassword_hash: $5$H2wkOHUVMIm2Yl2n$2AR/A2ILtgZcWx5UXL6N56Ha/wkdGvs0w5sFUMQ3iaB\nssh_public_key_user_osism: '# no key specified'\n....\n```\n\nBuild the image:\n````bash\n$ ./create-image.sh \\\n    --build node-image-build-osism-1 \\\n    --config Supermicro_A2SDV-8C-LN8F.yml \\\n    --parameters \"ipv6_base=fd0c:cc24:75a0:1:10:10:21:\" \"layer3_underlay=true\"\n````\n\n### Charateristics of layer3_underlay deployments\n\nThe parameter `layer3_underlay: 'true'` enables the support for layer3 underlays for the image.\n\nThe logic currently implemented is relatively simple and behaves as follows:\n\n- The following must be configured on the system's BMC:\n   - the hostname of the system\n   - The BMC IPv4\n- The last group of numbers is taken from the BMC IPv4 configured in the system\n  and used as the basis for other configurations (`node-suffix`):\n   - the IPV4 of the “dummy0” interface: `\u003cipv4_base\u003e\u003cnode-suffix\u003e\u003e`\n   - the IPV6 of the “dummy0” interface : `\u003cipv6_base\u003e\u003cnode-suffix\u003e`\n   - the node ASN of the FRR instance of the node: `\u003casn_node_base\u003e\u003cnode-suffix\u003e`\n- The image installs itself with deactivated IPv6 Router Advertisements because otherwise Ubuntu Autoinstall\n  tries to reach package sources (so no internet connection is necessary)\n- The names of two Ethernet interfaces and the corresponding ASNs of the switches must be specified (e.g. `interface1_asn` and `interface1_name`)\n\n## Published images\n\n### Generic Node Images\n\n#### Variant 1\n\n[Standard Image](https://nbg1.your-objectstorage.com/osism/node-image/ubuntu-autoinstall-1.iso) - \n  [[SHA256]](https://nbg1.your-objectstorage.com/osism/node-image/ubuntu-autoinstall-1.iso.CHECKSUM)\n\n![Disk layout](assets/disklayout-1.drawio.png \"Disk layout\")\n\n#### Variant 2\n\n* [Standard Image](https://nbg1.your-objectstorage.com/osism/node-image/ubuntu-autoinstall-2.iso) - \n  [[SHA256]](https://nbg1.your-objectstorage.com/osism/node-image/ubuntu-autoinstall-2.iso.CHECKSUM)\n* Regio Cloud Images\u003cBR\u003e\n  used for the REGIO.cloud environment, variants of the used devices.\n  * [OSISM 1](https://nbg1.your-objectstorage.com/osism/node-image/ubuntu-autoinstall-osism-1.iso) -\n    [[SHA256]](https://nbg1.your-objectstorage.com/osism/node-image/ubuntu-autoinstall-osism-1.iso.CHECKSUM)\u003cBR\u003e\n    Like `Variant 2`, with `/dev/nvme3n1` and `/dev/nvme4n1`\u003cBR\u003e\n  * [OSISM 2](https://nbg1.your-objectstorage.com/osism/node-image/ubuntu-autoinstall-osism-2.iso) - \n    [[SHA256]](https://nbg1.your-objectstorage.com/osism/node-image/ubuntu-autoinstall-osism-2.iso.CHECKSUM)\u003cBR\u003e\n    Like `Variant 2`, with `/dev/nvme4n1` and `/dev/nvme5n1`\u003cBR\u003e\n  * [OSISM 3](https://nbg1.your-objectstorage.com/osism/node-image/ubuntu-autoinstall-osism-3.iso) - \n    [[SHA256]](https://nbg1.your-objectstorage.com/osism/node-image/ubuntu-autoinstall-osism-3.iso.CHECKSUM)\u003cBR\u003e\n    Like `Variant 2`, with `/dev/nvme2n1` and `/dev/nvme3n1`\u003cBR\u003e\n  * [OSISM 4](https://nbg1.your-objectstorage.com/osism/node-image/ubuntu-autoinstall-osism-4.iso) - \n    [[SHA256]](https://nbg1.your-objectstorage.com/osism/node-image/ubuntu-autoinstall-osism-4.iso.CHECKSUM)\u003cBR\u003e\n    Like `Variant 2`, with `/dev/nvme0n1` and `/dev/nvme1n1`\u003cBR\u003e\n\n![Disk layout](assets/disklayout-2.drawio.png \"Disk layout\")\n\n#### Variant 3\n\n[Standard Image](https://nbg1.your-objectstorage.com/osism/node-image/ubuntu-autoinstall-3.iso) - \n  [[SHA256]](https://nbg1.your-objectstorage.com/osism/node-image/ubuntu-autoinstall-3.iso.CHECKSUM)\n\n![Disk layout](assets/disklayout-3.drawio.png \"Disk layout\")\n\n#### Variant 4\n\n[Standard Images](https://nbg1.your-objectstorage.com/osism/node-image/ubuntu-autoinstall-4.iso) - \n  [[SHA256]](https://nbg1.your-objectstorage.com/osism/node-image/ubuntu-autoinstall-4.iso.CHECKSUM)\n\n![Disk layout](assets/disklayout-4.drawio.png \"Disk layout\")\n\n## Cloud-in-a-box images\n\nThe [cloud in a box](https://osism.tech/docs/guides/other-guides/cloud-in-a-box) documentation provides more details about this.\n\n### Variant 1 - SCSI images\n\n* [Sandbox Image](https://nbg1.your-objectstorage.com/osism/node-image/ubuntu-autoinstall-cloud-in-a-box-1.iso) - \n  [[SHA256]](https://nbg1.your-objectstorage.com/osism/node-image/ubuntu-autoinstall-cloud-in-a-box-1.iso.CHECKSUM)\n* [Kubernetes Image](https://nbg1.your-objectstorage.com/osism/node-image/ubuntu-autoinstall-cloud-in-a-box-kubernetes-1.iso) - \n  [[SHA256]](https://nbg1.your-objectstorage.com/osism/node-image/ubuntu-autoinstall-cloud-in-a-box-kubernetes-1.iso.CHECKSUM)\u003cBR\u003e\n  Like Sandbox `Variant 1`, with `CLOUD_IN_A_BOX_TYPE=kubernetes` boot parameter.\n\n![Disk layout](assets/disklayout-cloud-in-a-box-1.drawio.png \"Disk layout\")\n\n### Variant 2 - NVMe images\n\n * [Sandbox Image](https://nbg1.your-objectstorage.com/osism/node-image/ubuntu-autoinstall-cloud-in-a-box-2.iso) - \n   [[SHA256]](https://nbg1.your-objectstorage.com/osism/node-image/ubuntu-autoinstall-cloud-in-a-box-2.iso.CHECKSUM)\n * [Edge Image](https://nbg1.your-objectstorage.com/osism/node-image/ubuntu-autoinstall-cloud-in-a-box-edge-2.iso) - \n   [[SHA256]](https://nbg1.your-objectstorage.com/osism/node-image/ubuntu-autoinstall-cloud-in-a-box-edge-2.iso.CHECKSUM)\u003cBR\u003e\n   Like Sandbox `Variant 2`, with `CLOUD_IN_A_BOX_TYPE=edge` boot parameter.\n * [Kubernetes Image](https://nbg1.your-objectstorage.com/osism/node-image/ubuntu-autoinstall-cloud-in-a-box-kubernetes-2.iso) - \n   [[SHA256]](https://nbg1.your-objectstorage.com/osism/node-image/ubuntu-autoinstall-cloud-in-a-box-kubernetes-2.iso.CHECKSUM)\u003cBR\u003e\n   Like Sandbox `Variant 2`, with `CLOUD_IN_A_BOX_TYPE=kubernetes` boot parameter.\n\n![Disk layout](assets/disklayout-cloud-in-a-box-2.drawio.png \"Disk layout\")\n\n## Frequently asked Questions / Known Issues\n\n### Download and verify images\n\n```bash\nosism_image(){\n  local url=\"${1?image url}\"\n  local base_path=\"$(basename ${url})\"\n  wget -c \"${url}\" \u0026\u0026 \\\n  wget -c \"${url}.CHECKSUM\" \u0026\u0026 \\\n  sha256sum -c \"${base_path}.CHECKSUM\" \u003c \"${base_path}\"\n}\n\nosism_image \u003cimage url\u003e\n```\n\n### Efficent adapting, developing and testing\n\nIn order for images to be adapted or further developed, they must be tested or checked on the respective hardware.\nIt has proven to be advantageous to develop these on a system close to the installation hardware\nand then mount the images via the SMB protocol in the DVD emulation of the BMC.\n\nTo shorten roundtrip times, you can publish created images via a Samba server on your workstation as follows:\n```\ncontrib/samba-local/samba_local.sh\n```\nAfter initial installation of the image (system is in shutdown), you can just stop this samba instance by hitting `CTRL+c`\nto ensure that the next boot is performed from the local disk.\n\nThis saves you having to create a USB stick, go to the system and often also manually select the boot device.\n\n### Disk initialization fails\n\nDisk initialization may fail if the devices have been in use before.\nIn particular having a MSDOS-type partition table will cause the\ninstallation to break. In this case boot some Ubuntu live image and\nerase all data from your disks.\n\nIn that case it is a good idea to erase the disk:\n```bash\ndd if=/dev/zero of=/dev/\u003cdevice\u003e bs=1M count=1024\n```\n(you can use that from the shell prompt available from the installation image or with a live systems)\n\n## References\n\n* https://curtin.readthedocs.io/en/latest/topics/storage.html\n* https://github.com/cloudymax/pxeless\n* https://jimangel.io/posts/automate-ubuntu-22-04-lts-bare-metal/\n* https://ubuntu.com/server/docs/install/autoinstall-reference\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fosism%2Fnode-image","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fosism%2Fnode-image","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fosism%2Fnode-image/lists"}