mirror of
https://github.com/laurent22/joplin.git
synced 2025-01-02 12:47:41 +02:00
Desktop: Cleaning up the install / update script (#2719)
* Cleaning up the install script * New `--force` option always downloads the latest version * New `--notes` option shows the release notes * Actually print the version installed at the end * Show download progress, but not extra garbage * Blue logo * refactor and cleanup * Handle space, but no args
This commit is contained in:
parent
5743729d11
commit
d54e52b1a8
@ -6,113 +6,155 @@ set -e
|
||||
#-----------------------------------------------------
|
||||
COLOR_RED=`tput setaf 1`
|
||||
COLOR_GREEN=`tput setaf 2`
|
||||
COLOR_YELLOW=`tput setaf 3`
|
||||
COLOR_BLUE=`tput setaf 4`
|
||||
COLOR_RESET=`tput sgr0`
|
||||
SILENT=false
|
||||
ALLOW_ROOT=false
|
||||
SHOW_CHANGELOG=false
|
||||
|
||||
print() {
|
||||
if [[ "$SILENT" == false ]] ; then
|
||||
echo "$1"
|
||||
if [[ "${SILENT}" == false ]] ; then
|
||||
echo -e "$@"
|
||||
fi
|
||||
}
|
||||
|
||||
#-----------------------------------------------------
|
||||
# ARGUMENTS
|
||||
#-----------------------------------------------------
|
||||
showLogo() {
|
||||
print "${COLOR_BLUE}"
|
||||
print " _ _ _ "
|
||||
print " | | ___ _ __ | (_)_ __ "
|
||||
print " _ | |/ _ \| '_ \| | | '_ \ "
|
||||
print "| |_| | (_) | |_) | | | | | |"
|
||||
print " \___/ \___/| .__/|_|_|_| |_|"
|
||||
print " |_|"
|
||||
print ""
|
||||
print "Linux Installer and Updater"
|
||||
print "${COLOR_RESET}"
|
||||
}
|
||||
|
||||
# --allow-root
|
||||
## Check and warn if running as root.
|
||||
if [[ $EUID = 0 ]] ; then
|
||||
if [[ $* != *--allow-root* ]] ; then
|
||||
echo "${COLOR_RED}It is not recommended (nor necessary) to run this script as root. To do so anyway, please use '--allow-root'${COLOR_RESET}"
|
||||
exit 1
|
||||
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"
|
||||
|
||||
if [[ ! -z $1 ]]; then
|
||||
print "\n" "${COLOR_RED}ERROR: " "$*" "${COLOR_RESET}" "\n"
|
||||
else
|
||||
exit 0
|
||||
fi
|
||||
fi
|
||||
|
||||
# --silent
|
||||
## Mutes messages by console
|
||||
if [[ $* == *--silent* ]] ; then
|
||||
SILENT=true
|
||||
}
|
||||
|
||||
#-----------------------------------------------------
|
||||
# PARSE ARGUMENTS
|
||||
#-----------------------------------------------------
|
||||
|
||||
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 `=`
|
||||
fi
|
||||
case "${OPT}" in
|
||||
h | help ) showHelp ;;
|
||||
allow-root ) ALLOW_ROOT=true ;;
|
||||
silent ) SILENT=true ;;
|
||||
force ) FORCE=true ;;
|
||||
changelog ) SHOW_CHANGELOG=true ;;
|
||||
[^\?]* ) showHelp "Illegal option --${OPT}"; exit 2 ;;
|
||||
\? ) showHelp "Illegal option -${OPTARG}"; exit 2 ;;
|
||||
esac
|
||||
done
|
||||
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
|
||||
fi
|
||||
|
||||
#-----------------------------------------------------
|
||||
# START
|
||||
#-----------------------------------------------------
|
||||
showLogo
|
||||
|
||||
# Title
|
||||
print " _ _ _ "
|
||||
print " | | ___ _ __ | (_)_ __ "
|
||||
print " _ | |/ _ \| '_ \| | | '_ \ "
|
||||
print "| |_| | (_) | |_) | | | | | |"
|
||||
print " \___/ \___/| .__/|_|_|_| |_|"
|
||||
print " |_|"
|
||||
print ""
|
||||
print "Linux Installer and Updater"
|
||||
|
||||
print "Checking architecture..."
|
||||
# Architecture check
|
||||
if ! [[ -x "$(command -v uname)" ]] ; then
|
||||
print "Can't get system architecture, skipping check"
|
||||
print "${COLOR_YELLOW}WARNING: Can't get system architecture, skipping check${COLOR_RESET}"
|
||||
else
|
||||
## this actually gives more information than needed, but it contains all architectures (hardware and software)
|
||||
ARCHITECTURE=$(uname -a)
|
||||
|
||||
if [[ $ARCHITECTURE =~ .*aarch.*|.*arm.* ]] ; then
|
||||
echo "${COLOR_RED}Arm systems are not officially supported by Joplin,${COLOR_RESET} 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
|
||||
elif [[ $ARCHITECTURE =~ .*i.86.* ]] ; then
|
||||
echo "${COLOR_RED}32-bit systems are not supported by Joplin,${COLOR_RESET} 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
|
||||
fi
|
||||
fi
|
||||
|
||||
#-----------------------------------------------------
|
||||
# Download Joplin
|
||||
#-----------------------------------------------------
|
||||
|
||||
# Get the latest version to download
|
||||
print "Checking latest version..."
|
||||
RELEASE_VERSION=$(wget -qO - "https://api.github.com/repos/laurent22/joplin/releases/latest" | grep -Po '"tag_name": "v\K.*?(?=")')
|
||||
|
||||
# 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}"
|
||||
([[ "$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."
|
||||
fi
|
||||
|
||||
print 'Downloading Joplin...'
|
||||
# Delete previous version (in future versions joplin.desktop shouldn't exist)
|
||||
rm -f ~/.joplin/*.AppImage ~/.local/share/applications/joplin.desktop ~/.joplin/VERSION
|
||||
#-----------------------------------------------------
|
||||
print 'Downloading Joplin...'
|
||||
TEMP_DIR=$(mktemp -d)
|
||||
wget -qnv --show-progress -O ${TEMP_DIR}/Joplin.AppImage https://github.com/laurent22/joplin/releases/download/v${RELEASE_VERSION}/Joplin-${RELEASE_VERSION}.AppImage
|
||||
wget -qnv --show-progress -O ${TEMP_DIR}/joplin.png https://joplinapp.org/images/Icon512.png
|
||||
|
||||
# Creates the folder where the binary will be stored
|
||||
mkdir -p ~/.joplin/
|
||||
#-----------------------------------------------------
|
||||
print 'Installing Joplin...'
|
||||
# Delete previous version (in future versions joplin.desktop shouldn't exist)
|
||||
rm -f ~/.joplin/*.AppImage ~/.local/share/applications/joplin.desktop ~/.joplin/VERSION
|
||||
|
||||
# Download the latest version
|
||||
wget -nv --show-progress -O ~/.joplin/Joplin.AppImage https://github.com/laurent22/joplin/releases/download/v$RELEASE_VERSION/Joplin-$RELEASE_VERSION.AppImage
|
||||
# Creates the folder where the binary will be stored
|
||||
mkdir -p ~/.joplin/
|
||||
|
||||
# Gives execution privileges
|
||||
chmod +x ~/.joplin/Joplin.AppImage
|
||||
# Download the latest version
|
||||
mv ${TEMP_DIR}/Joplin.AppImage ~/.joplin/Joplin.AppImage
|
||||
|
||||
print "${COLOR_GREEN}OK${COLOR_RESET}"
|
||||
# Gives execution privileges
|
||||
chmod +x ~/.joplin/Joplin.AppImage
|
||||
|
||||
#-----------------------------------------------------
|
||||
# Icon
|
||||
#-----------------------------------------------------
|
||||
print "${COLOR_GREEN}OK${COLOR_RESET}"
|
||||
|
||||
# Download icon
|
||||
print 'Downloading icon...'
|
||||
mkdir -p ~/.local/share/icons/hicolor/512x512/apps
|
||||
wget -nv -O ~/.local/share/icons/hicolor/512x512/apps/joplin.png https://joplinapp.org/images/Icon512.png
|
||||
print "${COLOR_GREEN}OK${COLOR_RESET}"
|
||||
#-----------------------------------------------------
|
||||
print 'Installing icon...'
|
||||
mkdir -p ~/.local/share/icons/hicolor/512x512/apps
|
||||
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
|
||||
DESKTOP=$(echo "$XDG_DATA_DIRS" | sed 's/.*\(xfce\|kde\|gnome\).*/\1/')
|
||||
else
|
||||
# Detect desktop environment
|
||||
if [ "$XDG_CURRENT_DESKTOP" = "" ]
|
||||
then
|
||||
DESKTOP=$(echo "${XDG_DATA_DIRS}" | sed 's/.*\(xfce\|kde\|gnome\).*/\1/')
|
||||
else
|
||||
DESKTOP=$XDG_CURRENT_DESKTOP
|
||||
fi
|
||||
DESKTOP=${DESKTOP,,} # convert to lower case
|
||||
fi
|
||||
DESKTOP=${DESKTOP,,} # convert to lower case
|
||||
|
||||
# Create icon for Gnome
|
||||
echo 'Create Desktop icon.'
|
||||
if [[ $DESKTOP =~ .*gnome.*|.*kde.*|.*xfce.*|.*mate.*|.*lxqt.*|.*unity.*|.*x-cinnamon.*|.*deepin.* ]]
|
||||
then
|
||||
: "${TMPDIR:=/tmp}"
|
||||
#-----------------------------------------------------
|
||||
echo 'Create Desktop icon...'
|
||||
if [[ $DESKTOP =~ .*gnome.*|.*kde.*|.*xfce.*|.*mate.*|.*lxqt.*|.*unity.*|.*x-cinnamon.*|.*deepin.* ]]
|
||||
then
|
||||
: "${TMPDIR:=$TEMP_DIR}"
|
||||
# This command extracts to squashfs-root by default and can't be changed...
|
||||
# So we run it in the tmp directory and clean up after ourselves
|
||||
(cd $TMPDIR && ~/.joplin/Joplin.AppImage --appimage-extract joplin.desktop &> /dev/null)
|
||||
@ -123,25 +165,31 @@ if [[ ! -e ~/.joplin/VERSION ]] || [[ $(< ~/.joplin/VERSION) != "$RELEASE_VERSIO
|
||||
|
||||
# On some systems this directory doesn't exist by default
|
||||
mkdir -p ~/.local/share/applications
|
||||
echo -e "[Desktop Entry]\nEncoding=UTF-8\nName=Joplin\nComment=Joplin for Desktop\nExec=/home/$USER/.joplin/Joplin.AppImage\nIcon=joplin\nStartupWMClass=Joplin\nType=Application\nCategories=Office;\n#$APPIMAGE_VERSION" >> ~/.local/share/applications/appimagekit-joplin.desktop
|
||||
echo -e "[Desktop Entry]\nEncoding=UTF-8\nName=Joplin\nComment=Joplin for Desktop\nExec=/home/${USER}/.joplin/Joplin.AppImage\nIcon=joplin\nStartupWMClass=Joplin\nType=Application\nCategories=Office;\n#${APPIMAGE_VERSION}" >> ~/.local/share/applications/appimagekit-joplin.desktop
|
||||
# Update application icons
|
||||
[[ `command -v update-desktop-database` ]] && update-desktop-database ~/.local/share/applications
|
||||
print "${COLOR_GREEN}OK${COLOR_RESET}"
|
||||
else
|
||||
print "${COLOR_RED}NOT DONE${COLOR_RESET}"
|
||||
fi
|
||||
|
||||
#-----------------------------------------------------
|
||||
# Finish
|
||||
#-----------------------------------------------------
|
||||
# Informs the user that it has been installed and cleans variables
|
||||
print "${COLOR_GREEN}Joplin version${COLOR_RESET}" $RELEASE_VERSION "${COLOR_GREEN}installed.${COLOR_RESET}"
|
||||
|
||||
# Add version
|
||||
echo $RELEASE_VERSION > ~/.joplin/VERSION
|
||||
else
|
||||
print "${COLOR_GREEN}You already have the latest version${COLOR_RESET}" $version "${COLOR_GREEN}installed.${COLOR_RESET}"
|
||||
print "${COLOR_RED}NOT DONE, unknown desktop '${DESKTOP}'${COLOR_RESET}"
|
||||
fi
|
||||
|
||||
# Goodbye
|
||||
print 'Bye!'
|
||||
#-----------------------------------------------------
|
||||
# FINISH INSTALLATION
|
||||
#-----------------------------------------------------
|
||||
|
||||
# Informs the user that it has been installed
|
||||
print "${COLOR_GREEN}Joplin version${COLOR_RESET} ${RELEASE_VERSION} ${COLOR_GREEN}installed.${COLOR_RESET}"
|
||||
|
||||
# Record version
|
||||
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}"
|
||||
fi
|
||||
|
||||
#-----------------------------------------------------
|
||||
print "Cleaning up..."
|
||||
rm -rf $TEMP_DIR
|
||||
print "${COLOR_GREEN}OK${COLOR_RESET}"
|
||||
|
Loading…
Reference in New Issue
Block a user