From 0ab9e2a36a6e240bfaac507caa9ec47d940adcfa Mon Sep 17 00:00:00 2001 From: Richard Alpe Date: Mon, 7 Apr 2025 14:57:17 +0200 Subject: [PATCH 1/3] confd: fix indentation of bin/migrate Don't mix tabs and spaces. Signed-off-by: Richard Alpe --- src/confd/bin/migrate | 138 +++++++++++++++++++++--------------------- 1 file changed, 69 insertions(+), 69 deletions(-) diff --git a/src/confd/bin/migrate b/src/confd/bin/migrate index 41b29c3d..e04b503a 100755 --- a/src/confd/bin/migrate +++ b/src/confd/bin/migrate @@ -27,7 +27,7 @@ cleanup() note() { if [ -n "$quiet" ]; then - return + return fi logger -I $$ -k -p user.notice -t "$ident" "$1" } @@ -46,11 +46,11 @@ atoi() file_version() { jq -r ' - if .["infix-meta:meta"] | has("version") then - .["infix-meta:meta"]["version"] - else - "0.0" - end + if .["infix-meta:meta"] | has("version") then + .["infix-meta:meta"]["version"] + else + "0.0" + end ' "$1" } @@ -58,16 +58,16 @@ file_version() confd_version() { 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 meta_version() { if jq --arg version "$sys_version" '.["infix-meta:meta"] = {"infix-meta:version": $version}' "$2" \ - > "${2}.tmp" && mv "${2}.tmp" "$2"; then - note "$1: configuration updated to version $sys_version." - return 0 + > "${2}.tmp" && mv "${2}.tmp" "$2"; then + note "$1: configuration updated to version $sys_version." + return 0 fi err "$1: failed updating configuration to version $sys_version!" @@ -80,23 +80,23 @@ migrate() note "$1: migrating from version $cfg_version" for version_dir in $(find "$scripts" -mindepth 1 -maxdepth 1 -type d | sort -V); do - dir=$(basename "$version_dir") - version=$(atoi "$dir") + dir=$(basename "$version_dir") + version=$(atoi "$dir") - # Step by step upgrade file to latest version - if [ "$cfg_level" -lt "$version" ]; then - note "Applying migrations for version $dir ..." + # Step by step upgrade file to latest version + if [ "$cfg_level" -lt "$version" ]; then + note "Applying migrations for version $dir ..." - # Apply all scripts in the version directory in order - for script in $(find "$version_dir" -type f -name '*.sh' | sort -V); do - note "$1: calling $script ..." - sh "$script" "$2" - done + # Apply all scripts in the version directory in order + for script in $(find "$version_dir" -type f -name '*.sh' | sort -V); do + note "$1: calling $script ..." + sh "$script" "$2" + done - # File now at $version ... - cfg_level="$version" - fi - done + # File now at $version ... + cfg_level="$version" + fi +done } # Try migrating a copy, then diff the files, for factory-config check @@ -126,31 +126,31 @@ eval set -- "$OPTS" while [ -n "$1" ]; do case $1 in - -b) - bak=$2 - shift - ;; - -c) - check=1 - ;; - -h) - usage - exit 0 - ;; - -i) - inplace=1 - ;; - -q) - quiet=1 - ;; - --) - shift - break - ;; - *) - # Likely file argument - break - ;; + -b) + bak=$2 + shift + ;; + -c) + check=1 + ;; + -h) + usage + exit 0 + ;; + -i) + inplace=1 + ;; + -q) + quiet=1 + ;; + --) + shift + break + ;; + *) + # Likely file argument + break + ;; esac shift done @@ -190,22 +190,22 @@ if [ "$cfg_level" -eq "$sys_level" ]; then exit 0 else if [ -n "$check" ]; then - # We may be called to check a file without meta:version (factory) - if [ "$cfg_version" = "0.0" ]; then - if diff "$tmp"; then - # File is OK, despite lacking meta:version - exit 0 - fi - msg="$orig: has syntax error, requires migrating." - else - msg="$orig: version $cfg_version, requires migrating." - fi - if [ -t 0 ]; then - echo "$msg" - else - note "$msg" - fi - exit 1 + # We may be called to check a file without meta:version (factory) + if [ "$cfg_version" = "0.0" ]; then + if diff "$tmp"; then + # File is OK, despite lacking meta:version + exit 0 + fi + msg="$orig: has syntax error, requires migrating." + else + msg="$orig: version $cfg_version, requires migrating." + fi + if [ -t 0 ]; then + echo "$msg" + else + note "$msg" + fi + exit 1 fi fi @@ -214,10 +214,10 @@ if [ -n "$bak" ]; then ext="${bak##*.}" bak="${fil}-${cfg_version}.${ext}" if cp -p "$tmp" "$bak" 2>/dev/null; then - note "$orig: backup created: $bak" + note "$orig: backup created: $bak" else - err "$orig: failed creating backup: $bak" - exit 1 + err "$orig: failed creating backup: $bak" + exit 1 fi fi From e3c601f2fd0bcd9573593166a9eda173b7b9c28f Mon Sep 17 00:00:00 2001 From: Richard Alpe Date: Mon, 7 Apr 2025 15:09:36 +0200 Subject: [PATCH 2/3] confd: add script path option (-s) to migrate script This allows a user to run in on any system which has the Infix source code that contains the modification scripts. Signed-off-by: Richard Alpe --- src/confd/bin/migrate | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/confd/bin/migrate b/src/confd/bin/migrate index e04b503a..67804d0f 100755 --- a/src/confd/bin/migrate +++ b/src/confd/bin/migrate @@ -13,6 +13,7 @@ usage() echo " -h This help text" echo " -i Edit file in-place instead of sending to stdout, like sed" echo " -q Quiet, skip normal log messages, only errors are logged" + echo " -s PATH Specify custom script path" echo echo "By default, this script reads a .cfg file on stdin, or as the first" echo "non-option argument, then migrates it to a new syntax on stdout." @@ -121,7 +122,7 @@ chmod 600 "$tmp" trap cleanup INT HUP TERM EXIT -OPTS=$(getopt -o b:chiq -- "$@") +OPTS=$(getopt -o b:chiqs: -- "$@") eval set -- "$OPTS" while [ -n "$1" ]; do @@ -143,6 +144,10 @@ while [ -n "$1" ]; do -q) quiet=1 ;; + -s) + scripts=$2 + shift + ;; --) shift break From 75352a9f77efd99981dd2b93651a8e8162502ce8 Mon Sep 17 00:00:00 2001 From: Richard Alpe Date: Mon, 7 Apr 2025 15:20:54 +0200 Subject: [PATCH 3/3] confd: add no log option (-e) to migrate script Write logs to stderr instead of syslog. Useful when running on a non-target system. Signed-off-by: Richard Alpe --- src/confd/bin/migrate | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/src/confd/bin/migrate b/src/confd/bin/migrate index 67804d0f..1ad3570b 100755 --- a/src/confd/bin/migrate +++ b/src/confd/bin/migrate @@ -9,6 +9,7 @@ usage() echo echo "options:" echo " -b FILE Create backup FILE, appends detected version before .ext" + echo " -e Print all messages on stderr instead of syslog" echo " -c Check only, returns false when migration is not needed" echo " -h This help text" echo " -i Edit file in-place instead of sending to stdout, like sed" @@ -30,12 +31,21 @@ note() if [ -n "$quiet" ]; then return fi - logger -I $$ -k -p user.notice -t "$ident" "$1" + + if [ -n "$nolog" ]; then + echo "$1" >&2 + else + logger -I $$ -k -p user.notice -t "$ident" "$1" + fi } err() { - logger -I $$ -k -p user.err -t "$ident" "$1" + if [ -n "$nolog" ]; then + echo "Error: $1" >&2 + else + logger -I $$ -k -p user.err -t "$ident" "$1" + fi } # Convert human-readable version to integer level @@ -122,7 +132,7 @@ chmod 600 "$tmp" trap cleanup INT HUP TERM EXIT -OPTS=$(getopt -o b:chiqs: -- "$@") +OPTS=$(getopt -o b:echiqs: -- "$@") eval set -- "$OPTS" while [ -n "$1" ]; do @@ -131,6 +141,9 @@ while [ -n "$1" ]; do bak=$2 shift ;; + -e) + nolog=1 + ;; -c) check=1 ;;