#!/bin/bash #set -x packageName="amd-smi-lib" logPath=/var/log/amd_smi_lib logName=AMD-SMI-lib.log logFile="${logPath}/${logName}" logrotateConfFile=/etc/logrotate.d/amd_smi.conf do_addLogFolder() { sudo mkdir -p "${logPath}" sudo touch "${logFile}" sudo chmod -R a+rw "${logPath}" sudo chmod a+rw "${logFile}" } do_configureLogrotate() { logrotate --version &>/dev/null if [ $? -ne 0 ]; then echo "[WARNING] Detected logrotate is not installed."\ "$packageName logs (when turned on) will not rotate properly." return fi if [ ! -f $logrotateConfFile ]; then sudo touch "${logrotateConfFile}" sudo 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 | sudo tee "${logrotateConfFile}" >/dev/null ${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 sudo 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) sudo 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 sudo systemctl list-timers|grep -iq logrotate if [ $? -ne 0 ]; then # confirm logrotate file exists in daily if [ -f /etc/cron.daily/logrotate ]; then # move logrotate daily to hourly if [ -d /etc/cron.hourly ]; then sudo mv /etc/cron.daily/logrotate /etc/cron.hourly/logrotate else echo "[WARNING] Could find and configure hourly cron for $packageName's"\ " logrotate. $packageName logs (when turned on) will not rotate properly." return fi else # confirm that it's already been moved to hourly sudo find /etc/cron.* -iname logrotate -print -quit |grep -iq hourly if [ $? -ne 0 ]; then echo "[WARNING] Could not configure an hourly cron for $packageName's logrotate."\ "$packageName logs (when turned on) may not rotate properly." fi fi return #done configuring for non-systemd timers else # 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 sudo cp /lib/systemd/system/logrotate.timer /lib/systemd/system/logrotate.timer.backup fi cat <<'EOF' | sudo tee /lib/systemd/system/logrotate.timer >/dev/null [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 sudo 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 return #done configuring for systemd timers fi } do_ldconfig() { # left-hand term originates from ENABLE_LDCONFIG = ON/OFF at package build if [ "@ENABLE_LDCONFIG@" == "ON" ]; then echo @CPACK_PACKAGING_INSTALL_PREFIX@/@CMAKE_INSTALL_LIBDIR@ > /etc/ld.so.conf.d/x86_64-libamd_smi_lib.conf ldconfig fi } # left-hand term originates from ENABLE_LDCONFIG = ON/OFF at package build if [ "@ENABLE_LDCONFIG@" == "ON" ]; then echo -e "@CPACK_PACKAGING_INSTALL_PREFIX@/@CMAKE_INSTALL_LIBDIR@" > /etc/ld.so.conf.d/x86_64-libamd_smi_lib.conf ldconfig fi # post install or upgrade, $i is 1 or 2 -> do these actions if [ $1 -ge 1 ]; then do_addLogFolder do_configureLogrotate fi