From 681d413b36700c647e9cef97e6d9e8dc7ac075b7 Mon Sep 17 00:00:00 2001 From: "Helmut K. C. Tessarek" Date: Tue, 23 Jan 2024 17:42:03 +0100 Subject: [PATCH] Linux: style: make install script more consistent --- Joplin_install_and_update.sh | 156 +++++++++++++++++------------------ 1 file changed, 76 insertions(+), 80 deletions(-) diff --git a/Joplin_install_and_update.sh b/Joplin_install_and_update.sh index aa6c73499..ce4efcf9a 100755 --- a/Joplin_install_and_update.sh +++ b/Joplin_install_and_update.sh @@ -5,12 +5,12 @@ set -e trap 'handleError' ERR handleError() { - echo "" - echo "If you encountered an error, please consider fixing" - echo "the script for your environment and creating a pull" - echo "request instead of asking for support on GitHub or" - echo "the forum. The error message above should tell you" - echo "where and why the error happened." + echo "" + echo "If you encountered an error, please consider fixing" + echo "the script for your environment and creating a pull" + echo "request instead of asking for support on GitHub or" + echo "the forum. The error message above should tell you" + echo "where and why the error happened." } #----------------------------------------------------- @@ -30,40 +30,39 @@ SHOW_CHANGELOG=false INCLUDE_PRE_RELEASE=false print() { - if [[ "${SILENT}" == false ]] ; then - echo -e "$@" - fi + if [[ "${SILENT}" == false ]]; then + echo -e "$@" + fi } showLogo() { - print "${COLOR_BLUE}" - print " _ _ _ " - print " | | ___ _ __ | (_)_ __ " - print " _ | |/ _ \| '_ \| | | '_ \ " - print "| |_| | (_) | |_) | | | | | |" - print " \___/ \___/| .__/|_|_|_| |_|" - print " |_|" - print "" - print "Linux Installer and Updater" - print "${COLOR_RESET}" + print "${COLOR_BLUE}" + print " _ _ _ " + print " | | ___ _ __ | (_)_ __ " + print " _ | |/ _ \| '_ \| | | '_ \ " + print "| |_| | (_) | |_) | | | | | |" + print " \___/ \___/| .__/|_|_|_| |_|" + print " |_|" + print "" + print "Linux Installer and Updater" + print "${COLOR_RESET}" } showHelp() { - showLogo - print "Available Arguments:" - print "\t" "--help" "\t" "Show this help information" "\n" - print "\t" "--allow-root" "\t" "Allow the install to be run as root" - print "\t" "--changelog" "\t" "Show the changelog after installation" - print "\t" "--force" "\t" "Always download the latest version" - print "\t" "--silent" "\t" "Don't print any output" - print "\t" "--prerelease" "\t" "Check for new Versions including Pre-Releases" - - if [[ ! -z $1 ]]; then - print "\n" "${COLOR_RED}ERROR: " "$*" "${COLOR_RESET}" "\n" - else - exit 0 - fi + showLogo + print "Available Arguments:" + print "\t" "--help" "\t" "Show this help information" "\n" + print "\t" "--allow-root" "\t" "Allow the install to be run as root" + print "\t" "--changelog" "\t" "Show the changelog after installation" + print "\t" "--force" "\t" "Always download the latest version" + print "\t" "--silent" "\t" "Don't print any output" + print "\t" "--prerelease" "\t" "Check for new Versions including Pre-Releases" + if [[ ! -z $1 ]]; then + print "\n" "${COLOR_RED}ERROR: " "$*" "${COLOR_RESET}" "\n" + else + exit 0 + fi } #----------------------------------------------------- @@ -74,9 +73,9 @@ optspec=":h-:" while getopts "${optspec}" OPT; do [ "${OPT}" = " " ] && continue if [ "${OPT}" = "-" ]; then # long option: reformulate OPT and OPTARG - OPT="${OPTARG%%=*}" # extract long option name - OPTARG="${OPTARG#$OPT}" # extract long option argument (may be empty) - OPTARG="${OPTARG#=}" # if long option argument, remove assigning `=` + OPT="${OPTARG%%=*}" # extract long option name + OPTARG="${OPTARG#$OPT}" # extract long option argument (may be empty) + OPTARG="${OPTARG#=}" # if long option argument, remove assigning `=` fi case "${OPT}" in h | help ) showHelp ;; @@ -93,8 +92,8 @@ shift $((OPTIND-1)) # remove parsed options and args from $@ list ## Check and warn if running as root. if [[ $EUID = 0 ]] && [[ "${ALLOW_ROOT}" != true ]]; then - showHelp "It is not recommended (nor necessary) to run this script as root. To do so anyway, please use '--allow-root'" - exit 1 + showHelp "It is not recommended (nor necessary) to run this script as root. To do so anyway, please use '--allow-root'" + exit 1 fi #----------------------------------------------------- @@ -107,12 +106,12 @@ print "Checking architecture..." ## uname actually gives more information than needed, but it contains all architectures (hardware and software) ARCHITECTURE=$(uname -m -p -i || echo "NO CHECK") -if [[ $ARCHITECTURE = "NO CHECK" ]] ; then +if [[ $ARCHITECTURE = "NO CHECK" ]]; then print "${COLOR_YELLOW}WARNING: Can't get system architecture, skipping check${COLOR_RESET}" -elif [[ $ARCHITECTURE =~ .*aarch.*|.*arm.* ]] ; then +elif [[ $ARCHITECTURE =~ .*aarch.*|.*arm.* ]]; then showHelp "Arm systems are not officially supported by Joplin, please search the forum (https://discourse.joplinapp.org/) for more information" exit 1 -elif [[ $ARCHITECTURE =~ .*i386.*|.*i686.* ]] ; then +elif [[ $ARCHITECTURE =~ .*i386.*|.*i686.* ]]; then showHelp "32-bit systems are not supported by Joplin, please search the forum (https://discourse.joplinapp.org/) for more information" exit 1 fi @@ -125,7 +124,7 @@ if [[ $(command -v ldconfig) ]]; then else LIBFUSE=$(find /lib /usr/lib /lib64 /usr/lib64 /usr/local/lib -name "libfuse.so.2" 2>/dev/null | grep "libfuse.so.2" || echo '') fi -if [[ $LIBFUSE == "" ]] ; then +if [[ $LIBFUSE == "" ]]; then print "${COLOR_RED}Error: Can't get libfuse2 on system, please install libfuse2${COLOR_RESET}" print "See https://joplinapp.org/help/faq/#desktop-application-will-not-launch-on-linux and https://github.com/AppImage/AppImageKit/wiki/FUSE for more information" exit 1 @@ -144,17 +143,17 @@ fi # Check if it's in the latest version if [[ -e ~/.joplin/VERSION ]] && [[ $(< ~/.joplin/VERSION) == "${RELEASE_VERSION}" ]]; then - print "${COLOR_GREEN}You already have the latest version${COLOR_RESET} ${RELEASE_VERSION} ${COLOR_GREEN}installed.${COLOR_RESET}" - ([[ "$FORCE" == true ]] && print "Forcing installation...") || exit 0 + print "${COLOR_GREEN}You already have the latest version${COLOR_RESET} ${RELEASE_VERSION} ${COLOR_GREEN}installed.${COLOR_RESET}" + ([[ "$FORCE" == true ]] && print "Forcing installation...") || exit 0 else - [[ -e ~/.joplin/VERSION ]] && CURRENT_VERSION=$(< ~/.joplin/VERSION) - print "The latest version is ${RELEASE_VERSION}, but you have ${CURRENT_VERSION:-no version} installed." + [[ -e ~/.joplin/VERSION ]] && CURRENT_VERSION=$(< ~/.joplin/VERSION) + print "The latest version is ${RELEASE_VERSION}, but you have ${CURRENT_VERSION:-no version} installed." fi # Check if it's an update or a new install DOWNLOAD_TYPE="New" if [[ -f ~/.joplin/Joplin.AppImage ]]; then - DOWNLOAD_TYPE="Update" + DOWNLOAD_TYPE="Update" fi #----------------------------------------------------- @@ -186,8 +185,7 @@ mv "${TEMP_DIR}/joplin.png" ~/.local/share/icons/hicolor/512x512/apps/joplin.png print "${COLOR_GREEN}OK${COLOR_RESET}" # Detect desktop environment -if [ "$XDG_CURRENT_DESKTOP" = "" ] -then +if [ "$XDG_CURRENT_DESKTOP" = "" ]; then DESKTOP=$(echo "${XDG_DATA_DIRS}" | sed 's/.*\(xfce\|kde\|gnome\).*/\1/') else DESKTOP=$XDG_CURRENT_DESKTOP @@ -213,8 +211,7 @@ if command -v lsb_release &> /dev/null; then # uses these to sandbox processes. Unfortunately, it doesn't look like we can get around this # without writing the AppImage to a non-user-writable location (without invalidating other security # controls). See https://discourse.joplinapp.org/t/possible-future-requirement-for-no-sandbox-flag-for-ubuntu-23-10/. - if [[ $DISTVER = "Ubuntu23.10" || $DISTVER =~ Debian1. || ( "$DISTVER" = "Linuxmint4" && "$DISTCODENAME" = "debbie" ) || ( "$DISTVER" = "CentOS" && "$DISTMAJOR" =~ 6|7 ) ]] - then + if [[ $DISTVER = "Ubuntu23.10" || $DISTVER =~ Debian1. || ( "$DISTVER" = "Linuxmint4" && "$DISTCODENAME" = "debbie" ) || ( "$DISTVER" = "CentOS" && "$DISTMAJOR" =~ 6|7 ) ]]; then SANDBOXPARAM="--no-sandbox" print "${COLOR_YELLOW}WARNING${COLOR_RESET} Electron sandboxing disabled." print " See https://discourse.joplinapp.org/t/32160/5 for details." @@ -229,37 +226,36 @@ fi # The old checks are left in place for historical reasons, but # NO MORE DESKTOP ENVIRONMENTS SHOULD BE ADDED # If a new environment needs to be supported, then the command check section should be re-thought -if [[ $DESKTOP =~ .*gnome.*|.*kde.*|.*xfce.*|.*mate.*|.*lxqt.*|.*unity.*|.*x-cinnamon.*|.*deepin.*|.*pantheon.*|.*lxde.*|.*i3.*|.*sway.* ]] || [[ `command -v update-desktop-database` ]] -then - DATA_HOME=${XDG_DATA_HOME:-~/.local/share} - DESKTOP_FILE_LOCATION="$DATA_HOME/applications" - # Only delete the desktop file if it will be replaced - rm -f "$DESKTOP_FILE_LOCATION/appimagekit-joplin.desktop" +if [[ $DESKTOP =~ .*gnome.*|.*kde.*|.*xfce.*|.*mate.*|.*lxqt.*|.*unity.*|.*x-cinnamon.*|.*deepin.*|.*pantheon.*|.*lxde.*|.*i3.*|.*sway.* ]] || [[ `command -v update-desktop-database` ]]; then + DATA_HOME=${XDG_DATA_HOME:-~/.local/share} + DESKTOP_FILE_LOCATION="$DATA_HOME/applications" + # Only delete the desktop file if it will be replaced + rm -f "$DESKTOP_FILE_LOCATION/appimagekit-joplin.desktop" - # On some systems this directory doesn't exist by default - mkdir -p "$DESKTOP_FILE_LOCATION" + # On some systems this directory doesn't exist by default + mkdir -p "$DESKTOP_FILE_LOCATION" - # Tabs specifically, and not spaces, are needed for indentation with Bash heredocs - cat >> "$DESKTOP_FILE_LOCATION/appimagekit-joplin.desktop" <<-EOF - [Desktop Entry] - Encoding=UTF-8 - Name=Joplin - Comment=Joplin for Desktop - Exec=${HOME}/.joplin/Joplin.AppImage ${SANDBOXPARAM} %u - Icon=joplin - StartupWMClass=Joplin - Type=Application - Categories=Office; - MimeType=x-scheme-handler/joplin; - X-GNOME-SingleWindow=true // should be removed eventually as it was upstream to be an XDG specification - SingleMainWindow=true - EOF + # No spaces or tabs should be used for indentation with Bash heredocs + cat >> "$DESKTOP_FILE_LOCATION/appimagekit-joplin.desktop" <<-EOF +[Desktop Entry] +Encoding=UTF-8 +Name=Joplin +Comment=Joplin for Desktop +Exec=${HOME}/.joplin/Joplin.AppImage ${SANDBOXPARAM} %u +Icon=joplin +StartupWMClass=Joplin +Type=Application +Categories=Office; +MimeType=x-scheme-handler/joplin; +X-GNOME-SingleWindow=true // should be removed eventually as it was upstream to be an XDG specification +SingleMainWindow=true +EOF - # Update application icons - [[ `command -v update-desktop-database` ]] && update-desktop-database "$DESKTOP_FILE_LOCATION" && update-desktop-database "$DATA_HOME/icons" - print "${COLOR_GREEN}OK${COLOR_RESET}" + # Update application icons + [[ `command -v update-desktop-database` ]] && update-desktop-database "$DESKTOP_FILE_LOCATION" && update-desktop-database "$DATA_HOME/icons" + print "${COLOR_GREEN}OK${COLOR_RESET}" else - print "${COLOR_RED}NOT DONE, unknown desktop '${DESKTOP}'${COLOR_RESET}" + print "${COLOR_RED}NOT DONE, unknown desktop '${DESKTOP}'${COLOR_RESET}" fi #----------------------------------------------------- @@ -274,8 +270,8 @@ echo "$RELEASE_VERSION" > ~/.joplin/VERSION #----------------------------------------------------- if [[ "$SHOW_CHANGELOG" == true ]]; then - NOTES=$(wget -qO - https://api.github.com/repos/laurent22/joplin/releases/latest | grep -Po '"body": "\K.*(?=")') - print "${COLOR_BLUE}Changelog:${COLOR_RESET}\n${NOTES}" + NOTES=$(wget -qO - https://api.github.com/repos/laurent22/joplin/releases/latest | grep -Po '"body": "\K.*(?=")') + print "${COLOR_BLUE}Changelog:${COLOR_RESET}\n${NOTES}" fi #-----------------------------------------------------