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