File: post.in

package info (click to toggle)
amdsmi 7.2.0-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 10,500 kB
  • sloc: cpp: 42,954; python: 23,437; ansic: 14,296; sh: 762; makefile: 20
file content (205 lines) | stat: -rwxr-xr-x 7,261 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
#!/bin/bash

do_configureLogrotate() {
  local IS_SYSTEMD=0
  local packageName="amd-smi-lib"
  local logPath=/var/log/amd_smi_lib
  local logFile="${logPath}/AMD-SMI-lib.log"
  local logrotateConfFile=/etc/logrotate.d/amd_smi.conf

  mkdir -p "${logPath}"
  touch "${logFile}"
  chmod -R a+rw "${logPath}"
  chmod a+rw "${logFile}"

  if ! command -v logrotate &>/dev/null; then
    echo "[WARNING] Detected logrotate is not installed."\
    "$packageName logs (when turned on) will not rotate properly."
    return
  fi

  if [ ! -f $logrotateConfFile ]; then
    touch "${logrotateConfFile}"
    chmod 644 "${logrotateConfFile}" # root r/w, all others read
    # AMD SMI logging rotation, rotates files using root user/group
    # Hourly logrotation check
    # Only rotates if size grew larger than 1MB
    # Max of 4 rotation files, oldest will be removed
    # Rotated files use date extention of ex. AMD-SMI-lib.log.2023-05-09_16:51:42
    cat << EOF > "${logrotateConfFile}"
${logFile} {
    su root root
    hourly
    missingok
    notifempty
    rotate 4
    size 1M
    copytruncate
    dateext
    dateformat .%%Y-%%m-%%d_%H:%%M:%%S
}
EOF
  # Fix for % S argument not found (now we escape with %%)
  # issue was RPM build thought we were using macros
  # https://gitlab.kitware.com/cmake/cmake/-/issues/22965
  # https://rpm-software-management.github.io/rpm/manual/spec.html
  sed -i s/%%/%/g "${logrotateConfFile}"
  # workaround: remove extra 'OURCE' text
  # from amd_smi.conf. Unsure if CMAKE,
  # bash, or here document
  # issue (only seen on RHEL 8.7)
  sed -i s/OURCE//g "${logrotateConfFile}"
  fi
  # check if logrotate uses system timers, Ubuntu/modern OS's do
  # Several older OS's like RHEL 8.7, do not. Instead defaults
  # to use daily cron jobs - see https://stackoverflow.com/a/69465677
  if [ -d /run/systemd/system ]; then
    systemctl list-timers | grep -iq logrotate
    if [ $? -eq 0 ]; then
      IS_SYSTEMD=1
    fi
  fi
  if [ "$IS_SYSTEMD" -eq 1 ]; then
    # Configure systemd timers - the typical setup for modern Linux logrotation setups
    if [ -f /lib/systemd/system/logrotate.timer ]; then
      if [ ! -f /lib/systemd/system/logrotate.timer.backup ]; then
        cp /lib/systemd/system/logrotate.timer /lib/systemd/system/logrotate.timer.backup
      fi
      cat << EOF > /lib/systemd/system/logrotate.timer
[Unit]
Description=Hourly rotation of log files
Documentation=man:logrotate(8) man:logrotate.conf(5)

[Timer]
OnCalendar=
OnCalendar=hourly
AccuracySec=1m
Persistent=true

[Install]
WantedBy=timers.target
EOF
      systemctl reenable --now logrotate.timer
    else
      echo "[WARNING] Could not configure systemd timer for $packageName's logrotate."\
      "$packageName logs (when turned on) will not rotate properly."
    fi
  else
    # $IS_SYSTEMD -eq 0
    if [ -f /etc/cron.daily/logrotate ]; then
      # move logrotate daily to hourly
      if [ -d /etc/cron.hourly ]; then
        mv /etc/cron.daily/logrotate /etc/cron.hourly/logrotate
      fi
    fi
  fi
}

do_ldconfig() {
  # left-hand term originates from ENABLE_LDCONFIG = ON/OFF at package build
  if [ "@ENABLE_LDCONFIG@" == "ON" ]; then
    echo $RPM_INSTALL_PREFIX0/@CMAKE_INSTALL_LIBDIR@ > /etc/ld.so.conf.d/x86_64-libamd_smi_lib.conf
    ldconfig
  fi
}

do_install_amdsmi_python_lib() {
  # get python version
  local python3_minor_version
  python3_minor_version=$(python3 -c 'import sys;print(sys.version_info.minor)')
  if [ $? -ne 0 ]; then
    echo "[WARNING] Could not determine python version. "\
      "AMD-SMI python library will not be installed."
    return
  fi

  # check if python version is supported
  if [ "$python3_minor_version" -lt 6 ]; then
    echo "[WARNING] AMD-SMI python library is not "\
      "supported on python version 3.$python3_minor_version. "\
      "AMD-SMI python library will not be installed."
    return
  fi

  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 amdsmi_pip_list_output
  amdsmi_pip_list_output=$(python3 -m pip list --format=columns --disable-pip-version-check)
  # check pip list output for amdsmi
  if [[ $amdsmi_pip_list_output == *"amdsmi"* ]]; then
    echo "Detected old AMD-SMI python library (amdsmi)..."
    python3 -m pip uninstall amdsmi --yes --quiet --disable-pip-version-check
    echo "Removed old AMD-SMI python library (amdsmi)..."
  fi

  # static builds don't include python lib
  if [ "@BUILD_SHARED_LIBS@" != "ON" ]; then
    return
  fi

  check_and_install_amdsmi() {
  local setuptools_version
  setuptools_version=$(python3 -c 'import setuptools; print(setuptools.__version__)')
  if [ $? -ne 0 ]; then
    echo "[WARNING] Could not determine setuptools version. "\
      "AMD-SMI python library will not be installed."
    return
  fi

  # install python library at $RPM_INSTALL_PREFIX0/@SHARE_INSTALL_PREFIX@/amdsmi
  local python_lib_path=$RPM_INSTALL_PREFIX0/@SHARE_INSTALL_PREFIX@
  local amdsmi_python_lib_path="$python_lib_path"
  local amdsmi_setup_py_path="$python_lib_path/setup.py"

  # Decide installation method based on setuptools version
  if [[ "$(printf '%s\n' "$setuptools_version" "28.5" | sort -V | head -n1)" == "$setuptools_version" ]]; then
    echo "[WARNING] Setuptools version is less than 28.5. AMD-SMI will not be installed."
  elif [[ "$(printf '%s\n' "$setuptools_version" "41.0.1" | sort -V | head -n1)" != "41.0.1" ]]; then
    echo "Using setup.py for installation due to setuptools version $setuptools_version"
    cd $amdsmi_python_lib_path
    python3 setup.py install
    cd -
  else
    echo "Using pyproject.toml for installation due to setuptools version $setuptools_version"
    python3 -m pip install "$amdsmi_python_lib_path" --quiet --disable-pip-version-check --no-build-isolation --no-index
  fi
}

  # Call the function
  check_and_install_amdsmi

  export PIP_ROOT_USER_ACTION="$PREVIOUS_PIP_ROOT_USER_ACTION"
  export PIP_BREAK_SYSTEM_PACKAGES="$PREVIOUS_PIP_BREAK_SYSTEM_PACKAGES"

  # only try to activate argcomplete if such command exists
  # python3-argcomplete is recommended but optional, we handle its absence gracefully
  if command -v activate-global-python-argcomplete &>/dev/null; then
    activate-global-python-argcomplete 2>/dev/null || {
      echo "[INFO] Bash completion activation skipped. You can manually enable it with: activate-global-python-argcomplete"
    }
  else
    # try older argcomplete3 version
    if command -v activate-global-python-argcomplete3 &>/dev/null; then
      activate-global-python-argcomplete3 2>/dev/null || {
        echo "[INFO] Bash completion activation skipped. You can manually enable it with: activate-global-python-argcomplete3"
      }
    else
      echo "[WARNING] Could not find argcomplete activation command. "\
        "Argument completion will not work. Install python3-argcomplete package to enable it."
    fi
  fi
}


# post install or upgrade, $i is 1 or 2 -> do these actions
if [ "$1" -ge 1 ]; then
  do_install_amdsmi_python_lib
  do_ldconfig
  do_configureLogrotate || exit 0
fi