6007 Commits

Author SHA1 Message Date
Noel Georgi
8f2b337994
feat: imager support rootless builds
Also changes the bootloader interface.
Disks are formatted/created with pre-populated source directories in Install/Image mode.

Signed-off-by: Noel Georgi <git@frezbo.dev>
2025-12-24 11:02:37 +05:30
Noel Georgi
c7525a97ef
feat: support creating filesystems from folder
Support creating filesystems from `SourceDirectory`, this implies partitions can have the data populated when formatted.

ImageCache handling is now using `SourceDirectory` while formatting simplifying the code.

Signed-off-by: Noel Georgi <git@frezbo.dev>
2025-12-23 18:13:01 +05:30
Noel Georgi
e2bffb5ceb
chore: refactor imager code so it's more clear
Refactor imager code to simplify code flow.

Signed-off-by: Noel Georgi <git@frezbo.dev>
2025-12-23 18:12:58 +05:30
Mateusz Urbanek
0fb50dbd0a
fix: invalid versions check in talos-bundle
Fixes #12471

Signed-off-by: Mateusz Urbanek <mateusz.urbanek@siderolabs.com>
2025-12-23 11:45:25 +01:00
Andrey Smirnov
b5dd560320
test: upgrade versions in upgrade tests
Preparing for v1.13.0.

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2025-12-23 14:16:36 +04:00
Dmitrii Sharshakov
3dfa4d6e40
fix: make upgrade work with SELinux enforcing=1
Add a test for this case

Signed-off-by: Dmitrii Sharshakov <dmitry.sharshakov@siderolabs.com>

Co-authored-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2025-12-23 13:43:38 +04:00
Andrey Smirnov
786c8e2ee7
feat: ship pigz/igzip in rootfs to speed up image decompression
Fixes https://github.com/siderolabs/extensions/discussions/931

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2025-12-23 12:43:11 +04:00
Andrey Smirnov
48d242918b
feat: update containerd to 2.2.1
Use the latest release.

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2025-12-22 13:58:25 +04:00
Andrey Smirnov
536541afe4
fix: mount volume mount/unmount race
The fix enforces the order `VolumeMountStatus` resources are locked via
finalizers: the order follows the definition in the service, which
follows the order parent -> child. Previous parallel implementation
could put a finalizer on the child before parent, which might lead to a
deadlock.

Example flow:

* there are two mount requests `/var/lib` and `/var/lib/audit` (having
  `/var/lib` as parent)
* service requests mounts, puts finalizers, runs
* service stops, releases volume mount requests, and restart
* at the same time concurrently controller might decide to unmount
  `/var/lib` which will be blocked on child `/var/lib/audit` being
  mounted
* starting service might put a finalizer on `/var/lib/audit` as it's not
  tearing down yet
* the finalizer on a child `/var/lib/audit` will prevent `/var/lib` from
  being unmounted ever.

Also remove mount requests generation hack.

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2025-12-19 12:53:04 +04:00
Andrey Smirnov
39117d4576
feat: update dependencies
Bump Go modules, Helm charts, other versions.

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2025-12-18 22:59:51 +04:00
Andrey Smirnov
f0f420725c
fix: bond setting change detection
Ignore primaryIndex unless it's both configured and set in the kernel.

I think we should never actually set primaryIndex in any case, but this
fixes an issue with Talos gets into a loop trying to reconcile
primaryIndex (when kernel reports it, and we don't have it set).

This comes from a private user report.

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2025-12-18 19:28:54 +04:00
Andrey Smirnov
8d6a7a8677
feat: update Kubernetes to 1.35.0
Update to the final version for v1.12.0.

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2025-12-18 16:18:40 +04:00
Andrey Smirnov
845a0d09cd
feat: update etcd 3.6.7, CoreDNS 1.13.2
Update to the latest version.

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2025-12-18 15:59:20 +04:00
Andrey Smirnov
b95912e049
feat: enforce proc_mem.force_override=never by default
Note: this is Talos 1.13 only, and will only be enabled once we get to
release v1.13.0-alpha.0.

See https://github.com/siderolabs/pkgs/pull/1412#issuecomment-3665787378
for more details.

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2025-12-18 15:43:21 +04:00
Mateusz Urbanek
681f3e84c8
test: run virtiofs tests only when virtiofsd is running
Detect if virtiofsd is created, and then run or skip virtiofs volumes tests.

Signed-off-by: Mateusz Urbanek <mateusz.urbanek@siderolabs.com>
2025-12-18 10:26:06 +01:00
Andrey Smirnov
0592ff0cdb
fix: drop the Omni API URL check on IP address
I don't see much point in this check, as it's only valuable when joining
to a local development instance of Omni, which is pretty nice usecase.

But this check breaks joining to "real" Omni which has hostname in the
endpoint.

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2025-12-17 21:30:48 +04:00
Andrey Smirnov
a4879a5fa2
feat: update Linux to 6.18.1
Use the latest LTS.

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2025-12-17 12:28:37 +04:00
Andrey Smirnov
43b43ff189
docs: split talosctl commands into groups
Use the grouping feature to reflect internal command structure better in
the `--help` output.

```
$ talosctl --help
A CLI for out-of-band management of Kubernetes nodes created by Talos

Usage:
  talosctl [command]

Manage running Talos clusters:
  apply-config        Apply a new configuration to a node
  bootstrap           Bootstrap the etcd cluster on the specified node.
  cgroups             Retrieve cgroups usage information
  config              Manage the client configuration file (talosconfig)
  conformance         Run conformance tests
  containers          List containers
  copy                Copy data out from the node
  dashboard           Cluster dashboard with node overview, logs and real-time metrics
  dmesg               Retrieve kernel logs
  edit                Edit Talos node machine configuration with the default editor.
  etcd                Manage etcd
  events              Stream runtime events
  get                 Get a specific resource or list of resources (use 'talosctl get rd' to see all available resource types).
  health              Check cluster health
  image               Manage CRI container images
  inspect             Inspect internals of Talos
  kubeconfig          Download the admin kubeconfig from the node
  list                Retrieve a directory listing
  logs                Retrieve logs for a service
  memory              Show memory usage
  meta                Write and delete keys in the META partition
  mounts              List mounts
  netstat             Show network connections and sockets
  patch               Patch machine configuration of a Talos node with a local patch.
  pcap                Capture the network packets from the node.
  processes           List running processes
  read                Read a file on the machine
  reboot              Reboot a node
  reset               Reset a node
  restart             Restart a process
  rollback            Rollback a node to the previous installation
  rotate-ca           Rotate cluster CAs (Talos and Kubernetes APIs).
  service             Retrieve the state of a service (or all services), control service state
  shutdown            Shutdown a node
  stats               Get container stats
  support             Dump debug information about the cluster
  time                Gets current server time
  upgrade             Upgrade Talos on the target node
  upgrade-k8s         Upgrade Kubernetes control plane in the Talos cluster.
  usage               Retrieve a disk usage
  version             Prints the version
  wipe                Wipe block device or volumes

Commands to generate and manage machine configuration offline:
  gen                 Generate CAs, certificates, and private keys
  inject              Inject Talos API resources into Kubernetes manifests
  machineconfig       Machine config related commands
  validate            Validate config

Local Talos cluster commands:
  cluster             A collection of commands for managing local docker-based or QEMU-based clusters

Additional Commands:
  completion          Output shell completion code for the specified shell (bash, fish or zsh)
  help                Help about any command

Flags:
  -h, --help   help for talosctl

Use "talosctl [command] --help" for more information about a command.
```

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2025-12-16 20:00:02 +04:00
Andrey Smirnov
6d17c18bf9
feat: enable Powercap and Intel RAPL
Fixes siderolabs/pkgs#1405

See https://github.com/siderolabs/pkgs/pull/1409

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2025-12-16 19:00:27 +04:00
Andrey Smirnov
884e76662a
docs: fix the talosctl cluster create help output
Un-hide the `talosctl cluster create` command, as it hides its children,
but instead hide all flags. The flags are still documented for
`talosctl cluster dev`.

Fixes #12423

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2025-12-16 16:33:25 +04:00
Andrey Smirnov
6dc31be4f9
fix: exclude new Virtual IPs configured with new config
Do same exclusions as we applied to "old-style" config:

* not a node IP
* not applicable as etcd endpoint

Fixes #12410

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2025-12-16 13:17:12 +04:00
Noel Georgi
94905c73e9
feat(talosctl): support running qemu x86 on Mac
Supporting running x86 VM's on Mac.

Signed-off-by: Noel Georgi <git@frezbo.dev>
2025-12-16 12:39:49 +05:30
Andrey Smirnov
f871ab241c
fix: provide json support in nft binary
Fixes https://github.com/siderolabs/talos/issues/12413

See https://github.com/siderolabs/pkgs/pull/1407

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2025-12-15 19:42:01 +04:00
Mateusz Urbanek
694f45413f
feat: external volumes
Add new volume type for managing external volume mounts - Virtiofs volumes

Signed-off-by: Mateusz Urbanek <mateusz.urbanek@siderolabs.com>
2025-12-15 14:35:52 +01:00
Andrey Smirnov
39feb16d2e
fix: update containerd 2.2.0 with cgroups patch
Resolve cgroups issue with Linux 6.18.

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2025-12-12 20:51:29 +04:00
Andrey Smirnov
82027eb9b3
fix: bond configuration with new settings
This was manually verified on Equinix Metal box.

Two fixes:

1. `missed_max` should be treated specially - it can't be set for some
   bond types, but at the same time kernel returns value '2' for it.

2. Fix default configuration for bonds set via platform config for
   Equinix Metal, nocloud and OpenStack.

See https://github.com/siderolabs/talos/issues/12315

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2025-12-12 18:11:06 +04:00
Andrey Smirnov
121b13b8f8
fix: disable kexec on arm64
See https://lkml.org/lkml/2025/11/27/178.

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2025-12-12 16:23:21 +04:00
Noel Georgi
7eaa725d0d
fix: selection of boot entry
Fix selection of boot entry, #12312 was not a proper fix.

Signed-off-by: Noel Georgi <git@frezbo.dev>
2025-12-12 16:52:23 +05:30
Christopher Puschmann
949bdb90ab
feat: add Secure Boot to CloudStack platform config
See https://github.com/siderolabs/image-factory/discussions/338.

Signed-off-by: Christopher Puschmann <cp@lumen.sh>
Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2025-12-12 14:44:11 +04:00
Andrey Smirnov
798143a886
fix: discard better klog message from Kubernetes client
This silences now properly messages like:

```
E1210 14:54:05.283069       1 reflector.go:429] "The watchlist request ended with an error, falling back to the standard LIST/WATCH semantics because making progress is better than deadlocking" err="client rate limiter Wait returned an error: context canceled - error from a previous attempt: EOF"
```

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2025-12-11 17:46:05 +04:00
Andrey Smirnov
008cd0986c
fix: disable kexec in talosctl cluster create on arm64
Fixes #12393

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2025-12-11 17:05:05 +04:00
Mateusz Urbanek
bb62b29edb
chore: prepare talos for 1.13
Add compatibility with 1.13 and fix/upgrade tests.

Signed-off-by: Mateusz Urbanek <mateusz.urbanek@siderolabs.com>
2025-12-11 12:10:38 +01:00
Mateusz Urbanek
c0935030ac
chore: fork reference docs for 1.13.x
Fork reference docs for 1.13.x

Signed-off-by: Mateusz Urbanek <mateusz.urbanek@siderolabs.com>
2025-12-11 12:10:36 +01:00
Mateusz Urbanek
e387e48b30
fix: do not override DNS on MacOS
When creating Talos with QEMU on Mac, do not override default DNS settings to Gateway IPs

Signed-off-by: Mateusz Urbanek <mateusz.urbanek@siderolabs.com>
2025-12-11 11:28:33 +01:00
Andrey Smirnov
1e7e87fb19
fix: rework NFT rules for KubeSpan
Don't attach nft rules to the IPv6 KubeSpan addresses, as Linux can
route these packets natively, they are directly assigned to the
`kubespan` interface.

Also fix the way MSS clamping is applied: previous implementation
incorrectly triggered clamping to all addresses if the list of IPv4 or
IPv6 addresses is empty.

Previous rules:

```
table inet talos {
        chain kubespan_outgoing {
                type route hook output priority filter; policy accept;
                meta mark & 0x00000060 == 0x00000020 accept
                oifname "lo" accept
                ip daddr { 172.20.0.2, 172.20.0.4-172.20.0.6 } tcp flags & (syn | rst) == syn tcp option maxseg size > 1368 tcp option maxseg size set 1368
                ip6 daddr { fd4e:cae:686b:1902:87f:e8ff:fe1e:b4e3, fd4e:cae:686b:1902:a44b:28ff:febf:e664, fd4e:cae:686b:1902:c049:f2ff:fe84:1785, fd4e:cae:686b:1902:c8c9:75ff:fe4c:5ba8 } tcp flags & (syn | rst) == syn tcp option maxseg size > 1348 tcp option maxseg size set 1348
                ip daddr { 172.20.0.2, 172.20.0.4-172.20.0.6 } meta mark set meta mark & 0xffffffdf | 0x00000040 accept
                ip6 daddr { fd4e:cae:686b:1902:87f:e8ff:fe1e:b4e3, fd4e:cae:686b:1902:a44b:28ff:febf:e664, fd4e:cae:686b:1902:c049:f2ff:fe84:1785, fd4e:cae:686b:1902:c8c9:75ff:fe4c:5ba8 } meta mark set meta mark & 0xffffffdf | 0x00000040 accept
        }

        chain kubespan_prerouting {
                type filter hook prerouting priority filter; policy accept;
                meta mark & 0x00000060 == 0x00000020 accept
                ip daddr { 172.20.0.2, 172.20.0.4-172.20.0.6 } meta mark set meta mark & 0xffffffdf | 0x00000040 accept
                ip6 daddr { fd4e:cae:686b:1902:87f:e8ff:fe1e:b4e3, fd4e:cae:686b:1902:a44b:28ff:febf:e664, fd4e:cae:686b:1902:c049:f2ff:fe84:1785, fd4e:cae:686b:1902:c8c9:75ff:fe4c:5ba8 } meta mark set meta mark & 0xffffffdf | 0x00000040 accept
        }
}
```

New rules:

```
table inet talos {
        chain kubespan_outgoing {
                type route hook output priority filter; policy accept;
                meta mark & 0x00000060 == 0x00000020 accept
                oifname "lo" accept
                ip daddr { 172.20.0.2, 172.20.0.4-172.20.0.6 } tcp flags & (syn | rst) == syn tcp option maxseg size > 1368 tcp option maxseg size set 1368
                ip daddr { 172.20.0.2, 172.20.0.4-172.20.0.6 } meta mark set meta mark & 0xffffffdf | 0x00000040 accept
        }

        chain kubespan_prerouting {
                type filter hook prerouting priority filter; policy accept;
                meta mark & 0x00000060 == 0x00000020 accept
                ip daddr { 172.20.0.2, 172.20.0.4-172.20.0.6 } meta mark set meta mark & 0xffffffdf | 0x00000040 accept
        }
}
```

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2025-12-11 14:05:12 +04:00
Justin Garrison
51bcfb5679
feat: rename image default and source bundle
s/default/k8s-bundle
s/source-bundle/talos-bundle

for UX consistency when generating lists of images used by talos.

Remove non-k8s images from k8s-bundle list.

Signed-off-by: Justin Garrison <justin.garrison@siderolabs.com>
2025-12-10 07:02:48 -08:00
Andrey Smirnov
585abe9443
feat: update Kubernetes to v1.35.0-rc.1
See https://github.com/kubernetes/kubernetes/releases/tag/v1.35.0-rc.1

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2025-12-10 18:37:07 +04:00
Andrey Smirnov
f301e3e9ba
fix: update KubeSpan MSS clamping
Subtract 12 bytes more from the MTU to build correct MSS clamping for
TCP. Linux by default adds TCP options (timestamps, etc.) which seems to
occupy 12 bytes (3 options).

This zeroes out TCP retransmissions on `iperf3` testing with KubeSpan,
but has no effect on throughput.

Fixes #12311

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2025-12-10 16:01:14 +04:00
Andrey Smirnov
74c1df6f4b
test: propagate MTU size to QEMU in talosctl cluster create
Set the MTU in QEMU launch args. MTU is already sent by DHCP to Talos
machines, so the rest should just work.

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2025-12-10 15:30:14 +04:00
Andrey Smirnov
d347ca1af1
fix: update CNI plugins to 1.9.0
See https://github.com/containernetworking/plugins/releases/tag/v1.9.0

This fixes CVE https://github.com/containernetworking/plugins/security/advisories/GHSA-jv3w-x3r3-g6rm

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2025-12-10 14:31:04 +04:00
Dmitrii Sharshakov
e3f8196b4c
chore: update Grype and Syft
The needed changes for SBOM + VEX support have landed on main and are
available in the current Grype release.

Also rebase the Syft PR and use Syft 1.38.1 + deterministic/reproducible
SPDX SBOM generation patch.

Signed-off-by: Dmitrii Sharshakov <dmitry.sharshakov@siderolabs.com>
2025-12-09 22:35:36 +01:00
dataprolet
e1b8ab3236
docs: add misssing period
Update README.

Signed-off-by: dataprolet <48024821+dataprolet@users.noreply.github.com>
Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2025-12-08 15:47:35 +04:00
Andrey Smirnov
cd04c3dde7
docs: update release notes
Fix a typo and add a link to network configuration docs.

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2025-12-08 14:20:43 +04:00
Orzelius
fc8ae3249f
docs: add omni join token example to create qemu command
this will hopefully reduce confusion on what the flag value should look like

Signed-off-by: Orzelius <33936483+Orzelius@users.noreply.github.com>
2025-12-07 19:40:57 +09:00
Dmitrii Sharshakov
9fa00773ca
chore: update go-blockdevice
latest go-blockdevice release

Signed-off-by: Dmitrii Sharshakov <dmitry.sharshakov@siderolabs.com>
2025-12-05 16:22:58 +01:00
Andrey Smirnov
ba13b67865
fix: correct condition to use UKI cmdline in GRUB
Use UKI cmdline either if the config is missing completely, or if the
incomplete machine config is present (we are in maintenance mode).

Fixes #12349

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2025-12-05 16:28:07 +04:00
Andrey Smirnov
d2ce3f47f8
docs: drop machine.network example
This documents deprecated fields, drop it.

I noticed this while working on the docs.

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2025-12-05 14:59:03 +04:00
Andrey Smirnov
cf087c1e01
test: bird2 extension
Add a dummy config to make extension start successfully.

Signed-off-by: Andrey Smirnov <andrey.smirnov@siderolabs.com>
2025-12-05 14:14:26 +04:00
Dmitrii Sharshakov
13df943884
fix: adapt SELinuxSuite.TestNoPtrace to new strace version
Alpine updated strace which changed its error messages

Signed-off-by: Dmitrii Sharshakov <dmitry.sharshakov@siderolabs.com>
2025-12-04 14:54:43 +01:00
Edward Sammut Alessi
861787c380
fix: mark secureboot as supported for metal
Mark SecureBootSupported as true for MetalPlatform.

Signed-off-by: Edward Sammut Alessi <edward.sammutalessi@siderolabs.com>
2025-12-04 13:57:39 +01:00