|
2 | 2 | #include "common/properties.h" |
3 | 3 | #include "common/parsing.h" |
4 | 4 | #include "common/io/io.h" |
| 5 | +#include "common/processing.h" |
5 | 6 | #include "util/stringUtils.h" |
6 | 7 |
|
7 | 8 | #include <string.h> |
@@ -142,6 +143,36 @@ static void getDebianVersion(FFOSResult* result) |
142 | 143 | ffStrbufSet(&result->versionID, &debianVersion); |
143 | 144 | } |
144 | 145 |
|
| 146 | +static void detectDebianDerived(FFOSResult* result) |
| 147 | +{ |
| 148 | + if (ffStrbufStartsWithS(&result->prettyName, "Armbian ")) // Armbian 24.2.1 bookworm |
| 149 | + { |
| 150 | + ffStrbufSetS(&result->name, "Armbian"); |
| 151 | + ffStrbufSetS(&result->id, "armbian"); |
| 152 | + ffStrbufSetS(&result->idLike, "debian"); |
| 153 | + ffStrbufClear(&result->versionID); |
| 154 | + uint32_t versionStart = ffStrbufFirstIndexC(&result->prettyName, ' ') + 1; |
| 155 | + uint32_t versionEnd = ffStrbufNextIndexC(&result->prettyName, versionStart, ' '); |
| 156 | + ffStrbufSetNS(&result->versionID, versionEnd - versionStart, result->prettyName.chars + versionStart); |
| 157 | + } |
| 158 | + else if (ffPathExists("/usr/bin/pveversion", FF_PATHTYPE_FILE)) |
| 159 | + { |
| 160 | + ffStrbufSetS(&result->id, "pve"); |
| 161 | + ffStrbufSetS(&result->idLike, "debian"); |
| 162 | + ffStrbufSetS(&result->name, "Proxmox VE"); |
| 163 | + ffStrbufClear(&result->versionID); |
| 164 | + if (ffProcessAppendStdOut(&result->versionID, (char* const[]) { |
| 165 | + "/usr/bin/pveversion", |
| 166 | + NULL, |
| 167 | + }) == NULL) // pve-manager/8.2.2/9355359cd7afbae4 (running kernel: 6.8.4-2-pve) |
| 168 | + { |
| 169 | + ffStrbufSubstrBeforeLastC(&result->versionID, '/'); |
| 170 | + ffStrbufSubstrAfterFirstC(&result->versionID, '/'); |
| 171 | + } |
| 172 | + ffStrbufSetF(&result->prettyName, "Proxmox VE %s", result->versionID.chars); |
| 173 | + } |
| 174 | +} |
| 175 | + |
145 | 176 | static void detectOS(FFOSResult* os) |
146 | 177 | { |
147 | 178 | #ifdef FF_CUSTOM_OS_RELEASE_PATH |
@@ -195,5 +226,8 @@ void ffDetectOSImpl(FFOSResult* os) |
195 | 226 | if(ffStrbufIgnCaseEqualS(&os->id, "ubuntu")) |
196 | 227 | getUbuntuFlavour(os); |
197 | 228 | else if(ffStrbufIgnCaseEqualS(&os->id, "debian")) |
| 229 | + { |
| 230 | + detectDebianDerived(os); |
198 | 231 | getDebianVersion(os); |
| 232 | + } |
199 | 233 | } |
0 commit comments