ver_linux: check /usr/lib/os-release in case /etc/os-release not exists
PATCH 1/1 ver_linux: check /usr/lib/os-release in case /etc/os-release not exists
https://www.linux.org/docs/man5/os-release.html:
"The file /etc/os-release takes precedence over /usr/lib/os-release. Applications should check for the former, and exclusively use its data if it exists, and only fall back to /usr/lib/os-release if it is missing. Applications should not read data from both files at the same time. /usr/lib/os-release is the recommended place to store OS release information as part of vendor trees. /etc/os-release should be a relative symlink to /usr/lib/os-release, to provide compatibility with applications only looking at /etc. A relative symlink instead of an absolute symlink is necessary to avoid breaking the link in a chroot or initrd environment such as dracut."
To be compatible with some distro which don't have the soft link "/etc/os-release", check "/usr/lib/os-release" first before checking "/etc/issue".
--- ver_linux | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-)
ver_linux +5 -1
@@ -9,8 +9,12 @@ echo 'If some fields are empty or look unusual you may have an old version.' echo 'Compare to the current minimal requirements in Documentation/Changes.' echo -echo "`ls /etc/*release`" +echo "`ls /etc/*release 2> /dev/null`" cat /etc/*release 2> /dev/null +if [ $? = 1 ]; then + echo "`ls /usr/lib/*release 2> /dev/null`" + cat /usr/lib/*release 2> /dev/null +fi if [ $? = 1 ]; then echo '/etc/issue:' cat /etc/issue 2> /dev/null
Signature · 1 line
2.17.1
PATCH 1/1 ver_linux: check /usr/lib/os-release in case /etc/os-release not exists
Hi Yixin,
Quoted 29 lines
https://www.linux.org/docs/man5/os-release.html:
"The file/etc/os-releasetakes precedence over/usr/lib/os-release. Applications should check for the former, and exclusively use its data if it exists, and only fall back to/usr/lib/os-releaseif it is missing. Applications should not read data from both files at the same time./usr/lib/os-releaseis the recommended place to store OS release information as part of vendor trees./etc/os-releaseshould be a relative symlink to/usr/lib/os-release, to provide compatibility with applications only looking at /etc. A relative symlink instead of an absolute symlink is necessary to avoid breaking the link in a chroot or initrd environment such as dracut."To be compatible with some distro which don't have the soft link "
/etc/os-release", check "/usr/lib/os-release" first before checking "/etc/issue".Signed-off-by Yixin Zhang <[email protected]>--- ver_linux | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-)ver_linux +0
-0@@ -9,8 +9,12 @@ echo 'If some fields are empty or look unusual you may have an old version.' echo 'Compare to the current minimal requirements in Documentation/Changes.' echo
ver_linux echo 'If some fields are empty or look unusual you may have an old version.' · line 20
Quoted 10 lines
ver_linux +5
-1-echo "`ls /etc/*release`" +echo "`ls /etc/*release 2> /dev/null`" cat /etc/*release 2> /dev/null +if [ $? = 1 ]; then + echo "`ls /usr/lib/*release 2> /dev/null`" + cat /usr/lib/*release 2> /dev/null +fi if [ $? = 1 ]; then echo '/etc/issue:' cat /etc/issue 2> /dev/null
How about, instead of repeating files with cat, find the file and then work with it? Something like this:
f="$(ls /etc/*release 2>/dev/null)"
[ -f "$f" ] || f="$(ls /usr/lib/*release 2>/dev/null)" [ -f "$f" ] || f="$(ls /etc/issue 2>/dev/null)" if [ -f "$f" ]; then echo "$f:" cat $f
fi
We could also run `lsb_release -a' (if available).
Kind regards,
Petr
Zhang
PATCH 1/1 ver_linux: check /usr/lib/os-release in case /etc/os-release not exists
Hi Petr,
Quoted 46 lines · Petr Vorel
Hi Yixin,
Quoted 29 lines
https://www.linux.org/docs/man5/os-release.html:
"The file/etc/os-releasetakes precedence over/usr/lib/os-release. Applications should check for the former, and exclusively use its data if it exists, and only fall back to/usr/lib/os-releaseif it is missing. Applications should not read data from both files at the same time./usr/lib/os-releaseis the recommended place to store OS release information as part of vendor trees./etc/os-releaseshould be a relative symlink to/usr/lib/os-release, to provide compatibility with applications only looking at /etc. A relative symlink instead of an absolute symlink is necessary to avoid breaking the link in a chroot or initrd environment such as dracut."To be compatible with some distro which don't have the soft link "
/etc/os-release", check "/usr/lib/os-release" first before checking "/etc/issue".Signed-off-by Yixin Zhang <[email protected]>--- ver_linux | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-)ver_linux +0
-0@@ -9,8 +9,12 @@ echo 'If some fields are empty or look unusual you may have an old version.' echo 'Compare to the current minimal requirements in Documentation/Changes.' echover_linux echo 'If some fields are empty or look unusual you may have an old version.' · line 20
Quoted 10 lines
ver_linux +5
-1-echo "`ls /etc/*release`" +echo "`ls /etc/*release 2> /dev/null`" cat /etc/*release 2> /dev/null +if [ $? = 1 ]; then + echo "`ls /usr/lib/*release 2> /dev/null`" + cat /usr/lib/*release 2> /dev/null +fi if [ $? = 1 ]; then echo '/etc/issue:' cat /etc/issue 2> /dev/nullHow about, instead of repeating files with cat, find the file and then work with it? Something like this:
f="$(ls
/etc/*release2>/dev/null)"
Quoted 8 lines
[ -f "$f" ] || f="$(ls /usr/lib/*release 2>/dev/null)" [ -f "$f" ] || f="$(ls /etc/issue 2>/dev/null)" if [ -f "$f" ]; then echo "$f:" cat $ffi
We could also run `lsb_release -a' (if available).
In most case, /etc/*release includes both os-release and lsb-release and sometimes other -release file, so the $f will be an array for most of the time. We cannot just test it with -f (maybe a extra for loop is needed). My inital plan is fall back to /usr/lib/ if none of the /etc/*-release exists. This is the case on Clear Linux, and it's tested on both Ubuntu and Clear Linux.
Yixin
Quoted 4 lines
Kind regards,
Petr
PATCH 1/1 ver_linux: check /usr/lib/os-release in case /etc/os-release not exists
In reply to Yixin ZhangHi!
Applied, thanks.
Signature · 2 lines
Cyril Hrubis [email protected]