Compare commits

...
9 Commits
5 changed files with 98 additions and 84 deletions
+1 -1
View File
@@ -90,7 +90,7 @@ if [ "$BR2_TARGET_ROOTFS_SQUASHFS" = "y" ]; then
rel=$(ver) rel=$(ver)
ln -sf rootfs.squashfs "$BINARIES_DIR/${NAME}${rel}.img" ln -sf rootfs.squashfs "$BINARIES_DIR/${NAME}${rel}.img"
if [ -n "$rel" ]; then if [ -n "$rel" ]; then
ln -sf "$BINARIES_DIR/${NAME}${rel}.img" "$BINARIES_DIR/${NAME}.img" ln -sf "${NAME}${rel}.img" "$BINARIES_DIR/${NAME}.img"
fi fi
fi fi
@@ -4,10 +4,14 @@
# the migrate tool inserts old version in name before .cfg extension. # the migrate tool inserts old version in name before .cfg extension.
CONFIG_FILE="/cfg/startup-config.cfg" CONFIG_FILE="/cfg/startup-config.cfg"
BACKUP_FILE="/cfg/backup/startup-config.cfg" BACKUP_FILE="/cfg/backup/startup-config.cfg"
mkdir -p "$(dirname "$BACKUP_FILE")" BACKUP_DIR="$(dirname "$BACKUP_FILE")"
mkdir -p "$BACKUP_DIR"
chown root:wheel "$BACKUP_DIR"
chmod 0770 "$BACKUP_DIR"
if [ ! -f "$CONFIG_FILE" ]; then if [ ! -f "$CONFIG_FILE" ]; then
note "No $(basename "$CONFIG_FILE" .cfg) yet, likely factory reset." logger -I $$ -k -p user.notice -t $(basename "$0") "No $(basename "$CONFIG_FILE" .cfg) yet, likely factory reset."
exit 0 exit 0
elif migrate -cq "$CONFIG_FILE"; then elif migrate -cq "$CONFIG_FILE"; then
exit 0 exit 0
+7
View File
@@ -3,6 +3,12 @@ Change Log
All notable changes to the project are documented in this file. All notable changes to the project are documented in this file.
[v25.03.1][] - 2025-04-11
-------------------------
### Fixes
- Fix configuration migration issues when upgrading
[v25.03.0][] - 2025-03-31 [v25.03.0][] - 2025-03-31
------------------------- -------------------------
@@ -1530,6 +1536,7 @@ Supported YANG models in addition to those used by sysrepo and netopeer:
[buildroot]: https://buildroot.org/ [buildroot]: https://buildroot.org/
[UNRELEASED]: https://github.com/kernelkit/infix/compare/v25.03.0...HEAD [UNRELEASED]: https://github.com/kernelkit/infix/compare/v25.03.0...HEAD
[v25.03.1]: https://github.com/kernelkit/infix/compare/v25.03.0...v25.03.1
[v25.03.0]: https://github.com/kernelkit/infix/compare/v25.02.0...v25.03.0 [v25.03.0]: https://github.com/kernelkit/infix/compare/v25.02.0...v25.03.0
[v25.02.0]: https://github.com/kernelkit/infix/compare/v25.01.0...v25.02.0 [v25.02.0]: https://github.com/kernelkit/infix/compare/v25.01.0...v25.02.0
[v25.01.0]: https://github.com/kernelkit/infix/compare/v24.11.0...v25.01.0 [v25.01.0]: https://github.com/kernelkit/infix/compare/v24.11.0...v25.01.0
+70 -70
View File
@@ -27,7 +27,7 @@ cleanup()
note() note()
{ {
if [ -n "$quiet" ]; then if [ -n "$quiet" ]; then
return return
fi fi
logger -I $$ -k -p user.notice -t "$ident" "$1" logger -I $$ -k -p user.notice -t "$ident" "$1"
} }
@@ -46,11 +46,11 @@ atoi()
file_version() file_version()
{ {
jq -r ' jq -r '
if .["infix-meta:meta"] | has("infix-meta:version") then if .["infix-meta:meta"] | has("version") then
.["infix-meta:meta"]["infix-meta:version"] .["infix-meta:meta"]["version"]
else else
"0.0" "0.0"
end end
' "$1" ' "$1"
} }
@@ -58,16 +58,16 @@ file_version()
confd_version() confd_version()
{ {
find "$scripts" -mindepth 1 -maxdepth 1 -type d \ find "$scripts" -mindepth 1 -maxdepth 1 -type d \
| sort -V | tail -n1 | xargs -n1 basename | sort -V | tail -n1 | xargs -n1 basename
} }
# Update meta data with the latest version # Update meta data with the latest version
meta_version() meta_version()
{ {
if jq --arg version "$sys_version" '.["infix-meta:meta"] = {"infix-meta:version": $version}' "$2" \ if jq --arg version "$sys_version" '.["infix-meta:meta"] = {"version": $version}' "$2" \
> "${2}.tmp" && mv "${2}.tmp" "$2"; then > "${2}.tmp" && mv "${2}.tmp" "$2"; then
note "$1: configuration updated to version $sys_version." note "$1: configuration updated to version $sys_version."
return 0 return 0
fi fi
err "$1: failed updating configuration to version $sys_version!" err "$1: failed updating configuration to version $sys_version!"
@@ -80,23 +80,23 @@ migrate()
note "$1: migrating from version $cfg_version" note "$1: migrating from version $cfg_version"
for version_dir in $(find "$scripts" -mindepth 1 -maxdepth 1 -type d | sort -V); do for version_dir in $(find "$scripts" -mindepth 1 -maxdepth 1 -type d | sort -V); do
dir=$(basename "$version_dir") dir=$(basename "$version_dir")
version=$(atoi "$dir") version=$(atoi "$dir")
# Step by step upgrade file to latest version # Step by step upgrade file to latest version
if [ "$cfg_level" -lt "$version" ]; then if [ "$cfg_level" -lt "$version" ]; then
note "Applying migrations for version $dir ..." note "Applying migrations for version $dir ..."
# Apply all scripts in the version directory in order # Apply all scripts in the version directory in order
for script in $(find "$version_dir" -type f -name '*.sh' | sort -V); do for script in $(find "$version_dir" -type f -name '*.sh' | sort -V); do
note "$1: calling $script ..." note "$1: calling $script ..."
sh "$script" "$2" sh "$script" "$2"
done done
# File now at $version ... # File now at $version ...
cfg_level="$version" cfg_level="$version"
fi fi
done done
} }
# Try migrating a copy, then diff the files, for factory-config check # Try migrating a copy, then diff the files, for factory-config check
@@ -126,31 +126,31 @@ eval set -- "$OPTS"
while [ -n "$1" ]; do while [ -n "$1" ]; do
case $1 in case $1 in
-b) -b)
bak=$2 bak=$2
shift shift
;; ;;
-c) -c)
check=1 check=1
;; ;;
-h) -h)
usage usage
exit 0 exit 0
;; ;;
-i) -i)
inplace=1 inplace=1
;; ;;
-q) -q)
quiet=1 quiet=1
;; ;;
--) --)
shift shift
break break
;; ;;
*) *)
# Likely file argument # Likely file argument
break break
;; ;;
esac esac
shift shift
done done
@@ -190,22 +190,22 @@ if [ "$cfg_level" -eq "$sys_level" ]; then
exit 0 exit 0
else else
if [ -n "$check" ]; then if [ -n "$check" ]; then
# We may be called to check a file without meta:version (factory) # We may be called to check a file without meta:version (factory)
if [ "$cfg_version" = "0.0" ]; then if [ "$cfg_version" = "0.0" ]; then
if diff "$tmp"; then if diff "$tmp"; then
# File is OK, despite lacking meta:version # File is OK, despite lacking meta:version
exit 0 exit 0
fi fi
msg="$orig: has syntax error, requires migrating." msg="$orig: has syntax error, requires migrating."
else else
msg="$orig: version $cfg_version, requires migrating." msg="$orig: version $cfg_version, requires migrating."
fi fi
if [ -t 0 ]; then if [ -t 0 ]; then
echo "$msg" echo "$msg"
else else
note "$msg" note "$msg"
fi fi
exit 1 exit 1
fi fi
fi fi
@@ -214,10 +214,10 @@ if [ -n "$bak" ]; then
ext="${bak##*.}" ext="${bak##*.}"
bak="${fil}-${cfg_version}.${ext}" bak="${fil}-${cfg_version}.${ext}"
if cp -p "$tmp" "$bak" 2>/dev/null; then if cp -p "$tmp" "$bak" 2>/dev/null; then
note "$orig: backup created: $bak" note "$orig: backup created: $bak"
else else
err "$orig: failed creating backup: $bak" err "$orig: failed creating backup: $bak"
exit 1 exit 1
fi fi
fi fi
+14 -11
View File
@@ -3,14 +3,17 @@
file=$1 file=$1
temp=${file}.tmp temp=${file}.tmp
jq '
jq '.["infix-services:ssh"] = { if has("infix-services:ssh") then
"enabled": true, .
"hostkey": ["genkey"], else
"listen": [ .["infix-services:ssh"] = {
{"name": "ipv4", "address": "0.0.0.0", "port": 22}, "enabled": true,
{"name": "ipv6", "address": "::", "port": 22} "hostkey": ["genkey"],
] "listen": [
}' "$file" > "$temp" {"name": "ipv4", "address": "0.0.0.0", "port": 22},
{"name": "ipv6", "address": "::", "port": 22}
mv "$temp" "$file" ]
}
end' $file > temp.json
mv temp.json $file