From 4076768eeca92b2a1bf4d99e19ad362b678424e4 Mon Sep 17 00:00:00 2001 From: Bill Niblock Date: Sun, 10 Jul 2022 14:01:46 -0400 Subject: [PATCH] Version 0.0.2 - Rename script to correspond with repository name - Bring in to compliance with `shellcheck` - Add some output explaining what script is doing - Add new options: - `--no-systemd` will not perform any Systemd steps - `--no-enable` will not enable the Systemd service - `--no-start` will not start the Systemd service - `--no-binary` will not install the Syncthing binary --- steam-deck-syntching-setup.sh | 213 ++++++++++++++++++++++++++++++++++ syncthing-deck-setup.sh | 149 ------------------------ 2 files changed, 213 insertions(+), 149 deletions(-) create mode 100644 steam-deck-syntching-setup.sh delete mode 100644 syncthing-deck-setup.sh diff --git a/steam-deck-syntching-setup.sh b/steam-deck-syntching-setup.sh new file mode 100644 index 0000000..c425071 --- /dev/null +++ b/steam-deck-syntching-setup.sh @@ -0,0 +1,213 @@ +#!/bin/bash + +set -euf -o pipefail + +SDS_VERSION="0.0.2" + +DEFAULT_VERSION="latest" +DEFAULT_PLATFORM="linux" +DEFAULT_ARCH="amd64" + +SYNC_VERSION="${DEFAULT_VERSION}" +SYNC_PLATFORM="${DEFAULT_PLATFORM}" +SYNC_ARCH="${DEFAULT_ARCH}" + +PKG_NAME="syncthing-${SYNC_PLATFORM}-${SYNC_ARCH}-v${SYNC_VERSION}" + +SDS_DIR_TMP="${HOME}/.cache/steamdecksyncthing" +SDS_DIR_BIN="${HOME}/.local/bin" +SDS_DIR_SYS="${HOME}/.config/systemd/user" + +SDS_SYSTEMD=1 +SDS_SYSD_ENABLE=1 +SDS_SYSD_START=1 +SDS_INSTALL_BINARY=1 + + +sds_extract_local_files () { + echo "==> Extracting files to ${SDS_DIR_TMP}" + tar -xf "${SDS_DIR_TMP}"/syncthing-files.tar.gz -C "${SDS_DIR_TMP}" +} + +sds_fetch_remote_files () { + echo "==> Pulling Syncthing package ${PKG_NAME}" + + local repo_url="https://github.com/syncthing/syncthing/" + local release_url="${repo_url}/releases/download/v${SYNC_VERSION}/${PKG_NAME}.tar.gz" + + curl --silent -L "${release_url}" > "${SDS_DIR_TMP}"/syncthing-files.tar.gz +} + +sds_install () { + if [[ "${SDS_INSTALL_BINARY}" -gt 0 ]]; then + echo "==> Installing Syncthing binary to ${SDS_DIR_BIN}" + cp "${SDS_DIR_TMP}"/"${PKG_NAME}"/syncthing "${SDS_DIR_BIN}"/syncthing + fi + + if [[ "${SDS_SYSTEMD}" -gt 0 ]]; then + echo "==> Performing Systemd steps:" + echo "===> Reloading user daemon" + systemctl --user daemon-reload + if [[ "${SDS_SYSD_ENABLE}" -gt 0 ]]; then + echo "===> Enabling Syncthing user service" + systemctl --user enable syncthing.service + fi + + if [[ "${SDS_SYSD_START}" -gt 0 ]]; then + echo "===> Enabling Syncthing user service" + systemctl --user start syncthing.service + fi + fi +} + +sds_make_syncthing_service () { + echo "==> Creating Systemd user service file in ${SDS_DIR_SYS}." + cat > "${HOME}"/.config/systemd/user/syncthing.service <<- EOM +[Unit] +Description=Syncthing - Open Source Continuous File Synchronization +Documentation=man:syncthing(1) +StartLimitIntervalSec=60 +StartLimitBurst=4 + +[Service] +ExecStart="${SDS_DIR_BIN}"/syncthing serve --no-browser --no-restart --logflags=0 +Restart=on-failure +RestartSec=1 +SuccessExitStatus=3 4 +RestartForceExitStatus=3 4 + +# Hardening +SystemCallArchitectures=native +MemoryDenyWriteExecute=true +NoNewPrivileges=true + +[Install] +WantedBy=default.target +EOM +} + +sds_set_package_name () { + if [[ "${SYNC_VERSION}" == "latest" ]]; then + local tag_url="https://api.github.com/repos/syncthing/syncthing/tags?per_page=1" + local sync_version=$(\ + curl --silent "${tag_url}" | \ + grep '"name":' | \ + sed -r 's/.*v(.*)\".*/\1/' + ) + + SYNC_VERSION="${sync_version}" + fi + + PKG_NAME="syncthing-${SYNC_PLATFORM}-${SYNC_ARCH}-v${SYNC_VERSION}" +} + +sds_setup () { + echo "==> Establishing desired directories" + echo "===> Making ${SDS_DIR_TMP} (if not exists)" + mkdir -p "${SDS_DIR_TMP}" + echo "===> Making ${SDS_DIR_BIN} (if not exists)" + mkdir -p "${SDS_DIR_BIN}" + echo "===> Making ${SDS_DIR_SYS} (if not exists)" + mkdir -p "${SDS_DIR_SYS}" +} + +sds_uninstall () { + echo "=> Starting..." + echo "==> Stopping/Disabling Systemd User Service" + systemctl --user disable syncthing.service > /dev/null 2>&1 + systemctl --user stop syncthing.service > /dev/null 2>&1 + + echo "==> Removing SDS directories and files" + echo "===> Removing ${SDS_DIR_TMP}" + rm -rf "${SDS_DIR_TMP}" > /dev/null 2>&1 + echo "===> Removing Syncthing binary from ${SDS_DIR_BIN}" + rm "${SDS_DIR_BIN}"/syntching > /dev/null 2>&1 + echo "===> Removing Syncthing user service file from ${SDS_DIR_SYS}" + rm "${SDS_DIR_SYS}"/syncthing.service > /dev/null 2>&1 + + echo "SDS uninstalled" +} + +sds_usage () { + echo -e "Usage: steam-deck-syntching-setup []" + + printf "\n%17s %s" "-V, --version" "Specify a Syncthing Version. Default is latest." + printf "\n%17s %s" "-P, --platform" "Specify an OS/Platform. Default is linux." + printf "\n%17s %s" "-A, --arch" "Specify an architecture. Default is amd64." + echo -e + printf "\n%17s %s" "--no-systemd" "Don't do Systemd-related actions." + printf "\n%17s %s" "--no-enable" "Don't enable the Systemd user-service." + printf "\n%17s %s" "--no-start" "Don't start the Systemd user-service." + printf "\n%17s %s" "--no-binary" "Don't install the Syncthing binary." + echo -e + printf "\n%17s %s" "-U, --uninstall" "Remove files setup with this script." + echo -e + printf "\n%17s %s" "-v" "Show version" + printf "\n%17s %s" "-h" "Show this usage" + echo -e "\n" +} + +sds_version () { + echo "Steam Deck Syncthing Setup Version ${SDS_VERSION}" +} + + +while [[ $# -gt 0 ]]; do + case $1 in + -V|--version) + SYNC_VERSION="$2" + shift + shift + ;; + -P|--platform) + SYNC_PLATFORM="$2" + shift + shift + ;; + -A|--arch) + SYNC_ARCH="$2" + shift + shift + ;; + -U|--uninstall) + sds_version + sds_uninstall + exit 0 + ;; + --no-systemd) + SDS_SYSTEMD=0 + shift + ;; + --no-enable) + SDS_SYSD_ENABLE=0 + shift + ;; + --no-start) + SDS_SYSD_START=0 + shift + ;; + --no-binary) + SDS_INSTALL_BINARY=0 + shift + ;; + -v) + sds_version + exit 0 + ;; + *) + sds_version + sds_usage + exit 0 + ;; + esac +done + +sds_version +echo "=> Starting..." +sds_setup +sds_set_package_name +sds_fetch_remote_files +[[ "${SDS_SYSTEMD}" -gt 0 ]] && sds_make_syncthing_service +sds_extract_local_files +sds_install +echo "=> Finished!" diff --git a/syncthing-deck-setup.sh b/syncthing-deck-setup.sh deleted file mode 100644 index 2a27d46..0000000 --- a/syncthing-deck-setup.sh +++ /dev/null @@ -1,149 +0,0 @@ -#!/bin/bash - -SDS_VERSION="0.0.1" - -DEFAULT_VERSION="latest" -DEFAULT_PLATFORM="linux" -DEFAULT_ARCH="amd64" - -SYNC_VERSION=$DEFAULT_VERSION -SYNC_PLATFORM=$DEFAULT_PLATFORM -SYNC_ARCH=$DEFAULT_ARCH - -PKG_NAME="syncthing-$SYNC_PLATFORM-$SYNC_ARCH-v$SYNC_VERSION" - -SDS_DIR_TMP="$HOME/.cache/steamdecksync" -SDS_DIR_BIN="$HOME/.local/bin" -SDS_DIR_SYS="$HOME/.config/systemd/user" - - -sds_extract_local_files () { - tar -xf $SDS_DIR_TMP/syncthing-files.tar.gz -C $SDS_DIR_TMP -} - -sds_fetch_remote_files () { - echo "Pulling Syncthing package $PKG_NAME" - - local REPO_URL="https://github.com/syncthing/syncthing/" - local RELEASE_URL="$REPO_URL/releases/download/v$SYNC_VERSION/$PKG_NAME.tar.gz" - - curl --silent -L $RELEASE_URL > $SDS_DIR_TMP/syncthing-files.tar.gz -} - -sds_install () { - cp $SDS_DIR_TMP/$PKB_NAME/syncthing $SDS_DIR_BIN/syncthing - - systemctl --user daemon-reload - systemctl --user enable syncthing.service - systemctl --user start syncthing.service -} - -sds_make_syncthing_service () { - cat > $HOME/.config/systemd/user/syncthing.service <<- EOM -[Unit] -Description=Syncthing - Open Source Continuous File Synchronization -Documentation=man:syncthing(1) -StartLimitIntervalSec=60 -StartLimitBurst=4 - -[Service] -ExecStart=/home/deck/.local/bin/syncthing serve --no-browser --no-restart --logflags=0 -Restart=on-failure -RestartSec=1 -SuccessExitStatus=3 4 -RestartForceExitStatus=3 4 - -# Hardening -SystemCallArchitectures=native -MemoryDenyWriteExecute=true -NoNewPrivileges=true - -[Install] -WantedBy=default.target -EOM -} - -sds_set_package_name () { - if [ $SYNC_VERSION == "latest" ]; then - local TAG_URL="https://api.github.com/repos/syncthing/syncthing/tags?per_page=1" - local SYNC_VERSION=$(\ - curl --silent $TAG_URL | \ - grep '"name":' | \ - sed -r 's/.*v(.*)\".*/\1/' - ) - fi - - PKG_NAME="syncthing-$SYNC_PLATFORM-$SYNC_ARCH-v$SYNC_VERSION" -} - -sds_setup () { - mkdir -p $SDS_DIR_TMP - mkdir -p $SDS_DIR_BIN - mkdir -p $SDS_DIR_SYS -} - -sds_uninstall () { - echo "Stopping/Disabling Systemd User Service" - systemctl --user disable syncthing.service - systemctl --user stop syncthing.service - - echo "Removing SDS directories and files" - rm -rf $SDS_DIR_TMP - rm $SDS_DIR_BIN/syntching - rm $SDS_DIR_SYS/syncthing.service - - echo "SDS uninstalled" -} - -sds_usage () { - echo -e "Usage: syncthing-deck-setup []" - - printf "\n%17s %s" "-V, --version" "Specify a Syncthing Version. Default is latest." - printf "\n%17s %s" "-P, --platform" "Specify an OS/Platform. Default is linux." - printf "\n%17s %s" "-A, --arch" "Specify an architecture. Default is amd64." - printf "\n%17s %s" "-U, --uninstall" "Remove files setup with this script." - printf "\n%17s %s" "-v" "Show version" - printf "\n%17s %s" "-h" "Show this usage" - echo -e "\n" -} - - -while [[ $# -gt 0 ]]; do - case $1 in - -V|--version) - SYNC_VERSION="$2" - shift - shift - ;; - -P|--platform) - SYNC_PLATFORM="$2" - shift - shift - ;; - -A|--arch) - SYNC_ARCH="$2" - shift - shift - ;; - -U|--uninstall) - sds_uninstall - exit 0 - ;; - -v) - echo "Syncthing Deck Setup version $SDS_VERSION" - exit 0 - ;; - *) - sds_usage - exit 0 - ;; - esac -done - - -sds_setup -sds_set_package_name -sds_fetch_remote_files -sds_make_syncthing_service -sds_extract_local_files -sds_install