diff --git a/projects/amdsmi/CMakeLists.txt b/projects/amdsmi/CMakeLists.txt index f2048cd86a..3fb9733f03 100755 --- a/projects/amdsmi/CMakeLists.txt +++ b/projects/amdsmi/CMakeLists.txt @@ -247,12 +247,12 @@ install( #Debian package specific variables set(CPACK_DEBIAN_PACKAGE_PROVIDES "amd-smi") -set(CPACK_DEBIAN_PACKAGE_RECOMMENDS "sudo, python3-argcomplete, libdrm-dev, python3-yaml") +set(CPACK_DEBIAN_PACKAGE_RECOMMENDS "python3-argcomplete, libdrm-dev, python3-yaml") set(CPACK_DEBIAN_ASAN_PACKAGE_RECOMMENDS ${CPACK_DEBIAN_PACKAGE_RECOMMENDS}) set(CPACK_DEBIAN_DEV_PACKAGE_RECOMMENDS ${CPACK_DEBIAN_PACKAGE_RECOMMENDS}) set(CPACK_DEBIAN_ASAN_PACKAGE_PROVIDES "${AMD_SMI_PACKAGE}-asan") set(CPACK_DEBIAN_DEV_PACKAGE_PROVIDES "${AMD_SMI_PACKAGE}") -set(CPACK_DEBIAN_PACKAGE_DEPENDS "python3 (>= 3.6.8), python3-pip") +set(CPACK_DEBIAN_PACKAGE_DEPENDS "sudo, python3 (>= 3.6.8), python3-pip") set(CPACK_DEBIAN_ASAN_PACKAGE_DEPENDS ${CPACK_DEBIAN_PACKAGE_DEPENDS}) set(CPACK_DEBIAN_DEV_PACKAGE_DEPENDS ${CPACK_DEBIAN_PACKAGE_DEPENDS}) @@ -271,11 +271,12 @@ endif() set(CPACK_RPM_PACKAGE_PROVIDES "amd-smi") set(CPACK_RPM_DEV_PACKAGE_PROVIDES "${AMD_SMI_PACKAGE}") set(CPACK_RPM_ASAN_PACKAGE_PROVIDES "${AMD_SMI_PACKAGE}-asan") +# NOTE: RPM SUGGESTS DO NOT WORK! https://bugzilla.redhat.com/show_bug.cgi?id=1811358 set(CPACK_RPM_PACKAGE_SUGGESTS "python3-argcomplete") set(CPACK_RPM_DEV_PACKAGE_SUGGESTS ${CPACK_RPM_PACKAGE_SUGGESTS}) set(CPACK_RPM_ASAN_PACKAGE_SUGGESTS ${CPACK_RPM_PACKAGE_SUGGESTS}) # python version gated by rhel8 :( -set(CPACK_RPM_PACKAGE_REQUIRES "python3 >= 3.6.8, python3-pip, python3-PyYAML") +set(CPACK_RPM_PACKAGE_REQUIRES "sudo, python3 >= 3.6.8, python3-pip, python3-PyYAML") set(CPACK_RPM_DEV_PACKAGE_REQUIRES ${CPACK_RPM_PACKAGE_REQUIRES}) set(CPACK_RPM_ASAN_PACKAGE_REQUIRES ${CPACK_RPM_PACKAGE_REQUIRES}) diff --git a/projects/amdsmi/DEBIAN/postinst.in b/projects/amdsmi/DEBIAN/postinst.in index 6b558b2dd4..5aad321de0 100755 --- a/projects/amdsmi/DEBIAN/postinst.in +++ b/projects/amdsmi/DEBIAN/postinst.in @@ -105,7 +105,6 @@ do_ldconfig() { } do_install_amdsmi_python_lib() { - echo "Installing AMD-SMI python library (amdsmi)..." # get python version local python3_minor_version python3_minor_version=$(python3 -c 'import sys;print(sys.version_info.minor)') @@ -123,8 +122,11 @@ do_install_amdsmi_python_lib() { return fi - local PREVIOUS_PIP_ROOT_ACTION="$PIP_ROOT_USER_ACTION" + local PREVIOUS_PIP_ROOT_USER_ACTION="$PIP_ROOT_USER_ACTION" export PIP_ROOT_USER_ACTION=ignore + # python3.11 requires --break-system-packages + local PREVIOUS_PIP_BREAK_SYSTEM_PACKAGES="$PIP_BREAK_SYSTEM_PACKAGES" + export PIP_BREAK_SYSTEM_PACKAGES=1 # Remove old python library local pip_list_output @@ -140,21 +142,21 @@ do_install_amdsmi_python_lib() { local python_lib_path=@CPACK_PACKAGING_INSTALL_PREFIX@/@SHARE_INSTALL_PREFIX@ python3 -m pip install "$python_lib_path" --quiet --disable-pip-version-check - unset PIP_ROOT_USER_ACTION - export PIP_ROOT_USER_ACTION="$PREVIOUS_PIP_ROOT_ACTION" + export PIP_ROOT_USER_ACTION="$PREVIOUS_PIP_ROOT_USER_ACTION" + export PIP_BREAK_SYSTEM_PACKAGES="$PREVIOUS_PIP_BREAK_SYSTEM_PACKAGES" - pip_list_output=$(python3 -m pip list --disable-pip-version-check) - # check pip list output for argcomplete - if [[ $pip_list_output == *"argcomplete"* ]]; then - activate-global-python-argcomplete3 - # Newer versions of argcomplete do not have the 3 at the end - if [ $? -ne 0 ]; then - echo "[WARNING] Could not find activate-global-python-argcomplete3. "\ - "Trying newer activate-global-python-argcomplete..." - activate-global-python-argcomplete + # only try to activate argcomplete if such command exists + if command -v activate-global-python-argcomplete &>/dev/null; then + activate-global-python-argcomplete + else + # try older argcomplete3 version + if command -v activate-global-python-argcomplete3 &>/dev/null; then + activate-global-python-argcomplete3 + else + echo "[WARNING] Could not find argcomplete or argcomplete3. "\ + "Argument completion will not work..." fi fi - echo "Installed AMD-SMI python library (amdsmi)..." } case "$1" in diff --git a/projects/amdsmi/DEBIAN/prerm.in b/projects/amdsmi/DEBIAN/prerm.in index 7295b3a0ce..d5b7cfb08a 100755 --- a/projects/amdsmi/DEBIAN/prerm.in +++ b/projects/amdsmi/DEBIAN/prerm.in @@ -10,15 +10,17 @@ rm_ldconfig() { rm_leftovers() { # remove pyc files generated by python - rm -rf @CPACK_PACKAGING_INSTALL_PREFIX@/@CMAKE_INSTALL_LIBEXECDIR@/amdsmi_cli/__pycache__ - rm -rf @CPACK_PACKAGING_INSTALL_PREFIX@/@SHARE_INSTALL_PREFIX@/amdsmi/__pycache__ + rm -rf "@CPACK_PACKAGING_INSTALL_PREFIX@/@CMAKE_INSTALL_LIBEXECDIR@/amdsmi_cli/__pycache__" + rm -rf "@CPACK_PACKAGING_INSTALL_PREFIX@/@SHARE_INSTALL_PREFIX@/amdsmi/__pycache__" + + # remove build and egg files + rm -rf "@CPACK_PACKAGING_INSTALL_PREFIX@/@SHARE_INSTALL_PREFIX@/amdsmi.egg-info" + rm -rf "@CPACK_PACKAGING_INSTALL_PREFIX@/@SHARE_INSTALL_PREFIX@/build" # remove leftover doc files - rm -rf @CPACK_PACKAGING_INSTALL_PREFIX@/@SHARE_INSTALL_PREFIX@/../doc/amd_smi* - rm -rf @CPACK_PACKAGING_INSTALL_PREFIX@/@SHARE_INSTALL_PREFIX@/ - - # remove leftover libs - rm -rf @CPACK_PACKAGING_INSTALL_PREFIX@/@CMAKE_INSTALL_LIBDIR@/libamd_smi.so* + if test -e "@CPACK_PACKAGING_INSTALL_PREFIX@/@SHARE_INSTALL_PREFIX@/../doc/amd_smi*"; then + rm -rf "@CPACK_PACKAGING_INSTALL_PREFIX@/@SHARE_INSTALL_PREFIX@/../doc/amd_smi*" + fi } rm_logFolder() { @@ -41,7 +43,6 @@ return_logrotateToOrigConfig() { } rm_python_lib() { - echo "Removing AMD-SMI python library (amdsmi)..." # get python version local python3_minor_version python3_minor_version=$(python3 -c 'import sys;print(sys.version_info.minor)') @@ -63,26 +64,17 @@ rm_python_lib() { pip_list_output=$(python3 -m pip list --disable-pip-version-check) # check pip list output for amdsmi if [[ $pip_list_output == *"amdsmi"* ]]; then - local PREVIOUS_PIP_ROOT_ACTION="$PIP_ROOT_USER_ACTION" - export PIP_ROOT_USER_ACTION=ignore - - echo "Detected AMD-SMI python library (amdsmi)..." - python3 -m pip uninstall amdsmi --yes --quiet --disable-pip-version-check - echo "Removed AMD-SMI python library (amdsmi)..." - - unset PIP_ROOT_USER_ACTION - export PIP_ROOT_USER_ACTION="$PREVIOUS_PIP_ROOT_ACTION" + PIP_ROOT_USER_ACTION=ignore PIP_BREAK_SYSTEM_PACKAGES=1 python3 -m pip uninstall amdsmi --yes --quiet --disable-pip-version-check fi - local pip_list_output pip_list_output=$(python3 -m pip list --disable-pip-version-check) # check pip list output for amdsmi if [[ $pip_list_output == *"amdsmi"* ]]; then echo "[WARNING] AMD-SMI python library (amdsmi) is still installed in pip. "\ "Check post install to ensure version is correct" - return + else + echo "Removed AMD-SMI python library (amdsmi)..." fi - echo "Removed AMD-SMI python library (amdsmi)..." } diff --git a/projects/amdsmi/RPM/post.in b/projects/amdsmi/RPM/post.in index 1f3d0ced42..cca34aa9ee 100755 --- a/projects/amdsmi/RPM/post.in +++ b/projects/amdsmi/RPM/post.in @@ -12,8 +12,7 @@ do_configureLogrotate() { chmod -R a+rw "${logPath}" chmod a+rw "${logFile}" - command -v logrotate &>/dev/null - if [ $? -ne 0 ]; then + if ! command -v logrotate &>/dev/null; then echo "[WARNING] Detected logrotate is not installed."\ "$packageName logs (when turned on) will not rotate properly." return @@ -105,7 +104,6 @@ do_ldconfig() { } do_install_amdsmi_python_lib() { - echo "Installing AMD-SMI python library (amdsmi)..." # get python version local python3_minor_version python3_minor_version=$(python3 -c 'import sys;print(sys.version_info.minor)') @@ -123,8 +121,11 @@ do_install_amdsmi_python_lib() { return fi - local PREVIOUS_PIP_ROOT_ACTION="$PIP_ROOT_USER_ACTION" + local PREVIOUS_PIP_ROOT_USER_ACTION="$PIP_ROOT_USER_ACTION" export PIP_ROOT_USER_ACTION=ignore + # python3.11 requires --break-system-packages + local PREVIOUS_PIP_BREAK_SYSTEM_PACKAGES="$PIP_BREAK_SYSTEM_PACKAGES" + export PIP_BREAK_SYSTEM_PACKAGES=1 # Remove old python library local pip_list_output @@ -140,21 +141,21 @@ do_install_amdsmi_python_lib() { local python_lib_path=@CPACK_PACKAGING_INSTALL_PREFIX@/@SHARE_INSTALL_PREFIX@ python3 -m pip install "$python_lib_path" --quiet --disable-pip-version-check - unset PIP_ROOT_USER_ACTION - export PIP_ROOT_USER_ACTION="$PREVIOUS_PIP_ROOT_ACTION" + export PIP_ROOT_USER_ACTION="$PREVIOUS_PIP_ROOT_USER_ACTION" + export PIP_BREAK_SYSTEM_PACKAGES="$PREVIOUS_PIP_BREAK_SYSTEM_PACKAGES" - pip_list_output=$(python3 -m pip list --disable-pip-version-check) - # check pip list output for argcomplete - if [[ $pip_list_output == *"argcomplete"* ]]; then - activate-global-python-argcomplete3 - # Newer versions of argcomplete do not have the 3 at the end - if [ $? -ne 0 ]; then - echo "[WARNING] Could not find activate-global-python-argcomplete3. "\ - "Trying newer activate-global-python-argcomplete..." - activate-global-python-argcomplete + # only try to activate argcomplete if such command exists + if command -v activate-global-python-argcomplete &>/dev/null; then + activate-global-python-argcomplete + else + # try older argcomplete3 version + if command -v activate-global-python-argcomplete3 &>/dev/null; then + activate-global-python-argcomplete3 + else + echo "[WARNING] Could not find argcomplete or argcomplete3. "\ + "Argument completion will not work..." fi fi - echo "Installed AMD-SMI python library (amdsmi)..." } # post install or upgrade, $i is 1 or 2 -> do these actions diff --git a/projects/amdsmi/RPM/preun.in b/projects/amdsmi/RPM/preun.in index f3ec8ed5d6..1e1a896c95 100755 --- a/projects/amdsmi/RPM/preun.in +++ b/projects/amdsmi/RPM/preun.in @@ -2,15 +2,17 @@ rm_leftovers() { # remove pyc files generated by python - rm -rf @CPACK_PACKAGING_INSTALL_PREFIX@/@CMAKE_INSTALL_LIBEXECDIR@/amdsmi_cli/__pycache__ - rm -rf @CPACK_PACKAGING_INSTALL_PREFIX@/@SHARE_INSTALL_PREFIX@/amdsmi/__pycache__ + rm -rf "@CPACK_PACKAGING_INSTALL_PREFIX@/@CMAKE_INSTALL_LIBEXECDIR@/amdsmi_cli/__pycache__" + rm -rf "@CPACK_PACKAGING_INSTALL_PREFIX@/@SHARE_INSTALL_PREFIX@/amdsmi/__pycache__" + + # remove build and egg files + rm -rf "@CPACK_PACKAGING_INSTALL_PREFIX@/@SHARE_INSTALL_PREFIX@/amdsmi.egg-info" + rm -rf "@CPACK_PACKAGING_INSTALL_PREFIX@/@SHARE_INSTALL_PREFIX@/build" # remove leftover doc files - rm -rf @CPACK_PACKAGING_INSTALL_PREFIX@/@SHARE_INSTALL_PREFIX@/../doc/amd_smi* - rm -rf @CPACK_PACKAGING_INSTALL_PREFIX@/@SHARE_INSTALL_PREFIX@/ - - # remove leftover libs - rm -rf @CPACK_PACKAGING_INSTALL_PREFIX@/@CMAKE_INSTALL_LIBDIR@/libamd_smi.so* + if test -e "@CPACK_PACKAGING_INSTALL_PREFIX@/@SHARE_INSTALL_PREFIX@/../doc/amd_smi*"; then + rm -rf "@CPACK_PACKAGING_INSTALL_PREFIX@/@SHARE_INSTALL_PREFIX@/../doc/amd_smi*" + fi } rm_logFolder() { @@ -33,7 +35,6 @@ return_logrotateToOrigConfig() { } rm_python_lib() { - echo "Removing AMD-SMI python library (amdsmi)..." # get python version local python3_minor_version python3_minor_version=$(python3 -c 'import sys;print(sys.version_info.minor)') @@ -55,26 +56,17 @@ rm_python_lib() { pip_list_output=$(python3 -m pip list --disable-pip-version-check) # check pip list output for amdsmi if [[ $pip_list_output == *"amdsmi"* ]]; then - local PREVIOUS_PIP_ROOT_ACTION="$PIP_ROOT_USER_ACTION" - export PIP_ROOT_USER_ACTION=ignore - - echo "Detected AMD-SMI python library (amdsmi)..." - python3 -m pip uninstall amdsmi --yes --quiet --disable-pip-version-check - echo "Removed AMD-SMI python library (amdsmi)..." - - unset PIP_ROOT_USER_ACTION - export PIP_ROOT_USER_ACTION="$PREVIOUS_PIP_ROOT_ACTION" + PIP_ROOT_USER_ACTION=ignore PIP_BREAK_SYSTEM_PACKAGES=1 python3 -m pip uninstall amdsmi --yes --quiet --disable-pip-version-check fi - local pip_list_output pip_list_output=$(python3 -m pip list --disable-pip-version-check) # check pip list output for amdsmi if [[ $pip_list_output == *"amdsmi"* ]]; then echo "[WARNING] AMD-SMI python library (amdsmi) is still installed in pip. "\ "Check post install to ensure version is correct" - return + else + echo "Removed AMD-SMI python library (amdsmi)..." fi - echo "Removed AMD-SMI python library (amdsmi)..." }