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:
"""Récupère le nom et la version de l'OS."""
if target.is_host:
cmd = ["lsb_release", "-ds"]
else:
cmd = ["pct", "exec", target.target_id, "--", "lsb_release", "-ds"]
ok, stdout, _ = run_cmd(cmd, timeout=30)
if ok:
return stdout.strip()
# Fallback si lsb_release n'est pas installé
if target.is_host:
cmd = ["cat", "/etc/os-release"]
else:
cmd = ["pct", "exec", target.target_id, "--", "cat", "/etc/os-release"]
ok, stdout, _ = run_cmd(cmd, timeout=30)
if ok:
name = re.search(r'PRETTY_NAME="([^"]+)"', stdout)
if name:
return name.group(1)
return "OS inconnu"
"""Récupère le nom, la version complète et le codename de l'OS."""
prefix = [] if target.is_host else ["pct", "exec", target.target_id, "--"]
# 1. Récupérer le nom (Debian, Ubuntu...)
ok, name_out, _ = run_cmd(prefix + ["lsb_release", "-is"], timeout=30)
os_name = name_out.strip() if ok else ""
# 2. Récupérer le codename (bookworm, trixie...)
ok, code_out, _ = run_cmd(prefix + ["lsb_release", "-cs"], timeout=30)
codename = code_out.strip() if ok else ""
# 3. Récupérer la version complète depuis /etc/debian_version (ex: 12.9)
ok, ver_out, _ = run_cmd(prefix + ["cat", "/etc/debian_version"], timeout=30)
version = ver_out.strip() if ok else ""
# 4. Fallback sur lsb_release -rs si /etc/debian_version vide
if not version:
ok, ver_out, _ = run_cmd(prefix + ["lsb_release", "-rs"], timeout=30)
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]: