1
0
mirror of https://github.com/laurent22/joplin.git synced 2024-12-21 09:38:01 +02:00

Linux: style: make install script more consistent

This commit is contained in:
Helmut K. C. Tessarek 2024-01-23 17:42:03 +01:00
parent 8b452106be
commit 681d413b36
No known key found for this signature in database
GPG Key ID: BE0985349D44DD00

View File

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