You've already forked joplin
							
							
				mirror of
				https://github.com/laurent22/joplin.git
				synced 2025-10-31 00:07:48 +02:00 
			
		
		
		
	Linux: style: make install script more consistent
This commit is contained in:
		| @@ -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 | ||||
|  | ||||
| #----------------------------------------------------- | ||||
|   | ||||
		Reference in New Issue
	
	Block a user