From 0f64e2830a7c6c2b75df0200814c4a6fe54c2a90 Mon Sep 17 00:00:00 2001 From: Carter Li Date: Mon, 6 May 2024 16:46:27 +0800 Subject: [PATCH] OS (Linux): detect pve & armbian --- src/detection/os/os_linux.c | 34 ++++++++++++++++++++++++++++++++++ src/logo/builtin.c | 2 +- 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/src/detection/os/os_linux.c b/src/detection/os/os_linux.c index f0fc57346..716cc386d 100644 --- a/src/detection/os/os_linux.c +++ b/src/detection/os/os_linux.c @@ -2,6 +2,7 @@ #include "common/properties.h" #include "common/parsing.h" #include "common/io/io.h" +#include "common/processing.h" #include "util/stringUtils.h" #include @@ -142,6 +143,36 @@ static void getDebianVersion(FFOSResult* result) ffStrbufSet(&result->versionID, &debianVersion); } +static void detectDebianDerived(FFOSResult* result) +{ + if (ffStrbufStartsWithS(&result->prettyName, "Armbian ")) // Armbian 24.2.1 bookworm + { + ffStrbufSetS(&result->name, "Armbian"); + ffStrbufSetS(&result->id, "armbian"); + ffStrbufSetS(&result->idLike, "debian"); + ffStrbufClear(&result->versionID); + uint32_t versionStart = ffStrbufFirstIndexC(&result->prettyName, ' ') + 1; + uint32_t versionEnd = ffStrbufNextIndexC(&result->prettyName, versionStart, ' '); + ffStrbufSetNS(&result->versionID, versionEnd - versionStart, result->prettyName.chars + versionStart); + } + else if (ffPathExists("/usr/bin/pveversion", FF_PATHTYPE_FILE)) + { + ffStrbufSetS(&result->id, "pve"); + ffStrbufSetS(&result->idLike, "debian"); + ffStrbufSetS(&result->name, "Proxmox VE"); + ffStrbufClear(&result->versionID); + if (ffProcessAppendStdOut(&result->versionID, (char* const[]) { + "/usr/bin/pveversion", + NULL, + }) == NULL) // pve-manager/8.2.2/9355359cd7afbae4 (running kernel: 6.8.4-2-pve) + { + ffStrbufSubstrBeforeLastC(&result->versionID, '/'); + ffStrbufSubstrAfterFirstC(&result->versionID, '/'); + } + ffStrbufSetF(&result->prettyName, "Proxmox VE %s", result->versionID.chars); + } +} + static void detectOS(FFOSResult* os) { #ifdef FF_CUSTOM_OS_RELEASE_PATH @@ -195,5 +226,8 @@ void ffDetectOSImpl(FFOSResult* os) if(ffStrbufIgnCaseEqualS(&os->id, "ubuntu")) getUbuntuFlavour(os); else if(ffStrbufIgnCaseEqualS(&os->id, "debian")) + { + detectDebianDerived(os); getDebianVersion(os); + } } diff --git a/src/logo/builtin.c b/src/logo/builtin.c index d747e79df..51474d34d 100644 --- a/src/logo/builtin.c +++ b/src/logo/builtin.c @@ -3354,7 +3354,7 @@ static const FFlogo P[] = { }, // Proxmox { - .names = {"proxmox"}, + .names = {"Proxmox", "pve"}, .lines = FASTFETCH_DATATEXT_LOGO_PROXMOX, .colors = { FF_COLOR_FG_WHITE,