Commit Graph
3974 Commits
Author SHA1 Message Date
Joachim Wiberg a5fc2f797b .github: add free-disk-space action to generic x86_64 workflow
Addresses disk space issues in GitHub Actions for generic x86_64 builds
by removing unused tools (Android SDK, .NET, Docker images, etc.) before
the build starts.  This frees up ~30GB of space.

Fixes #1210

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-10-28 17:31:31 +01:00
Richard Alpe b6d7e4f24e test: add unit tests for system services
Signed-off-by: Richard Alpe <richard@bit42.se>
2025-10-28 16:59:08 +01:00
Richard Alpe cc86463233 confd: use keyless services list, allow duplicate PIDs
Multiple services can have PID 0 when stopped/done, making PID
unsuitable as a unique key. There could also be multiple services with
the same name (I would assume?).

Signed-off-by: Richard Alpe <richard@bit42.se>
2025-10-28 15:35:44 +01:00
Richard Alpe 3870bd562a cli: add new show services command
Signed-off-by: Richard Alpe <richard@bit42.se>
2025-10-28 15:14:06 +01:00
Richard Alpe 99dd268682 cli-pretty: add pretty printing of system services
Signed-off-by: Richard Alpe <richard@bit42.se>
2025-10-28 15:03:57 +01:00
Richard Alpe d457d43753 show: add system services command
Add the command show system services.

Signed-off-by: Richard Alpe <richard@bit42.se>
2025-10-28 15:02:05 +01:00
Richard Alpe c119436f97 confd: augment new services container to ietf-system
This patch adds operational data support for system services. The
data is in a generic format but is intended to be able to represent
finit information (initctl) nicely.

The reason for augmenting this to ietf-system and not to
infix-services is that we consider this generic system information
which is totally disconnected from what ever services infix might
provide.

In this first state we only support pid, name, description and state.
Making the data look something like:

  "infix-system:services": {
    "service": [
      {
        "pid": 1185,
        "name": "udevd",
        "status": "running",
        "description": "Device event daemon (udev)"
      }]

Signed-off-by: Richard Alpe <richard@bit42.se>
2025-10-27 15:30:29 +01:00
Mattias WalströmandGitHub 3384507040 Merge pull request #1208 from kernelkit/coverity-fixes 2025-10-25 17:32:45 +02:00
Joachim Wiberg b7d91e4747 bin: fix Coverity Scan issues in copy command
Address two issues identified by Coverity Scan:

1. CID 550484 (TOCTOU): Remove access() check before realpath()
   - realpath() already fails if file doesn't exist, making the
     access() check redundant and introducing a TOCTOU race
   - Simplifies code while improving security

2. CID 550483 (CHECKED_RETURN): Mark unchecked remove() calls
   - Add (void) cast to two remove() calls to explicitly indicate
     we don't care about the return value
   - These are cleanup operations for temp files where failure
     is acceptable, even expected

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-10-25 08:10:30 +02:00
Tobias WaldekranzandGitHub 171b757acb Merge pull request #1206 from kernelkit/upgrade-kernel
Upgrade Linux kernel to 6.12.55 (LTS)
2025-10-23 22:17:25 +02:00
Mattias Walström 2903f6f472 Upgrade Linux kernel to 6.12.55 (LTS) 2025-10-23 21:07:10 +02:00
Joachim WibergandGitHub 18d177328d Merge pull request #1151 from kernelkit/recontain
Container Lifecycle and Upgrade Improvements

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-10-23 18:04:01 +02:00
Joachim Wiberg f081bef3ba doc: update changelog with fixes and new features
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-10-23 15:24:01 +02:00
Joachim Wiberg ef73ec6ce8 doc: explain docker image tags and rewrite upgrade section
Much of the content was made obsolete by recent changes, we now optimize
the experience for users, avoiding recreate at boot unless checksums for
configuration or base image have changed.

This was also a good time to explain the difference between mutable and
immutable tags, which sometimes is a cause for great confusion.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-10-23 15:24:00 +02:00
Joachim Wiberg ff175c02f7 doc: add section on container volume management
Since there is no safe way (unique hash/id) to identify unused named
volumes, we cannot automate removal of them.  Since volume data, when
compared to a container image, is quite small, it was decided that we
document this instead.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-10-23 15:24:00 +02:00
Joachim Wiberg 21256a8ac1 bin: add bash completion for copy command
Add bash completion for the common datastores, like we already do in the
CLI, and update the usage text accordingly.

Also, make sure to install to /usr/bin, not /bin since we've now merged
the hierarchies since a while back.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-10-23 15:23:59 +02:00
Joachim Wiberg 3e03ece1d9 cli: sanitize regular file to file copy
The regular file-to-file copy, was missing calls to cfg_adjust(), this
commit fixes that and adds some helpful comments for each use-case.

Also, drop insecure mktemp() in favor of our own version which uses the
basename of the remote source file.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-10-23 15:23:59 +02:00
Joachim Wiberg ad96965b16 cli: restrict copy and erase commands
This is a follow-up to PR #717 where path traversal protection was
discussed.  A year later and it's clear that having a user-friendly
copy tool in the shell is a good thing, but that we proably want to
restrict what it can do when called from the CLI.

A sanitize flag (-s) is added to control the behavior, when used in the
shell without -s, both commands act like traditional UNIX tools and do
assume . for relative paths, and allow ../, whereas when running from
the CLI only /media/ is allowed and otherwise files are assumed to be
in $HOME or /cfg

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-10-23 15:23:59 +02:00
Joachim Wiberg 92e80b4239 cli: fix copy to missing startup-config file
Fixes #981

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-10-23 15:23:58 +02:00
Joachim Wiberg e6a04fbd95 cli: add 'validate', or '-n', dry run to copy command
This commit adds config file validation to the copy command, discussed
in #373.  Allowing users to test their config files before restoring a
backup.  The feature could also be used for the automatic rollback when
downgrading to an earlier version of the OS.

Fixes #373

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-10-23 15:23:58 +02:00
Joachim Wiberg 3b24fab324 cli: fix 'copy FILE running-config' use-case
When copying to the running datastore we cannot use sr_copy_config(),
instead we must use sr_replace_config().  This fix covers both the case
of 'copy startup-config running-config' and 'copy FILE running-config'.

Fixes #1203

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-10-23 15:23:57 +02:00
Joachim Wiberg ce8dc0de9c test: update firewall/basic topology and doc
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-10-23 15:23:57 +02:00
Joachim Wiberg 9273f4cd1e test: remove redundant container_ prefix from test directories
Rename test directories in infix_containers/ to remove the redundant
'container_' prefix since they already live under infix_containers/:

  container_basic          -> basic
  container_bridge         -> bridge
  container_enabled        -> enabled
  container_environment    -> environment
  container_firewall_basic -> firewall_basic
  container_host_commands  -> host_commands
  container_phys           -> phys
  container_veth           -> veth
  container_volume         -> volume

Also update references in all.yaml and Readme.adoc files.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-10-23 15:23:56 +02:00
Joachim Wiberg 905df0dab7 test: verify container upgrade
This commit adds four (small) container images to the Infamy test container
which are used in the new container upgrade test.  The test verifies that a
mutable container can be upgraded and that old images are properly cleaned
up from the container store.

Fixes #624

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-10-23 15:23:56 +02:00
Joachim Wiberg 640a47bceb test: add support for 'make V=1 test-spec' to debug
Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-10-23 15:23:56 +02:00
Joachim Wiberg 671fc93ce0 confd: add support for upgrade action (rpc)
Already supported in the CLI.  This makes it official, and quite handy
for users that run mutable containers.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-10-23 15:23:55 +02:00
Joachim Wiberg ea2c4be237 container: refactor and cleanup per review comments
Shell script:

 - Factor out big portions of code into more logical helper functions
 - Simplify calling setup script by checking for remote image first
 - Simplify meta/sha up-to-date handling and clarify terminology
 - Consistent use of -f instead of -e in file-exists checks
 - Fix unsafe use of 'mktemp -u'

C code:
 - Clarify meta/sha terminology: rename meta-sha256 -> meta-image-sha256
 - Refactor weird archive_offset() function to local_path() helper
 - Factor out helper function calc_sha()
 - Check len of sha256 >= 64

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-10-23 15:23:55 +02:00
Joachim Wiberg da5b4bcfff container: remove old image when upgrading at startup
One unique feature of Infix OS is that you can embed your OCI archive in
the rootfs.squashfs.  This way your container instance does not need to
download anything from the network.  To upgrade you drop in a new image
and rebuild Infix, when the new Infix boots the container script 'setup'
command will recognize that the OCI archive has changed and will reload
it into the container store.

This patch is an improvement of the way too generic 'podman image prune'
command used previously.  Instead of looking for any dangling image, we
now surgically remove the old image.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-10-23 15:23:54 +02:00
Joachim Wiberg f53d26bf34 container: upgrade fixes for mutable images
Container instances that run with mutable images, e.g., tagged with `:latest`
or similar non-versioned tags, can be upgraded without changing the config.

This commit fixes two issues found with this support:

- force container image re-fetch on upgrade, even if the file exists locally
- surgically remove old image from container store after upgrade

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-10-23 15:23:54 +02:00
Joachim Wiberg 7fbc2eba4f container: make 'container remove' cli command slightly more useful
Usually, when your system is up and running properly, you want to clean
up anything unused from your previous experiments.  This change alllows
that by calling the interactive 'podman image prune -a -f' command from
the CLI command 'container remove all'

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-10-23 15:23:54 +02:00
Joachim Wiberg 5b7325261a container: use 'nice' for podman load and create
When loading big OCI images at boot the `podman load` process completely
monopolizes all cores of an Arm Cortex-A72.  It blocks on I/O, sure, but
with 'nice' we can get some attention at least to more critical services
at boot.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-10-23 15:23:53 +02:00
Joachim Wiberg 0eddd1ba64 container: refactor cleanup on instance removal
This commit reverts 477f7ae and bb19d06, which intended to fix an issue
with lingering old images, see #1098.  However, as detailed in #1147,
this caused severe side effects while working with multiple larger
containers.  Basically, the prune operation of one container removed
images of other containers that are just being created in parallel.

Instead of using the podman prune command we can use the meta datain the
start script to pinpoint exactly which image(s) to remove, including any
downloaded OCI archives when the container instance is removed.

Fixes #1147

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-10-23 15:23:53 +02:00
Joachim Wiberg 68bb01545c container: optimize startup of preexisting containers
This commit adds metadata to track loaded OCI archives to allow skipping
'delete + load' of OCI images when restarting either the container or the
system as a whole.  The sha256 of all loaded OCI archives is stored in a
sidecar file in our downloads directory.  Then we verify the checksum of
the OCI archives against their same-named sidecar to determine if the OCI
archive is already loaded or not.

Additionally, the instance using the image is labled with metadata to detect
changes in the container configuration.  This in turn allow skipping the
delete + create phase also of the instance.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-10-23 15:23:52 +02:00
Joachim Wiberg c6f3e75aa4 container: only retry remote images on network changes
Fixes #1148

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-10-23 15:23:52 +02:00
Joachim Wiberg af7c2d7801 container: increase podman stop timeout
The default timeout for 'podman stop foo' is 10 seconds, which for
heavily loaded systems with intricate shutdown process is *waaaay*
too short.  Increase it to the container script default 30s, which
coincidentally is also the container@.conf template's kill delay.

Fixes #1149

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-10-23 15:23:51 +02:00
Joachim Wiberg e5da7f0473 confd: create container script even if disabled
Not only great for debugging, but also allows users to start their
containers manually in another way.  But yeah, mostly for debug.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-10-23 15:23:51 +02:00
Joachim Wiberg a880939a2e confd: add new container and volume name type
This rectifies an omission from the initial yang model.  Not all
charachters are supported in container and volume names.  E.g.,
simply attempting to create a volume or container with a space
in the name causes this error message from podman:

 podman: Error: running volume create option: names must match [a-zA-Z0-9][a-zA-Z0-9_.-]*: invalid argument

In addition to the regexp, the new 'ident' type also enforces a
minimum and maximum length.  Sure, technically a single char is
allowed, but let's be reasonable, and who in their right mind
wants an identifier > 64 chars?  We have description for that.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-10-23 15:23:51 +02:00
Joachim Wiberg 6c742b5cda package/finit: backport support for longer service identifiers
Fixes #1146

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-10-23 15:23:48 +02:00
Mattias WalströmandGitHub 2aab13088c Merge pull request #1205 from kernelkit/add-wifi-bridgable
yang: Make possible to add WiFi interfaces to bridge
2025-10-23 14:00:13 +02:00
Mattias Walström bc24a8b64e yang: Make possible to add WiFi interfaces to bridge 2025-10-23 13:05:26 +02:00
Tobias WaldekranzandGitHub 365618526d Merge pull request #1204 from kernelkit/upgrade-kernel
Upgrade Linux kernel to 6.12.54 (LTS)
2025-10-20 14:04:43 +02:00
Joachim WibergandGitHub 30104bd1b6 Merge pull request #1201 from kernelkit/badge 2025-10-20 10:51:58 +02:00
Mattias Walström f5496b3c6a Upgrade Linux kernel to 6.12.54 (LTS) 2025-10-20 10:15:11 +02:00
Tobias WaldekranzandGitHub bafad20ef2 Merge pull request #1202 from kernelkit/upgrade-kernel
Upgrade Linux kernel to 6.12.53 (LTS)
2025-10-15 20:15:18 +02:00
Mattias Walström 5a4c676782 Upgrade Linux kernel to 6.12.53 (LTS) 2025-10-15 12:55:07 +02:00
Joachim Wiberg 57dd35f419 Add releae badge and reposition bitSign
Slight refactor of page, adding another badge for the latest release,
and restructuring the Technical Details section a bit.

[skip ci]

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-10-14 21:57:35 +02:00
Mattias WalströmandGitHub 8e6323d663 Merge pull request #1199 from kernelkit/upgrade-kernel
Upgrade kernel and buildroot
2025-10-14 17:13:46 +02:00
Mattias Walström 7fd3a47bf1 Upgrade Buildroot to 2025.02.7 (LTS) 2025-10-14 14:22:59 +02:00
Mattias Walström e2aef716b3 Upgrade Linux kernel to 6.12.52 (LTS) 2025-10-14 13:10:04 +02:00
Joachim WibergandGitHub 042f9f8c51 Merge pull request #1198 from kernelkit/misc
Mixed bag of fixes mostly for RPi4

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
2025-10-14 09:20:44 +02:00