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:
parent
8b452106be
commit
681d413b36
@ -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
|
||||||
|
|
||||||
#-----------------------------------------------------
|
#-----------------------------------------------------
|
||||||
|
Loading…
Reference in New Issue
Block a user