Merge pull request #1422 from kernelkit/container-fixes

Container and Coverity fixes
This commit is contained in:
Mattias Walström
2026-03-01 10:21:58 +01:00
committed by GitHub
31 changed files with 107 additions and 74 deletions
+2 -2
View File
@@ -167,8 +167,8 @@ APIs.
[0]: https://www.kernel.org [0]: https://www.kernel.org
[1]: https://buildroot.org/ "Buildroot Homepage" [1]: https://buildroot.org/ "Buildroot Homepage"
[2]: https://www.sysrepo.org/ "Sysrepo Homepage" [2]: https://www.sysrepo.org/ "Sysrepo Homepage"
[3]: https://kernelkit.org/infix/latest/cli/introduction/ [3]: https://www.kernelkit.org/infix/latest/cli/introduction/
[4]: https://kernelkit.org/infix/ [4]: https://www.kernelkit.org/infix/
[5]: https://github.com/kernelkit/infix/releases [5]: https://github.com/kernelkit/infix/releases
[Latest Build]: https://github.com/kernelkit/infix/releases/tag/latest "Latest build" [Latest Build]: https://github.com/kernelkit/infix/releases/tag/latest "Latest build"
[License]: https://en.wikipedia.org/wiki/GPL_license [License]: https://en.wikipedia.org/wiki/GPL_license
+2 -2
View File
@@ -262,8 +262,8 @@ make aarch64
./utils/mkimage.sh -odt emmc bananapi-bpi-r3 ./utils/mkimage.sh -odt emmc bananapi-bpi-r3
``` ```
[0]: https://kernelkit.org/posts/flashing-sdcard/ [0]: https://www.kernelkit.org/posts/flashing-sdcard/
[1]: https://kernelkit.org/infix/latest/ [1]: https://www.kernelkit.org/infix/latest/
[2]: https://github.com/kernelkit/infix/releases/download/latest-boot/infix-bpi-r3-sdcard.img [2]: https://github.com/kernelkit/infix/releases/download/latest-boot/infix-bpi-r3-sdcard.img
[3]: https://github.com/kernelkit/infix/releases/download/latest-boot/infix-bpi-r3-emmc.img [3]: https://github.com/kernelkit/infix/releases/download/latest-boot/infix-bpi-r3-emmc.img
[4]: https://github.com/kernelkit/infix/releases/download/latest-boot/bpi-r3-emmc-boot-2025.01-latest.tar.gz [4]: https://github.com/kernelkit/infix/releases/download/latest-boot/bpi-r3-emmc-boot-2025.01-latest.tar.gz
+6 -6
View File
@@ -312,13 +312,13 @@ While capable of basic routing tasks, be aware of limitations:
For applications requiring multiple ports or high performance, consider For applications requiring multiple ports or high performance, consider
dedicated networking hardware like the [Banana Pi R3][12]. dedicated networking hardware like the [Banana Pi R3][12].
[0]: https://kernelkit.org/posts/flashing-sdcard/ [0]: https://www.kernelkit.org/posts/flashing-sdcard/
[1]: https://kernelkit.org/infix/latest/ [1]: https://www.kernelkit.org/infix/latest/
[2]: https://github.com/kernelkit/infix/releases/download/latest-boot/infix-rpi64-sdcard.img [2]: https://github.com/kernelkit/infix/releases/download/latest-boot/infix-rpi64-sdcard.img
[3]: https://kernelkit.org/infix/latest/container/#content-mounts [3]: https://www.kernelkit.org/infix/latest/container/#content-mounts
[4]: https://kernelkit.org/infix/latest/scripting-restconf/ [4]: https://www.kernelkit.org/infix/latest/scripting-restconf/
[8]: https://github.com/kernelkit/infix/releases/tag/latest-boot [8]: https://github.com/kernelkit/infix/releases/tag/latest-boot
[9]: https://kernelkit.org/infix/latest/networking/#wifi [9]: https://www.kernelkit.org/infix/latest/networking/#wifi
[10]: https://www.raspberrypi.com/products/raspberry-pi-touch-display/ [10]: https://www.raspberrypi.com/products/raspberry-pi-touch-display/
[11]: https://www.raspberrypi.com/documentation/ [11]: https://www.raspberrypi.com/documentation/
[12]: https://kernelkit.org/infix/latest/hardware/#banana-pi-bpi-r3 [12]: https://www.kernelkit.org/infix/latest/hardware/#banana-pi-bpi-r3
+1 -1
View File
@@ -112,5 +112,5 @@ Connect a USB-to-serial adapter to the board's debug UART header.
> [!WARNING] > [!WARNING]
> Use only 3.3V serial adapters. > Use only 3.3V serial adapters.
[0]: https://kernelkit.org/posts/flashing-sdcard/ [0]: https://www.kernelkit.org/posts/flashing-sdcard/
[1]: https://www.microchip.com/en-us/development-tool/EV21H18A [1]: https://www.microchip.com/en-us/development-tool/EV21H18A
+1 -1
View File
@@ -91,5 +91,5 @@ Serial settings: 115200 8N1
> [!WARNING] > [!WARNING]
> Use only 3.3V serial adapters. 5V adapters will damage your Raspberry Pi! > Use only 3.3V serial adapters. 5V adapters will damage your Raspberry Pi!
[0]: https://kernelkit.org/posts/flashing-sdcard/ [0]: https://www.kernelkit.org/posts/flashing-sdcard/
[1]: https://www.raspberrypi.com/products/raspberry-pi-2-model-b/ [1]: https://www.raspberrypi.com/products/raspberry-pi-2-model-b/
@@ -12,7 +12,7 @@ cat <<EOF >"${gns3a}"
"category": "router", "category": "router",
"description": "${ARTIFACT} development appliance", "description": "${ARTIFACT} development appliance",
"vendor_name": "Kernelkit", "vendor_name": "Kernelkit",
"vendor_url": "https://kernelkit.org", "vendor_url": "https://www.kernelkit.org",
"product_name": "${ARTIFACT} devel", "product_name": "${ARTIFACT} devel",
"registry_version": 6, "registry_version": 6,
"status": "experimental", "status": "experimental",
+1 -1
View File
@@ -50,7 +50,7 @@ The default credentials for the demo builds is
Password: Password:
.-------. .-------.
| . . | Infix OS — Immutable.Friendly.Secure | . . | Infix OS — Immutable.Friendly.Secure
|-. v .-| https://kernelkit.org |-. v .-| https://www.kernelkit.org
'-'---'-' '-'---'-'
Run the command 'cli' for interactive OAM Run the command 'cli' for interactive OAM
+1 -1
View File
@@ -1,4 +1,4 @@
.-------. .-------.
| . . | Infix OS — Immutable.Friendly.Secure | . . | Infix OS — Immutable.Friendly.Secure
|-. v .-| https://kernelkit.org |-. v .-| https://www.kernelkit.org
'-'---'-' '-'---'-'
+27 -5
View File
@@ -23,7 +23,8 @@ dir=""
all="" all=""
env="" env=""
port="" port=""
force= force=${force:-}
reset_volumes=
# Variable shared across subshells # Variable shared across subshells
export meta_sha="" export meta_sha=""
@@ -227,7 +228,7 @@ fetch()
if out=$(eval "$cmd" 2>&1); then if out=$(eval "$cmd" 2>&1); then
log "$file downloaded successfully." log "$file downloaded successfully."
if check "$file"; then if [ -n "$force" ] || check "$file"; then
echo "$dst" echo "$dst"
return 0 return 0
fi fi
@@ -897,6 +898,9 @@ while [ "$1" != "" ]; do
shift shift
restart=$1 restart=$1
;; ;;
-R | --reset-volumes)
reset_volumes=true
;;
-s | --simple) -s | --simple)
simple=true simple=true
;; ;;
@@ -1108,7 +1112,8 @@ case $cmd in
# Remove the old image if it's not used by any other containers # Remove the old image if it's not used by any other containers
if [ -n "$old_image_id" ]; then if [ -n "$old_image_id" ]; then
# Check if the old image is still in use by any containers # Check if the old image is still in use by any containers
if ! podman ps -a --format '{{.ImageID}}' | grep -q "^${old_image_id}$"; then old_image_id=${old_image_id:0:12}
if ! podman ps -a --format '{{.ImageID}}' | grep -q "^${old_image_id}"; then
log "Removing old image $old_image_id" log "Removing old image $old_image_id"
podman rmi "$old_image_id" 2>/dev/null || true podman rmi "$old_image_id" 2>/dev/null || true
else else
@@ -1250,8 +1255,22 @@ case $cmd in
container stop "$name" container stop "$name"
echo "done" echo "done"
# If --reset-volumes requested, delete named volumes so they re-initialize from new image
if [ -n "$reset_volumes" ]; then
printf ">> Resetting named volumes (all configuration will be lost): "
grep -oE -- '-v [^ ]+' "$script" | awk '{print $2}' | cut -d: -f1 | \
while read -r vol_name; do
if podman volume exists "$vol_name" 2>/dev/null; then
printf "%s " "$vol_name"
log "Removing volume $vol_name"
podman volume rm -f "$vol_name" >/dev/null || true
fi
done
echo "done"
fi
# Set force flag to ensure fresh pull/fetch of image # Set force flag to ensure fresh pull/fetch of image
force="-f" export force="-f"
# For remote images, force re-pull # For remote images, force re-pull
case "$img" in case "$img" in
@@ -1273,14 +1292,17 @@ case $cmd in
# Recreate container by running the script # Recreate container by running the script
echo ">> Recreating container ..." echo ">> Recreating container ..."
if ! "$script"; then if ! "$script"; then
force=
echo ">> Failed recreating container $name" echo ">> Failed recreating container $name"
exit 1 exit 1
fi fi
force=
# Remove the old image if it's not used by any other containers # Remove the old image if it's not used by any other containers
if [ -n "$old_image_id" ]; then if [ -n "$old_image_id" ]; then
# Check if the old image is still in use by any containers # Check if the old image is still in use by any containers
if ! podman ps -a --format '{{.ImageID}}' | grep -q "^${old_image_id}$"; then old_image_id=${old_image_id:0:12}
if ! podman ps -a --format '{{.ImageID}}' | grep -q "^${old_image_id}"; then
log "Removing old image $old_image_id" log "Removing old image $old_image_id"
podman rmi "$old_image_id" 2>/dev/null || true podman rmi "$old_image_id" 2>/dev/null || true
else else
+2 -2
View File
@@ -143,10 +143,10 @@ BR2_PACKAGE_MARVELL_CN9130_CRB=y
BR2_PACKAGE_MARVELL_ESPRESSOBIN=y BR2_PACKAGE_MARVELL_ESPRESSOBIN=y
BR2_PACKAGE_RASPBERRYPI_RPI64=y BR2_PACKAGE_RASPBERRYPI_RPI64=y
BR2_PACKAGE_STYX_DCP_SC_28P=y BR2_PACKAGE_STYX_DCP_SC_28P=y
INFIX_VENDOR_HOME="https://kernelkit.org" INFIX_VENDOR_HOME="https://www.kernelkit.org"
INFIX_DESC="Infix is an immutable, friendly, and secure operating system that turns any ARM or x86 device into a powerful, manageable network appliance. Deploy on anything from $35 Raspberry Pi boards to enterprise switches as routers, IoT gateways, or edge devices. Infix models Linux networking features using YANG so you can manage your devices using NETCONF/RESTCONF APIs and focus on your business logic running in isolated containers." INFIX_DESC="Infix is an immutable, friendly, and secure operating system that turns any ARM or x86 device into a powerful, manageable network appliance. Deploy on anything from $35 Raspberry Pi boards to enterprise switches as routers, IoT gateways, or edge devices. Infix models Linux networking features using YANG so you can manage your devices using NETCONF/RESTCONF APIs and focus on your business logic running in isolated containers."
INFIX_HOME="https://github.com/kernelkit/infix/" INFIX_HOME="https://github.com/kernelkit/infix/"
INFIX_DOC="https://kernelkit.org/infix/" INFIX_DOC="https://www.kernelkit.org/infix/"
INFIX_SUPPORT="mailto:kernelkit@googlegroups.com" INFIX_SUPPORT="mailto:kernelkit@googlegroups.com"
BR2_PACKAGE_FEATURE_GPS=y BR2_PACKAGE_FEATURE_GPS=y
BR2_PACKAGE_FEATURE_WIFI_MEDIATEK=y BR2_PACKAGE_FEATURE_WIFI_MEDIATEK=y
+2 -2
View File
@@ -121,10 +121,10 @@ BR2_PACKAGE_MARVELL_CN9130_CRB=y
BR2_PACKAGE_MARVELL_ESPRESSOBIN=y BR2_PACKAGE_MARVELL_ESPRESSOBIN=y
BR2_PACKAGE_RASPBERRYPI_RPI64=y BR2_PACKAGE_RASPBERRYPI_RPI64=y
BR2_PACKAGE_STYX_DCP_SC_28P=y BR2_PACKAGE_STYX_DCP_SC_28P=y
INFIX_VENDOR_HOME="https://kernelkit.org" INFIX_VENDOR_HOME="https://www.kernelkit.org"
INFIX_DESC="Infix is an immutable, friendly, and secure operating system that turns any ARM or x86 device into a powerful, manageable network appliance. Deploy on anything from $35 Raspberry Pi boards to enterprise switches as routers, IoT gateways, or edge devices. Infix models Linux networking features using YANG so you can manage your devices using NETCONF/RESTCONF APIs and focus on your business logic running in isolated containers." INFIX_DESC="Infix is an immutable, friendly, and secure operating system that turns any ARM or x86 device into a powerful, manageable network appliance. Deploy on anything from $35 Raspberry Pi boards to enterprise switches as routers, IoT gateways, or edge devices. Infix models Linux networking features using YANG so you can manage your devices using NETCONF/RESTCONF APIs and focus on your business logic running in isolated containers."
INFIX_HOME="https://github.com/kernelkit/infix/" INFIX_HOME="https://github.com/kernelkit/infix/"
INFIX_DOC="https://kernelkit.org/infix/" INFIX_DOC="https://www.kernelkit.org/infix/"
INFIX_SUPPORT="mailto:kernelkit@googlegroups.com" INFIX_SUPPORT="mailto:kernelkit@googlegroups.com"
BR2_PACKAGE_FEATURE_GPS=y BR2_PACKAGE_FEATURE_GPS=y
BR2_PACKAGE_CONFD=y BR2_PACKAGE_CONFD=y
+2 -2
View File
@@ -139,10 +139,10 @@ BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SIGNATURE_SUPPORT=y
BR2_PACKAGE_HOST_UBOOT_TOOLS_FDT_ADD_PUBKEY=y BR2_PACKAGE_HOST_UBOOT_TOOLS_FDT_ADD_PUBKEY=y
BR2_PACKAGE_MICROCHIP_SAMA7G54_EK=y BR2_PACKAGE_MICROCHIP_SAMA7G54_EK=y
BR2_PACKAGE_RASPBERRYPI_RPI2=y BR2_PACKAGE_RASPBERRYPI_RPI2=y
INFIX_VENDOR_HOME="https://kernelkit.org" INFIX_VENDOR_HOME="https://www.kernelkit.org"
INFIX_DESC="Infix is an immutable, friendly, and secure operating system that turns any ARM or x86 device into a powerful, manageable network appliance. Deploy on anything from $35 Raspberry Pi boards to enterprise switches as routers, IoT gateways, or edge devices. Infix models Linux networking features using YANG so you can manage your devices using NETCONF/RESTCONF APIs and focus on your business logic running in isolated containers." INFIX_DESC="Infix is an immutable, friendly, and secure operating system that turns any ARM or x86 device into a powerful, manageable network appliance. Deploy on anything from $35 Raspberry Pi boards to enterprise switches as routers, IoT gateways, or edge devices. Infix models Linux networking features using YANG so you can manage your devices using NETCONF/RESTCONF APIs and focus on your business logic running in isolated containers."
INFIX_HOME="https://github.com/kernelkit/infix/" INFIX_HOME="https://github.com/kernelkit/infix/"
INFIX_DOC="https://kernelkit.org/infix/" INFIX_DOC="https://www.kernelkit.org/infix/"
INFIX_SUPPORT="mailto:kernelkit@googlegroups.com" INFIX_SUPPORT="mailto:kernelkit@googlegroups.com"
BR2_PACKAGE_FEATURE_GPS=y BR2_PACKAGE_FEATURE_GPS=y
BR2_PACKAGE_FEATURE_WIFI_MEDIATEK=y BR2_PACKAGE_FEATURE_WIFI_MEDIATEK=y
+2 -2
View File
@@ -121,10 +121,10 @@ BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SIGNATURE_SUPPORT=y
BR2_PACKAGE_HOST_UBOOT_TOOLS_FDT_ADD_PUBKEY=y BR2_PACKAGE_HOST_UBOOT_TOOLS_FDT_ADD_PUBKEY=y
BR2_PACKAGE_MICROCHIP_SAMA7G54_EK=y BR2_PACKAGE_MICROCHIP_SAMA7G54_EK=y
BR2_PACKAGE_RASPBERRYPI_RPI2=y BR2_PACKAGE_RASPBERRYPI_RPI2=y
INFIX_VENDOR_HOME="https://kernelkit.org" INFIX_VENDOR_HOME="https://www.kernelkit.org"
INFIX_DESC="Infix is an immutable, friendly, and secure operating system that turns any ARM or x86 device into a powerful, manageable network appliance. Deploy on anything from $35 Raspberry Pi boards to enterprise switches as routers, IoT gateways, or edge devices. Infix models Linux networking features using YANG so you can manage your devices using NETCONF/RESTCONF APIs and focus on your business logic running in isolated containers." INFIX_DESC="Infix is an immutable, friendly, and secure operating system that turns any ARM or x86 device into a powerful, manageable network appliance. Deploy on anything from $35 Raspberry Pi boards to enterprise switches as routers, IoT gateways, or edge devices. Infix models Linux networking features using YANG so you can manage your devices using NETCONF/RESTCONF APIs and focus on your business logic running in isolated containers."
INFIX_HOME="https://github.com/kernelkit/infix/" INFIX_HOME="https://github.com/kernelkit/infix/"
INFIX_DOC="https://kernelkit.org/infix/" INFIX_DOC="https://www.kernelkit.org/infix/"
INFIX_SUPPORT="mailto:kernelkit@googlegroups.com" INFIX_SUPPORT="mailto:kernelkit@googlegroups.com"
BR2_PACKAGE_FEATURE_GPS=y BR2_PACKAGE_FEATURE_GPS=y
BR2_PACKAGE_CONFD=y BR2_PACKAGE_CONFD=y
+2 -2
View File
@@ -170,10 +170,10 @@ BR2_PACKAGE_HOST_BMAP_TOOLS=y
BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SUPPORT=y BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SUPPORT=y
BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SIGNATURE_SUPPORT=y BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SIGNATURE_SUPPORT=y
BR2_PACKAGE_HOST_UBOOT_TOOLS_FDT_ADD_PUBKEY=y BR2_PACKAGE_HOST_UBOOT_TOOLS_FDT_ADD_PUBKEY=y
INFIX_VENDOR_HOME="https://kernelkit.org" INFIX_VENDOR_HOME="https://www.kernelkit.org"
INFIX_DESC="Infix is an immutable, friendly, and secure operating system that turns any ARM or x86 device into a powerful, manageable network appliance. Deploy on anything from $35 Raspberry Pi boards to enterprise switches as routers, IoT gateways, or edge devices. Infix models Linux networking features using YANG so you can manage your devices using NETCONF/RESTCONF APIs and focus on your business logic running in isolated containers." INFIX_DESC="Infix is an immutable, friendly, and secure operating system that turns any ARM or x86 device into a powerful, manageable network appliance. Deploy on anything from $35 Raspberry Pi boards to enterprise switches as routers, IoT gateways, or edge devices. Infix models Linux networking features using YANG so you can manage your devices using NETCONF/RESTCONF APIs and focus on your business logic running in isolated containers."
INFIX_HOME="https://github.com/kernelkit/infix/" INFIX_HOME="https://github.com/kernelkit/infix/"
INFIX_DOC="https://kernelkit.org/infix/" INFIX_DOC="https://www.kernelkit.org/infix/"
INFIX_SUPPORT="mailto:kernelkit@googlegroups.com" INFIX_SUPPORT="mailto:kernelkit@googlegroups.com"
BR2_PACKAGE_FEATURE_GPS=y BR2_PACKAGE_FEATURE_GPS=y
BR2_PACKAGE_FEATURE_WIFI=y BR2_PACKAGE_FEATURE_WIFI=y
+2 -2
View File
@@ -142,10 +142,10 @@ BR2_PACKAGE_HOST_MTOOLS=y
BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SUPPORT=y BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SUPPORT=y
BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SIGNATURE_SUPPORT=y BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SIGNATURE_SUPPORT=y
BR2_PACKAGE_HOST_UBOOT_TOOLS_FDT_ADD_PUBKEY=y BR2_PACKAGE_HOST_UBOOT_TOOLS_FDT_ADD_PUBKEY=y
INFIX_VENDOR_HOME="https://kernelkit.org" INFIX_VENDOR_HOME="https://www.kernelkit.org"
INFIX_DESC="Infix is an immutable, friendly, and secure operating system that turns any ARM or x86 device into a powerful, manageable network appliance. Deploy on anything from $35 Raspberry Pi boards to enterprise switches as routers, IoT gateways, or edge devices. Infix models Linux networking features using YANG so you can manage your devices using NETCONF/RESTCONF APIs and focus on your business logic running in isolated containers." INFIX_DESC="Infix is an immutable, friendly, and secure operating system that turns any ARM or x86 device into a powerful, manageable network appliance. Deploy on anything from $35 Raspberry Pi boards to enterprise switches as routers, IoT gateways, or edge devices. Infix models Linux networking features using YANG so you can manage your devices using NETCONF/RESTCONF APIs and focus on your business logic running in isolated containers."
INFIX_HOME="https://github.com/kernelkit/infix/" INFIX_HOME="https://github.com/kernelkit/infix/"
INFIX_DOC="https://kernelkit.org/infix/" INFIX_DOC="https://www.kernelkit.org/infix/"
INFIX_SUPPORT="mailto:kernelkit@googlegroups.com" INFIX_SUPPORT="mailto:kernelkit@googlegroups.com"
BR2_PACKAGE_FEATURE_GPS=y BR2_PACKAGE_FEATURE_GPS=y
BR2_PACKAGE_FEATURE_WIFI=y BR2_PACKAGE_FEATURE_WIFI=y
+2 -2
View File
@@ -120,10 +120,10 @@ BR2_PACKAGE_HOST_MTOOLS=y
BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SUPPORT=y BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SUPPORT=y
BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SIGNATURE_SUPPORT=y BR2_PACKAGE_HOST_UBOOT_TOOLS_FIT_SIGNATURE_SUPPORT=y
BR2_PACKAGE_HOST_UBOOT_TOOLS_FDT_ADD_PUBKEY=y BR2_PACKAGE_HOST_UBOOT_TOOLS_FDT_ADD_PUBKEY=y
INFIX_VENDOR_HOME="https://kernelkit.org" INFIX_VENDOR_HOME="https://www.kernelkit.org"
INFIX_DESC="Infix is an immutable, friendly, and secure operating system that turns any ARM or x86 device into a powerful, manageable network appliance. Deploy on anything from $35 Raspberry Pi boards to enterprise switches as routers, IoT gateways, or edge devices. Infix models Linux networking features using YANG so you can manage your devices using NETCONF/RESTCONF APIs and focus on your business logic running in isolated containers." INFIX_DESC="Infix is an immutable, friendly, and secure operating system that turns any ARM or x86 device into a powerful, manageable network appliance. Deploy on anything from $35 Raspberry Pi boards to enterprise switches as routers, IoT gateways, or edge devices. Infix models Linux networking features using YANG so you can manage your devices using NETCONF/RESTCONF APIs and focus on your business logic running in isolated containers."
INFIX_HOME="https://github.com/kernelkit/infix/" INFIX_HOME="https://github.com/kernelkit/infix/"
INFIX_DOC="https://kernelkit.org/infix/" INFIX_DOC="https://www.kernelkit.org/infix/"
INFIX_SUPPORT="mailto:kernelkit@googlegroups.com" INFIX_SUPPORT="mailto:kernelkit@googlegroups.com"
BR2_PACKAGE_FEATURE_GPS=y BR2_PACKAGE_FEATURE_GPS=y
BR2_PACKAGE_CONFD=y BR2_PACKAGE_CONFD=y
+13 -8
View File
@@ -3,25 +3,29 @@ Change Log
All notable changes to the project are documented in this file. All notable changes to the project are documented in this file.
[v26.02.0][UNRELEASED] - [v26.02.0][] - 2026-03-01
------------------------- -------------------------
> [!NOTE]
> The blog and User Guide have a new address: <https://www.kernelkit.org>
### Changes ### Changes
- Upgrade Linux kernel to 6.18.15 (LTS) - Upgrade Linux kernel to 6.18.15 (LTS)
- Upgrade Buildroot to 2025.02.11 (LTS) - Upgrade Buildroot to 2025.02.11 (LTS)
- Upgrade FRR to 10.5.1 - Upgrade FRR to 10.5.1
- Add support for Microchip SAMA7G54-EK Evaluation Kit, Arm Cortex-A7 - Add support for [Microchip SAMA7G54][SAMA7G54-EK] Evaluation Kit, Arm Cortex-A7
- Add GPS/GNSS receiver support with NTP reference clock integration
- Add support for [Banana Pi R3 Mini][BPI-R3-MINI], a 2 port router with 2 WiFi chip, - Add support for [Banana Pi R3 Mini][BPI-R3-MINI], a 2 port router with 2 WiFi chip,
uses the same bootloader as BPI-R3 (eMMC-version) uses the same bootloader as BPI-R3 (eMMC-version)
- Add GPS/GNSS receiver support with NTP reference clock integration
- Add `reset-volumes` option to `container upgrade foo` command
### Fixes ### Fixes
N/A - Fix CLI `copy` command problem to copy to scp/sftp destinations
[BPI-R3-MINI]: https://wiki.banana-pi.org/Banana_Pi_BPI-R3_Mini [BPI-R3-MINI]: https://wiki.banana-pi.org/Banana_Pi_BPI-R3_Mini
[SAMA7G54-EK]: https://www.microchip.com/en-us/development-tool/ev21h18a
[v26.01.0][] - 2026-02-03 [v26.01.0][] - 2026-02-03
------------------------- -------------------------
@@ -106,7 +110,7 @@ Noteworthy changes and additions in this release are marked below in bold text.
- Prevent MOTD from showing on non-shell user login attempts - Prevent MOTD from showing on non-shell user login attempts
- Fix mDNS reflector. - Fix mDNS reflector.
[wifi]: https://kernelkit.org/infix/latest/wifi/ [wifi]: https://www.kernelkit.org/infix/latest/wifi/
[sd card image]: https://github.com/kernelkit/infix/releases/download/latest-boot/infix-rpi64-sdcard.img [sd card image]: https://github.com/kernelkit/infix/releases/download/latest-boot/infix-rpi64-sdcard.img
@@ -724,7 +728,7 @@ renamed to ease maintenance, more info below.
not supported (yet) in Infix, issue #709 not supported (yet) in Infix, issue #709
- The default builds now include the curiOS nftables container image, - The default builds now include the curiOS nftables container image,
which can be used for advanced firewall setups. For an introduction which can be used for advanced firewall setups. For an introduction
see <https://kernelkit.org/posts/firewall-container/> see <https://www.kernelkit.org/posts/firewall-container/>
### Fixes ### Fixes
@@ -1927,7 +1931,8 @@ Supported YANG models in addition to those used by sysrepo and netopeer:
- N/A - N/A
[buildroot]: https://buildroot.org/ [buildroot]: https://buildroot.org/
[UNRELEASED]: https://github.com/kernelkit/infix/compare/v26.01.0...HEAD [UNRELEASED]: https://github.com/kernelkit/infix/compare/v26.02.0...HEAD
[v26.02.0]: https://github.com/kernelkit/infix/compare/v26.01.0...v26.02.0
[v26.01.0]: https://github.com/kernelkit/infix/compare/v25.11.0...v26.01.0 [v26.01.0]: https://github.com/kernelkit/infix/compare/v25.11.0...v26.01.0
[v25.11.0]: https://github.com/kernelkit/infix/compare/v25.10.0...v25.11.0 [v25.11.0]: https://github.com/kernelkit/infix/compare/v25.10.0...v25.11.0
[v25.10.0]: https://github.com/kernelkit/infix/compare/v25.09.0...v26.10.0 [v25.10.0]: https://github.com/kernelkit/infix/compare/v25.09.0...v26.10.0
+2 -2
View File
@@ -295,7 +295,7 @@ linux-pc:# ssh admin@infix-c0-ff-ee.local
(admin@infix-c0-ff-ee.local) Password: (admin@infix-c0-ff-ee.local) Password:
.-------. .-------.
| . . | Infix OS — Immutable.Friendly.Secure | . . | Infix OS — Immutable.Friendly.Secure
|-. v .-| https://kernelkit.org |-. v .-| https://www.kernelkit.org
'-'---'- '-'---'-
Run the command 'cli' for interactive OAM Run the command 'cli' for interactive OAM
@@ -335,7 +335,7 @@ linux-pc:# ssh admin@infix.local
(admin@infix.local) Password: (admin@infix.local) Password:
.-------. .-------.
| . . | Infix OS — Immutable.Friendly.Secure | . . | Infix OS — Immutable.Friendly.Secure
|-. v .-| https://kernelkit.org |-. v .-| https://www.kernelkit.org
'-'---'- '-'---'-
Run the command 'cli' for interactive OAM Run the command 'cli' for interactive OAM
+1 -1
View File
@@ -87,7 +87,7 @@ example login: <b>admin</b>
Password: Password:
.-------. .-------.
| . . | Infix OS — Immutable.Friendly.Secure | . . | Infix OS — Immutable.Friendly.Secure
|-. v .-| https://kernelkit.org |-. v .-| https://www.kernelkit.org
'-'---'-' '-'---'-'
Run the command 'cli' for interactive OAM Run the command 'cli' for interactive OAM
+1 -1
View File
@@ -336,7 +336,7 @@ It should now be possible to access the switch from the PC via SSH (or NETCONF).
admin@fe80::0053:00ff:fe06:1101%eth1's password: admin@fe80::0053:00ff:fe06:1101%eth1's password:
.-------. .-------.
| . . | Infix OS — Immutable.Friendly.Secure | . . | Infix OS — Immutable.Friendly.Secure
|-. v .-| https://kernelkit.org |-. v .-| https://www.kernelkit.org
'-'---'-' '-'---'-'
Run the command 'cli' for interactive OAM Run the command 'cli' for interactive OAM
+1 -1
View File
@@ -88,7 +88,7 @@ Warning: Permanently added 'fe80::ff:fe00:0%eth0' (ED25519) to the list of known
admin@fe80::ff:fe00:0%eth0's password: ***** admin@fe80::ff:fe00:0%eth0's password: *****
.-------. .-------.
| . . | Infix OS — Immutable.Friendly.Secure | . . | Infix OS — Immutable.Friendly.Secure
|-. v .-| https://kernelkit.org |-. v .-| https://www.kernelkit.org
'-'---'-' '-'---'-'
Run the command 'cli' for interactive OAM Run the command 'cli' for interactive OAM
+1 -1
View File
@@ -152,7 +152,7 @@ infix-00-00-00 login: admin
Password: Password:
.-------. .-------.
| . . | Infix OS — Immutable.Friendly.Secure | . . | Infix OS — Immutable.Friendly.Secure
|-. v .-| https://kernelkit.org |-. v .-| https://www.kernelkit.org
'-'---'-' '-'---'-'
Run the command 'cli' for interactive OAM Run the command 'cli' for interactive OAM
+1 -1
View File
@@ -170,7 +170,7 @@ example login: <b>admin</b>
Password: Password:
.-------. .-------.
| . . | Infix OS — Immutable.Friendly.Secure | . . | Infix OS — Immutable.Friendly.Secure
|-. v .-| https://kernelkit.org |-. v .-| https://www.kernelkit.org
'-'---'-' '-'---'-'
Run the command 'cli' for interactive OAM Run the command 'cli' for interactive OAM
+1 -1
View File
@@ -170,6 +170,6 @@ plugins:
extra: extra:
generator: false generator: false
homepage: https://kernelkit.org/ homepage: https://www.kernelkit.org/
version: version:
provider: mike provider: mike
+4 -3
View File
@@ -466,7 +466,7 @@ static int curl(char *op, const char *path, const char *uri)
{ {
char *argv[10] = { "curl", "-L", NULL }; char *argv[10] = { "curl", "-L", NULL };
int err = 1, i = 2; int err = 1, i = 2;
int path_i, uri_i, user_i = 0; int path_i, uri_i = 0, user_i = 0;
argv[i++] = op; argv[i++] = op;
@@ -492,7 +492,8 @@ static int curl(char *op, const char *path, const char *uri)
out: out:
free(argv[path_i]); free(argv[path_i]);
free(argv[uri_i]); if (uri_i)
free(argv[uri_i]);
if (user_i) if (user_i)
free(argv[user_i]); free(argv[user_i]);
return err; return err;
@@ -752,7 +753,7 @@ static int copy(const char *src, const char *dst)
* meaningful name instead: the datastore's on-disk filename, or the * meaningful name instead: the datastore's on-disk filename, or the
* source file's own basename. * source file's own basename.
*/ */
if (is_ssh_uri(dst) && dst[strlen(dst) - 1] == '/') { if (dst && is_ssh_uri(dst) && dst[strlen(dst) - 1] == '/') {
const char *bn, *slash; const char *bn, *slash;
if (srcds && srcds->path) { if (srcds && srcds->path) {
+1 -1
View File
@@ -144,7 +144,7 @@ static void add(const char *ifname, struct lyd_node *cfg)
fprintf(fp, "# Generated by Infix confd\n"); fprintf(fp, "# Generated by Infix confd\n");
fprintf(fp, "metric=%s\n", metric); fprintf(fp, "metric=%s\n", metric);
fprintf(fp, "service <!> name:dhcp-client :%s <net/%s/running> \\\n" fprintf(fp, "service <!pid/netd> name:dhcp-client :%s <net/%s/running> \\\n"
" [2345] udhcpc -f -p /run/dhcp-client-%s.pid -t 3 -T 5 -A 30 %s -S -R \\\n" " [2345] udhcpc -f -p /run/dhcp-client-%s.pid -t 3 -T 5 -A 30 %s -S -R \\\n"
" %s%s \\\n" " %s%s \\\n"
" -i %s %s %s \\\n" " -i %s %s %s \\\n"
+11 -12
View File
@@ -695,18 +695,17 @@ int hardware_change(sr_session_ctx_t *session, struct lyd_node *config, struct l
wifi_find_interfaces_on_radio(interfaces_config, name, wifi_find_interfaces_on_radio(interfaces_config, name,
&wifi_iface_list, &wifi_iface_count); &wifi_iface_list, &wifi_iface_count);
if (wifi_iface_list) {
if (!wifi_iface_count) if (wifi_iface_count) {
continue; /* Generate AP config (hostapd) for all APs on this radio */
rc = wifi_gen_aps_on_radio(name, interfaces_config, cwifi_radio, config);
/* Generate AP config (hostapd) for all APs on this radio */ if (rc != SR_ERR_OK)
rc = wifi_gen_aps_on_radio(name, interfaces_config, cwifi_radio, config); ERROR("Failed to generate AP config for radio %s", name);
if (rc != SR_ERR_OK) }
ERROR("Failed to generate AP config for radio %s", name); free(wifi_iface_list);
/* Free the interface list */ wifi_iface_list = NULL;
free(wifi_iface_list); wifi_iface_count = 0;
wifi_iface_list = NULL; }
wifi_iface_count = 0;
} else if (!strcmp(class, "infix-hardware:gps")) { } else if (!strcmp(class, "infix-hardware:gps")) {
if (event != SR_EV_DONE) if (event != SR_EV_DONE)
continue; continue;
+2 -2
View File
@@ -458,7 +458,8 @@ static void frr_daemons_write(int ospfd, int ripd, int bfdd)
fp); fp);
fclose(fp); fclose(fp);
rename(next, FRR_DAEMONS); if (rename(next, FRR_DAEMONS))
ERROR("Failed to rename %s to %s: %m", next, FRR_DAEMONS);
} }
int routing_change(sr_session_ctx_t *session, struct lyd_node *config, struct lyd_node *diff, sr_event_t event, struct confd *confd) int routing_change(sr_session_ctx_t *session, struct lyd_node *config, struct lyd_node *diff, sr_event_t event, struct confd *confd)
@@ -519,7 +520,6 @@ int routing_change(sr_session_ctx_t *session, struct lyd_node *config, struct ly
num = parse_rip(session, lydx_get_child(cplane, "rip"), fp); num = parse_rip(session, lydx_get_child(cplane, "rip"), fp);
if (num > 0) { if (num > 0) {
touch(RIPD_SIGNAL_NEXT); touch(RIPD_SIGNAL_NEXT);
ripd_enabled = 1;
netd_enabled = 1; netd_enabled = 1;
} }
} }
+8 -2
View File
@@ -178,9 +178,15 @@
</COMMAND> </COMMAND>
<COMMAND name="upgrade" help="Upgrade image of a container (writable layer is lost!)"> <COMMAND name="upgrade" help="Upgrade image of a container (writable layer is lost!)">
<PARAM name="name" ptype="/CONTAINERS" help="Container name" /> <PARAM name="name" ptype="/CONTAINERSa" help="Container name" />
<SWITCH name="optional" min="0" max="1">
<COMMAND name="reset-volumes" help="Delete named volumes, re-initialize from new image (all config lost!)" />
</SWITCH>
<ACTION sym="script" out="tty" interrupt="true"> <ACTION sym="script" out="tty" interrupt="true">
doas container upgrade $KLISH_PARAM_name if env | grep -q 'reset-volumes' >/dev/null; then
opt="-R"
fi
doas container $opt upgrade $KLISH_PARAM_name
</ACTION> </ACTION>
</COMMAND> </COMMAND>
</COMMAND> </COMMAND>
+2 -2
View File
@@ -461,7 +461,7 @@ echo "Public: $pub"
<ACTION sym="printl">peer</ACTION> <ACTION sym="printl">peer</ACTION>
</COMPL> </COMPL>
</PARAM> </PARAM>
<PARAM name="peer_addr" ptype="/STRING" help="Peer IP address" min="0" max="1"/> <PARAM name="peer" ptype="/STRING" help="Peer IP address" min="0" max="1"/>
<SWITCH name="optional" min="0"> <SWITCH name="optional" min="0">
<COMMAND name="brief" help="Show brief output" mode="switch"/> <COMMAND name="brief" help="Show brief output" mode="switch"/>
</SWITCH> </SWITCH>
@@ -471,7 +471,7 @@ echo "Public: $pub"
BRIEF_ARG="brief" BRIEF_ARG="brief"
fi fi
# Pass subcommand, optional peer address, and brief flag # Pass subcommand, optional peer address, and brief flag
show bfd ${KLISH_PARAM_subcommand:+"$KLISH_PARAM_subcommand"} ${KLISH_PARAM_peer_addr:+"$KLISH_PARAM_peer_addr"} ${BRIEF_ARG:+"$BRIEF_ARG"} |pager show bfd ${KLISH_PARAM_subcommand:+"$KLISH_PARAM_subcommand"} ${KLISH_PARAM_peer:+"$KLISH_PARAM_peer"} ${BRIEF_ARG:+"$BRIEF_ARG"} |pager
</ACTION> </ACTION>
</COMMAND> </COMMAND>
@@ -10,7 +10,7 @@ IMAGE_ID="infix-x86_64"
ARCHITECTURE="x86_64" ARCHITECTURE="x86_64"
HOME_URL=https://github.com/kernelkit/infix/ HOME_URL=https://github.com/kernelkit/infix/
VENDOR_NAME="KernelKit" VENDOR_NAME="KernelKit"
VENDOR_HOME="https://kernelkit.org" VENDOR_HOME="https://www.kernelkit.org"
DOCUMENTATION_URL="https://kernelkit.org/infix/" DOCUMENTATION_URL="https://www.kernelkit.org/infix/"
SUPPORT_URL="mailto:kernelkit@googlegroups.com" SUPPORT_URL="mailto:kernelkit@googlegroups.com"
INFIX_DESC="Infix is an immutable, friendly, and secure operating system that turns any ARM or x86 device into a powerful, manageable network appliance. Deploy on anything from 5 Raspberry Pi boards to enterprise switches as routers, IoT gateways, or edge devices. Infix models Linux networking features using YANG so you can manage your devices using NETCONF/RESTCONF APIs and focus on your business logic running in isolated containers." INFIX_DESC="Infix is an immutable, friendly, and secure operating system that turns any ARM or x86 device into a powerful, manageable network appliance. Deploy on anything from 5 Raspberry Pi boards to enterprise switches as routers, IoT gateways, or edge devices. Infix models Linux networking features using YANG so you can manage your devices using NETCONF/RESTCONF APIs and focus on your business logic running in isolated containers."