^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) #!/usr/bin/awk -f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) # SPDX-License-Identifier: GPL-2.0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) # Before running this script please ensure that your PATH is
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) # typical as you use for compilation/installation. I use
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) # /bin /sbin /usr/bin /usr/sbin /usr/local/bin, but it may
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) # differ on your system.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) BEGIN {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) usage = "If some fields are empty or look unusual you may have an old version.\n"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) usage = usage "Compare to the current minimal requirements in Documentation/Changes.\n"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) print usage
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) system("uname -a")
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) printf("\n")
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) vernum = "[0-9]+([.]?[0-9]+)+"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) libc = "libc[.]so[.][0-9]+$"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) libcpp = "(libg|stdc)[+]+[.]so[.][0-9]+$"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) printversion("GNU C", version("gcc -dumpversion"))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) printversion("GNU Make", version("make --version"))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) printversion("Binutils", version("ld -v"))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) printversion("Util-linux", version("mount --version"))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) printversion("Mount", version("mount --version"))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) printversion("Module-init-tools", version("depmod -V"))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) printversion("E2fsprogs", version("tune2fs"))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) printversion("Jfsutils", version("fsck.jfs -V"))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) printversion("Reiserfsprogs", version("reiserfsck -V"))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) printversion("Reiser4fsprogs", version("fsck.reiser4 -V"))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) printversion("Xfsprogs", version("xfs_db -V"))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) printversion("Pcmciautils", version("pccardctl -V"))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) printversion("Pcmcia-cs", version("cardmgr -V"))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) printversion("Quota-tools", version("quota -V"))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) printversion("PPP", version("pppd --version"))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) printversion("Isdn4k-utils", version("isdnctrl"))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) printversion("Nfs-utils", version("showmount --version"))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) printversion("Bison", version("bison --version"))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) printversion("Flex", version("flex --version"))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) while ("ldconfig -p 2>/dev/null" | getline > 0) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) if ($NF ~ libc && !seen[ver = version("readlink " $NF)]++)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) printversion("Linux C Library", ver)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) else if ($NF ~ libcpp && !seen[ver = version("readlink " $NF)]++)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) printversion("Linux C++ Library", ver)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) printversion("Dynamic linker (ldd)", version("ldd --version"))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) printversion("Procps", version("ps --version"))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) printversion("Net-tools", version("ifconfig --version"))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) printversion("Kbd", version("loadkeys -V"))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) printversion("Console-tools", version("loadkeys -V"))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) printversion("Oprofile", version("oprofiled --version"))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) printversion("Sh-utils", version("expr --v"))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) printversion("Udev", version("udevadm --version"))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) printversion("Wireless-tools", version("iwconfig --version"))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) while ("sort /proc/modules" | getline > 0) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) mods = mods sep $1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) sep = " "
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) printversion("Modules Loaded", mods)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) function version(cmd, ver) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) cmd = cmd " 2>&1"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) while (cmd | getline > 0) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) if (match($0, vernum)) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) ver = substr($0, RSTART, RLENGTH)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) break
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) close(cmd)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) return ver
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) function printversion(name, value, ofmt) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) if (value != "") {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) ofmt = "%-20s\t%s\n"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) printf(ofmt, name, value)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) }