From bc43c262a8ed90d699ce4fff286a16b56fb7420b Mon Sep 17 00:00:00 2001 From: Atahan Kucuk Date: Fri, 22 May 2026 08:46:18 +0300 Subject: [PATCH] fix: make LXC banner OS detection dynamic via /etc/os-release (#14269) * fix: derive LXC banner OS from os-release Read os-release at login time for the generated LXC banner so OS display stays accurate after template changes or in-place upgrades. Prefer PRETTY_NAME with safe fallbacks to NAME, template defaults, and Unknown OS while preserving existing banner formatting. Co-authored-by: Cursor * refactor: simplify dynamic LXC banner OS resolution Reduce banner OS rendering to a minimal runtime os-release read with PRETTY_NAME/NAME fallbacks and Unknown OS default. Remove redundant OS rewrites from update_motd_ip now that OS display is resolved dynamically at login. Co-authored-by: Cursor --------- Co-authored-by: Cursor --- misc/alpine-install.func | 10 +++++++++- misc/build.func | 6 ------ misc/install.func | 10 +++++++++- 3 files changed, 18 insertions(+), 8 deletions(-) diff --git a/misc/alpine-install.func b/misc/alpine-install.func index c54a7d598..47935947f 100644 --- a/misc/alpine-install.func +++ b/misc/alpine-install.func @@ -182,11 +182,19 @@ motd_ssh() { echo "export TERM='xterm-256color'" >>/root/.bashrc PROFILE_FILE="/etc/profile.d/00_lxc-details.sh" + echo "echo -e \"\"" >"$PROFILE_FILE" echo -e "echo -e \"${BOLD}${APPLICATION} LXC Container${CL}"\" >>"$PROFILE_FILE" echo -e "echo -e \"${TAB}${GATEWAY}${YW} Provided by: ${GN}community-scripts ORG ${YW}| GitHub: ${GN}https://github.com/community-scripts/ProxmoxVE${CL}\"" >>"$PROFILE_FILE" echo "echo \"\"" >>"$PROFILE_FILE" - echo -e "echo -e \"${TAB}${OS}${YW} OS: ${GN}\$(grep ^NAME /etc/os-release | cut -d= -f2 | tr -d '\"') - Version: \$(grep ^VERSION_ID /etc/os-release | cut -d= -f2 | tr -d '\"')${CL}\"" >>"$PROFILE_FILE" + cat <>"$PROFILE_FILE" +os_display="Unknown OS" +if [ -r /etc/os-release ]; then + . /etc/os-release + os_display="\${PRETTY_NAME:-\${NAME:-Unknown OS}}" +fi +echo -e "${TAB}${OS}${YW} OS: ${GN}\${os_display}${CL}" +EOF echo -e "echo -e \"${TAB}${HOSTNAME}${YW} Hostname: ${GN}\$(hostname)${CL}\"" >>"$PROFILE_FILE" echo -e "echo -e \"${TAB}${INFO}${YW} IP Address: ${GN}\$(ip -4 addr show eth0 | awk '/inet / {print \$2}' | cut -d/ -f1 | head -n 1)${CL}\"" >>"$PROFILE_FILE" diff --git a/misc/build.func b/misc/build.func index 45e9e2745..890f6974c 100644 --- a/misc/build.func +++ b/misc/build.func @@ -217,22 +217,16 @@ update_motd_ip() { # Only update if file exists and is from community-scripts if [ -f "$PROFILE_FILE" ] && grep -q "community-scripts" "$PROFILE_FILE" 2>/dev/null; then # Get current values - local current_os="$(grep ^NAME /etc/os-release | cut -d= -f2 | tr -d '"') - Version: $(grep ^VERSION_ID /etc/os-release | cut -d= -f2 | tr -d '"')" local current_hostname="$(hostname)" local current_ip="$(hostname -I | awk '{print $1}')" # Escape sed special chars in replacement strings (& \ |) - current_os="${current_os//\\/\\\\}" - current_os="${current_os//&/\\&}" current_hostname="${current_hostname//\\/\\\\}" current_hostname="${current_hostname//&/\\&}" current_ip="${current_ip//\\/\\\\}" current_ip="${current_ip//&/\\&}" # Update only if values actually changed - if ! grep -q "OS:.*$current_os" "$PROFILE_FILE" 2>/dev/null; then - sed -i "s|OS:.*|OS: \${GN}$current_os\${CL}\\\"|" "$PROFILE_FILE" - fi if ! grep -q "Hostname:.*$current_hostname" "$PROFILE_FILE" 2>/dev/null; then sed -i "s|Hostname:.*|Hostname: \${GN}$current_hostname\${CL}\\\"|" "$PROFILE_FILE" fi diff --git a/misc/install.func b/misc/install.func index a1a1e0ff3..baeac2d76 100644 --- a/misc/install.func +++ b/misc/install.func @@ -455,11 +455,19 @@ motd_ssh() { grep -qxF "export TERM='xterm-256color'" /root/.bashrc || echo "export TERM='xterm-256color'" >>/root/.bashrc PROFILE_FILE="/etc/profile.d/00_lxc-details.sh" + echo "echo -e \"\"" >"$PROFILE_FILE" echo -e "echo -e \"${BOLD}${APPLICATION} LXC Container${CL}"\" >>"$PROFILE_FILE" echo -e "echo -e \"${TAB}${GATEWAY}${YW} Provided by: ${GN}community-scripts ORG ${YW}| GitHub: ${GN}https://github.com/community-scripts/ProxmoxVE${CL}\"" >>"$PROFILE_FILE" echo "echo \"\"" >>"$PROFILE_FILE" - echo -e "echo -e \"${TAB}${OS}${YW} OS: ${GN}\$(grep ^NAME /etc/os-release | cut -d= -f2 | tr -d '\"') - Version: \$(grep ^VERSION_ID /etc/os-release | cut -d= -f2 | tr -d '\"')${CL}\"" >>"$PROFILE_FILE" + cat <>"$PROFILE_FILE" +os_display="Unknown OS" +if [ -r /etc/os-release ]; then + . /etc/os-release + os_display="\${PRETTY_NAME:-\${NAME:-Unknown OS}}" +fi +echo -e "${TAB}${OS}${YW} OS: ${GN}\${os_display}${CL}" +EOF echo -e "echo -e \"${TAB}${HOSTNAME}${YW} Hostname: ${GN}\$(hostname)${CL}\"" >>"$PROFILE_FILE" echo -e "echo -e \"${TAB}${INFO}${YW} IP Address: ${GN}\$(hostname -I | awk '{print \$1}')${CL}\"" >>"$PROFILE_FILE"