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