feat(os): show full version number from /etc/debian_version
All checks were successful
Build and Release .deb / build-deb (push) Successful in 22s

- Use lsb_release -is/-cs for name and codename
- Use /etc/debian_version for full version (e.g. 12.9)
- Display format: 'Debian GNU/Linux 12.9 (bookworm)'
This commit is contained in:
enzo 2026-05-13 03:52:10 +02:00
parent 6e707da98d
commit 2d339cc397

View file

@ -137,25 +137,39 @@ def lxc_is_running(vmid: str) -> bool:
def scan_os(target: Target) -> str: def scan_os(target: Target) -> str:
"""Récupère le nom et la version de l'OS.""" """Récupère le nom, la version complète et le codename de l'OS."""
if target.is_host: prefix = [] if target.is_host else ["pct", "exec", target.target_id, "--"]
cmd = ["lsb_release", "-ds"]
else: # 1. Récupérer le nom (Debian, Ubuntu...)
cmd = ["pct", "exec", target.target_id, "--", "lsb_release", "-ds"] ok, name_out, _ = run_cmd(prefix + ["lsb_release", "-is"], timeout=30)
ok, stdout, _ = run_cmd(cmd, timeout=30) os_name = name_out.strip() if ok else ""
if ok:
return stdout.strip() # 2. Récupérer le codename (bookworm, trixie...)
# Fallback si lsb_release n'est pas installé ok, code_out, _ = run_cmd(prefix + ["lsb_release", "-cs"], timeout=30)
if target.is_host: codename = code_out.strip() if ok else ""
cmd = ["cat", "/etc/os-release"]
else: # 3. Récupérer la version complète depuis /etc/debian_version (ex: 12.9)
cmd = ["pct", "exec", target.target_id, "--", "cat", "/etc/os-release"] ok, ver_out, _ = run_cmd(prefix + ["cat", "/etc/debian_version"], timeout=30)
ok, stdout, _ = run_cmd(cmd, timeout=30) version = ver_out.strip() if ok else ""
if ok:
name = re.search(r'PRETTY_NAME="([^"]+)"', stdout) # 4. Fallback sur lsb_release -rs si /etc/debian_version vide
if name: if not version:
return name.group(1) ok, ver_out, _ = run_cmd(prefix + ["lsb_release", "-rs"], timeout=30)
return "OS inconnu" version = ver_out.strip() if ok else ""
# 5. Fallback sur /etc/os-release si tout le reste échoue
if not os_name or not version:
ok, osrel_out, _ = run_cmd(prefix + ["cat", "/etc/os-release"], timeout=30)
if ok:
pretty = re.search(r'PRETTY_NAME="([^"]+)"', osrel_out)
if pretty:
return pretty.group(1)
return "OS inconnu"
# Construire le libellé final
if codename:
return f"{os_name} GNU/Linux {version} ({codename})"
return f"{os_name} GNU/Linux {version}"
def ensure_debsecan_installed(is_host: bool, vmid: str = "") -> tuple[bool, str]: def ensure_debsecan_installed(is_host: bool, vmid: str = "") -> tuple[bool, str]: