#!/bin/bash
#
# __copy1__
# __copy2__
#
CMD=$(basename $0)
CMDVER="1.8"
CMDSTR="$CMD v.$CMDVER (2026-01-30)"

set -e -u

do_check=false

usage()
{
	echo "
$CMDSTR - print normalized lsb DISTRIB_* env vars, Ubuntu style

usage: $CMD
" >&2
	exit 1
}



# (MAIN)

# init vars
#
DISTRIB_ID=
DISTRIB_RELEASE=
DISTRIB_CODENAME=
DISTRIB_DESCRIPTION=
DISTRIB_FULL_ID=
DISTRIB_HAS_UPSTART=
DISTRIB_HAS_APPARMOR=
DISTRIB_KLABS_DISTRO=

[ $# != 0 ] && usage

# first, get values from files, where available
#
if [ -f /etc/lsb-release ] 	# debian, ubuntu
then
	. /etc/lsb-release

elif [ -f /etc/os-release ] 	# devuan
then
	. /etc/os-release
	DISTRIB_DESCRIPTION="${PRETTY_NAME:-}"
	DISTRIB_RELEASE="${VERSION_ID:-}"
	DISTRIB_ID="${ID:-}"
	DISTRIB_CODENAME="${VERSION_CODENAME:-}"
  	case ${DISTRIB_ID}-$DISTRIB_RELEASE in
	  devuan-1)	# 2017.10 base devuan jessie from cdrom inst
		DISTRIB_ID="Devuan"
	  	DISTRIB_CODENAME="jessie"
	  	DISTRIB_RELEASE="1.0"
		;;
	esac
fi


# then, fill empty values, if lsb_release command is available
#
[ "X$(which lsb_release)" != "X" ] && {

	out=$(lsb_release -a 2>/dev/null)

	[ -z "$DISTRIB_ID" ] && \
	    DISTRIB_ID=$(echo "$out" | sed -n -e 's/Distributor ID:\s *//p')
	[ -z "$DISTRIB_RELEASE" ] && \
	    DISTRIB_RELEASE=$(echo "$out" | sed -n -e 's/Release:\s *//p')
	[ -z "$DISTRIB_CODENAME" ] && \
	    DISTRIB_CODENAME=$(echo "$out" | sed -n -e 's/Codename:\s *//p')
	[ -z "$DISTRIB_DESCRIPTION" ] && \
	    DISTRIB_DESCRIPTION=$(echo "$out" | sed -n -e 's/Description:\s *//p')
}

# normalize
#
case $DISTRIB_ID in
  devuan)	DISTRIB_ID="Devuan" ;;
esac
case $DISTRIB_RELEASE in
  ascii)	DISTRIB_RELEASE="2.1"; DISTRIB_CODENAME="ascii" ;;
esac

# kubiclabs addon
DISTRIB_FULL_ID="${DISTRIB_ID}-$DISTRIB_RELEASE"
DISTRIB_KLABS_DISTRO="$DISTRIB_CODENAME"
DISTRIB_HAS_UPSTART='false'
DISTRIB_HAS_APPARMOR='false'
DISTRIB_HAS_SYSTEMD='false'
DISTRIB_USES_SYSTEMD='false'
DISTRIB_IS_PVE='false'		# true if this is a Proxmox instance
DISTRIB_IS_OMV='false'		# true if this is a OpenMediaVault instance

[ -f /sbin/upstart-udev-bridge ]			&& DISTRIB_HAS_UPSTART='true'
[ -f /usr/sbin/aa-status ]				&& DISTRIB_HAS_APPARMOR='true'
dpkg -l libsystemd0 2>&1 | grep -q "^ii  libsystemd0"	&& DISTRIB_HAS_SYSTEMD='true'
[ $(ps -C systemd | wc -l) -gt 1 ]			&& DISTRIB_USES_SYSTEMD='true'

# proxmox environment?
#
$DISTRIB_USES_SYSTEMD && {
	[ -d /etc/pve ] && {
		DISTRIB_IS_PVE='true'
		DISTRIB_FULL_ID="pve-$DISTRIB_FULL_ID"
	}
}

# openmediavault environment?
#
file="/usr/share/openmediavault/productinfo.xml"
[ -f $file ] && {
	DISTRIB_IS_OMV=true
	DISTRIB_FULL_ID="omv-$DISTRIB_FULL_ID"
}


# compatibiliy tweaks
#
case $DISTRIB_FULL_ID in
  Devuan-3)		DISTRIB_KLABS_DISTRO="ascii" ;;		# devuan Beowulf, never ported
  pve-debian-12)	DISTRIB_KLABS_DISTRO="daedalus" ;;	# 12 (bookworm) -> devuan 5
  omv-debian-12)	DISTRIB_KLABS_DISTRO="daedalus" ;;
  omv-debian-13)	DISTRIB_KLABS_DISTRO="excalibur" ;;	# 13 (trixie) -> devuan 6
esac

# klabs distros validation
# after this, for unsupported systems DISTRIB_KLABS_DISTRO is empty
#
distro_ok=
for distro in	jessie ascii chimaera daedalus excalibur
do
	[ $DISTRIB_KLABS_DISTRO = $distro ] && {
		distro_ok=$distro
		break
	}
done
DISTRIB_KLABS_DISTRO="$distro_ok"


# finally, prints definitions on stdout and exists
#
echo "DISTRIB_ID='$DISTRIB_ID'"
echo "DISTRIB_RELEASE='$DISTRIB_RELEASE'"
echo "DISTRIB_CODENAME='$DISTRIB_CODENAME'"
echo "DISTRIB_DESCRIPTION='$DISTRIB_DESCRIPTION'" 
echo "DISTRIB_FULL_ID='$DISTRIB_FULL_ID'"
echo "DISTRIB_HAS_UPSTART='$DISTRIB_HAS_UPSTART'"
echo "DISTRIB_HAS_APPARMOR='$DISTRIB_HAS_APPARMOR'"
echo "DISTRIB_HAS_SYSTEMD='$DISTRIB_HAS_SYSTEMD'"
echo "DISTRIB_USES_SYSTEMD='$DISTRIB_USES_SYSTEMD'"
echo "DISTRIB_IS_PVE='$DISTRIB_IS_PVE'"
echo "DISTRIB_IS_OMV='$DISTRIB_IS_OMV'"
echo "DISTRIB_KLABS_DISTRO='$DISTRIB_KLABS_DISTRO'"

exit 0
