Bug#913733: os-prober: parsing for os-release is not implemented and has a bug for lsb-release
Package: os-prober
Version: 1.76~deb9u1
Severity: normal
Tags: patch
Dear Maintainer,
I have changed 40lsb script and added a script for /etc/os-release:
operating system identification
https://www.freedesktop.org/software/systemd/man/os-release.html
For /etc/os-release:
/dev/sda1:Debian GNU/Linux 9 (stretch):debian:linux
For /etc/lsb-release:
Before /dev/sda1:Debian GNU/Linux 9 (9):debian:linux
After /dev/sda1:Debian GNU/Linux 9 (stretch):debian:linux
40lsb uses DISTRIB_RELEASE instead of DISTRIB_CODENAME
Test files.
/etc/os-release:
PRETTY_NAME="Debian GNU/Linux 9 (stretch)"
NAME="Debian GNU/Linux"
VERSION_ID="9"
VERSION="9 (stretch)"
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
/etc/lsb-release:
DISTRIB_ID=debian
DISTRIB_RELEASE=9
DISTRIB_CODENAME=stretch
DISTRIB_DESCRIPTION="Debian GNU/Linux 9"
Patch descriptions.
For 40lsb:
long = DISTRIB_DESCRIPTION ? DISTRIB_DESCRIPTION : DISTRIB_ID + DISTRIB_RELEASE
short = DISTRIB_ID
For 35os-release (there are several possible fields for an extension):
long = PRETTY_NAME ? PRETTY_NAME : NAME + VERSION
Patches:
diff --git a/os-probes/mounted/common/35os-release
b/os-probes/mounted/common/35os-release
new file mode 100755
index 0000000..9e3b5d3
--- /dev/null
+++ b/os-probes/mounted/common/35os-release
@@ -0,0 +1,44 @@
+#!/bin/sh
+# Test for Linux distributions
+set -e
+
+. /usr/share/os-prober/common.sh
+
+partition="$1"
+dir="$2"
+type="$3"
+
+os_field () {
+ file="$1"
+ field="$2"
+ grep ^"$field=" "$file" | cut -d = -f 2 | sed 's/^"//' | sed
's/"$//' | sed 's/:/ /g'
+}
+
+file="$dir/etc/os-release"
+if [ ! -e "$file" ]; then
+ exit 1
+fi
+
+long=$(os_field "$file" PRETTY_NAME)
+if [ -z "$long" ]; then
+ name=$(os_field "$file" NAME)
+ if [ -z "$name" ]; then
+ exit 1
+ fi
+
+ version=$(os_field "$file" VERSION)
+ if [ -n "$version" ]; then
+ long="$name $version"
+ else
+ long="$name"
+ fi
+fi
+
+short=$(os_field "$file" ID | sed 's/ //g')
+if [ -z "$short" ]; then
+ short="linux"
+fi
+
+label="$(count_next_label "$short")"
+result "$partition:$long:$label:linux"
+exit 0
diff --git a/os-probes/mounted/common/40lsb b/os-probes/mounted/common/40lsb
index ce8d4e1..52b5046 100755
--- a/os-probes/mounted/common/40lsb
+++ b/os-probes/mounted/common/40lsb
@@ -11,7 +11,7 @@ type="$3"
lsb_field () {
file="$1"
field="$2"
- grep ^"$field" "$file" | cut -d = -f 2 | sed 's/^"//' | sed 's/"$//'
| sed 's/:/ /g'
+ grep ^"$field=" "$file" | cut -d = -f 2 | sed 's/^"//' | sed
's/"$//' | sed 's/:/ /g'
}
file="$dir/etc/lsb-release"
@@ -19,23 +19,24 @@ if [ ! -e "$file" ]; then
exit 1
fi
-release=$(lsb_field "$file" DISTRIB_RELEASE)
-if [ -z "$release" ]; then
- release=$(lsb_field "$file" DISTRIB_CODENAME)
-fi
-description=$(lsb_field "$file" DISTRIB_DESCRIPTION)
-if [ -z "$description" ]; then
- description=$(lsb_field "$file" DISTRIB_CODENAME)
-fi
+long=$(lsb_field "$file" DISTRIB_DESCRIPTION)
+if [ -z "$long" ]; then
+ name=$(lsb_field "$file" DISTRIB_ID)
+ if [ -z "$name" ]; then
+ exit 1
+ fi
-if [ -n "$description" ]; then
- if [ -n "$release" ]; then
- long="$description ($release)"
+ version=$(lsb_field "$file" DISTRIB_RELEASE)
+ if [ -n "$version" ]; then
+ long="$name $version"
else
- long="$description"
+ long="$name"
fi
-else
- exit 1
+fi
+
+codename=$(lsb_field "$file" DISTRIB_CODENAME)
+if [ -n "$codename" ]; then
+ long="$long ($codename)"
fi
short=$(lsb_field "$file" DISTRIB_ID | sed 's/ //g')
-- System Information:
Debian Release: 9.6
APT prefers stable-updates
APT policy: (500, 'stable-updates'), (500, 'stable')
Architecture: amd64 (x86_64)
Kernel: Linux 4.9.0-7-amd64 (SMP w/4 CPU cores)
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8), LANGUAGE=en_US.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Init: systemd (via /run/systemd/system)
Versions of packages os-prober depends on:
ii grub-common 2.02~beta3-5+deb9u1
ii libc6 2.24-11+deb9u3
os-prober recommends no packages.
os-prober suggests no packages.
-- no debconf information
diff --git a/os-probes/mounted/common/35os-release b/os-probes/mounted/common/35os-release
new file mode 100755
index 0000000..9e3b5d3
--- /dev/null
+++ b/os-probes/mounted/common/35os-release
@@ -0,0 +1,44 @@
+#!/bin/sh
+# Test for Linux distributions
+set -e
+
+. /usr/share/os-prober/common.sh
+
+partition="$1"
+dir="$2"
+type="$3"
+
+os_field () {
+ file="$1"
+ field="$2"
+ grep ^"$field=" "$file" | cut -d = -f 2 | sed 's/^"//' | sed 's/"$//' | sed 's/:/ /g'
+}
+
+file="$dir/etc/os-release"
+if [ ! -e "$file" ]; then
+ exit 1
+fi
+
+long=$(os_field "$file" PRETTY_NAME)
+if [ -z "$long" ]; then
+ name=$(os_field "$file" NAME)
+ if [ -z "$name" ]; then
+ exit 1
+ fi
+
+ version=$(os_field "$file" VERSION)
+ if [ -n "$version" ]; then
+ long="$name $version"
+ else
+ long="$name"
+ fi
+fi
+
+short=$(os_field "$file" ID | sed 's/ //g')
+if [ -z "$short" ]; then
+ short="linux"
+fi
+
+label="$(count_next_label "$short")"
+result "$partition:$long:$label:linux"
+exit 0
diff --git a/os-probes/mounted/common/40lsb b/os-probes/mounted/common/40lsb
index ce8d4e1..52b5046 100755
--- a/os-probes/mounted/common/40lsb
+++ b/os-probes/mounted/common/40lsb
@@ -11,7 +11,7 @@ type="$3"
lsb_field () {
file="$1"
field="$2"
- grep ^"$field" "$file" | cut -d = -f 2 | sed 's/^"//' | sed 's/"$//' | sed 's/:/ /g'
+ grep ^"$field=" "$file" | cut -d = -f 2 | sed 's/^"//' | sed 's/"$//' | sed 's/:/ /g'
}
file="$dir/etc/lsb-release"
@@ -19,23 +19,24 @@ if [ ! -e "$file" ]; then
exit 1
fi
-release=$(lsb_field "$file" DISTRIB_RELEASE)
-if [ -z "$release" ]; then
- release=$(lsb_field "$file" DISTRIB_CODENAME)
-fi
-description=$(lsb_field "$file" DISTRIB_DESCRIPTION)
-if [ -z "$description" ]; then
- description=$(lsb_field "$file" DISTRIB_CODENAME)
-fi
+long=$(lsb_field "$file" DISTRIB_DESCRIPTION)
+if [ -z "$long" ]; then
+ name=$(lsb_field "$file" DISTRIB_ID)
+ if [ -z "$name" ]; then
+ exit 1
+ fi
-if [ -n "$description" ]; then
- if [ -n "$release" ]; then
- long="$description ($release)"
+ version=$(lsb_field "$file" DISTRIB_RELEASE)
+ if [ -n "$version" ]; then
+ long="$name $version"
else
- long="$description"
+ long="$name"
fi
-else
- exit 1
+fi
+
+codename=$(lsb_field "$file" DISTRIB_CODENAME)
+if [ -n "$codename" ]; then
+ long="$long ($codename)"
fi
short=$(lsb_field "$file" DISTRIB_ID | sed 's/ //g')
Reply to: