This commit is contained in:
2026-03-08 23:58:23 +01:00
parent f31cf972be
commit 1c1dc4c98b
2 changed files with 18 additions and 14 deletions

View File

@@ -47,10 +47,10 @@ if (isset($_GET['update_json'])) {
$strictHostKey = !empty($settings['terminal_strict_hostkey']); $strictHostKey = !empty($settings['terminal_strict_hostkey']);
$updateCmd = <<<'SH' $updateCmd = <<<'SH'
sh -lc 'if ! command -v apt-get >/dev/null 2>&1; then echo "__ERR__NO_APT"; exit 2; fi; if sudo apt update -qq >/dev/null 2>&1; then count=$(apt-get -s dist-upgrade | grep -c "^Inst "); if [ "$count" -gt 0 ]; then echo "__UPDATE__=1"; else echo "__UPDATE__=0"; fi; echo "__COUNT__=$count"; else echo "__ERR__APT_UPDATE"; exit 3; fi' sh -lc 'if ! command -v apt-get >/dev/null 2>&1; then echo "__ERR__NO_APT"; exit 2; fi; if sudo -n apt update -qq >/dev/null 2>&1; then echo "__APT_UPDATE__=1"; else echo "__APT_UPDATE__=0"; fi; count=$(apt-get -s dist-upgrade 2>/dev/null | grep -c "^Inst "); echo "__COUNT__=$count"'
SH; SH;
$upgradeCmd = <<<'SH' $upgradeCmd = <<<'SH'
sh -lc 'id="$(. /etc/os-release 2>/dev/null && echo "${ID:-}")"; current="$(. /etc/os-release 2>/dev/null && echo "${VERSION_CODENAME:-}")"; if [ "$id" != "debian" ] || [ -z "$current" ]; then echo "__ERR__NO_CODENAME"; exit 2; fi; latest="$( (command -v curl >/dev/null 2>&1 && curl -fsSL https://deb.debian.org/debian/dists/stable/Release) || (command -v wget >/dev/null 2>&1 && wget -qO- https://deb.debian.org/debian/dists/stable/Release) )"; latest="$(printf "%s" "$latest" | awk -F": " "/^Codename:/{print $2}")"; if [ -z "$latest" ]; then echo "__ERR__NO_LATEST"; exit 3; fi; if [ "$current" != "$latest" ]; then echo "__UPGRADE__=1"; else echo "__UPGRADE__=0"; fi' sh -lc 'id="$(. /etc/os-release 2>/dev/null && echo "${ID:-}")"; current="$(. /etc/os-release 2>/dev/null && echo "${VERSION_CODENAME:-}")"; if [ "$id" != "debian" ] || [ -z "$current" ]; then echo "__UPGRADE__=0"; exit 0; fi; latest="$( (command -v curl >/dev/null 2>&1 && curl -fsSL https://deb.debian.org/debian/dists/stable/Release) || (command -v wget >/dev/null 2>&1 && wget -qO- https://deb.debian.org/debian/dists/stable/Release) )"; latest="$(printf "%s" "$latest" | awk -F": " "/^Codename:/{print $2}")"; if [ -z "$latest" ]; then echo "__UPGRADE__=0"; echo "__RAW__=NO_FETCH"; exit 0; fi; if [ "$current" != "$latest" ]; then echo "__UPGRADE__=1"; else echo "__UPGRADE__=0"; fi'
SH; SH;
[$updExit, $updOut, $updErr] = runSshCommandCapture($host, $updateCmd, $strictHostKey, 20); [$updExit, $updOut, $updErr] = runSshCommandCapture($host, $updateCmd, $strictHostKey, 20);
@@ -58,7 +58,8 @@ SH;
$updErrStr = (string)$updErr; $updErrStr = (string)$updErr;
$updateCount = null; $updateCount = null;
$updatePreview = ''; $updatePreview = '';
if ($updExit === 0 && !str_contains($updOutStr, '__ERR__')) { $updateErr = str_contains($updOutStr, '__ERR__NO_APT');
if ($updExit === 0 && !$updateErr) {
if (preg_match('/^__COUNT__=(\d+)$/m', $updOutStr, $m)) { if (preg_match('/^__COUNT__=(\d+)$/m', $updOutStr, $m)) {
$updateCount = (int)$m[1]; $updateCount = (int)$m[1];
} }
@@ -68,7 +69,8 @@ SH;
$upgOutStr = (string)$upgOut; $upgOutStr = (string)$upgOut;
$upgErrStr = (string)$upgErr; $upgErrStr = (string)$upgErr;
$upgradeAvailable = null; $upgradeAvailable = null;
if ($upgExit === 0 && !str_contains($upgOutStr, '__ERR__')) { $upgradeErr = str_contains($upgOutStr, '__ERR__');
if ($upgExit === 0 && !$upgradeErr) {
if (preg_match('/^__UPGRADE__=(0|1)$/m', $upgOutStr, $m)) { if (preg_match('/^__UPGRADE__=(0|1)$/m', $upgOutStr, $m)) {
$upgradeAvailable = $m[1] === '1'; $upgradeAvailable = $m[1] === '1';
} }
@@ -77,9 +79,9 @@ SH;
$driver = (string)$pdo->getAttribute(PDO::ATTR_DRIVER_NAME); $driver = (string)$pdo->getAttribute(PDO::ATTR_DRIVER_NAME);
$nowExpr = $driver === 'pgsql' ? 'NOW()' : "DATETIME('now')"; $nowExpr = $driver === 'pgsql' ? 'NOW()' : "DATETIME('now')";
$updCountVal = $updateCount; $updCountVal = $updateCount;
$updErrVal = $updExit === 0 && !str_contains($updOutStr, '__ERR__') ? null : trim($updErrStr ?: $updOutStr); $updErrVal = $updExit === 0 && !$updateErr ? null : trim($updErrStr ?: $updOutStr);
$upgAvailVal = $upgradeAvailable; $upgAvailVal = $upgradeAvailable;
$upgErrVal = $upgExit === 0 && !str_contains($upgOutStr, '__ERR__') ? null : trim($upgErrStr ?: $upgOutStr); $upgErrVal = $upgExit === 0 && !$upgradeErr ? null : trim($upgErrStr ?: $upgOutStr);
$stmt = $pdo->prepare( $stmt = $pdo->prepare(
'UPDATE ' . $table('hosts') . ' SET update_checked_at = ' . $nowExpr . ', 'UPDATE ' . $table('hosts') . ' SET update_checked_at = ' . $nowExpr . ',
update_count = :update_count, update_count = :update_count,
@@ -106,12 +108,12 @@ SH;
'updates' => [ 'updates' => [
'count' => $updateCount, 'count' => $updateCount,
'preview' => $updatePreview, 'preview' => $updatePreview,
'error' => $updExit === 0 && !str_contains($updOutStr, '__ERR__') ? '' : trim($updErrStr ?: $updOutStr), 'error' => $updExit === 0 && !$updateErr ? '' : trim($updErrStr ?: $updOutStr),
], ],
'os' => [ 'os' => [
'available' => $upgradeAvailable, 'available' => $upgradeAvailable,
'raw' => $upgExit === 0 ? trim($upgOutStr) : '', 'raw' => $upgExit === 0 ? trim($upgOutStr) : '',
'error' => $upgExit === 0 && !str_contains($upgOutStr, '__ERR__') ? '' : trim($upgErrStr ?: $upgOutStr), 'error' => $upgExit === 0 && !$upgradeErr ? '' : trim($upgErrStr ?: $upgOutStr),
], ],
'checked_at' => date('c'), 'checked_at' => date('c'),
]); ]);

View File

@@ -14,10 +14,10 @@ $settings = modules()->settings($module);
$strictHostKey = !empty($settings['terminal_strict_hostkey']); $strictHostKey = !empty($settings['terminal_strict_hostkey']);
$updateCmd = <<<'SH' $updateCmd = <<<'SH'
sh -lc 'if ! command -v apt-get >/dev/null 2>&1; then echo "__ERR__NO_APT"; exit 2; fi; if sudo apt update -qq >/dev/null 2>&1; then count=$(apt-get -s dist-upgrade | grep -c "^Inst "); if [ "$count" -gt 0 ]; then echo "__UPDATE__=1"; else echo "__UPDATE__=0"; fi; echo "__COUNT__=$count"; else echo "__ERR__APT_UPDATE"; exit 3; fi' sh -lc 'if ! command -v apt-get >/dev/null 2>&1; then echo "__ERR__NO_APT"; exit 2; fi; if sudo -n apt update -qq >/dev/null 2>&1; then echo "__APT_UPDATE__=1"; else echo "__APT_UPDATE__=0"; fi; count=$(apt-get -s dist-upgrade 2>/dev/null | grep -c "^Inst "); echo "__COUNT__=$count"'
SH; SH;
$upgradeCmd = <<<'SH' $upgradeCmd = <<<'SH'
sh -lc 'id="$(. /etc/os-release 2>/dev/null && echo "${ID:-}")"; current="$(. /etc/os-release 2>/dev/null && echo "${VERSION_CODENAME:-}")"; if [ "$id" != "debian" ] || [ -z "$current" ]; then echo "__ERR__NO_CODENAME"; exit 2; fi; latest="$( (command -v curl >/dev/null 2>&1 && curl -fsSL https://deb.debian.org/debian/dists/stable/Release) || (command -v wget >/dev/null 2>&1 && wget -qO- https://deb.debian.org/debian/dists/stable/Release) )"; latest="$(printf "%s" "$latest" | awk -F": " "/^Codename:/{print $2}")"; if [ -z "$latest" ]; then echo "__ERR__NO_LATEST"; exit 3; fi; if [ "$current" != "$latest" ]; then echo "__UPGRADE__=1"; else echo "__UPGRADE__=0"; fi' sh -lc 'id="$(. /etc/os-release 2>/dev/null && echo "${ID:-}")"; current="$(. /etc/os-release 2>/dev/null && echo "${VERSION_CODENAME:-}")"; if [ "$id" != "debian" ] || [ -z "$current" ]; then echo "__UPGRADE__=0"; exit 0; fi; latest="$( (command -v curl >/dev/null 2>&1 && curl -fsSL https://deb.debian.org/debian/dists/stable/Release) || (command -v wget >/dev/null 2>&1 && wget -qO- https://deb.debian.org/debian/dists/stable/Release) )"; latest="$(printf "%s" "$latest" | awk -F": " "/^Codename:/{print $2}")"; if [ -z "$latest" ]; then echo "__UPGRADE__=0"; echo "__RAW__=NO_FETCH"; exit 0; fi; if [ "$current" != "$latest" ]; then echo "__UPGRADE__=1"; else echo "__UPGRADE__=0"; fi'
SH; SH;
$driver = (string)$pdo->getAttribute(PDO::ATTR_DRIVER_NAME); $driver = (string)$pdo->getAttribute(PDO::ATTR_DRIVER_NAME);
@@ -34,7 +34,8 @@ foreach ($hosts as $host) {
$updErrStr = (string)$updErr; $updErrStr = (string)$updErr;
$updateCount = null; $updateCount = null;
$updatePreview = ''; $updatePreview = '';
if ($updExit === 0 && !str_contains($updOutStr, '__ERR__')) { $updateErr = str_contains($updOutStr, '__ERR__NO_APT');
if ($updExit === 0 && !$updateErr) {
if (preg_match('/^__COUNT__=(\d+)$/m', $updOutStr, $m)) { if (preg_match('/^__COUNT__=(\d+)$/m', $updOutStr, $m)) {
$updateCount = (int)$m[1]; $updateCount = (int)$m[1];
} }
@@ -44,14 +45,15 @@ foreach ($hosts as $host) {
$upgOutStr = (string)$upgOut; $upgOutStr = (string)$upgOut;
$upgErrStr = (string)$upgErr; $upgErrStr = (string)$upgErr;
$upgradeAvailable = null; $upgradeAvailable = null;
if ($upgExit === 0 && !str_contains($upgOutStr, '__ERR__')) { $upgradeErr = str_contains($upgOutStr, '__ERR__');
if ($upgExit === 0 && !$upgradeErr) {
if (preg_match('/^__UPGRADE__=(0|1)$/m', $upgOutStr, $m)) { if (preg_match('/^__UPGRADE__=(0|1)$/m', $upgOutStr, $m)) {
$upgradeAvailable = $m[1] === '1'; $upgradeAvailable = $m[1] === '1';
} }
} }
$updErrVal = $updExit === 0 && !str_contains($updOutStr, '__ERR__') ? null : trim($updErrStr ?: $updOutStr); $updErrVal = $updExit === 0 && !$updateErr ? null : trim($updErrStr ?: $updOutStr);
$upgErrVal = $upgExit === 0 && !str_contains($upgOutStr, '__ERR__') ? null : trim($upgErrStr ?: $upgOutStr); $upgErrVal = $upgExit === 0 && !$upgradeErr ? null : trim($upgErrStr ?: $upgOutStr);
$stmt = $pdo->prepare( $stmt = $pdo->prepare(
'UPDATE ' . $table('hosts') . ' SET update_checked_at = ' . $nowExpr . ', 'UPDATE ' . $table('hosts') . ' SET update_checked_at = ' . $nowExpr . ',