Home | History | Annotate | Line # | Download | only in sys_info
sys_info.sh revision 1.7
      1  1.1  agc #! /bin/sh
      2  1.1  agc 
      3  1.7  agc # $NetBSD: sys_info.sh,v 1.7 2017/08/21 19:51:32 agc Exp $
      4  1.1  agc 
      5  1.1  agc # Copyright (c) 2016 Alistair Crooks <agc (at] NetBSD.org>
      6  1.1  agc # All rights reserved.
      7  1.1  agc #
      8  1.1  agc # Redistribution and use in source and binary forms, with or without
      9  1.1  agc # modification, are permitted provided that the following conditions
     10  1.1  agc # are met:
     11  1.1  agc # 1. Redistributions of source code must retain the above copyright
     12  1.1  agc #    notice, this list of conditions and the following disclaimer.
     13  1.1  agc # 2. Redistributions in binary form must reproduce the above copyright
     14  1.1  agc #    notice, this list of conditions and the following disclaimer in the
     15  1.1  agc #    documentation and/or other materials provided with the distribution.
     16  1.1  agc #
     17  1.1  agc # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
     18  1.1  agc # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
     19  1.1  agc # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     20  1.1  agc # IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
     21  1.1  agc # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
     22  1.1  agc # NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     23  1.1  agc # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     24  1.1  agc # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     25  1.1  agc # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
     26  1.1  agc # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     27  1.1  agc #
     28  1.1  agc 
     29  1.5  agc SYS_INFO_VERSION=20170821
     30  1.1  agc LD_LIBRARY_PATH=${LD_LIBRARY_PATH:-/usr/lib:/usr/X11R7/lib}
     31  1.1  agc 
     32  1.5  agc # short script to look for an executable $2, and if found, to place
     33  1.5  agc # path in $1
     34  1.5  agc # taken from pkgsrc bootstrap
     35  1.5  agc which_prog()
     36  1.5  agc {
     37  1.5  agc 	_var="$1"; _name="$2"
     38  1.5  agc 
     39  1.5  agc 	eval _tmp=\"\$$_var\"
     40  1.5  agc 	if [ "x$_tmp" != "x" ]; then
     41  1.5  agc 		# Variable is already set (by the user, for example)
     42  1.5  agc 		return 0
     43  1.5  agc 	fi
     44  1.5  agc 
     45  1.5  agc 	for _d in `echo $PATH | tr ':' ' '`; do
     46  1.5  agc 		if [ -f "$_d/$_name" ] && [ -x "$_d/$_name" ]; then
     47  1.5  agc 			# Program found
     48  1.5  agc 			eval $_var=\""$_d/$_name"\"
     49  1.5  agc 			return 0
     50  1.5  agc 		fi
     51  1.5  agc 	done
     52  1.5  agc 
     53  1.5  agc 	return 1
     54  1.5  agc }
     55  1.5  agc 
     56  1.1  agc # print out the version for the given argument
     57  1.1  agc getversion() {
     58  1.1  agc 	case "$1" in
     59  1.1  agc 	awk)
     60  1.1  agc 		awk --version | awk '{ print $1 "-" $3 }'
     61  1.1  agc 		;;
     62  1.1  agc 	bind|named)
     63  1.1  agc 		named -v | awk '{ gsub("-", "", $2); gsub("P", "pl", $2); print tolower($1) "-" $2 }'
     64  1.1  agc 		;;
     65  1.1  agc 	bzip2)
     66  1.1  agc 		bzip2 --help 2>&1 | awk '{ sub(",", "", $7); print "bzip2-" $7; exit }'
     67  1.1  agc 		;;
     68  1.1  agc 	calendar)
     69  1.1  agc 		v=$(calendar -v 2>/dev/null || true)
     70  1.1  agc 		case "${v}" in
     71  1.1  agc 		"")	echo "calendar-20150701" ;;
     72  1.1  agc 		*)	echo ${v} ;;
     73  1.1  agc 		esac
     74  1.1  agc 		;;
     75  1.1  agc 	ftpd)
     76  1.1  agc 		strings -a /usr/libexec/ftpd | awk '$1 == "NetBSD-ftpd" { print "ftpd-" $2 }'
     77  1.1  agc 		;;
     78  1.1  agc 	g++|c++)
     79  1.1  agc 		g++ --version | awk '{ print $1 "-" $4; exit }'
     80  1.1  agc 		;;
     81  1.1  agc 	gcc|cc)
     82  1.1  agc 		gcc --version | awk '{ print $1 "-" $4; exit }'
     83  1.1  agc 		;;
     84  1.1  agc 	grep)
     85  1.1  agc 		grep --version | awk '{ print $1 "-" $4 $5; exit }'
     86  1.1  agc 		;;
     87  1.1  agc 	gzip)
     88  1.1  agc 		gzip --version 2>&1 | awk '{ print $2 "-" $3 }'
     89  1.1  agc 		;;
     90  1.1  agc 	httpd|bozohttpd)
     91  1.1  agc 		v=$(/usr/libexec/httpd -G 2>/dev/null || true)
     92  1.1  agc 		case "${v}" in
     93  1.1  agc 		"")
     94  1.1  agc 			strings -a /usr/libexec/httpd | awk -F/ '$1 == "bozohttpd" && NF == 2 { print $1 "-" $2; exit }'
     95  1.1  agc 			;;
     96  1.1  agc 		*)
     97  1.1  agc 			echo bozohttpd-${v##*/}
     98  1.1  agc 			;;
     99  1.1  agc 		esac
    100  1.1  agc 		;;
    101  1.1  agc 	lib*)
    102  1.1  agc 		dlist=$(echo ${LD_LIBRARY_PATH} | awk '{ gsub(":", " "); print }')
    103  1.1  agc 		for d in ${dlist}; do
    104  1.1  agc 			if [ -e ${d}/$1.so ]; then
    105  1.1  agc 				ls -al ${d}/$1.so | awk '{ sub(".*/", "", $11); sub("\\.so\\.", "-", $11); print $11 }'
    106  1.1  agc 				break
    107  1.1  agc 			fi
    108  1.1  agc 		done
    109  1.1  agc 		;;
    110  1.1  agc 	netbsd)
    111  1.1  agc 		uname -sr | awk '{ print $1 "-" $2 }'
    112  1.1  agc 		;;
    113  1.1  agc 	netpgp)
    114  1.1  agc 		netpgp -V | awk '{ sub("/.*", "", $3); print "netpgp-" $3; exit }'
    115  1.1  agc 		;;
    116  1.1  agc 	netpgpverify)
    117  1.1  agc 		netpgpverify -v | awk '{ print $1 "-" $3 }'
    118  1.1  agc 		;;
    119  1.1  agc 	ntp)
    120  1.1  agc 		ntpq --version | awk '{ sub("-.", ""); sub("p", "pl", $2); print "ntp-" $2 }'
    121  1.1  agc 		;;
    122  1.1  agc 	openssl)
    123  1.1  agc 		openssl version 2>/dev/null | awk '{ print tolower($1) "-" $2 }'
    124  1.1  agc 		;;
    125  1.1  agc 	sqlite|sqlite3)
    126  1.1  agc 		sqlite3 --version | awk '{ print "sqlite3-" $1 }'
    127  1.1  agc 		;;
    128  1.1  agc 	ssh|openssh)
    129  1.1  agc 		ssh -V 2>&1 | awk '{ sub("_", "-", $1); print tolower($1) }'
    130  1.1  agc 		;;
    131  1.1  agc 	sshd)
    132  1.1  agc 		sshd -V 2>&1 | awk '/OpenSSH/ { sub("_", "D-", $1); print tolower($1) }'
    133  1.1  agc 		;;
    134  1.5  agc 	sys_info)
    135  1.5  agc 		echo sys_info-${SYS_INFO_VERSION}
    136  1.5  agc 		;;
    137  1.1  agc 	tcsh)
    138  1.5  agc 		if which_prog tcshpath tcsh; then
    139  1.6  agc 			${tcshpath} --version | awk '{ print $1 "-" $2 }'
    140  1.5  agc 		else
    141  1.5  agc 			echo "tcsh: not found"
    142  1.5  agc 		fi
    143  1.1  agc 		;;
    144  1.7  agc 	tzdata)
    145  1.7  agc 		if [ -f /usr/share/zoneinfo/TZDATA_VERSION ]; then
    146  1.7  agc 			cat /usr/share/zoneinfo/TZDATA_VERSION
    147  1.7  agc 		fi
    148  1.7  agc 		;;
    149  1.1  agc 	unbound)
    150  1.5  agc 		if which_prog unboundpath unbound-control; then
    151  1.5  agc 			${unboundpath} -h | awk '/^Version/ { print "unbound-" $2 }'
    152  1.5  agc 		else
    153  1.5  agc 			echo "unbound: not found"
    154  1.5  agc 		fi
    155  1.1  agc 		;;
    156  1.1  agc 	xz)
    157  1.1  agc 		xz --version | awk '{ print $1 "-" $4; exit }'
    158  1.1  agc 		;;
    159  1.1  agc 	esac
    160  1.1  agc }
    161  1.1  agc 
    162  1.5  agc # check if we have our only option
    163  1.5  agc while [ $# -gt 0 ]; do
    164  1.5  agc 	case "$1" in
    165  1.5  agc 	-v)	set -x ;;
    166  1.1  agc 	*)	break ;;
    167  1.1  agc 	esac
    168  1.1  agc 	shift
    169  1.1  agc done
    170  1.1  agc 
    171  1.5  agc all=false
    172  1.3  agc # if no arg specified, we want them all
    173  1.3  agc if [ $# -eq 0 ]; then
    174  1.3  agc 	all=true
    175  1.3  agc fi
    176  1.3  agc 
    177  1.1  agc # if we want to do every one, then let's get the arguments
    178  1.1  agc # not really scalable
    179  1.1  agc if ${all}; then
    180  1.1  agc 	args='awk bind bzip2 calendar ftpd g++ gcc grep gzip httpd netbsd netpgp'
    181  1.5  agc 	args="${args} netpgpverify ntp openssl sqlite ssh sshd sys_info tcsh"
    182  1.7  agc 	args="${args} tzdata unbound xz"
    183  1.5  agc else
    184  1.5  agc 	args=$(echo $@ | tr ' ' '\n' | sort | uniq)
    185  1.1  agc fi
    186  1.5  agc set -- ${args}
    187  1.1  agc 
    188  1.1  agc while [ $# -gt 0 ]; do
    189  1.1  agc 	getversion $1
    190  1.1  agc 	shift
    191  1.1  agc done
    192