Commit 5f23ec17 authored by Vitaly Lipatov's avatar Vitaly Lipatov

distr_info: big OS detection rewrite (based on /etc/os-release)

parent daa3254a
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
# You can set ROOTDIR to root system dir # You can set ROOTDIR to root system dir
#ROOTDIR= #ROOTDIR=
PROGVERSION="20220713" PROGVERSION="20220718"
# TODO: check /etc/system-release # TODO: check /etc/system-release
...@@ -240,7 +240,7 @@ normalize_name() ...@@ -240,7 +240,7 @@ normalize_name()
;; ;;
*) *)
#echo "${1// /}" #echo "${1// /}"
echo "$1" | sed -e "s/ //g" firstupper "$1" | sed -e "s/ //g" -e 's|(.*||'
;; ;;
esac esac
} }
...@@ -253,7 +253,7 @@ DISTRIB_ID="" ...@@ -253,7 +253,7 @@ DISTRIB_ID=""
DISTRIB_RELEASE="" DISTRIB_RELEASE=""
DISTRIB_CODENAME="" DISTRIB_CODENAME=""
# Next default by /etc/os-release # Default detection by /etc/os-release
# https://www.freedesktop.org/software/systemd/man/os-release.html # https://www.freedesktop.org/software/systemd/man/os-release.html
if distro os-release ; then if distro os-release ; then
# shellcheck disable=SC1090 # shellcheck disable=SC1090
...@@ -266,7 +266,8 @@ if distro os-release ; then ...@@ -266,7 +266,8 @@ if distro os-release ; then
#PRETTY_NAME #PRETTY_NAME
VENDOR_ID="$ID" VENDOR_ID="$ID"
DISTRIB_FULL_RELEASE=$DISTRIB_RELEASE DISTRIB_FULL_RELEASE=$DISTRIB_RELEASE
DISTRIB_RELEASE=$(echo $DISTRIB_RELEASE | sed -e "s/\.[0-9]$//g") DISTRIB_RELEASE=$(echo "$DISTRIB_RELEASE" | sed -e "s/\.[0-9]$//g")
elif distro lsb-release ; then elif distro lsb-release ; then
DISTRIB_ID=$(cat $DISTROFILE | get_var DISTRIB_ID) DISTRIB_ID=$(cat $DISTROFILE | get_var DISTRIB_ID)
DISTRIB_RELEASE=$(cat $DISTROFILE | get_var DISTRIB_RELEASE) DISTRIB_RELEASE=$(cat $DISTROFILE | get_var DISTRIB_RELEASE)
...@@ -274,10 +275,56 @@ elif distro lsb-release ; then ...@@ -274,10 +275,56 @@ elif distro lsb-release ; then
PRETTY_NAME=$(cat $DISTROFILE | get_var DISTRIB_DESCRIPTION) PRETTY_NAME=$(cat $DISTROFILE | get_var DISTRIB_DESCRIPTION)
fi fi
# TODO:
#if [ -n "$DISTRIB_ID" ] ; then case "$VENDOR_ID" in
# # don't check obsoleted ways "alt"|"altlinux")
# ; case "$DISTRIB_ID" in
"ALTServer"|"ALTSPWorkstation"|"Sisyphus")
;;
*)
DISTRIB_ID="ALTLinux"
;;
esac
;;
"astra")
DISTRIB_RELEASE="$VERSION_CODENAME"
;;
esac
case "$DISTRIB_ID" in
"ALTLinux")
echo "$VERSION" | grep -q "c9f.* branch" && DISTRIB_RELEASE="c9"
# FIXME: fast hack for fallback: 10 -> p10 for /etc/os-release
if echo "$DISTRIB_RELEASE" | grep -q "^[0-9]" && echo "$DISTRIB_RELEASE" | grep -q -v "[0-9][0-9][0-9]" ; then
DISTRIB_RELEASE="$(echo p$DISTRIB_RELEASE | sed -e 's|\..*||')"
fi
;;
# "ALTServer")
# DISTRIB_RELEASE=$(echo $DISTRIB_RELEASE | sed -e "s/\..*//g")
# ;;
"ALTSPWorkstation")
DISTRIB_ID="ALTLinux"
case "$DISTRIB_FULL_RELEASE" in
8.0|8.1)
;;
8.*)
DISTRIB_RELEASE="c9"
;;
esac
# DISTRIB_RELEASE=$(echo $DISTRIB_RELEASE | sed -e "s/\..*//g")
;;
"Sisyphus")
DISTRIB_ID="ALTLinux"
DISTRIB_RELEASE="Sisyphus"
;;
esac
[ -n "$DISTRIB_ID" ] && return
# check via obsoleted ways
# ALT Linux based # ALT Linux based
if distro altlinux-release ; then if distro altlinux-release ; then
DISTRIB_ID="ALTLinux" DISTRIB_ID="ALTLinux"
...@@ -325,30 +372,10 @@ elif distro gentoo-release ; then ...@@ -325,30 +372,10 @@ elif distro gentoo-release ; then
DISTRIB_RELEASE=$(basename $MAKEPROFILE) DISTRIB_RELEASE=$(basename $MAKEPROFILE)
echo $DISTRIB_RELEASE | grep -q "[0-9]" || DISTRIB_RELEASE=$(basename "$(dirname $MAKEPROFILE)") #" echo $DISTRIB_RELEASE | grep -q "[0-9]" || DISTRIB_RELEASE=$(basename "$(dirname $MAKEPROFILE)") #"
elif [ "$DISTRIB_ID" = "ALTServer" ] ; then
DISTRIB_RELEASE=$(echo $DISTRIB_RELEASE | sed -e "s/\..*//g")
elif [ "$DISTRIB_ID" = "ALTSPWorkstation" ] ; then
DISTRIB_ID="ALTLinux"
case "$DISTRIB_RELEASE" in
8.0|8.1)
;;
8.*)
DISTRIB_RELEASE="c9"
;;
esac
DISTRIB_RELEASE=$(echo $DISTRIB_RELEASE | sed -e "s/\..*//g")
elif distro slackware-version ; then elif distro slackware-version ; then
DISTRIB_ID="Slackware" DISTRIB_ID="Slackware"
DISTRIB_RELEASE="$(grep -Eo '[0-9]+\.[0-9]+' $DISTROFILE)" DISTRIB_RELEASE="$(grep -Eo '[0-9]+\.[0-9]+' $DISTROFILE)"
elif distro os-release && hascommand apk ; then
# shellcheck disable=SC1090
. $ROOTDIR/etc/os-release
DISTRIB_ID="$(firstupper "$ID")"
DISTRIB_RELEASE="$VERSION_ID"
elif distro os-release && hascommand tce-ab ; then elif distro os-release && hascommand tce-ab ; then
# shellcheck disable=SC1090 # shellcheck disable=SC1090
. $ROOTDIR/etc/os-release . $ROOTDIR/etc/os-release
...@@ -376,76 +403,12 @@ elif distro openwrt_release ; then ...@@ -376,76 +403,12 @@ elif distro openwrt_release ; then
. $DISTROFILE . $DISTROFILE
DISTRIB_RELEASE=$(cat $ROOTDIR/etc/openwrt_version) DISTRIB_RELEASE=$(cat $ROOTDIR/etc/openwrt_version)
# for Ubuntu use standard LSB info
elif [ "$DISTRIB_ID" = "Ubuntu" ] && [ -n "$DISTRIB_RELEASE" ]; then
# use LSB version
true
elif distro astra_version ; then
# use OS release
DISTRIB_ID="$(echo "$DISTRIB_ID" | sed -e 's|(.*||')"
DISTRIB_RELEASE="$VERSION_CODENAME"
true
# Debian based # Debian based
elif distro debian_version ; then elif distro debian_version ; then
DISTRIB_ID="Debian" DISTRIB_ID="Debian"
DISTRIB_RELEASE=$(cat $DISTROFILE | sed -e "s/\..*//g") DISTRIB_RELEASE=$(cat $DISTROFILE | sed -e "s/\..*//g")
# Mandriva based
elif distro pclinuxos-release ; then
DISTRIB_ID="PCLinux"
if has "2007" ; then DISTRIB_RELEASE="2007"
elif has "2008" ; then DISTRIB_RELEASE="2008"
elif has "2010" ; then DISTRIB_RELEASE="2010"
fi
elif distro mandriva-release || distro mandrake-release ; then
DISTRIB_ID="Mandriva"
if has 2005 ; then DISTRIB_RELEASE="2005"
elif has 2006 ; then DISTRIB_RELEASE="2006"
elif has 2007 ; then DISTRIB_RELEASE="2007"
elif has 2008 ; then DISTRIB_RELEASE="2008"
elif has 2009.0 ; then DISTRIB_RELEASE="2009.0"
elif has 2009.1 ; then DISTRIB_RELEASE="2009.1"
else
# use /etc/lsb-release info by default
if has ROSA ; then
DISTRIB_ID="ROSA"
fi
fi
# Fedora based
elif distro MCBC-release ; then
DISTRIB_ID="MCBC"
if has 3.0 ; then DISTRIB_RELEASE="3.0"
elif has 3.1 ; then DISTRIB_RELEASE="3.1"
fi
# TODO: drop in favour of /etc/os-release
elif distro redhat-release && [ -z "$PRETTY_NAME" ] ; then
# FIXME if need
# actually in the original RHEL: Red Hat Enterprise Linux .. release N
DISTRIB_ID="RHEL"
if has CentOS ; then
DISTRIB_ID="CentOS"
elif has Scientific ; then
DISTRIB_ID="Scientific"
elif has GosLinux ; then
DISTRIB_ID="GosLinux"
fi
if has Beryllium ; then
DISTRIB_ID="Scientific"
DISTRIB_RELEASE="4.1"
elif has "release 4" ; then DISTRIB_RELEASE="4"
elif has "release 5" ; then DISTRIB_RELEASE="5"
elif has "release 6" ; then DISTRIB_RELEASE="6"
elif has "release 7" ; then DISTRIB_RELEASE="7"
elif has "release 8" ; then DISTRIB_RELEASE="8"
fi
# SUSE based # SUSE based
elif distro SuSe-release || distro SuSE-release ; then elif distro SuSe-release || distro SuSE-release ; then
DISTRIB_ID="SUSE" DISTRIB_ID="SUSE"
...@@ -487,14 +450,14 @@ elif [ "$(uname -o 2>/dev/null)" = "Cygwin" ] ; then ...@@ -487,14 +450,14 @@ elif [ "$(uname -o 2>/dev/null)" = "Cygwin" ] ; then
DISTRIB_RELEASE="all" DISTRIB_RELEASE="all"
fi fi
}
fill_distr_info
[ -n "$DISTRIB_ID" ] || DISTRIB_ID="Generic" [ -n "$DISTRIB_ID" ] || DISTRIB_ID="Generic"
if [ -z "$PRETTY_NAME" ] ; then if [ -z "$PRETTY_NAME" ] ; then
PRETTY_NAME="$DISTRIB_ID $DISTRIB_RELEASE" PRETTY_NAME="$DISTRIB_ID $DISTRIB_RELEASE"
fi fi
}
fill_distr_info
get_uname() get_uname()
{ {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment