{"id":30232136,"url":"https://github.com/cozystack/boot-to-talos","last_synced_at":"2026-04-01T18:37:22.620Z","repository":{"id":307905967,"uuid":"1031042549","full_name":"cozystack/boot-to-talos","owner":"cozystack","description":"Convert any OS to Talos Linux","archived":false,"fork":false,"pushed_at":"2026-03-19T13:11:50.000Z","size":140,"stargazers_count":89,"open_issues_count":3,"forks_count":2,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-03-20T04:45:01.712Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Go","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/cozystack.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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-08-02T22:04:46.000Z","updated_at":"2026-03-19T13:11:55.000Z","dependencies_parsed_at":"2025-12-18T04:02:02.352Z","dependency_job_id":null,"html_url":"https://github.com/cozystack/boot-to-talos","commit_stats":null,"previous_names":["cozystack/boot-to-talos"],"tags_count":11,"template":false,"template_full_name":null,"purl":"pkg:github/cozystack/boot-to-talos","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cozystack%2Fboot-to-talos","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cozystack%2Fboot-to-talos/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cozystack%2Fboot-to-talos/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cozystack%2Fboot-to-talos/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cozystack","download_url":"https://codeload.github.com/cozystack/boot-to-talos/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cozystack%2Fboot-to-talos/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31290911,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-01T13:12:26.723Z","status":"ssl_error","status_checked_at":"2026-04-01T13:12:25.102Z","response_time":53,"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":[],"created_at":"2025-08-14T23:09:43.815Z","updated_at":"2026-04-01T18:37:22.612Z","avatar_url":"https://github.com/cozystack.png","language":"Go","funding_links":[],"categories":["Table of Contents"],"sub_categories":[],"readme":"# boot-to-talos\n\nConvert any OS to Talos Linux — completely from userspace, no external dependencies except the Talos installer image.\n\n## Supported Image Sources\n\nboot-to-talos supports multiple image sources:\n\n| Source Type | Example | Description |\n|-------------|---------|-------------|\n| Container | `ghcr.io/cozystack/cozystack/talos:v1.11` | Container registry images (default) |\n| ISO | `talos-v1.11.0-metal-amd64.iso` | Local ISO files |\n| RAW | `talos-v1.11.0-metal-amd64.raw.xz` | Local RAW disk images (supports .xz and .gz compression) |\n| HTTP | `https://factory.talos.dev/image/.../metal-amd64.raw.xz` | Remote ISO or RAW images |\n\nThe image type is auto-detected from the file extension or URL path.\n\n### Supported Combinations\n\nNot all source types support all operation modes:\n\n| Source | boot mode | install mode |\n| --- | --- | --- |\n| Container | ✓ | ✓ |\n| RAW | ✓ | ✓ |\n| ISO | ✓ | ✗ |\n| HTTP (RAW/ISO) | ✓ | ✓* |\n\n**Note:** HTTP source delegates to RAW or ISO source after download. *Install mode via HTTP only works with RAW images.\n\n### Factory Images\n\nYou can use official Talos factory images from [factory.talos.dev](https://factory.talos.dev):\n\n```console\n# Install from factory RAW image (recommended for install mode)\nboot-to-talos -yes -disk /dev/sda -image https://factory.talos.dev/image/SCHEMATIC_ID/v1.11.0/metal-amd64.raw.xz\n\n# Install from local RAW image\nboot-to-talos -yes -disk /dev/sda -image ./talos-v1.11.0-metal-amd64.raw.xz\n\n# Boot from local ISO\nboot-to-talos -yes -mode boot -image ./talos-v1.11.0-metal-amd64.iso\n```\n\n### Secure Boot Compatibility\n\n| Mode | Container | ISO | RAW |\n| --- | --- | --- | --- |\n| install | Requires SB disabled* | Requires SB disabled* | Requires SB disabled* |\n| boot (kexec) | No** | No** | No** |\n\n#### Why Secure Boot must be disabled\n\nTalos Linux UKI (Unified Kernel Image) is signed with Sidero Labs keys. Your system's UEFI firmware only trusts keys from its signature database (db), which typically contains Microsoft and OEM keys — not Sidero Labs keys.\n\n**This cannot be bypassed programmatically** because:\n\n- Adding keys to UEFI db requires signing with existing KEK (we don't have Microsoft's private key)\n- MOK (Machine Owner Key) enrollment requires physical presence at boot (MokManager UI)\n- Disabling Secure Boot requires BIOS/UEFI access\n\n#### For remote servers without iKVM/BMC console\n\nYou must disable Secure Boot **before** using boot-to-talos:\n\n- Via IPMI/BMC web interface (if available)\n- Via Redfish API (if supported by your server)\n- Physically during initial server setup\n\nboot-to-talos will detect Secure Boot state and warn you if it's enabled.\n\n#### Boot mode limitations\n\n\\** Boot mode uses kexec syscall which is blocked when kernel lockdown is active. Lockdown mode is automatically enabled when Secure Boot is on. There is no workaround — boot mode requires Secure Boot to be disabled.\n\n## How it works\n\n1. **Unpack in RAM** – layers from the Talos‑installer container are extracted into a throw‑away `tmpfs`; no Docker needed.\n2. **Build system image** – a sparse `image.raw` is created, exposed via a loop device, and the Talos *installer* is executed inside a chroot; it partitions, formats and lays down GRUB + system files.\n3. **Stream to disk** – the program copies `image.raw` to the chosen block device in 4 MiB chunks and `fsync`s after every write, so data is fully committed before reboot.\n4. **Reboot** – `echo b \u003e /proc/sysrq-trigger` performs an immediate reboot into the freshly flashed Talos Linux.\n\n## Installation\n\nDownload binary from Github [releases page](https://github.com/cozystack/boot-to-talos/releases/latest)\n\nOr use simple script to install it:\n```bash\ncurl -sSL https://github.com/cozystack/boot-to-talos/raw/refs/heads/main/hack/install.sh | sh -s\n```\n\n## Example usage\n\n```console\n$ boot-to-talos\nMode:\n  1. boot – extract the kernel and initrd from the Talos installer and boot them directly using the kexec mechanism.\n  2. install – prepare the environment, run the Talos installer, and then overwrite the system disk with the installed image.\nMode [1]: 2\nTalos installer image [ghcr.io/cozystack/cozystack/talos:v1.10.5]:\nTarget disk [/dev/sda]:\nAdd networking configuration? [yes]:\nInterface [eth0]:\nIP address [10.0.2.15]:\nNetmask [255.255.255.0]:\nGateway (or 'none') [10.0.2.2]:\nConfigure serial console? (or 'no') [ttyS0]:\n\nSummary:\n  Image: ghcr.io/cozystack/cozystack/talos:v1.10.5\n  Disk:  /dev/sda\n  Extra kernel args: ip=10.0.2.15::10.0.2.2:255.255.255.0::eth0::::: console=ttyS0\n\nWARNING: ALL DATA ON /dev/sda WILL BE ERASED!\n\nContinue? [yes]:\n\n2025/08/03 00:11:03 created temporary directory /tmp/installer-3221603450\n2025/08/03 00:11:03 pulling image ghcr.io/cozystack/cozystack/talos:v1.10.5\n2025/08/03 00:11:03 extracting image layers\n2025/08/03 00:11:07 creating raw disk /tmp/installer-3221603450/image.raw (2 GiB)\n2025/08/03 00:11:07 attached /tmp/installer-3221603450/image.raw to /dev/loop0\n2025/08/03 00:11:07 starting Talos installer\n2025/08/03 00:11:07 running Talos installer v1.10.5\n2025/08/03 00:11:07 WARNING: config validation:\n2025/08/03 00:11:07   use \"worker\" instead of \"\" for machine type\n2025/08/03 00:11:07 created EFI (C12A7328-F81F-11D2-BA4B-00A0C93EC93B) size 104857600 bytes\n2025/08/03 00:11:07 created BIOS (21686148-6449-6E6F-744E-656564454649) size 1048576 bytes\n2025/08/03 00:11:07 created BOOT (0FC63DAF-8483-4772-8E79-3D69D8477DE4) size 1048576000 bytes\n2025/08/03 00:11:07 created META (0FC63DAF-8483-4772-8E79-3D69D8477DE4) size 1048576 bytes\n2025/08/03 00:11:07 formatting the partition \"/dev/loop0p1\" as \"vfat\" with label \"EFI\"\n2025/08/03 00:11:07 formatting the partition \"/dev/loop0p2\" as \"zeroes\" with label \"BIOS\"\n2025/08/03 00:11:07 formatting the partition \"/dev/loop0p3\" as \"xfs\" with label \"BOOT\"\n2025/08/03 00:11:07 formatting the partition \"/dev/loop0p4\" as \"zeroes\" with label \"META\"\n2025/08/03 00:11:07 copying from io reader to /boot/A/vmlinuz\n2025/08/03 00:11:07 copying from io reader to /boot/A/initramfs.xz\n2025/08/03 00:11:08 writing /boot/grub/grub.cfg to disk\n2025/08/03 00:11:08 executing: grub-install --boot-directory=/boot --removable --efi-directory=/boot/EFI /dev/loop0\n2025/08/03 00:11:08 installation of v1.10.5 complete\n2025/08/03 00:11:08 Talos installer finished successfully\n2025/08/03 00:11:08 remounting all filesystems read-only\n2025/08/03 00:11:08 copy /tmp/installer-3221603450/image.raw → /dev/sda\n2025/08/03 00:11:19 installation image copied to /dev/sda\n2025/08/03 00:11:19 rebooting system\n```\n\n## Non-interactive installation\n\nYou can run `boot-to-talos` in fully automated mode by passing the required flags.  \nTo skip all interactive prompts, use the `-yes` flag:\n\n```console\nboot-to-talos -yes\n```\n\nYou can also specify all parameters explicitly:\n\n```console\nboot-to-talos -yes -disk /dev/sda -image ghcr.io/cozystack/cozystack/talos:v1.10.5 -image-size-gib 4 -extra-kernel-arg \"console=ttyS0\"\n```\n\n## Available command-line flags\n\n| Flag                  | Description                                                        | Example                                         |\n|-----------------------|--------------------------------------------------------------------|-------------------------------------------------|\n| `-yes`                | Run non-interactively, do not ask for confirmation                 | `-yes`                                          |\n| `-mode string`        | Operation mode: `boot` or `install` (default: interactive)         | `-mode install`                                 |\n| `-disk string`        | Target disk (will be wiped, install mode only)                     | `-disk /dev/sda`                                |\n| `-image string`       | Talos image (container ref, ISO path, RAW path, or HTTP URL)       | `-image ghcr.io/cozystack/cozystack/talos:v1.11` |\n| `-image-size-gib uint`| Size of image.raw in GiB (default: 3)                              | `-image-size-gib 4`                             |\n| `-extra-kernel-arg value` | Extra kernel argument (can be repeated)                        | `-extra-kernel-arg \"console=ttyS0\"`             |\n\n**Tip:** All flags can be combined. If a flag is not provided, the installer will prompt for input (unless `-yes` is used).\n\n---\n\nCreated for the Cozystack project. 🚀\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcozystack%2Fboot-to-talos","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcozystack%2Fboot-to-talos","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcozystack%2Fboot-to-talos/lists"}