Changes to sys_info (20170821)

+ get rid of -a argument, which was superfluous since no arguments
means provide information on everything known

+ add the shell function to check for the path of a program. Taken
from pkgsrc bootstrap script, modified for return values, and "not
found" action

+ use this shell function for tcsh and unbound, both of which may not
exist on systems

+ go back to using standard shell construct for parsing options now,
since there is only 1 option with no optargs

+ from a suggestion from Paul Goyette, run the provided arguments
through sort | uniq

+ add sys_info itself to the list of programs to report
This commit is contained in:
agc 2017-08-21 19:22:31 +00:00
parent c59e7c75da
commit 8df5d7616d
2 changed files with 66 additions and 21 deletions

View File

@ -1,4 +1,4 @@
.\" $NetBSD: sys_info.1,v 1.1 2016/06/04 15:27:11 agc Exp $
.\" $NetBSD: sys_info.1,v 1.2 2017/08/21 19:22:31 agc Exp $
.\"
.\" Copyright (c) 2016 Alistair Crooks <agc@NetBSD.org>
.\" All rights reserved.
@ -23,7 +23,7 @@
.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
.\"
.Dd June 1, 2016
.Dd August 21, 2017
.Dt SYS_INFO 1
.Os
.Sh NAME
@ -31,7 +31,7 @@
.Nd script to show versioning information
.Sh SYNOPSIS
.Nm
.Op Fl av
.Op Fl v
.Op Ar
.Sh DESCRIPTION
The
@ -44,13 +44,23 @@ The
utility uses a combination of ways to retrieve version
information from the installed utilities.
.Sh OPTIONS
The following options are available:
The following option is available:
.Bl -tag -width inits
.It Fl a
Show the version numbers of all components.
.It Fl v
Perform the operations in a verbose manner.
Perform operations in a verbose manner.
.El
.Pp
Arguments may be given to sys_info.
If any arguments are specified, they are assumed
to be names of programs, or shared libraries,
installed on the system.
If no arguments are provided, then all of the
items that are known to
.Nm
are reported.
.Pp
If arguments are provided, the output is displayed in
alphabetical order, and duplicates are removed.
.Sh SEE ALSO
.Xr awk 1 ,
.Xr strings 1

View File

@ -1,6 +1,6 @@
#! /bin/sh
# $NetBSD: sys_info.sh,v 1.4 2017/08/20 10:17:55 martin Exp $
# $NetBSD: sys_info.sh,v 1.5 2017/08/21 19:22:31 agc Exp $
# Copyright (c) 2016 Alistair Crooks <agc@NetBSD.org>
# All rights reserved.
@ -26,8 +26,33 @@
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
SYS_INFO_VERSION=20170821
LD_LIBRARY_PATH=${LD_LIBRARY_PATH:-/usr/lib:/usr/X11R7/lib}
# short script to look for an executable $2, and if found, to place
# path in $1
# taken from pkgsrc bootstrap
which_prog()
{
_var="$1"; _name="$2"
eval _tmp=\"\$$_var\"
if [ "x$_tmp" != "x" ]; then
# Variable is already set (by the user, for example)
return 0
fi
for _d in `echo $PATH | tr ':' ' '`; do
if [ -f "$_d/$_name" ] && [ -x "$_d/$_name" ]; then
# Program found
eval $_var=\""$_d/$_name"\"
return 0
fi
done
return 1
}
# print out the version for the given argument
getversion() {
case "$1" in
@ -106,15 +131,22 @@ getversion() {
sshd)
sshd -V 2>&1 | awk '/OpenSSH/ { sub("_", "D-", $1); print tolower($1) }'
;;
sys_info)
echo sys_info-${SYS_INFO_VERSION}
;;
tcsh)
grep '/tcsh' /etc/shells > /dev/null 2>&1 && tcsh --version | awk '{ print $1 "-" $2 }'
if which_prog tcshpath tcsh; then
${tcshpath} -c 'echo $version' | awk '{ print $1 "-" $2 }'
else
echo "tcsh: not found"
fi
;;
unbound)
case $(uname -s) in
FreeBSD)
unbound-control -h | awk '/^Version/ { print "unbound-" $2 }'
;;
esac
if which_prog unboundpath unbound-control; then
${unboundpath} -h | awk '/^Version/ { print "unbound-" $2 }'
else
echo "unbound: not found"
fi
;;
xz)
xz --version | awk '{ print $1 "-" $4; exit }'
@ -122,16 +154,16 @@ getversion() {
esac
}
all=false
while getopts "av" a; do
case "${a}" in
a) all=true ;;
v) set -x ;;
# check if we have our only option
while [ $# -gt 0 ]; do
case "$1" in
-v) set -x ;;
*) break ;;
esac
shift
done
all=false
# if no arg specified, we want them all
if [ $# -eq 0 ]; then
all=true
@ -141,9 +173,12 @@ fi
# not really scalable
if ${all}; then
args='awk bind bzip2 calendar ftpd g++ gcc grep gzip httpd netbsd netpgp'
args="${args} netpgpverify ntp openssl sqlite ssh sshd tcsh unbound xz"
set -- ${args}
args="${args} netpgpverify ntp openssl sqlite ssh sshd sys_info tcsh"
args="${args} unbound xz"
else
args=$(echo $@ | tr ' ' '\n' | sort | uniq)
fi
set -- ${args}
while [ $# -gt 0 ]; do
getversion $1