Files

89 lines
2.7 KiB
Bash
Executable File

#!/bin/env bash
set -e
DAEMON_SOCKET=/run/lactd.sock
UNIT_PATH=/etc/systemd/system/lactd.service
if [ ! -e "${DAEMON_SOCKET}" ]; then
echo "${DAEMON_SOCKET} does not exist, showing setup prompt"
APP_COMMIT=$(grep app-commit= /.flatpak-info | sed "s/app-commit=//")
APP_PATH=$(grep app-path= /.flatpak-info | sed "s/app-path=//" | sed "s/${APP_COMMIT}/active/")
DAEMON_SH_PATH="${APP_PATH}/bin/daemon.sh"
set +e
if [ "${LACT_UNATTENDED_SETUP}" == "true" ]; then
YAD_OUTPUT="TRUE|"
EXIT_CODE=0
else
YAD_OUTPUT=$(yad --title="LACT Flatpak Setup" \
--text="The LACT system service could not be found.
In order to edit GPU settings, LACT requires a service to be running as root.
This setup will install <u><tt>lactd.service</tt></u> outside of the Flatpak sandbox.
It is possible to skip this step if you wish to use LACT only for information and monitoring.
Do you wish to install the service?" \
--form \
--field "Autostart service at boot":CHK "TRUE")
EXIT_CODE=$?
fi
set -e
if [ ${EXIT_CODE} -eq 0 ]; then
IFS="|" read -ra OPTIONS <<< "$YAD_OUTPUT"
AUTOSTART="${OPTIONS[0]}"
echo "Setting up the service with autostart ${AUTOSTART}"
UNIT="\
[Unit]
Description=GPU Control Daemon (via Flatpak)
After=multi-user.target
[Service]
Environment=FLATPAK_INSTALL_USER=$USER
ExecStart=bash $DAEMON_SH_PATH
Nice=-10
Restart=on-failure
[Install]
WantedBy=multi-user.target\
"
if flatpak-spawn --host sh -c "command -v pkexec" > /dev/null 2>&1; then
ROOT_WRAPPER="pkexec"
else
ROOT_WRAPPER="run0 --pipe"
fi
echo "Using root wrapper ${ROOT_WRAPPER}"
echo "${UNIT}" | flatpak-spawn --host tee /tmp/lact-unit-setup
flatpak-spawn --host $ROOT_WRAPPER sh -c "cp /tmp/lact-unit-setup ${UNIT_PATH} && (chcon -R -t bin_t $DAEMON_SH_PATH || true)"
echo "Unit file created at ${UNIT_PATH}"
flatpak-spawn --host rm /tmp/lact-unit-setup
if [ "${AUTOSTART}" == "TRUE" ]; then
echo "Enabling the service with autostart"
flatpak-spawn --host $ROOT_WRAPPER sh -c "systemctl daemon-reload && systemctl enable --now lactd.service"
else
echo "Starting the service without autostart"
flatpak-spawn --host $ROOT_WRAPPER sh -c "systemctl daemon-reload && systemctl start lactd.service"
fi
if [ "${LACT_UNATTENDED_SETUP}" != "true" ]; then
yad --text 'The service has been started. Please run LACT again.' --button=OK:0
fi
exit 0
else
echo "Service setup rejected, skipping"
fi
fi
lact $@