#!/bin/bash COLOR_RED=$( tput setaf 1 ) COLOR_GREEN=$( tput setaf 2 ) COLOR_YELLOW=$( tput setaf 3 ) COLOR_RESET=$( tput sgr0 ) ALLOW_ROOT=false trap 'handleError' ERR handleError() { cat <<-EOT Leider ist ein Fehler aufgetreten. Bitte hilf mit dieses Skript zu verbessern und sende einen Fehlerbericht per EMail an installer@logseq.eu EOT } err() { echo "${COLOR_RED}$*${COLOR_RESET}" exit 1 } showLogo() { echo -n "${COLOR_GREEN}" cat <<-'EOT' .____ | | ____ ____ ______ ____ ______ | | / _ \ / ___\/ ___// __ \/ ____/ | |__( <_> ) /_/ >___ \\ ___< <_| | |_______ \____/\___ /____ >\___ >__ | \/ /_____/ \/ \/ |__| EOT echo -n "${COLOR_YELLOW}" cat <<-'EOT' .___ __ .__ .__ | | ____ _______/ |______ | | | | ___________ | |/ \ / ___/\ __\__ \ | | | | _/ __ \_ __ \ | | | \\___ \ | | / __ \| |_| |_\ ___/| | \/ |___|___| /____ > |__| (____ /____/____/\___ >__| \/ \/ \/ \/ EOT echo -n "${COLOR_RESET}" } showHelp() { [ $# -gt 0 ] && echo "$*" && echo "" cat <<-EOT Logseq Installer ================ Erlaubte Optionen: -h | --hilfe --- Zeigt diese Hilfe an -e | --entfernen --- Deinstalliert Logseq -r | --root --- Erlaubt die Installation als root Geschrieben von Tim Peters ---> https://git.tim-peters.org/Tim/Logseq-Installer EOT exit 1 } getVersionLatest() { VERSION_LATEST="$( wget -qO - https://github.com/logseq/logseq/releases/latest | grep -Poi "releases/tag/\K\d+\.\d+\.\d+" | head -n 1 )" [ -n "$VERSION_LATEST" ] || err "Konnte nicht ermittelt werden" } getVersionCurrent() { local FILENAME FILENAME="$( ls -1rt ~/.local/bin/Logseq-*AppImage 2>/dev/null | head -n1 )" if [ -n "$FILENAME" ]; then VERSION_CURRENT="$( echo "$FILENAME" | grep -Poi "Logseq-linux-x64-\K\d+\.\d+\.\d+" | head -n 1 )" else VERSION_CURRENT= fi #[ -n "$VERSION_CURRENT" ] || err "Konnte nicht ermittelt werden" } getLatest() { local URL URL="https://github.com/logseq/logseq/releases/download/$VERSION_LATEST/Logseq-linux-x64-$VERSION_LATEST.AppImage" local DIR_DEST DIR_DEST=~/.local/bin local FILE_LINK FILE_LINK=~/.local/bin/Logseq local FILE_TMP FILE_TMP="$( mktemp )" local FILE_DELETE FILENAME_LOGSEQ="$( basename "$URL" )" mkdir -p $DIR_DEST wget "$URL" --show-progress -qO "$FILE_TMP" mv "$FILE_TMP" "$DIR_DEST/$FILENAME_LOGSEQ" chmod u+x "$DIR_DEST/$FILENAME_LOGSEQ" # Veraltete Versionen löschen FILE_DELETE="$( find ~/.local/bin -iname Logseq-\*AppImage | grep -v "$FILENAME_LOGSEQ" )" || true [ -n "$FILE_DELETE" ] && rm -f "$FILE_DELETE" [ -L "$FILE_LINK" ] && rm -f "$FILE_LINK" ln -s "$DIR_DEST/$FILENAME_LOGSEQ" "$FILE_LINK" } doUninstall() { rm -f ~/.local/bin/Logseq* "${HOME}"/.local/share/applications/logseq.* update-desktop-database ~/.local/share/applications echo "Logseq wurde deinstalliert" exit } createDesktop() { local FILE_PNG=${HOME}/.local/share/applications/logseq.png [ -f "$FILE_PNG" ] || wget https://raw.githubusercontent.com/logseq/logseq/master/resources/icons/logseq.png -qO "$FILE_PNG" cat > ~/.local/share/applications/logseq.desktop <<-EOF [Desktop Entry] Encoding=UTF-8 Name=Logseq Comment=Wissensmanagement mit Logseq Exec=${HOME}/.local/bin/$FILENAME_LOGSEQ Icon=${HOME}/.local/share/applications/logseq.png Type=Application Categories=Office; X-GNOME-SingleWindow=true SingleMainWindow=true EOF update-desktop-database ~/.local/share/applications } optspec=":her-:" while getopts "${optspec}" OPT; do [ "${OPT}" = " " ] && continue if [ "${OPT}" = "-" ]; then OPT="${OPTARG%%=*}" OPTARG="${OPTARG#$OPT}" OPTARG="${OPTARG#=}" fi case "${OPT}" in h | hilfe ) showHelp ;; e | entfernen ) doUninstall ;; r | root ) ALLOW_ROOT=true ;; [^\?]* ) showHelp "Unbekannte Option: --${OPT}"; exit 2 ;; \? ) showHelp "Unbekannte Option: -${OPTARG}"; exit 2 ;; esac done shift $((OPTIND-1)) if [ "$( whoami )" = root -a "$ALLOW_ROOT" = false ]; then showHelp "Die Installation sollte nicht als root erfolgen" exit 1 fi showLogo echo "Ermitteln der verfügbaren Versionen" getVersionLatest getVersionCurrent echo "Neuste verfügbare Version...... $COLOR_GREEN$VERSION_LATEST$COLOR_RESET" echo "Derzeit installierte Version... $COLOR_GREEN${VERSION_CURRENT:-${COLOR_RED}Logseq ist nicht installiert}$COLOR_RESET" [ "$VERSION_CURRENT" != "$VERSION_LATEST" ] || exit if [ "$( pgrep -ifcx ~/.local/bin/Logseq )" -ne 0 ]; then err "Logseq sollte erst geschlossen werden, bevor das Update eingespielt wird" fi echo "Logseq Download gestartet" getLatest createDesktop echo "Logseq wurde installiert"