fix(os): use VERSION_ID from /etc/os-release for full version number in LXC
All checks were successful
Build and Release .deb / build-deb (push) Successful in 21s

This commit is contained in:
enzo 2026-05-13 03:59:47 +02:00
parent 2d339cc397
commit d90f74dd8f

View file

@ -140,36 +140,45 @@ def scan_os(target: Target) -> str:
"""Récupère le nom, la version complète et le codename de l'OS.""" """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, "--"] prefix = [] if target.is_host else ["pct", "exec", target.target_id, "--"]
# 1. Récupérer le nom (Debian, Ubuntu...) # 1. Lire /etc/os-release pour VERSION_ID (ex: 12.9) et PRETTY_NAME
ok, name_out, _ = run_cmd(prefix + ["lsb_release", "-is"], timeout=30) ok, osrel_out, _ = run_cmd(prefix + ["cat", "/etc/os-release"], timeout=30)
os_name = name_out.strip() if ok else "" version_id = ""
pretty_name = ""
if ok:
ver_match = re.search(r'VERSION_ID="([^"]+)"', osrel_out)
if ver_match:
version_id = ver_match.group(1)
pretty_match = re.search(r'PRETTY_NAME="([^"]+)"', osrel_out)
if pretty_match:
pretty_name = pretty_match.group(1)
# 2. Récupérer le codename (bookworm, trixie...) # 2. Récupérer le codename via lsb_release
ok, code_out, _ = run_cmd(prefix + ["lsb_release", "-cs"], timeout=30) ok, code_out, _ = run_cmd(prefix + ["lsb_release", "-cs"], timeout=30)
codename = code_out.strip() if ok else "" codename = code_out.strip() if ok else ""
# 3. Récupérer la version complète depuis /etc/debian_version (ex: 12.9) # 3. Fallback sur /etc/debian_version si VERSION_ID vide
ok, ver_out, _ = run_cmd(prefix + ["cat", "/etc/debian_version"], timeout=30) if not version_id:
version = ver_out.strip() if ok else "" ok, ver_out, _ = run_cmd(prefix + ["cat", "/etc/debian_version"], timeout=30)
version_id = ver_out.strip() if ok else ""
# 4. Fallback sur lsb_release -rs si /etc/debian_version vide # 4. Fallback sur lsb_release -rs
if not version: if not version_id:
ok, ver_out, _ = run_cmd(prefix + ["lsb_release", "-rs"], timeout=30) ok, ver_out, _ = run_cmd(prefix + ["lsb_release", "-rs"], timeout=30)
version = ver_out.strip() if ok else "" version_id = ver_out.strip() if ok else ""
# 5. Fallback sur /etc/os-release si tout le reste échoue # 5. Récupérer le nom via lsb_release
if not os_name or not version: ok, name_out, _ = run_cmd(prefix + ["lsb_release", "-is"], timeout=30)
ok, osrel_out, _ = run_cmd(prefix + ["cat", "/etc/os-release"], timeout=30) os_name = name_out.strip() if ok else ""
if ok:
pretty = re.search(r'PRETTY_NAME="([^"]+)"', osrel_out) if not os_name and pretty_name:
if pretty: return pretty_name
return pretty.group(1) if not os_name or not version_id:
return "OS inconnu" return pretty_name if pretty_name else "OS inconnu"
# Construire le libellé final # Construire le libellé final
if codename: if codename:
return f"{os_name} GNU/Linux {version} ({codename})" return f"{os_name} GNU/Linux {version_id} ({codename})"
return f"{os_name} GNU/Linux {version}" return f"{os_name} GNU/Linux {version_id}"
def ensure_debsecan_installed(is_host: bool, vmid: str = "") -> tuple[bool, str]: def ensure_debsecan_installed(is_host: bool, vmid: str = "") -> tuple[bool, str]: