* [PATCH 1/3] ver_linux: complete awk implementation @ 2016-08-22 18:19 Alexander Kapshuk 2016-08-22 18:19 ` [PATCH 2/3] ver_linux: shell implementation removed Alexander Kapshuk 2016-08-22 18:19 ` [PATCH 3/3] ver_linux: rename ver_linux.awk to ver_linux Alexander Kapshuk 0 siblings, 2 replies; 3+ messages in thread From: Alexander Kapshuk @ 2016-08-22 18:19 UTC (permalink / raw) To: linux-kernel; +Cc: gregkh, Alexander Kapshuk The algorithm that extracts the version number of the utility being queried, and prints the name of the utility and its version number is currently implemented in awk. The code is used throughout the script, making its use repetative. The proposed implementation confines the algorithm in question to a function, which makes the script easier to read overall, as well as considerably reduces the number of lines of code. Every attempt has been made to retain the look and the format generated by the current implementation. Signed-off-by: Alexander Kapshuk <alexander.kapshuk@gmail.com> --- scripts/ver_linux.awk | 89 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100755 scripts/ver_linux.awk diff --git a/scripts/ver_linux.awk b/scripts/ver_linux.awk new file mode 100755 index 0000000..430b201 --- /dev/null +++ b/scripts/ver_linux.awk @@ -0,0 +1,89 @@ +#!/bin/awk -f +# Before running this script please ensure that your PATH is +# typical as you use for compilation/installation. I use +# /bin /sbin /usr/bin /usr/sbin /usr/local/bin, but it may +# differ on your system. + +BEGIN { + usage = "If some fields are empty or look unusual you may have an old version.\n" + usage = usage "Compare to the current minimal requirements in Documentation/Changes.\n" + print usage + + system("uname -a") + printf("\n") + + printversion("GNU C", version("gcc -dumpversion 2>&1")) + printversion("GNU Make", version("make --version 2>&1")) + printversion("Binutils", version("ld -v 2>&1")) + printversion("Util-linux", version("mount --version 2>&1")) + printversion("Mount", version("mount --version 2>&1")) + printversion("Module-init-tools", version("depmod -V 2>&1")) + printversion("E2fsprogs", version("tune2fs 2>&1")) + printversion("Jfsutils", version("fsck.jfs -V 2>&1")) + printversion("Reiserfsprogs", version("reiserfsck -V 2>&1")) + printversion("Reiser4fsprogs", version("fsck.reiser4 -V 2>&1")) + printversion("Xfsprogs", version("xfs_db -V 2>&1")) + printversion("Pcmciautils", version("pccardctl -V 2>&1")) + printversion("Pcmcia-cs", version("cardmgr -V 2>&1")) + printversion("Quota-tools", version("quota -V 2>&1")) + printversion("PPP", version("pppd --version 2>&1")) + printversion("Isdn4k-utils", version("isdnctrl 2>&1")) + printversion("Nfs-utils", version("showmount --version 2>&1")) + + if (system("test -r /proc/self/maps") == 0) { + while (getline <"/proc/self/maps" > 0) { + n = split($0, procmaps, "/") + if (/libc.*so$/ && match(procmaps[n], /[0-9]+([.]?[0-9]+)+/)) { + ver = substr(procmaps[n], RSTART, RLENGTH) + printversion("Linux C Library", ver) + break + } + } + } + + printversion("Dynamic linker (ldd)", version("ldd --version 2>&1")) + + while ("ldconfig -p 2>/dev/null" | getline > 0) { + if (/(libg|stdc)[+]+\.so/) { + libcpp = $NF + break + } + } + if (system("test -r " libcpp) == 0) + printversion("Linux C++ Library", version("readlink " libcpp)) + + printversion("Procps", version("ps --version 2>&1")) + printversion("Net-tools", version("ifconfig --version 2>&1")) + printversion("Kbd", version("loadkeys -V 2>&1")) + printversion("Console-tools", version("loadkeys -V 2>&1")) + printversion("Oprofile", version("oprofiled --version 2>&1")) + printversion("Sh-utils", version("expr --v 2>&1")) + printversion("Udev", version("udevadm --version 2>&1")) + printversion("Wireless-tools", version("iwconfig --version 2>&1")) + + if (system("test -r /proc/modules") == 0) { + while ("sort /proc/modules" | getline > 0) { + mods = mods sep $1 + sep = " " + } + printversion("Modules Loaded", mods) + } +} + +function version(cmd, ver) { + while (cmd | getline > 0) { + if (!/ver_linux/ && match($0, /[0-9]+([.]?[0-9]+)+/)) { + ver = substr($0, RSTART, RLENGTH) + break + } + } + close(cmd) + return ver +} + +function printversion(name, value, ofmt) { + if (value != "") { + ofmt = "%-20s\t%s\n" + printf(ofmt, name, value) + } +} -- 2.7.3 ^ permalink raw reply [flat|nested] 3+ messages in thread
* [PATCH 2/3] ver_linux: shell implementation removed 2016-08-22 18:19 [PATCH 1/3] ver_linux: complete awk implementation Alexander Kapshuk @ 2016-08-22 18:19 ` Alexander Kapshuk 2016-08-22 18:19 ` [PATCH 3/3] ver_linux: rename ver_linux.awk to ver_linux Alexander Kapshuk 1 sibling, 0 replies; 3+ messages in thread From: Alexander Kapshuk @ 2016-08-22 18:19 UTC (permalink / raw) To: linux-kernel; +Cc: gregkh, Alexander Kapshuk The shell implementation removed. To be replaced with an all-awk implementation via consecutive patch. Signed-off-by: Alexander Kapshuk <alexander.kapshuk@gmail.com> --- scripts/ver_linux | 193 ------------------------------------------------------ 1 file changed, 193 deletions(-) delete mode 100755 scripts/ver_linux diff --git a/scripts/ver_linux b/scripts/ver_linux deleted file mode 100755 index 0d8bd29..0000000 --- a/scripts/ver_linux +++ /dev/null @@ -1,193 +0,0 @@ -#!/bin/sh -# Before running this script please ensure that your PATH is -# typical as you use for compilation/installation. I use -# /bin /sbin /usr/bin /usr/sbin /usr/local/bin, but it may -# differ on your system. -# -echo 'If some fields are empty or look unusual you may have an old version.' -echo 'Compare to the current minimal requirements in Documentation/Changes.' -echo ' ' - -uname -a -echo ' ' - -gcc -dumpversion 2>&1 | -awk '/[0-9]+([.]?[0-9]+)+/ && !/not found$/{ - match($0, /[0-9]+([.]?[0-9]+)+/) - printf("GNU C\t\t\t%s\n", - substr($0,RSTART,RLENGTH)) -}' - -make --version 2>&1 | -awk '/GNU Make/{ - match($0, /[0-9]+([.]?[0-9]+)+/) - printf("GNU Make\t\t%s\n", - substr($0,RSTART,RLENGTH)) -}' - -ld -v 2>&1 | -awk '/[0-9]+([.]?[0-9]+)+/ && !/not found$/{ - match($0, /[0-9]+([.]?[0-9]+)+/) - printf("Binutils\t\t%s\n", - substr($0,RSTART,RLENGTH)) -}' - -mount --version 2>&1 | -awk '/[0-9]+([.]?[0-9]+)+/ && !/not found$/{ - match($0, /[0-9]+([.]?[0-9]+)+/) - $0 = substr($0,RSTART,RLENGTH) - printf("Util-linux\t\t%s\nMount\t\t\t%s\n",$0,$0) -}' - -depmod -V 2>&1 | -awk '/[0-9]+([.]?[0-9]+)+/ && !/not found$/{ - match($0, /[0-9]+([.]?[0-9]+)+/) - printf("Module-init-tools\t%s\n", - substr($0,RSTART,RLENGTH)) -}' - -tune2fs 2>&1 | -awk '/^tune2fs/{ - match($0, /[0-9]+([.]?[0-9]+)+/) - printf("E2fsprogs\t\t%s\n", - substr($0,RSTART,RLENGTH)) -}' - -fsck.jfs -V 2>&1 | -awk '/version/{ - match($0, /[0-9]+([.]?[0-9]+)+/) - printf("Jfsutils\t\t%s\n", - substr($0,RSTART,RLENGTH)) -}' - -reiserfsck -V 2>&1 | -awk '/^reiserfsck/{ - match($0, /[0-9]+([.]?[0-9]+)+/) - printf("Reiserfsprogs\t\t%s\n", - substr($0,RSTART,RLENGTH)) -}' - -fsck.reiser4 -V 2>&1 | grep ^fsck.reiser4 | awk \ -'NR==1{print "reiser4progs ", $2}' - -xfs_db -V 2>&1 | -awk '/version/{ - match($0, /[0-9]+([.]?[0-9]+)+/) - printf("Xfsprogs\t\t%s\n", - substr($0,RSTART,RLENGTH)) -}' - -pccardctl -V 2>&1 | -awk '/pcmciautils/{ - match($0, /[0-9]+([.]?[0-9]+)+/) - printf("Pcmciautils\t\t%s\n", - substr($0,RSTART,RLENGTH)) -}' - -cardmgr -V 2>&1| grep version | awk \ -'NR==1{print "pcmcia-cs ", $3}' - -quota -V 2>&1 | -awk '/version/{ - match($0, /[0-9]+([.]?[0-9]+)+/) - printf("Quota-tools\t\t%s\n", - substr($0,RSTART,RLENGTH)) -}' - -pppd --version 2>&1 | -awk '/version/{ - match($0, /[0-9]+([.]?[0-9]+)+/) - printf("PPP\t\t\t%s\n", - substr($0,RSTART,RLENGTH)) -}' - -isdnctrl 2>&1 | grep version | awk \ -'NR==1{print "isdn4k-utils ", $NF}' - -showmount --version 2>&1 | grep nfs-utils | awk \ -'NR==1{print "nfs-utils ", $NF}' - -test -r /proc/self/maps && -sed ' - /.*libc-\(.*\)\.so$/!d - s//Linux C Library\t\t\1/ - q -' /proc/self/maps - -ldd --version 2>&1 | -awk '/^ldd/{ - match($0, /[0-9]+([.]?[0-9]+)+/) - printf("Dynamic linker (ldd)\t%s\n", - substr($0,RSTART,RLENGTH)) -}' - -libcpp=`ldconfig -p 2>/dev/null | - awk '/(libg|stdc)[+]+\.so/ { - print $NF - exit - } -'` -test -r "$libcpp" && -ls -l $libcpp | -sed ' - s!.*so\.!! - s!^!Linux C++ Library\t! -' -ps --version 2>&1 | -awk '/version/{ - match($0, /[0-9]+([.]?[0-9]+)+/) - printf("Procps\t\t\t%s\n", - substr($0,RSTART,RLENGTH)) -}' - -ifconfig --version 2>&1 | -awk '/tools/{ - match($0, /[0-9]+([.]?[0-9]+)+/) - printf("Net-tools\t\t%s\n", - substr($0,RSTART,RLENGTH)) -}' - -loadkeys -V 2>&1 | -awk '/[0-9]+([.]?[0-9]+)+/ && !/not found$/{ - match($0, /[0-9]+([.]?[0-9]+)+/) - $0 = substr($0,RSTART,RLENGTH) - printf("Kbd\t\t\t%s\nConsole-tools\t\t%s\n",$0,$0) -}' - -oprofiled --version 2>&1 | awk \ -'(NR==1 && ($2 == "oprofile")) {print "oprofile ", $3}' - -expr --v 2>&1 | -awk '/^expr/{ - match($0, /[0-9]+([.]?[0-9]+)+/) - printf("Sh-utils\t\t%s\n", - substr($0,RSTART,RLENGTH)) -}' - -udevadm --version 2>&1 | -awk '/[0-9]+([.]?[0-9]+)+/ && !/not found$/{ - match($0, /[0-9]+([.]?[0-9]+)+/) - printf("Udev\t\t\t%s\n", - substr($0,RSTART,RLENGTH)) -}' - -iwconfig --version 2>&1 | -awk '/version/{ - match($0, /[0-9]+([.]?[0-9]+)+/) - printf("Wireless-tools\t\t%s\n", - substr($0,RSTART,RLENGTH)) -}' - -test -e /proc/modules && -sort /proc/modules | -sed ' - s/ .*// - H -${ - g - s/^\n/Modules Loaded\t\t/ - y/\n/ / - q -} - d -' -- 2.7.3 ^ permalink raw reply [flat|nested] 3+ messages in thread
* [PATCH 3/3] ver_linux: rename ver_linux.awk to ver_linux 2016-08-22 18:19 [PATCH 1/3] ver_linux: complete awk implementation Alexander Kapshuk 2016-08-22 18:19 ` [PATCH 2/3] ver_linux: shell implementation removed Alexander Kapshuk @ 2016-08-22 18:19 ` Alexander Kapshuk 1 sibling, 0 replies; 3+ messages in thread From: Alexander Kapshuk @ 2016-08-22 18:19 UTC (permalink / raw) To: linux-kernel; +Cc: gregkh, Alexander Kapshuk ver_linux.awk renamed to ver_linux. Signed-off-by: Alexander Kapshuk <alexander.kapshuk@gmail.com> --- scripts/{ver_linux.awk => ver_linux} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename scripts/{ver_linux.awk => ver_linux} (100%) diff --git a/scripts/ver_linux.awk b/scripts/ver_linux similarity index 100% rename from scripts/ver_linux.awk rename to scripts/ver_linux -- 2.7.3 ^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2016-08-22 18:20 UTC | newest] Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2016-08-22 18:19 [PATCH 1/3] ver_linux: complete awk implementation Alexander Kapshuk 2016-08-22 18:19 ` [PATCH 2/3] ver_linux: shell implementation removed Alexander Kapshuk 2016-08-22 18:19 ` [PATCH 3/3] ver_linux: rename ver_linux.awk to ver_linux Alexander Kapshuk
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®