command_dev_detect_glibc.sh 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. #!/bin/bash
  2. # LinuxGSM command_dev_detect_glibc.sh module
  3. # Author: Daniel Gibbs
  4. # Contributors: http://linuxgsm.com/contrib
  5. # Website: https://linuxgsm.com
  6. # Description: Automatically detects the version of GLIBC that is required.
  7. # Can check a file or directory recursively.
  8. commandname="DEV-DETECT-GLIBC"
  9. commandaction="Developer detect glibc"
  10. functionselfname="$(basename "$(readlink -f "${BASH_SOURCE[0]}")")"
  11. fn_firstcommand_set
  12. echo -e "================================="
  13. echo -e "glibc Requirements Checker"
  14. echo -e "================================="
  15. if [ ! "$(command -v objdump)" ]; then
  16. fn_print_failure_nl "objdump is missing"
  17. fn_script_log_fatal "objdump is missing"
  18. core_exit.sh
  19. fi
  20. if [ -z "${serverfiles}" ]; then
  21. dir=$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")
  22. fi
  23. if [ -d "${serverfiles}" ]; then
  24. echo -e "Checking directory: "
  25. echo -e "${serverfiles}"
  26. elif [ -f "${serverfiles}" ]; then
  27. echo -e "Checking file: "
  28. echo -e "${serverfiles}"
  29. fi
  30. echo -e ""
  31. glibc_check_dir_array=(steamcmddir serverfiles)
  32. for glibc_check_var in "${glibc_check_dir_array[@]}"; do
  33. if [ "${glibc_check_var}" == "serverfiles" ]; then
  34. glibc_check_dir="${serverfiles}"
  35. glibc_check_name="${gamename}"
  36. elif [ "${glibc_check_var}" == "steamcmddir" ]; then
  37. glibc_check_dir="${steamcmddir}"
  38. glibc_check_name="SteamCMD"
  39. fi
  40. if [ -d "${glibc_check_dir}" ]; then
  41. glibc_check_files=$(find "${glibc_check_dir}" | wc -l)
  42. find "${glibc_check_dir}" -type f -print0 \
  43. | while IFS= read -r -d $'\0' line; do
  44. glibcversion=$(objdump -T "${line}" 2> /dev/null | grep -oP "GLIBC[^ ]+" | grep -v GLIBCXX | sort | uniq | sort -r --version-sort | head -n 1)
  45. if [ "${glibcversion}" ]; then
  46. echo -e "${glibcversion}: ${line}" >> "${tmpdir}/detect_glibc_files_${glibc_check_var}.tmp"
  47. fi
  48. objdump -T "${line}" 2> /dev/null | grep -oP "GLIBC[^ ]+" >> "${tmpdir}/detect_glibc_${glibc_check_var}.tmp"
  49. echo -n "${i} / ${glibc_check_files}" $'\r'
  50. ((i++))
  51. done
  52. echo -e ""
  53. echo -e ""
  54. echo -e "${glibc_check_name} glibc Requirements"
  55. echo -e "================================="
  56. if [ -f "${tmpdir}/detect_glibc_files_${glibc_check_var}.tmp" ]; then
  57. echo -e "Required glibc"
  58. cat "${tmpdir}/detect_glibc_${glibc_check_var}.tmp" | sort | uniq | sort -r --version-sort | head -1 | tee -a "${tmpdir}/detect_glibc_highest.tmp"
  59. echo -e ""
  60. echo -e "Files requiring GLIBC"
  61. echo -e "Highest verion required: filename"
  62. cat "${tmpdir}/detect_glibc_files_${glibc_check_var}.tmp"
  63. echo -e ""
  64. echo -e "All required GLIBC versions"
  65. cat "${tmpdir}/detect_glibc_${glibc_check_var}.tmp" | sort | uniq | sort -r --version-sort
  66. rm -f "${tmpdir:?}/detect_glibc_${glibc_check_var}.tmp"
  67. rm -f "${tmpdir:?}/detect_glibc_files_${glibc_check_var}.tmp"
  68. else
  69. fn_print_information_nl "glibc is not required"
  70. fi
  71. else
  72. fn_print_information_nl "${glibc_check_name} is not installed"
  73. fi
  74. done
  75. echo -e ""
  76. echo -e "Final glibc Requirement"
  77. echo -e "================================="
  78. if [ -f "${tmpdir}/detect_glibc_highest.tmp" ]; then
  79. cat "${tmpdir}/detect_glibc_highest.tmp" | sort | uniq | sort -r --version-sort | head -1
  80. rm -f "${tmpdir:?}/detect_glibc_highest.tmp"
  81. else
  82. fn_print_information_nl "glibc is not required"
  83. fi
  84. core_exit.sh