diff --git a/alpine/rootfs-extra/etc/local.d/monok8s.start b/alpine/rootfs-extra/etc/local.d/monok8s.start index 0f39ebb..2f88bd9 100755 --- a/alpine/rootfs-extra/etc/local.d/monok8s.start +++ b/alpine/rootfs-extra/etc/local.d/monok8s.start @@ -1,4 +1,7 @@ #!/bin/sh +set -eu + +exec >>/var/log/monok8s/boot.log 2>&1 export PATH="/usr/local/bin:/usr/local/sbin:$PATH" @@ -6,4 +9,18 @@ mkdir -p /dev/hugepages mountpoint -q /dev/hugepages || mount -t hugetlbfs none /dev/hugepages echo 640 > /proc/sys/vm/nr_hugepages +CUR=$(grep '^BOOT_PART=' /run/monok8s/boot-state.env | cut -d= -f2-) +LAST=$(cat /opt/monok8s/config/.bootpart 2>/dev/null || true) + +if [ "$CUR" != "$LAST" ]; then + echo "Slot changed ($LAST -> $CUR), cleaning runtime state" + + rm -rf /var/lib/containers \ + /var/lib/kubelet/pods \ + /var/lib/kubelet/plugins \ + /var/lib/kubelet/device-plugins + + mkdir -p /var/lib/containers /var/lib/kubelet +fi + /usr/local/bin/ctl init --env-file /opt/monok8s/config/cluster.env >>/var/log/monok8s/bootstrap.log 2>&1 & diff --git a/build.env b/build.env index 35cdff0..d0e760a 100644 --- a/build.env +++ b/build.env @@ -11,8 +11,8 @@ DPDK_VERSION=lf-6.18.2-1.0.0 VPP_VERSION=lf-6.18.2-1.0.0 VPP_UPSTREAM_VERSION=23.10 -CRIO_VERSION=cri-o.arm64.v1.33.3 -KUBE_VERSION=v1.33.3 +CRIO_VERSION=cri-o.arm64.v1.35.2 +KUBE_VERSION=v1.35.3 # Mono's tutorial said fsl-ls1046a-rdb.dtb but our shipped board is not that one # We need fsl-ls1046a-rdb-sdk.dtb here diff --git a/clitools/pkg/controller/osupgrade/progress.go b/clitools/pkg/controller/osupgrade/progress.go index 71a79aa..40771fe 100644 --- a/clitools/pkg/controller/osupgrade/progress.go +++ b/clitools/pkg/controller/osupgrade/progress.go @@ -326,6 +326,8 @@ func markProgressCompleted( cur.Status.Phase = monov1alpha1.OSUpgradeProgressPhaseCompleted cur.Status.Message = message + cur.Status.CurrentVersion = osup.Status.CurrentVersion + cur.Status.TargetVersion = osup.Status.TargetVersion cur.Status.LastUpdatedAt = &now cur.Status.CompletedAt = &now }) diff --git a/clitools/pkg/node/fs.go b/clitools/pkg/node/fs.go index fbb1032..8eab227 100644 --- a/clitools/pkg/node/fs.go +++ b/clitools/pkg/node/fs.go @@ -29,6 +29,31 @@ func ReleaseControlGate(ctx context.Context, nctx *NodeContext) error { return fmt.Errorf("relate control gate: %w", err) } + return WriteLastState(ctx, nctx) +} + +// Required for detecting bootslot changes +func WriteLastState(ctx context.Context, nctx *NodeContext) error { + stBootPart := filepath.Join(monov1alpha1.EnvConfigDir, ".bootpart") + + state, err := osimage.ReadBootState() + if err != nil { + return fmt.Errorf("read boot state: %w", err) + } + + bootPart := state["BOOT_PART"] + if bootPart == "" { + return fmt.Errorf("BOOT_PART missing") + } + + tmp := stBootPart + ".tmp" + if err := os.WriteFile(tmp, []byte(bootPart+"\n"), 0o644); err != nil { + return err + } + if err := os.Rename(tmp, stBootPart); err != nil { + return err + } + return nil }