assa
This commit is contained in:
@@ -13,8 +13,8 @@ $table = fn(string $name) => module_fn($module, 'table', $name);
|
||||
$settings = modules()->settings($module);
|
||||
$strictHostKey = !empty($settings['terminal_strict_hostkey']);
|
||||
|
||||
$updateCmd = "apt-get -s upgrade | grep '^Inst'";
|
||||
$upgradeCmd = 'current="$(. /etc/os-release && echo "$VERSION_CODENAME")"; latest="$(curl -fsSL https://deb.debian.org/debian/dists/stable/Release | awk -F\': \' \'/^Codename:/{print $2}\')"; echo "Installed: $current"; echo "Latest stable: $latest"; [ "$current" != "$latest" ] && echo "OS UPGRADE AVAILABLE" || echo "NO OS UPGRADE AVAILABLE"';
|
||||
$updateCmd = "sh -lc 'if ! command -v apt-get >/dev/null 2>&1; then echo \"__ERR__NO_APT\"; exit 2; fi; apt-get -s upgrade 2>/dev/null | grep \"^Inst \" || true'";
|
||||
$upgradeCmd = "sh -lc 'current=\"$(. /etc/os-release 2>/dev/null && echo \"$VERSION_CODENAME\")\"; if [ -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; exit}\")\"; if [ -z \"$latest\" ]; then echo \"__ERR__NO_LATEST\"; exit 3; fi; echo \"__CURRENT__=$current\"; echo \"__LATEST__=$latest\"; if [ \"$current\" != \"$latest\" ]; then echo \"__UPGRADE__=1\"; else echo \"__UPGRADE__=0\"; fi'";
|
||||
|
||||
$driver = (string)$pdo->getAttribute(PDO::ATTR_DRIVER_NAME);
|
||||
$nowExpr = $driver === 'pgsql' ? 'NOW()' : "DATETIME('now')";
|
||||
@@ -26,18 +26,28 @@ foreach ($hosts as $host) {
|
||||
if ($id <= 0) continue;
|
||||
|
||||
[$updExit, $updOut, $updErr] = runSshCommandCapture($host, $updateCmd, $strictHostKey, 20);
|
||||
$lines = array_values(array_filter(preg_split('/\r?\n/', (string)$updOut)));
|
||||
$updateCount = $updExit === 0 ? count($lines) : null;
|
||||
$updatePreview = $updateCount ? implode("\n", array_slice($lines, 0, 6)) : '';
|
||||
|
||||
[$upgExit, $upgOut, $upgErr] = runSshCommandCapture($host, $upgradeCmd, $strictHostKey, 25);
|
||||
$upgradeAvailable = null;
|
||||
if ($upgExit === 0) {
|
||||
$upgradeAvailable = str_contains($upgOut, 'OS UPGRADE AVAILABLE');
|
||||
$updOutStr = (string)$updOut;
|
||||
$updErrStr = (string)$updErr;
|
||||
$updateCount = null;
|
||||
$updatePreview = '';
|
||||
if ($updExit === 0 && !str_contains($updOutStr, '__ERR__')) {
|
||||
$lines = array_values(array_filter(preg_split('/\r?\n/', $updOutStr)));
|
||||
$updateCount = count($lines);
|
||||
$updatePreview = $updateCount ? implode("\n", array_slice($lines, 0, 6)) : '';
|
||||
}
|
||||
|
||||
$updErrVal = $updExit === 0 ? null : trim($updErr ?: $updOut);
|
||||
$upgErrVal = $upgExit === 0 ? null : trim($upgErr ?: $upgOut);
|
||||
[$upgExit, $upgOut, $upgErr] = runSshCommandCapture($host, $upgradeCmd, $strictHostKey, 25);
|
||||
$upgOutStr = (string)$upgOut;
|
||||
$upgErrStr = (string)$upgErr;
|
||||
$upgradeAvailable = null;
|
||||
if ($upgExit === 0 && !str_contains($upgOutStr, '__ERR__')) {
|
||||
if (preg_match('/^__UPGRADE__=(0|1)$/m', $upgOutStr, $m)) {
|
||||
$upgradeAvailable = $m[1] === '1';
|
||||
}
|
||||
}
|
||||
|
||||
$updErrVal = $updExit === 0 && !str_contains($updOutStr, '__ERR__') ? null : trim($updErrStr ?: $updOutStr);
|
||||
$upgErrVal = $upgExit === 0 && !str_contains($upgOutStr, '__ERR__') ? null : trim($upgErrStr ?: $upgOutStr);
|
||||
|
||||
$stmt = $pdo->prepare(
|
||||
'UPDATE ' . $table('hosts') . ' SET update_checked_at = ' . $nowExpr . ',
|
||||
@@ -54,7 +64,7 @@ foreach ($hosts as $host) {
|
||||
'update_preview' => $updatePreview !== '' ? $updatePreview : null,
|
||||
'update_error' => $updErrVal,
|
||||
'upgrade_available' => $upgradeAvailable === null ? null : ($upgradeAvailable ? 1 : 0),
|
||||
'upgrade_raw' => $upgExit === 0 ? trim($upgOut) : null,
|
||||
'upgrade_raw' => $upgExit === 0 ? trim($upgOutStr) : null,
|
||||
'upgrade_error' => $upgErrVal,
|
||||
'id' => $id,
|
||||
]);
|
||||
|
||||
Reference in New Issue
Block a user