distr_info 16.6 KB
Newer Older
1
#!/bin/sh
2 3 4
# 2007-2021 (c) Vitaly Lipatov <lav@etersoft.ru>
# 2007-2021 (c) Etersoft
# 2007-2021 Public domain
5 6 7 8

# You can set ROOTDIR to root system dir
#ROOTDIR=

9
PROGVERSION="20210106"
10

11 12
# TODO: check /etc/system-release

13 14 15 16 17 18 19 20 21 22 23 24 25
# Check for DISTRO specific file in /etc
distro()
{
	#[ -n "$ROOTDIR" ] || return
	# fill global DISTROFILE
	DISTROFILE="$ROOTDIR/etc/$1"
	[ -f "$DISTROFILE" ]
}

# Has a distro file the specified word?
has()
{
	[ -n "$DISTROFILE" ] || exit 1
26
	grep "$*" "$DISTROFILE" >/dev/null 2>&1
27 28
}

29 30 31 32 33 34
# Has a system the specified command?
hascommand()
{
	which $1 2>/dev/null >/dev/null
}

35 36 37 38 39
firstupper()
{
	echo "$*" | sed 's/.*/\u&/'
}

40 41 42 43 44 45 46
tolower()
{
	# tr is broken in busybox (checked with OpenWrt)
	#echo "$*" | tr "[:upper:]" "[:lower:]"
	echo "$*" | awk '{print tolower($0)}'
}

47 48 49 50
# Translate DISTRIB_ID to vendor name (like %_vendor does)
rpmvendor()
{
	[ "$DISTRIB_ID" = "ALTLinux" ] && echo "alt" && return
51
	[ "$DISTRIB_ID" = "AstraLinux" ] && echo "astra" && return
52
	[ "$DISTRIB_ID" = "LinuxXP" ] && echo "lxp" && return
53
	[ "$DISTRIB_ID" = "TinyCoreLinux" ] && echo "tcl" && return
54
	[ "$DISTRIB_ID" = "VoidLinux" ] && echo "void" && return
55
	[ "$DISTRIB_ID" = "OpenSUSE" ] && echo "suse" && return
56
	tolower "$DISTRIB_ID"
57 58 59 60 61 62 63 64 65 66 67 68
}

# Translate DISTRIB_ID name to package manner (like in the package release name)
pkgvendor()
{
	[ "$DISTRIB_ID" = "Mandriva" ] && echo "mdv" && return
	rpmvendor
}

# Print pkgtype (need DISTRIB_ID var)
pkgtype()
{
69
# TODO: try use generic names
Vitaly Lipatov's avatar
Vitaly Lipatov committed
70
    case $(pkgvendor) in
71 72 73
		freebsd) echo "tbz" ;;
		sunos) echo "pkg.gz" ;;
		slackware|mopslinux) echo "tgz" ;;
74
		archlinux|manjaro) echo "pkg.tar.xz" ;;
75 76
		gentoo) echo "tbz2" ;;
		windows) echo "exe" ;;
77
		android) echo "apk" ;;
78
		alpine) echo "apk" ;;
79
		tinycorelinux) echo "tcz" ;;
80
		voidlinux) echo "xbps" ;;
81
		openwrt) echo "ipk" ;;
82
		cygwin) echo "tar.xz" ;;
83
		debian|ubuntu|mint|runtu|mcst|astra) echo "deb" ;;
84
		alt|asplinux|suse|mandriva|rosa|mandrake|pclinux|sled|sles)
85
			echo "rpm" ;;
86
		fedora|redhat|redos|scientific|centos|rhel|goslinux|amzn)
87 88 89 90 91 92 93
			echo "rpm" ;;
		*)  echo "rpm" ;;
	esac
}

get_var()
{
94 95
	# get first variable and print it out, drop quotes if exists
	grep -i "^$1 *=" | head -n 1 | sed -e "s/^[^=]*[ \t]*=[ \t]*//" | sed -e "s/^[\'\"]\(.*\)[\'\"]/\1/"
96 97 98 99 100 101 102 103
}

# 2010.1 -> 2010
get_major_version()
{
	echo "$1" | sed -e "s/\..*//g"
}

104 105 106 107 108 109 110
normalize_name()
{
	[ "$1" = "RED OS" ] && echo "RedOS" && return
	[ "$1" = "CentOS Linux" ] && echo "CentOS" && return
	echo "${1// /}"
}

111
# Default values
112
PRETTY_NAME=""
113 114
DISTRIB_ID="Generic"
DISTRIB_RELEASE=""
115
DISTRIB_CODENAME=""
116 117 118

# Default with LSB
if distro lsb-release ; then
Vitaly Lipatov's avatar
Vitaly Lipatov committed
119 120 121
	DISTRIB_ID=$(cat $DISTROFILE | get_var DISTRIB_ID)
	DISTRIB_RELEASE=$(cat $DISTROFILE | get_var DISTRIB_RELEASE)
	DISTRIB_CODENAME=$(cat $DISTROFILE | get_var DISTRIB_CODENAME)
122
	PRETTY_NAME=$(cat $DISTROFILE | get_var DISTRIB_DESCRIPTION)
123 124
fi

125 126 127 128 129 130 131 132 133 134 135 136 137 138
# Next default by /etc/os-release
# https://www.freedesktop.org/software/systemd/man/os-release.html
if distro os-release ; then
	# shellcheck disable=SC1090
	. $DISTROFILE
	DISTRIB_ID="$(normalize_name "$NAME")"
#	DISTRIB_ID="$(firstupper "$ID")"
	DISTRIB_RELEASE="$VERSION_ID"
	[ -n "$DISTRIB_RELEASE" ] || DISTRIB_RELEASE="CUR"
	# set by os-release:
	#PRETTY_NAME
	VENDOR_ID="$ID"
fi

139 140
# ALT Linux based
if distro altlinux-release ; then
141
	# TODO: use os-release firsly
142
	DISTRIB_ID="ALTLinux"
143
	if has Sisyphus ; then DISTRIB_RELEASE="Sisyphus"
144
	elif has "ALT Linux 7." ; then DISTRIB_RELEASE="p7"
145
	elif has "ALT Linux t7." ; then DISTRIB_RELEASE="t7"
146
	elif has "ALT Linux 8." ; then DISTRIB_RELEASE="p8"
147 148
	elif has "ALT 8 SP " ; then DISTRIB_RELEASE="c8"
	elif has "ALT 9 SP " ; then DISTRIB_RELEASE="c9"
149 150 151 152 153 154
	elif has "ALT c8 " ; then DISTRIB_RELEASE="c8"
	elif has "ALT c8.1 " ; then DISTRIB_RELEASE="c8.1"
	elif has "ALT c8.2 " ; then DISTRIB_RELEASE="c8.2"
	elif has "ALT .*8.[0-9]" ; then DISTRIB_RELEASE="p8"
	elif has "ALT .*9.[0-9]" ; then DISTRIB_RELEASE="p9"
	elif has "ALT p9.* p9 " ; then DISTRIB_RELEASE="p9"
155
	elif has "Simply Linux 6." ; then DISTRIB_RELEASE="p6"
156 157
	elif has "Simply Linux 7." ; then DISTRIB_RELEASE="p7"
	elif has "Simply Linux 8." ; then DISTRIB_RELEASE="p8"
158
	elif has "Simply Linux 9." ; then DISTRIB_RELEASE="p9"
159
	elif has "ALT Linux 6." ; then DISTRIB_RELEASE="p6"
160
	elif has "ALT Linux p8"  ; then DISTRIB_RELEASE="p8"
161 162 163 164 165
	elif has "ALT Linux p7"  ; then DISTRIB_RELEASE="p7"
	elif has "ALT Linux p6"  ; then DISTRIB_RELEASE="p6"
	elif has "ALT Linux p5"  ; then DISTRIB_RELEASE="p5"
	elif has "ALT Linux 5.1" ; then DISTRIB_RELEASE="5.1"
	elif has "ALT Linux 5.0" ; then DISTRIB_RELEASE="5.0"
166
	elif has "ALT Linux 4.1" ; then DISTRIB_RELEASE="4.1"
167
	elif has "ALT Linux 4.0" ; then DISTRIB_RELEASE="4.0"
168
	elif has "starter kit"   ; then DISTRIB_RELEASE="p8"
169
	elif has Citron   ; then DISTRIB_RELEASE="2.4"
170
	fi
171
	PRETTY_NAME="$(cat /etc/altlinux-release)"
172 173 174

elif distro gentoo-release ; then
	DISTRIB_ID="Gentoo"
175
	MAKEPROFILE=$(readlink $ROOTDIR/etc/portage/make.profile 2>/dev/null) || MAKEPROFILE=$(readlink $ROOTDIR/etc/make.profile)
Vitaly Lipatov's avatar
Vitaly Lipatov committed
176
	DISTRIB_RELEASE=$(basename $MAKEPROFILE)
177
	echo $DISTRIB_RELEASE | grep -q "[0-9]" || DISTRIB_RELEASE=$(basename "$(dirname $MAKEPROFILE)") #"
178 179 180

elif distro slackware-version ; then
	DISTRIB_ID="Slackware"
Vitaly Lipatov's avatar
Vitaly Lipatov committed
181
	DISTRIB_RELEASE="$(grep -Eo '[0-9]+\.[0-9]+' $DISTROFILE)"
182

183
elif distro os-release && hascommand apk ; then
Vitaly Lipatov's avatar
Vitaly Lipatov committed
184
	# shellcheck disable=SC1090
185
	. $ROOTDIR/etc/os-release
186
	DISTRIB_ID="$(firstupper "$ID")"
187 188
	DISTRIB_RELEASE="$VERSION_ID"

189
elif distro os-release && hascommand tce-ab ; then
Vitaly Lipatov's avatar
Vitaly Lipatov committed
190
	# shellcheck disable=SC1090
191 192 193 194
	. $ROOTDIR/etc/os-release
	DISTRIB_ID="TinyCoreLinux"
	DISTRIB_RELEASE="$VERSION_ID"

195
elif distro os-release && hascommand xbps-query ; then
Vitaly Lipatov's avatar
Vitaly Lipatov committed
196
	# shellcheck disable=SC1090
197 198 199 200
	. $ROOTDIR/etc/os-release
	DISTRIB_ID="VoidLinux"
	DISTRIB_RELEASE="Live"

201
# TODO: use standart /etc/os-release or lsb
202 203
elif distro arch-release ; then
	DISTRIB_ID="ArchLinux"
204
	DISTRIB_RELEASE="rolling"
205

206
# Elbrus
207 208
elif distro mcst_version ; then
	DISTRIB_ID="MCST"
209
	DISTRIB_RELEASE=$(cat "$DISTROFILE" | grep "release" | sed -e "s|.*release \([0-9]*\).*|\1|g") #"
210

211 212 213 214 215
# OpenWrt
elif distro openwrt_release ; then
	. $DISTROFILE
	DISTRIB_RELEASE=$(cat $ROOTDIR/etc/openwrt_version)

216 217 218 219 220 221
elif distro astra_version ; then
	#DISTRIB_ID=`cat $DISTROFILE | get_var DISTRIB_ID`
	DISTRIB_ID="AstraLinux"
	#DISTRIB_RELEASE=$(cat "$DISTROFILE" | head -n1 | sed -e "s|.* \([a-z]*\).*|\1|g")
	DISTRIB_RELEASE=$DISTRIB_CODENAME

222 223 224 225 226 227 228 229
# for Ubuntu use standard LSB info
elif [ "$DISTRIB_ID" = "Ubuntu" ] && [ -n "$DISTRIB_RELEASE" ]; then
	# use LSB version
	true

# Debian based
elif distro debian_version ; then
	DISTRIB_ID="Debian"
230
	DISTRIB_RELEASE=$(cat $DISTROFILE | sed -e "s/\..*//g")
231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250


# 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
251 252 253
		if has ROSA ; then
			DISTRIB_ID="ROSA"
		fi
254 255 256 257 258 259 260 261 262 263
	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

264 265
# TODO: drop in favour of /etc/os-release
elif distro redhat-release && [ -z "$PRETTY_NAME" ] ; then
266 267 268 269 270 271 272
	# 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"
273 274
	elif has GosLinux ; then
		DISTRIB_ID="GosLinux"
275 276 277 278 279 280 281 282
	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"
283
	elif has "release 8" ; then DISTRIB_RELEASE="8"
284 285 286 287 288 289 290 291 292 293 294 295 296
	fi

# SUSE based
elif distro SuSe-release || distro SuSE-release ; then
	DISTRIB_ID="SUSE"
	DISTRIB_RELEASE=$(cat "$DISTROFILE" | grep "VERSION" | sed -e "s|^VERSION = ||g")
	if   has "SUSE Linux Enterprise Desktop" ; then
		DISTRIB_ID="SLED"
	elif has "SUSE Linux Enterprise Server" ; then
		DISTRIB_ID="SLES"
	fi

# fixme: can we detect by some file?
Vitaly Lipatov's avatar
Vitaly Lipatov committed
297
elif [ "$(uname)" = "FreeBSD" ] ; then
298 299
	DISTRIB_ID="FreeBSD"
	UNAME=$(uname -r)
300
	DISTRIB_RELEASE=$(echo "$UNAME" | grep RELEASE | sed -e "s|\([0-9]\.[0-9]\)-RELEASE|\1|g") #"
301 302

# fixme: can we detect by some file?
Vitaly Lipatov's avatar
Vitaly Lipatov committed
303
elif [ "$(uname)" = "SunOS" ] ; then
304 305 306
	DISTRIB_ID="SunOS"
	DISTRIB_RELEASE=$(uname -r)

Vitaly Lipatov's avatar
Vitaly Lipatov committed
307
# fixme: can we detect by some file?
Vitaly Lipatov's avatar
Vitaly Lipatov committed
308
elif [ "$(uname -s 2>/dev/null)" = "Darwin" ] ; then
Vitaly Lipatov's avatar
Vitaly Lipatov committed
309 310 311
	DISTRIB_ID="MacOS"
	DISTRIB_RELEASE=$(uname -r)

312
# fixme: move to up
313
elif [ "$(uname)" = "Linux" ] && hascommand guix ; then
314 315 316
	DISTRIB_ID="GNU/Linux/Guix"
	DISTRIB_RELEASE=$(uname -r)

317
# fixme: move to up
Vitaly Lipatov's avatar
Vitaly Lipatov committed
318
elif [ "$(uname)" = "Linux" ] && [ -x $ROOTDIR/system/bin/getprop ] ; then
319 320 321
	DISTRIB_ID="Android"
	DISTRIB_RELEASE=$(getprop | awk -F": " '/build.version.release/ { print $2 }' | tr -d '[]')

Vitaly Lipatov's avatar
Vitaly Lipatov committed
322
elif [ "$(uname -o 2>/dev/null)" = "Cygwin" ] ; then
323 324
        DISTRIB_ID="Cygwin"
        DISTRIB_RELEASE="all"
325
fi
326

327 328
if [ -z "$PRETTY_NAME" ] ; then
	PRETTY_NAME="$DISTRIB_ID $DISTRIB_RELEASE"
329 330
fi

331

332 333 334 335 336
get_uname()
{
    tolower $(uname $1) | tr -d " \t\r\n"
}

337 338 339 340
get_base_os_name()
{
local DIST_OS
# Resolve the os
341
DIST_OS="$(get_uname -s)"
342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361
case "$DIST_OS" in
    'sunos')
        DIST_OS="solaris"
        ;;
    'hp-ux' | 'hp-ux64')
        DIST_OS="hpux"
        ;;
    'darwin' | 'oarwin')
        DIST_OS="macosx"
        ;;
    'unix_sv')
        DIST_OS="unixware"
        ;;
    'freebsd' | 'openbsd' | 'netbsd')
        DIST_OS="freebsd"
        ;;
esac
echo "$DIST_OS"
}

362

363 364 365 366
get_arch()
{
local DIST_ARCH
# Resolve the architecture
367
DIST_ARCH="$(get_uname -m)"
368
case "$DIST_ARCH" in
369
    'ia32' | 'i386' | 'i486' | 'i586' | 'i686')
370 371
        DIST_ARCH="x86"
        ;;
372 373 374
    'amd64' | 'x86_64')
        DIST_ARCH="x86_64"
        ;;
375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393
    'ia64' | 'ia-64')
        DIST_ARCH="ia64"
        ;;
    'ip27' | 'mips')
        DIST_ARCH="mips"
        ;;
    'powermacintosh' | 'power' | 'powerpc' | 'power_pc' | 'ppc64')
        DIST_ARCH="ppc"
        ;;
    'pa_risc' | 'pa-risc')
        DIST_ARCH="parisc"
        ;;
    'sun4u' | 'sparcv9')
        DIST_ARCH="sparc"
        ;;
    '9000/800')
        DIST_ARCH="parisc"
        ;;
    armv*)
394
        if [ -z "$(readelf -A /proc/self/exe | grep Tag_ABI_VFP_args)" ] ; then
395 396 397 398 399 400 401 402 403
            DIST_ARCH="armel"
        else
            DIST_ARCH="armhf"
        fi
        ;;
esac
echo "$DIST_ARCH"
}

404 405 406 407 408 409 410 411 412 413 414 415
get_debian_arch()
{
    local arch="$(get_arch)"
    case $arch in
    'i586')
        arch='i386' ;;
    'x86_64')
        arch='amd64' ;;
    esac
    echo "$arch"
}

416 417 418 419 420 421 422 423
get_distro_arch()
{
    local arch="$(get_arch)"
    case "$(pkgtype)" in
        rpm)
            :
            ;;
        deb)
424 425
            get_debian_arch
            return
426 427 428 429 430
            ;;
    esac
    echo "$arch"
}

431 432 433 434
get_bit_size()
{
local DIST_BIT
# Check if we are running on 64bit platform, seems like a workaround for now...
435
DIST_BIT="$(get_uname -m)"
436 437 438 439
case "$DIST_BIT" in
    'amd64' | 'ia64' | 'x86_64' | 'ppc64')
        DIST_BIT="64"
        ;;
440 441 442
    'aarch64')
        DIST_BIT="64"
        ;;
443 444 445
    'e2k')
        DIST_BIT="64"
        ;;
446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461
#    'pa_risc' | 'pa-risc') # Are some of these 64bit? Least not all...
#       BIT="64"
#        ;;
    'sun4u' | 'sparcv9') # Are all sparcs 64?
        DIST_BIT="64"
        ;;
#    '9000/800')
#       DIST_BIT="64"
#        ;;
    *) # In any other case default to 32
        DIST_BIT="32"
        ;;
esac
echo "$DIST_BIT"
}

462
# TODO: check before calc
463 464 465
get_memory_size()
{
    local detected=""
466 467 468 469 470 471 472 473 474 475 476
    local DIST_OS="$(get_base_os_name)"
    case "$DIST_OS" in
        macosx)
            detected=$((`sysctl hw.memsize | sed s/"hw.memsize: "//`/1024/1024))
            ;;
        freebsd)
            detected=$((`sysctl hw.physmem | sed s/"hw.physmem: "//`/1024/1024))
            ;;
        linux)
            [ -r /proc/meminfo ] && detected=$((`cat /proc/meminfo | grep MemTotal | awk '{print $2}'`/1024))
            ;;
477 478 479 480 481
        solaris)
            detected=$(prtconf | grep Memory | sed -e "s|Memory size: \([0-9][0-9]*\) Megabyte.*|\1|")
            ;;
#        *)
#            fatal "Unsupported OS $DIST_OS"
482 483
    esac

484
    [ -n "$detected" ] || detected=0
485 486 487
    echo $detected
}

488 489 490 491 492
print_name_version()
{
    [ -n "$DISTRIB_RELEASE" ] && echo $DISTRIB_ID/$DISTRIB_RELEASE || echo $DISTRIB_ID
}

493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518
get_core_count()
{
    local detected=""
    local DIST_OS="$(get_base_os_name)"
    case "$DIST_OS" in
        macos|freebsd)
            detected=$(sysctl hw.ncpu | awk '{print $2}')
            ;;
        linux)
            detected=$(grep -c "^processor" /proc/cpuinfo)
            ;;
        solaris)
            detected=$(prtconf | grep -c 'cpu[^s]')
            ;;
        aix)
            detected=$(lsdev -Cc processor -S A | wc -l)
            ;;
#        *)
#            fatal "Unsupported OS $DIST_OS"
    esac

    [ -n "$detected" ] || detected=0
    echo $detected
}


519 520 521 522 523 524 525 526 527 528 529
get_virt()
{
    local VIRT
    local SDCMD
    SDCMD=$(which systemd-detect-virt 2>/dev/null)
    if [ -n "$SDCMD" ] ; then
        VIRT="$($SDCMD)"
        [ "$VIRT" = "none" ] && echo "(host system)" && return
        [ -z "$VIRT" ] && echo "(unknown)" && return
        echo "$VIRT" && return
    fi
530 531 532 533 534

    # TODO: use virt-what under root

    # inspired by virt_what
    if [ -d "/proc/vz" -a ! -d "/proc/bc" ]; then
535 536
        echo "openvz" && return
    fi
537 538 539 540 541

    if [ -r "/sys/bus/xen" ] ; then
        echo "xen" && return
    fi

542 543 544 545 546 547 548 549
    echo "(unknown)"
    # TODO: check for openvz
}

# https://unix.stackexchange.com/questions/196166/how-to-find-out-if-a-system-uses-sysv-upstart-or-systemd-initsystem
get_service_manager()
{
    [ -d /run/systemd/system ] && echo "systemd" && return
550 551
    # TODO
    #[ -d /usr/share/upstart ] && echo "upstart" && return
552 553 554 555
    [ -d /etc/init.d ] && echo "sysvinit" && return
    echo "(unknown)"
}

556 557 558 559
print_pretty_name()
{
    echo "$PRETTY_NAME"
}
560 561 562 563

print_total_info()
{
cat <<EOF
564 565
distro_info v$PROGVERSION : Copyright © 2007-2020 Etersoft
==== Total system information:
566
Pretty distro name (--pretty): $(print_pretty_name)
567 568 569 570
 Distro name and version (-e): $(print_name_version)
        Packaging system (-p): $(pkgtype)
 Running service manager (-y): $(get_service_manager)
          Virtualization (-i): $(get_virt)
571
               CPU Cores (-c): $(get_core_count)
572 573 574 575 576 577
        CPU Architecture (-a): $(get_arch)
 CPU norm register size  (-b): $(get_bit_size)
 System memory size (MB) (-m): $(get_memory_size)
            Base OS name (-o): $(get_base_os_name)
Build system distro name (-s): $(pkgvendor)
Build system vendor name (-n): $(rpmvendor)
578 579

(run with -h to get help)
580 581 582
EOF
}

583

584
case $1 in
585
	-h)
586
		echo "distro_info v$PROGVERSION - distro information retriever"
587 588
		echo "Usage: distro_info [options] [args]"
		echo "Options:"
589
		echo " -a - print hardware architecture (--distro-arch for distro depended name)"
590
		echo " -b - print size of arch bit (32/64)"
591
		echo " -c - print number of CPU cores"
592 593 594 595 596 597 598 599 600
		echo " -d - print distro name"
		echo " -e - print full name of distro with version"
		echo " -i - print virtualization type"
		echo " -h - this help"
		echo " -m - print system memory size (in MB)"
		echo " -n [SystemName] - print vendor name (as _vendor macros in rpm)"
		echo " -o - print base OS name"
		echo " -p [SystemName] - print type of the packaging system"
		echo " -s [SystemName] - print name of distro for build system (like in the package release name)"
601 602
		echo " -y - print running service manager"
		echo " --pretty - print pretty distro name"
603 604 605 606 607
		echo " -v - print version of distro"
		echo " -V - print the utility version"
		echo "Run without args to print all information."
		exit 0
		;;
608 609 610 611 612 613
	-p)
		# override DISTRIB_ID
		test -n "$2" && DISTRIB_ID="$2"
		pkgtype
		exit 0
		;;
614 615 616
	--pretty)
		print_pretty_name
		;;
617 618 619 620 621 622
	--distro-arch)
		# override DISTRIB_ID
		test -n "$2" && DISTRIB_ID="$2"
		get_distro_arch
		exit 0
		;;
623 624 625 626 627 628
	--debian-arch)
		# override DISTRIB_ID
		test -n "$2" && DISTRIB_ID="$2"
		get_debian_arch
		exit 0
		;;
629 630 631
	-d)
		echo $DISTRIB_ID
		;;
632 633 634 635 636 637
	-a)
		get_arch
		;;
	-b)
		get_bit_size
		;;
638 639 640
	-c)
		get_core_count
		;;
641 642 643
	-i)
		get_virt
		;;
644 645 646 647 648 649
	-m)
		get_memory_size
		;;
	-o)
		get_base_os_name
		;;
650 651 652 653 654 655 656 657 658 659 660 661 662 663 664
	-v)
		echo $DISTRIB_RELEASE
		;;
	-s)
		# override DISTRIB_ID
		test -n "$2" && DISTRIB_ID="$2"
		pkgvendor
		exit 0
		;;
	-n)
		# override DISTRIB_ID
		test -n "$2" && DISTRIB_ID="$2"
		rpmvendor
		exit 0
		;;
665 666 667
	-y)
		get_service_manager
		;;
668
	-V)
669
		echo "$PROGVERSION"
670 671
		exit 0
		;;
672 673 674
	-e)
		print_name_version
		;;
675
	*)
676
		print_total_info
677 678 679
		;;
esac