34fe3cfda8
Currently, input coming from /proc/self/maps is split into fields without checking whether or not it matches libc.so. This is not efficient. All text processing should only be performed on lines of input that match libc.so. Signed-off-by: Alexander Kapshuk <alexander.kapshuk@gmail.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
88 lines
2.7 KiB
Awk
Executable File
88 lines
2.7 KiB
Awk
Executable File
#!/usr/bin/awk -f
|
|
# SPDX-License-Identifier: GPL-2.0
|
|
# 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"))
|
|
printversion("GNU Make", version("make --version"))
|
|
printversion("Binutils", version("ld -v"))
|
|
printversion("Util-linux", version("mount --version"))
|
|
printversion("Mount", version("mount --version"))
|
|
printversion("Module-init-tools", version("depmod -V"))
|
|
printversion("E2fsprogs", version("tune2fs"))
|
|
printversion("Jfsutils", version("fsck.jfs -V"))
|
|
printversion("Reiserfsprogs", version("reiserfsck -V"))
|
|
printversion("Reiser4fsprogs", version("fsck.reiser4 -V"))
|
|
printversion("Xfsprogs", version("xfs_db -V"))
|
|
printversion("Pcmciautils", version("pccardctl -V"))
|
|
printversion("Pcmcia-cs", version("cardmgr -V"))
|
|
printversion("Quota-tools", version("quota -V"))
|
|
printversion("PPP", version("pppd --version"))
|
|
printversion("Isdn4k-utils", version("isdnctrl"))
|
|
printversion("Nfs-utils", version("showmount --version"))
|
|
|
|
while (getline <"/proc/self/maps" > 0) {
|
|
if (/libc.*\.so$/) {
|
|
n = split($0, procmaps, "/")
|
|
if (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"))
|
|
|
|
while ("ldconfig -p 2>/dev/null" | getline > 0) {
|
|
if (/(libg|stdc)[+]+\.so/) {
|
|
libcpp = $NF
|
|
break
|
|
}
|
|
}
|
|
printversion("Linux C++ Library", version("readlink " libcpp))
|
|
printversion("Procps", version("ps --version"))
|
|
printversion("Net-tools", version("ifconfig --version"))
|
|
printversion("Kbd", version("loadkeys -V"))
|
|
printversion("Console-tools", version("loadkeys -V"))
|
|
printversion("Oprofile", version("oprofiled --version"))
|
|
printversion("Sh-utils", version("expr --v"))
|
|
printversion("Udev", version("udevadm --version"))
|
|
printversion("Wireless-tools", version("iwconfig --version"))
|
|
|
|
while ("sort /proc/modules" | getline > 0) {
|
|
mods = mods sep $1
|
|
sep = " "
|
|
}
|
|
printversion("Modules Loaded", mods)
|
|
}
|
|
|
|
function version(cmd, ver) {
|
|
cmd = cmd " 2>&1"
|
|
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)
|
|
}
|
|
}
|