2024-02-20 15:23:09 +08:00
#!/usr/bin/env bash
2024-02-26 22:20:17 +08:00
set -euo pipefail
2024-02-20 15:23:09 +08:00
SCRIPT_DIR = $( cd -- " $( dirname -- " ${ BASH_SOURCE [0] } " ) " & > /dev/null && pwd )
2024-03-18 22:24:40 +08:00
CONF_DIR = $SCRIPT_DIR /onlyoffice-conf
BUILDS_DIR = $CONF_DIR /onlyoffice-builds.git
2024-02-22 16:23:20 +08:00
OO_DIR = $SCRIPT_DIR /www/common/onlyoffice/dist
2024-03-18 22:24:40 +08:00
PROPS_FILE = " $CONF_DIR " /onlyoffice.properties
2024-03-06 16:48:49 +08:00
2024-03-18 17:17:06 +08:00
declare -A PROPS
2024-02-20 15:23:09 +08:00
main ( ) {
2024-03-18 22:24:40 +08:00
mkdir -p " $CONF_DIR "
2024-03-06 16:48:49 +08:00
load_props
2024-03-18 22:24:40 +08:00
2024-02-20 15:23:09 +08:00
parse_arguments " $@ "
2024-02-22 16:23:20 +08:00
2024-03-06 16:48:49 +08:00
ask_for_license
2024-03-18 22:24:40 +08:00
# Remeber the 1st version that is installed. This will help us install only
# needed OnlyOffice versions in a later version of this script.
set_prop oldest_needed_version v1
2024-02-22 18:01:58 +08:00
mkdir -p " $OO_DIR "
2024-02-20 15:23:09 +08:00
install_version v1 4f370beb
install_version v2b d9da72fd
install_version v4 6ebc6938
install_version v5 88a356f0
install_version v6 abd8a309
install_version v7 9d8b914a
2024-03-18 22:24:40 +08:00
rm -rf " $BUILDS_DIR "
if command -v rdfind & > /dev/null; then
rdfind -makehardlinks true -makeresultsfile false $OO_DIR /v*
2024-02-20 15:23:09 +08:00
fi
}
2024-03-06 16:48:49 +08:00
load_props ( ) {
if [ -e " $PROPS_FILE " ] ; then
while IFS = '=' read -r key value; do
2024-03-18 17:17:06 +08:00
PROPS[ " $key " ] = " $value "
2024-03-06 16:48:49 +08:00
done < " $PROPS_FILE "
fi
}
set_prop ( ) {
2024-03-18 17:17:06 +08:00
PROPS[ " $1 " ] = " $2 "
2024-03-06 16:48:49 +08:00
2024-03-18 17:17:06 +08:00
for i in " ${ !PROPS[@] } " ; do
echo " $i = ${ PROPS [ $i ] } "
2024-03-06 16:48:49 +08:00
done > " $PROPS_FILE "
}
2024-02-20 15:23:09 +08:00
parse_arguments ( ) {
while [ [ $# -gt 0 ] ] ; do
case $1 in
-h| --help)
show_help
shift
; ;
2024-03-18 17:17:06 +08:00
-a| --accept-license)
ACCEPT_LICENSE = "1"
2024-02-20 15:23:09 +08:00
shift
; ;
*)
show_help
shift
; ;
esac
done
}
2024-03-06 16:48:49 +08:00
ask_for_license ( ) {
2024-03-18 17:17:06 +08:00
if [ ${ ACCEPT_LICENSE +x } ] || [ " ${ PROPS [agree_license] :- no } " = = yes ] ; then
2024-03-06 16:48:49 +08:00
return
fi
2024-03-18 17:17:06 +08:00
ensure_command_available curl
( echo -e "Please review the license of OnlyOffice:\n\n" ; curl https://raw.githubusercontent.com/ONLYOFFICE/web-apps/master/LICENSE.txt 2>/dev/null) | less
read -rp "Do you accept the license? (Y/N): " confirm \
2024-03-06 16:48:49 +08:00
&& [ [ $confirm = = [ yY] || $confirm = = [ yY] [ eE] [ sS] ] ] || exit 1
2024-03-18 17:17:06 +08:00
2024-03-06 16:48:49 +08:00
set_prop "agree_license" yes
}
2024-02-20 15:23:09 +08:00
show_help ( ) {
cat << EOF
install-onlyoffice installs or upgrades OnlyOffice.
2024-03-18 17:17:06 +08:00
NOTE: When you have rdfind installed, it will be used to save ~650MB of disk
space.
2024-02-20 15:23:09 +08:00
OPTIONS:
-h, --help
Show this help.
2024-03-18 17:17:06 +08:00
-a, --accept-license
Accept the license of OnlyOffice and do not ask when running this
script. Read and accept this before using this option:
https://github.com/ONLYOFFICE/web-apps/blob/master/LICENSE.txt
2024-02-20 15:23:09 +08:00
EOF
exit 1
}
2024-03-18 22:24:40 +08:00
ensure_oo_is_downloaded ( ) {
2024-03-18 17:17:06 +08:00
ensure_command_available git
2024-03-18 22:24:40 +08:00
if ! [ -d " $BUILDS_DIR " ] ; then
echo Downloading OnlyOffice...
git clone --bare https://github.com/cryptpad/onlyoffice-builds.git " $BUILDS_DIR "
2024-02-20 15:23:09 +08:00
fi
}
install_version ( ) {
local DIR = $1
local COMMIT = $2
local FULL_DIR = $OO_DIR /$DIR
2024-02-22 18:01:58 +08:00
local LAST_DIR
LAST_DIR = $( pwd )
2024-02-26 22:20:17 +08:00
if [ ! -e " $FULL_DIR " /.commit ] || [ " $( cat " $FULL_DIR " /.commit) " != " $COMMIT " ] ; then
2024-03-18 22:24:40 +08:00
ensure_oo_is_downloaded
rm -rf " $FULL_DIR "
cd " $BUILDS_DIR "
git worktree add " $FULL_DIR " " $COMMIT "
2024-02-26 22:20:17 +08:00
cd " $LAST_DIR "
echo " $COMMIT " > " $FULL_DIR " /.commit
echo " $DIR " updated
else
echo " $DIR " was up to date
2024-02-20 15:23:09 +08:00
fi
2024-02-26 22:20:17 +08:00
2024-02-20 15:23:09 +08:00
if [ ${ CLEAR +x } ] ; then
2024-02-22 18:01:58 +08:00
rm -f " $FULL_DIR " /.git
2024-02-20 15:23:09 +08:00
fi
}
2024-03-18 17:17:06 +08:00
ensure_command_available ( ) {
if ! command -v " $1 " & > /dev/null; then
echo " $1 " needs to be installed to run this script
exit 1
fi
}
2024-02-20 15:23:09 +08:00
main " $@ "