326 lines
8.2 KiB
Bash
Executable File
326 lines
8.2 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
# auto-cpufreq-installer:
|
|
# auto-cpufreq source code based installer
|
|
|
|
SCRIPT_PATH=$(readlink -f "$0")
|
|
SCRIPT_DIR=$(dirname "${SCRIPT_PATH}")
|
|
cd "${SCRIPT_DIR}"
|
|
|
|
# check if lsb_release exists on the system before using it
|
|
if command -v lsb_release > /dev/null
|
|
then
|
|
distro="$(lsb_release -is)"
|
|
release="$(lsb_release -rs)"
|
|
codename="$(lsb_release -cs)"
|
|
fi
|
|
|
|
|
|
# functions
|
|
|
|
#separator
|
|
function separator {
|
|
local COLOUMNS="`tput cols`"
|
|
echo -e "\n"
|
|
printf "%0.s─" $(seq $COLOUMNS)
|
|
echo -e "\n"
|
|
}
|
|
|
|
# root check
|
|
function root_check {
|
|
if ((EUID != 0)); then
|
|
separator
|
|
echo -e "\nMust be run as root (i.e: 'sudo $0')."
|
|
separator
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
function header {
|
|
local COLOUMNS="`tput cols`"
|
|
MID="$((COLOUMNS / 2))"
|
|
HEADER="$1"
|
|
printf "%0.s─" $(seq $((MID-(${#HEADER}/2)- 1)))
|
|
echo -n " $HEADER "
|
|
printf "%0.s─" $(seq $((MID-(${#HEADER}/2)- 1)))
|
|
echo -e "\n"
|
|
return
|
|
}
|
|
|
|
# python packages install
|
|
function setup_venv {
|
|
venv_dir=/opt/auto-cpufreq/venv
|
|
mkdir -p "${venv_dir}"
|
|
python3 -m venv "${venv_dir}"
|
|
|
|
source "${venv_dir}/bin/activate"
|
|
python3 -m pip install --upgrade pip wheel
|
|
python3 -m pip install -r requirements.txt
|
|
}
|
|
|
|
# tool install
|
|
function install {
|
|
python3 setup.py install --record files.txt
|
|
mkdir -p /usr/local/share/auto-cpufreq/
|
|
cp -r scripts/ /usr/local/share/auto-cpufreq/
|
|
cp -r images/ /usr/local/share/auto-cpufreq/
|
|
cp images/icon.png /usr/share/pixmaps/auto-cpufreq.png
|
|
cp scripts/org.auto-cpufreq.pkexec.policy /usr/share/polkit-1/actions
|
|
|
|
# this is necessary since we need this script before we can run auto-cpufreq itself
|
|
cp scripts/auto-cpufreq-venv-wrapper /usr/local/bin/auto-cpufreq
|
|
cp scripts/start_app /usr/local/bin/auto-cpufreq-gtk
|
|
chmod a+x /usr/local/bin/auto-cpufreq
|
|
chmod a+x /usr/local/bin/auto-cpufreq-gtk
|
|
|
|
desktop-file-install --dir=/usr/share/applications scripts/auto-cpufreq-gtk.desktop
|
|
update-desktop-database /usr/share/applications
|
|
}
|
|
|
|
# First argument is the distro
|
|
function detected_distro() {
|
|
echo -e "\nDetected $1 distribution"
|
|
separator
|
|
echo -e "\nSetting up Python environment\n"
|
|
}
|
|
|
|
# merged functions pip - install - complete_msg, since it repeats
|
|
function completed () {
|
|
echo -e "\nInstalling necessary Python packages\n"
|
|
setup_venv
|
|
separator
|
|
echo -e "\ninstalling auto-cpufreq tool\n"
|
|
install
|
|
}
|
|
|
|
function complete_msg() {
|
|
separator
|
|
cat <<- _EOF_
|
|
|
|
auto-cpufreq tool successfully installed.
|
|
|
|
For list of options, run:
|
|
auto-cpufreq --help"
|
|
_EOF_
|
|
separator
|
|
}
|
|
|
|
function manual_install {
|
|
cat <<- _EOF_
|
|
|
|
Didn't detect Debian or RedHat based distro.
|
|
|
|
To complete installation, you need to:
|
|
Install: python3, pip3, python3-setuptools, gobject-introspection, cairo (or cairo-devel), gcc, and gtk3
|
|
|
|
Install necessary Python packages:
|
|
pip3 install psutil click distro power requests PyGObject
|
|
Run following sequence of lines:
|
|
|
|
-----
|
|
|
|
python3 setup.py install --record files.txt
|
|
mkdir -p /usr/local/share/auto-cpufreq/
|
|
cp -r scripts/ /usr/local/share/auto-cpufreq/
|
|
|
|
-----
|
|
|
|
After which tool is installed, for full list of options run:
|
|
|
|
auto-cpufreq
|
|
_EOF_
|
|
separator
|
|
cat <<- _EOF_
|
|
|
|
Consider creating a feature request to add support for your distro:
|
|
https://github.com/AdnanHodzic/auto-cpufreq/issues/new
|
|
|
|
Make sure to include following information:
|
|
|
|
Distribution: $distro
|
|
Release: $release
|
|
Codename: $codename
|
|
_EOF_
|
|
separator
|
|
}
|
|
|
|
function tool_install {
|
|
separator
|
|
if [ -f /etc/debian_version ]; then
|
|
detected_distro "Debian based"
|
|
apt install python3-dev python3-pip python3-venv python3-setuptools dmidecode libgirepository1.0-dev libcairo2-dev libgtk-3-dev gcc -y
|
|
completed
|
|
complete_msg
|
|
elif [ -f /etc/redhat-release ]; then
|
|
detected_distro "RedHat based"
|
|
if [ -f /etc/centos-release ]; then
|
|
yum install platform-python-devel dmidecode gcc cairo-devel gobject-introspection-devel cairo-gobject-devel gtk3-devel
|
|
else
|
|
yum install python-devel dmidecode gcc cairo-devel gobject-introspection-devel cairo-gobject-devel gtk3-devel
|
|
fi
|
|
completed
|
|
complete_msg
|
|
elif [ -f /etc/solus-release ]; then
|
|
detected_distro "Solus"
|
|
eopkg install pip python3 python3-devel dmidecode gobject-introspection-devel libcairo-devel gcc libgtk-3
|
|
eopkg install -c system.devel
|
|
completed
|
|
complete_msg
|
|
elif [ -f /etc/os-release ];then
|
|
eval "$(cat /etc/os-release)"
|
|
separator
|
|
case $ID in
|
|
opensuse-leap)
|
|
detected_distro "OpenSUSE"
|
|
zypper install -y python3 python3-pip python3-setuptools python3-devel gcc dmidecode gobject-introspection-devel python3-cairo-devel gtk3 gtk3-devel
|
|
completed
|
|
;;
|
|
opensuse-tumbleweed)
|
|
detected_distro "OpenSUSE"
|
|
echo -e "\nDetected an OpenSUSE distribution\n\nSetting up Python environment\n"
|
|
zypper install -y python38 python3-pip python3-setuptools python3-devel gcc dmidecode gobject-introspection-devel python3-cairo-devel gtk3 gtk3-devel
|
|
completed
|
|
;;
|
|
arch|manjaro|endeavouros|garuda|artix)
|
|
detected_distro "Arch Linux based"
|
|
pacman -S --noconfirm --needed python python-pip python-setuptools base-devel dmidecode gobject-introspection gtk3 gcc
|
|
completed
|
|
;;
|
|
void)
|
|
detected_distro "Void Linux"
|
|
xbps-install -Sy python3 python3-pip python3-devel python3-setuptools base-devel dmidecode cairo-devel gobject-introspection gcc gtk+3
|
|
completed
|
|
;;
|
|
nixos)
|
|
echo -e "NixOS detected\n"
|
|
echo -e "This installer is not supported on NixOS.\nPlease refer to the install instructions for NixOS at https://github.com/AdnanHodzic/auto-cpufreq#nixos"
|
|
exit 1
|
|
;;
|
|
*) #Any other distro
|
|
manual_install
|
|
completed
|
|
;;
|
|
esac
|
|
complete_msg
|
|
else # In case /etc/os-release doesn't exist
|
|
manual_install
|
|
fi
|
|
}
|
|
|
|
function tool_remove {
|
|
files="files.txt"
|
|
share_dir="/usr/local/share/auto-cpufreq/"
|
|
|
|
srv_install="/usr/local/bin/auto-cpufreq-install"
|
|
srv_install_old="/usr/bin/auto-cpufreq-install"
|
|
|
|
srv_remove="/usr/local/bin/auto-cpufreq-remove"
|
|
srv_remove_old="/usr/bin/auto-cpufreq-remove"
|
|
|
|
stats_file="/var/run/auto-cpufreq.stats"
|
|
|
|
tool_proc_rm="/usr/local/bin/auto-cpufreq --remove"
|
|
wrapper_script="/usr/local/bin/auto-cpufreq"
|
|
gui_wrapper_script="/usr/local/bin/auto-cpufreq-gtk"
|
|
unit_file="/etc/systemd/system/auto-cpufreq.service"
|
|
venv_path="/opt/auto-cpufreq"
|
|
|
|
cpufreqctl="/usr/local/bin/cpufreqctl.auto-cpufreq"
|
|
cpufreqctl_old="/usr/bin/cpufreqctl.auto-cpufreq"
|
|
|
|
desktop_file="/usr/share/applications/auto-cpufreq-gtk.desktop"
|
|
|
|
# stop any running auto-cpufreq argument (daemon/live/monitor)
|
|
tool_arg_pids=($(pgrep -f "auto-cpufreq --"))
|
|
for pid in "${tool_arg_pids[@]}"; do
|
|
if [[ $tool_arg_pids != $$ ]]; then
|
|
kill "$tool_arg_pids"
|
|
fi
|
|
done
|
|
|
|
# run uninstall in case of installed daemon
|
|
if [ -f $srv_remove -o -f $srv_remove_old -o $wrapper_script ]; then
|
|
eval $tool_proc_rm
|
|
else
|
|
separator
|
|
printf "Couldn't remove the auto-cpufreq daemon\n$srv_remove or $srv_remove_old do not exist.\n"
|
|
exit 1;
|
|
separator
|
|
fi
|
|
|
|
# remove auto-cpufreq and all its supporting files
|
|
[ -f $files ] && cat $files | xargs sudo rm -rf && rm -f $files
|
|
[ -d $share_dir ] && rm -rf $share_dir
|
|
|
|
# files cleanup
|
|
[ -f $srv_install ] && rm $srv_install
|
|
[ -f $srv_install_old ] && rm $srv_install_old
|
|
|
|
[ -f $srv_remove ] && rm $srv_remove
|
|
[ -f $srv_remove_old ] && rm $srv_remove_old
|
|
|
|
[ -f $stats_file ] && rm $stats_file
|
|
[ -f $unit_file ] && rm $unit_file
|
|
[ -f $wrapper_script ] && rm $wrapper_script
|
|
[ -f $gui_wrapper_script ] && rm $gui_wrapper_script
|
|
|
|
[ -f $cpufreqctl ] && rm $cpufreqctl
|
|
[ -f $cpufreqctl_old ] && rm $cpufreqctl_old
|
|
|
|
[ -f $desktop_file ] && rm $desktop_file
|
|
update-desktop-database /usr/share/applications
|
|
|
|
# remove python virtual environment
|
|
rm -rf "${venv_path}"
|
|
|
|
separator
|
|
echo -e "\nauto-cpufreq tool and all its supporting files successfully removed."
|
|
separator
|
|
}
|
|
|
|
function ask_operation {
|
|
header "auto-cpufreq installer"
|
|
echo -e "Welcome to auto-cpufreq tool installer.
|
|
\nOptions:\n"
|
|
read -p \
|
|
"[I]nstall
|
|
[R]emove
|
|
[Q]uit
|
|
|
|
Select a key: [i/r/q]: " answer
|
|
}
|
|
# End of functions
|
|
|
|
root_check
|
|
|
|
if [[ -z "${1}" ]]; then
|
|
ask_operation
|
|
else
|
|
case "${1}" in
|
|
"--install")
|
|
answer="i"
|
|
;;
|
|
"--remove")
|
|
answer="r"
|
|
;;
|
|
*)
|
|
answer="n"
|
|
;;
|
|
esac
|
|
fi
|
|
|
|
case $answer in
|
|
I|i)
|
|
tool_install ;;
|
|
R|r)
|
|
tool_remove ;;
|
|
Q|q)
|
|
separator
|
|
echo ""
|
|
exit 0 ;;
|
|
*)
|
|
separator
|
|
echo -e "\nUnknown key, aborting ...\n"
|
|
exit 1 ;;
|
|
esac
|