225 lines
6.8 KiB
Bash
Executable File
225 lines
6.8 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
# auto-cpufreq-installer:
|
|
# auto-cpufreq source code based installer
|
|
|
|
cd "$(dirname "$(readlink -f "$0")")" || exit 1
|
|
|
|
COLOUMNS="`tput cols`"
|
|
MID="$((COLOUMNS / 2))"
|
|
|
|
APPLICATIONS_PATH="/usr/share/applications"
|
|
VENV_PATH="/opt/auto-cpufreq"
|
|
|
|
SHARE_DIR="/usr/local/share/auto-cpufreq/"
|
|
|
|
AUTO_CPUFREQ_FILE="/usr/local/bin/auto-cpufreq"
|
|
AUTO_CPUFREQ_GTK_FILE=$AUTO_CPUFREQ_FILE-gtk
|
|
AUTO_CPUFREQ_GTK_DESKTOP_FILE="$(basename $AUTO_CPUFREQ_GTK_FILE).desktop"
|
|
|
|
IMG_FILE="/usr/share/pixmaps/auto-cpufreq.png"
|
|
ORG_FILE="/usr/share/polkit-1/actions/org.auto-cpufreq.pkexec.policy"
|
|
|
|
function header {
|
|
echo
|
|
printf "%0.s─" $(seq $((MID-(${#1}/2)-2)))
|
|
printf " $1 "
|
|
printf "%0.s─" $(seq $((MID-(${#1}/2)-2)))
|
|
echo; echo
|
|
}
|
|
|
|
function ask_operation {
|
|
header "auto-cpufreq installer"
|
|
echo "Welcome to auto-cpufreq tool installer."; echo
|
|
read -p "Select a key [I]nstall/[R]emove or press ctrl+c to quit: " answer
|
|
}
|
|
|
|
function manual_install {
|
|
if command -v lsb_release > /dev/null; then
|
|
distro="$(lsb_release -is)"
|
|
release="$(lsb_release -rs)"
|
|
codename="$(lsb_release -cs)"
|
|
fi
|
|
|
|
echo "Didn't detect Debian or RedHat or Arch based distro."; echo
|
|
echo "To complete installation, you need to:"
|
|
echo "Install: python3, pip3, python3-setuptools, gobject-introspection, cairo (or cairo-devel), gcc, and gtk3"; echo
|
|
echo "Install necessary Python packages:"
|
|
echo "pip3 install psutil click distro power requests PyGObject"
|
|
echo "Run following sequence of lines:"; echo
|
|
echo "-----"; echo
|
|
echo "pip3 install ."
|
|
echo "mkdir -p $SHARE_DIR"
|
|
echo "cp -r scripts/ $SHARE_DIR"; echo
|
|
echo "-----"; echo
|
|
echo "After which tool is installed, for full list of options run:";echo
|
|
echo "auto-cpufreq --help"
|
|
|
|
echo; printf "%0.s─" $(seq $COLOUMNS); echo
|
|
|
|
echo "Consider creating a feature request to add support for your distro:"
|
|
echo "https://github.com/AdnanHodzic/auto-cpufreq/issues/new"; echo
|
|
echo "Make sure to include following information:"; echo
|
|
echo "Distribution: $distro"
|
|
echo "Release: $release"
|
|
echo "Codename: $codename"
|
|
echo
|
|
|
|
exit 1
|
|
}
|
|
|
|
function tool_install {
|
|
echo
|
|
# First argument is the distro
|
|
function detected_distro {
|
|
header "Detected $1 distribution"
|
|
header "Setting up Python environment"
|
|
}
|
|
|
|
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
|
|
|
|
elif [ -f /etc/redhat-release ]; then
|
|
detected_distro "RedHat based"
|
|
if [ -f /etc/centos-release ]; then yum install platform-python-devel
|
|
else yum install python-devel
|
|
fi
|
|
yum install dmidecode gcc cairo-devel gobject-introspection-devel cairo-gobject-devel gtk3-devel
|
|
|
|
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
|
|
|
|
elif [ -f /etc/arch-release ]; then
|
|
detected_distro "Arch Linux based"
|
|
pacman -S --noconfirm --needed python python-pip python-setuptools base-devel dmidecode gobject-introspection gtk3 gcc
|
|
|
|
elif [ -f /etc/os-release ];then
|
|
. /etc/os-release
|
|
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
|
|
;;
|
|
opensuse-tumbleweed)
|
|
detected_distro "OpenSUSE"
|
|
zypper install -y python38 python3-pip python3-setuptools python3-devel gcc dmidecode gobject-introspection-devel python3-cairo-devel gtk3 gtk3-devel
|
|
;;
|
|
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
|
|
;;
|
|
nixos)
|
|
echo "NixOS detected"
|
|
echo "This installer is not supported on NixOS."
|
|
echo "Please refer to the install instructions for NixOS at https://github.com/AdnanHodzic/auto-cpufreq#nixos"
|
|
exit 1
|
|
;;
|
|
*) manual_install;;
|
|
esac
|
|
else # In case /etc/os-release doesn't exist
|
|
manual_install
|
|
fi
|
|
|
|
header "Installing necessary Python packages"
|
|
|
|
venv_dir=$VENV_PATH/venv
|
|
mkdir -p "$venv_dir"
|
|
python3 -m venv "$venv_dir"
|
|
|
|
source "$venv_dir/bin/activate"
|
|
python3 -m pip install --upgrade pip wheel
|
|
|
|
header "Installing auto-cpufreq tool"
|
|
|
|
git config --global --add safe.directory $(pwd)
|
|
python -m pip install .
|
|
|
|
mkdir -p $SHARE_DIR
|
|
cp -r scripts/ $SHARE_DIR
|
|
cp -r images/ $SHARE_DIR
|
|
cp images/icon.png $IMG_FILE
|
|
cp scripts/$(basename $ORG_FILE) $(dirname $ORG_FILE)
|
|
|
|
# this is necessary since we need this script before we can run auto-cpufreq itself
|
|
cp scripts/auto-cpufreq-venv-wrapper $AUTO_CPUFREQ_FILE
|
|
chmod a+x $AUTO_CPUFREQ_FILE
|
|
cp scripts/start_app $AUTO_CPUFREQ_GTK_FILE
|
|
chmod a+x $AUTO_CPUFREQ_GTK_FILE
|
|
|
|
desktop-file-install --dir=$APPLICATIONS_PATH scripts/$AUTO_CPUFREQ_GTK_DESKTOP_FILE
|
|
update-desktop-database $APPLICATIONS_PATH
|
|
|
|
header "auto-cpufreq tool successfully installed"
|
|
echo "For list of options, run:"
|
|
echo "auto-cpufreq --help"; echo
|
|
}
|
|
|
|
function tool_remove {
|
|
# stop any running auto-cpufreq argument (daemon/live/monitor)
|
|
tool_arg_pids=($(pgrep -f "auto-cpufreq --"))
|
|
for pid in "${tool_arg_pids[@]}"; do [ $pid != $$ ] && kill "$pid"; done
|
|
|
|
function remove_directory {
|
|
[ -d $1 ] && rm -rf $1
|
|
}
|
|
function remove_file {
|
|
[ -f $1 ] && rm $1
|
|
}
|
|
|
|
srv_remove="$AUTO_CPUFREQ_FILE-remove"
|
|
|
|
# run uninstall in case of installed daemon
|
|
if [ -f $srv_remove -o -f $AUTO_CPUFREQ_FILE ]; then
|
|
eval "$AUTO_CPUFREQ_FILE --remove"
|
|
else
|
|
echo; echo "Couldn't remove the auto-cpufreq daemon, $srv_remove do not exist."
|
|
fi
|
|
|
|
# remove auto-cpufreq and all its supporting files
|
|
remove_directory $SHARE_DIR
|
|
|
|
remove_file "$AUTO_CPUFREQ_FILE-install"
|
|
remove_file $srv_remove
|
|
remove_file $AUTO_CPUFREQ_FILE
|
|
remove_file $AUTO_CPUFREQ_GTK_FILE
|
|
remove_file $IMG_FILE
|
|
remove_file $ORG_FILE
|
|
remove_file "/usr/local/bin/cpufreqctl.auto-cpufreq"
|
|
remove_file "/var/run/auto-cpufreq.stats"
|
|
|
|
remove_file "$APPLICATIONS_PATH/$AUTO_CPUFREQ_GTK_DESKTOP_FILE"
|
|
update-desktop-database $APPLICATIONS_PATH
|
|
|
|
# remove python virtual environment
|
|
remove_directory $venv_path
|
|
|
|
echo; echo "auto-cpufreq tool and all its supporting files successfully removed"; echo
|
|
}
|
|
|
|
# root check
|
|
if ((EUID != 0)); then
|
|
echo; echo "Must be run as root (i.e: 'sudo $0')."; echo
|
|
exit 1
|
|
fi
|
|
|
|
if [[ -z "$1" ]]; then ask_operation
|
|
else
|
|
case "$1" in
|
|
--install) answer="i";;
|
|
--remove) answer="r";;
|
|
*) ask_operation;;
|
|
esac
|
|
fi
|
|
|
|
case $answer in
|
|
I|i) tool_install;;
|
|
R|r) tool_remove;;
|
|
*)
|
|
echo "Unknown key, aborting ..."; echo
|
|
exit 1
|
|
;;
|
|
esac
|