From 1324db2ffa30e24d888f2f19299af72e9fad4a6e Mon Sep 17 00:00:00 2001 From: Jeremy Davis Date: Thu, 23 Jul 2026 11:17:17 +1000 Subject: [PATCH 1/3] Give nice error message if turnkey_version file not found - instead of stacktrace --- turnkey-version | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/turnkey-version b/turnkey-version index 3c38518..6b00a5a 100755 --- a/turnkey-version +++ b/turnkey-version @@ -15,12 +15,18 @@ script to show basic system info. import argparse import json import os +import sys +from typing import NoReturn import sysversion _ROOTFS = "/" _TKL_VER = "etc/turnkey_version" -TurnkeyVersionError = sysversion.TurnkeyVersionError + + +def fatal(msg: str) -> NoReturn: + print(f"Error: {msg}", file=sys.stderr) + sys.exit(1) def main() -> None: @@ -140,7 +146,7 @@ def main() -> None: turnkey_version = sysversion.get_turnkey_version(rootfs, v_file) if not turnkey_version: - raise TurnkeyVersionError( + fatal( "can't detect turnkey version - missing or invalid file" f"'{os.path.join(rootfs, v_file)}'.", ) From 7a433a8dd891c3a2eab26383065d040d72851dab Mon Sep 17 00:00:00 2001 From: Jeremy Davis Date: Thu, 23 Jul 2026 12:06:44 +1000 Subject: [PATCH 2/3] Catch ValueError in get_turnkey_version() as well --- sysversion/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sysversion/__init__.py b/sysversion/__init__.py index dff1298..dee0309 100644 --- a/sysversion/__init__.py +++ b/sysversion/__init__.py @@ -57,7 +57,7 @@ def get_turnkey_version( try: with open(os.path.join(rootfs, fpath)) as fob: return fob.read().strip() - except OSError: + except (OSError, ValueError): pass return None From c206f254341b8e688b0d56e69570842dc20f5ee0 Mon Sep 17 00:00:00 2001 From: Jeremy Davis Date: Thu, 23 Jul 2026 12:17:34 +1000 Subject: [PATCH 3/3] Handle both malformed string and invalid file --- turnkey-version | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/turnkey-version b/turnkey-version index 6b00a5a..80eb012 100755 --- a/turnkey-version +++ b/turnkey-version @@ -16,6 +16,7 @@ import argparse import json import os import sys +from os.path import isfile, join from typing import NoReturn import sysversion @@ -133,6 +134,7 @@ def main() -> None: if args.json and (args.all or output_values): parser.error("-j|--json conflicts with other output values.") if args.string: + file = "" turnkey_version = args.string rootfs = "" else: @@ -143,13 +145,15 @@ def main() -> None: else: rootfs = args.rootfs v_file = _TKL_VER - + file = join(rootfs, v_file) turnkey_version = sysversion.get_turnkey_version(rootfs, v_file) if not turnkey_version: - fatal( - "can't detect turnkey version - missing or invalid file" - f"'{os.path.join(rootfs, v_file)}'.", - ) + msg = "can't detect turnkey version" + if file and not isfile(file): + msg = f"{msg} - missing/invalid file: '{file}'" + else: + msg = f"{msg} - invalid version string" + fatal(msg) tkl_appver = [] tkl_appver_cls = sysversion.AppVer(turnkey_version, rootfs=rootfs)