mirror of
https://github.com/EV21/uberspace-helper.git
synced 2026-10-08 04:43:18 +02:00
Compare commits
14
Commits
zsh
...
d360520720
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d360520720
|
||
|
|
968bc526dc
|
||
|
|
1438798d95
|
||
|
|
0d205024da
|
||
|
|
04b8e7197c
|
||
|
|
23aedfde45
|
||
|
|
d041330627
|
||
|
|
2404c956d1
|
||
|
|
dec9cdcae3
|
||
|
|
02820af50d
|
||
|
|
38492165c1
|
||
|
|
4779d92155
|
||
|
|
4b84d746fb
|
||
|
|
af6cad518f
|
No files matched your search
@@ -0,0 +1,84 @@
|
||||
#!/usr/bin/bash
|
||||
|
||||
## source this file to enable bash autocompletion for the `uberspace` command
|
||||
## example: 👇
|
||||
## source ~/_uberspace_completion
|
||||
## usage: type uberspace<space><tab><tab>
|
||||
## the result should be an output of `mail port takeout tools web`
|
||||
##
|
||||
## This is inspired by Zero Piraeus' answer on stackoverflow, thanks. 👍🚀
|
||||
## https://stackoverflow.com/questions/17879322/how-do-i-autocomplete-nested-multi-level-subcommands/17881946#17881946
|
||||
|
||||
_uberspace()
|
||||
{
|
||||
local cur prev
|
||||
|
||||
cur=${COMP_WORDS[COMP_CWORD]}
|
||||
prev=${COMP_WORDS[COMP_CWORD-1]}
|
||||
|
||||
case ${COMP_CWORD} in
|
||||
1)
|
||||
COMPREPLY=($(compgen -W "mail port takeout tools web" -- ${cur}))
|
||||
;;
|
||||
2)
|
||||
case ${prev} in
|
||||
mail)
|
||||
COMPREPLY=($(compgen -W "catchall domain spamfolder user" -- ${cur}))
|
||||
;;
|
||||
port)
|
||||
COMPREPLY=($(compgen -W "add del list" -- ${cur}))
|
||||
;;
|
||||
# takeout)
|
||||
## Beta? - As I have not used this tool I don't know if this is correct
|
||||
# COMPREPLY=($(compgen -W "takeout takein items" -- ${cur}))
|
||||
# ;;
|
||||
tools)
|
||||
COMPREPLY=($(compgen -W "restart version" -- ${cur}))
|
||||
;;
|
||||
web)
|
||||
COMPREPLY=($(compgen -W "backend domain errorpage header log traffic" -- ${cur}))
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
3)
|
||||
case ${prev} in
|
||||
catchall)
|
||||
COMPREPLY=($(compgen -W "del set status" -- ${cur}))
|
||||
;;
|
||||
domain)
|
||||
COMPREPLY=($(compgen -W "add del list" -- ${cur}))
|
||||
;;
|
||||
spamfolder | errorpage | log)
|
||||
COMPREPLY=($(compgen -W "disable enable status" -- ${cur}))
|
||||
;;
|
||||
user)
|
||||
COMPREPLY=($(compgen -W "add del forward list password" -- ${cur}))
|
||||
;;
|
||||
restart)
|
||||
COMPREPLY=($(compgen -W "php" -- ${cur}))
|
||||
;;
|
||||
version)
|
||||
COMPREPLY=($(compgen -W "list show use" -- ${cur}))
|
||||
;;
|
||||
backend)
|
||||
COMPREPLY=($(compgen -W "del list set" -- ${cur}))
|
||||
;;
|
||||
header)
|
||||
COMPREPLY=($(compgen -W "del list set suppress" -- ${cur}))
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
4)
|
||||
case ${prev} in
|
||||
show | use)
|
||||
COMPREPLY=($(compgen -W "couchdb erlang mongodb node php postgresql prolog ruby rust" -- ${cur}))
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
*)
|
||||
COMPREPLY=()
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
complete -F _uberspace uberspace
|
||||
+118
-26
@@ -4,7 +4,7 @@ APP_NAME=Gitea
|
||||
DEFAULT_PORT=3000
|
||||
GITEA_BIN_LOCATION=$HOME/gitea/gitea
|
||||
TMP_LOCATION=$HOME/tmp
|
||||
GPG_KEY_FINGERPRINT=7C9E68152594688862D62AF62D9AE806EC1592E2
|
||||
PGP_KEY_FINGERPRINT=7C9E68152594688862D62AF62D9AE806EC1592E2
|
||||
ORG=go-gitea # Organisation or GitHub user
|
||||
REPO=gitea
|
||||
GITHUB_API_URL=https://api.github.com/repos/$ORG/$REPO/releases/latest
|
||||
@@ -15,7 +15,10 @@ MYSQL_PASSWORD=${MYSQL_PASSWORD_STR:9}
|
||||
|
||||
function install_gitea
|
||||
{
|
||||
get_latest_version
|
||||
if [[ -n $USE_VERSION ]]
|
||||
then GITHUB_API_URL=https://api.github.com/repos/$ORG/$REPO/releases/tags/v$USE_VERSION
|
||||
fi
|
||||
get_download_url
|
||||
echo "Installing $APP_NAME $LATEST_VERSION"
|
||||
echo "Please set your $APP_NAME login credentials."
|
||||
read -r -p "$APP_NAME admin user: " ADMIN_USER
|
||||
@@ -48,9 +51,59 @@ function install_gitea
|
||||
uberspace web backend set / --http --port $DEFAULT_PORT
|
||||
uberspace web backend list
|
||||
install_update_script
|
||||
echo "This is the file structure for this app"
|
||||
echo_tree
|
||||
printf "You can now access your $APP_NAME by directing you Browser to: \n https://%s.uber.space \n" "$USER"
|
||||
}
|
||||
|
||||
function uninstall_gitea
|
||||
{
|
||||
# If some files do not exist there may be some errors
|
||||
unset_critical_section
|
||||
$GITEA_BIN_LOCATION manager flush-queues
|
||||
gitea_pid=$(supervisorctl pid gitea)
|
||||
echo "Process-ID is $gitea_pid"
|
||||
supervisorctl stop gitea
|
||||
if (ps --pid "$gitea_pid" > /dev/null)
|
||||
then echo "still running! - killing it..."; kill "$gitea_pid"
|
||||
fi
|
||||
sleep 30
|
||||
mysql --verbose --execute="DROP DATABASE ${USER}_gitea"
|
||||
rm ~/etc/services.d/gitea.ini
|
||||
rm -r ~/gitea
|
||||
rm ~/bin/gitea
|
||||
rm ~/bin/gitea-update
|
||||
supervisorctl reread
|
||||
supervisorctl update
|
||||
set_critical_section
|
||||
}
|
||||
|
||||
function process_parameters
|
||||
{
|
||||
while test $# -gt 0
|
||||
do
|
||||
local next_parameter=$1
|
||||
case $next_parameter in
|
||||
use )
|
||||
shift
|
||||
USE_VERSION="$1"
|
||||
shift
|
||||
;;
|
||||
uninstall )
|
||||
echo "This command tries to revert the $APP_NAME installation, it will delete all of its scripts, service config, ~/gitea directory with all contents and drop the database"
|
||||
if yes-no_question "Do you really want to do this?"
|
||||
then uninstall_gitea
|
||||
fi
|
||||
exit 0
|
||||
;;
|
||||
* )
|
||||
echo "$1 can not be processed, exiting script"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
}
|
||||
|
||||
function install_gitea_wrapper
|
||||
{
|
||||
cat << 'end_of_content' > ~/bin/gitea
|
||||
@@ -125,9 +178,6 @@ NO_REPLY_ADDRESS = noreply.${USER}.uber.space
|
||||
ENABLED = true
|
||||
MAILER_TYPE = sendmail
|
||||
FROM = ${USER}@uber.space
|
||||
|
||||
[repository]
|
||||
DEFAULT_BRANCH = main
|
||||
end_of_content
|
||||
}
|
||||
|
||||
@@ -136,17 +186,15 @@ function create_gitea_daemon_config
|
||||
cat << end_of_content > ~/etc/services.d/gitea.ini
|
||||
[program:gitea]
|
||||
directory=%(ENV_HOME)s/gitea
|
||||
command=gitea web
|
||||
command=%(ENV_HOME)s/gitea/gitea web
|
||||
startsecs=30
|
||||
stopsignal=HUP
|
||||
autorestart=true
|
||||
end_of_content
|
||||
}
|
||||
|
||||
function get_latest_version
|
||||
function get_download_url
|
||||
{
|
||||
|
||||
curl --silent $GITHUB_API_URL > "$TMP_LOCATION"/github_api_response.json
|
||||
curl --silent "$GITHUB_API_URL" > "$TMP_LOCATION"/github_api_response.json
|
||||
TAG_NAME=$(jq --raw-output '.tag_name' "$TMP_LOCATION"/github_api_response.json)
|
||||
LATEST_VERSION=${TAG_NAME:1}
|
||||
DOWNLOAD_URL=$(jq --raw-output '.assets[].browser_download_url' "$TMP_LOCATION"/github_api_response.json |
|
||||
@@ -166,15 +214,15 @@ function verify_file
|
||||
get_signature_file
|
||||
|
||||
## downloading public key if it does not already exist
|
||||
if ! gpg --fingerprint $GPG_KEY_FINGERPRINT
|
||||
if ! gpg --fingerprint $PGP_KEY_FINGERPRINT
|
||||
then
|
||||
## currently the key download via gpg does not work on Uberspace
|
||||
#gpg --keyserver keys.openpgp.org --recv $GPG_KEY_FINGERPRINT
|
||||
curl --silent https://keys.openpgp.org/vks/v1/by-fingerprint/$GPG_KEY_FINGERPRINT | gpg --import
|
||||
#gpg --keyserver keys.openpgp.org --recv $PGP_KEY_FINGERPRINT
|
||||
curl --silent https://keys.openpgp.org/vks/v1/by-fingerprint/$PGP_KEY_FINGERPRINT | gpg --import
|
||||
fi
|
||||
|
||||
if ! gpg --export-ownertrust | grep --quiet $GPG_KEY_FINGERPRINT:6:
|
||||
then echo "$GPG_KEY_FINGERPRINT:6:" | gpg --import-ownertrust
|
||||
if ! gpg --export-ownertrust | grep --quiet $PGP_KEY_FINGERPRINT:6:
|
||||
then echo "$PGP_KEY_FINGERPRINT:6:" | gpg --import-ownertrust
|
||||
fi
|
||||
|
||||
if gpg --verify "$TMP_LOCATION"/gitea.asc "$TMP_LOCATION"/gitea
|
||||
@@ -191,7 +239,7 @@ function install_update_script
|
||||
APP_NAME=Gitea
|
||||
GITEA_LOCATION=$HOME/gitea/gitea
|
||||
TMP_LOCATION=$HOME/tmp
|
||||
GPG_KEY_FINGERPRINT=7C9E68152594688862D62AF62D9AE806EC1592E2
|
||||
PGP_KEY_FINGERPRINT=7C9E68152594688862D62AF62D9AE806EC1592E2
|
||||
|
||||
ORG=go-gitea # Organisation or GitHub user
|
||||
REPO=gitea
|
||||
@@ -200,11 +248,18 @@ GITHUB_API_URL=https://api.github.com/repos/$ORG/$REPO/releases/latest
|
||||
function do_update_procedure
|
||||
{
|
||||
$GITEA_LOCATION manager flush-queues
|
||||
gitea_pid=$(supervisorctl pid gitea)
|
||||
echo "Process-ID is $gitea_pid"
|
||||
supervisorctl stop gitea
|
||||
wget --quiet --progress=bar:force --output-document $TMP_LOCATION/gitea "$DOWNLOAD_URL"
|
||||
if [[ $gitea_pid -gt 0 ]] && (ps --pid "$gitea_pid" > /dev/null)
|
||||
then echo "still running! - killing it..."; kill "$gitea_pid"
|
||||
fi
|
||||
if (lsof -nP -iTCP:3000 -sTCP:LISTEN)
|
||||
then echo "port 3000 is still in use, abbort"; exit 1
|
||||
fi
|
||||
wget --quiet --progress=bar:force --output-document "$TMP_LOCATION"/gitea "$DOWNLOAD_URL"
|
||||
verify_file
|
||||
supervisorctl stop gitea
|
||||
mv --verbose $TMP_LOCATION/gitea "$GITEA_LOCATION"
|
||||
mv --verbose "$TMP_LOCATION"/gitea "$GITEA_LOCATION"
|
||||
chmod u+x --verbose "$GITEA_LOCATION"
|
||||
supervisorctl start gitea
|
||||
supervisorctl status gitea
|
||||
@@ -238,12 +293,12 @@ function verify_file
|
||||
get_signature_file
|
||||
|
||||
## downloading public key if it does not already exist
|
||||
if ! gpg --fingerprint $GPG_KEY_FINGERPRINT
|
||||
if ! gpg --fingerprint $PGP_KEY_FINGERPRINT
|
||||
then
|
||||
## currently the key download via gpg does not work on Uberspace
|
||||
#gpg --keyserver keys.openpgp.org --recv $GPG_KEY_FINGERPRINT
|
||||
curl --silent https://keys.openpgp.org/vks/v1/by-fingerprint/$GPG_KEY_FINGERPRINT | gpg --import
|
||||
echo "$GPG_KEY_FINGERPRINT:6:" | gpg --import-ownertrust
|
||||
#gpg --keyserver keys.openpgp.org --recv $PGP_KEY_FINGERPRINT
|
||||
curl --silent https://keys.openpgp.org/vks/v1/by-fingerprint/$PGP_KEY_FINGERPRINT | gpg --import
|
||||
echo "$PGP_KEY_FINGERPRINT:6:" | gpg --import-ownertrust
|
||||
fi
|
||||
|
||||
if gpg --verify $TMP_LOCATION/gitea.asc $TMP_LOCATION/gitea
|
||||
@@ -252,8 +307,8 @@ function verify_file
|
||||
fi
|
||||
}
|
||||
|
||||
## this is a helper function to compare two versions as a "lower than" operator
|
||||
function version_lt
|
||||
## version_lower_than A B returns whether A < B
|
||||
function version_lower_than
|
||||
{
|
||||
test "$(echo "$@" |
|
||||
tr " " "n" |
|
||||
@@ -261,8 +316,19 @@ function version_lt
|
||||
head --lines=1)" != "$1"
|
||||
}
|
||||
|
||||
function fix_stop_signal
|
||||
{
|
||||
if (grep --quiet HUP "$HOME"/etc/services.d/gitea.ini)
|
||||
then
|
||||
sed --in-place '/HUP/d' "$HOME"/etc/services.d/gitea.ini
|
||||
supervisorctl reread
|
||||
supervisorctl update
|
||||
fi
|
||||
}
|
||||
|
||||
function main
|
||||
{
|
||||
fix_stop_signal
|
||||
get_local_version
|
||||
get_latest_version
|
||||
|
||||
@@ -271,7 +337,7 @@ function main
|
||||
echo "Your $APP_NAME is already up to date."
|
||||
echo "You are running $APP_NAME $LOCAL_VERSION"
|
||||
else
|
||||
if version_lt "$LOCAL_VERSION" "$LATEST_VERSION"
|
||||
if version_lower_than "$LOCAL_VERSION" "$LATEST_VERSION"
|
||||
then
|
||||
echo "There is a new version available."
|
||||
echo "Doing update from $LOCAL_VERSION to $LATEST_VERSION"
|
||||
@@ -286,6 +352,27 @@ end_of_content
|
||||
chmod u+x --verbose ~/bin/gitea-update
|
||||
}
|
||||
|
||||
function echo_tree
|
||||
{
|
||||
cat << 'end_of_content'
|
||||
.
|
||||
├── bin
|
||||
│ ├── [-rwxrw-r--] gitea
|
||||
│ └── [-rwxrw-r--] gitea-update
|
||||
├── etc
|
||||
│ ├── services.d
|
||||
│ │ └── gitea.ini
|
||||
│ └── ...
|
||||
├── gitea
|
||||
│ ├── custom
|
||||
│ │ └── conf
|
||||
│ │ └── app.ini
|
||||
│ ├── data
|
||||
│ └── [-rwxrw-r--] gitea
|
||||
└── ...
|
||||
end_of_content
|
||||
}
|
||||
|
||||
function yes-no_question
|
||||
{
|
||||
local question=$1
|
||||
@@ -310,11 +397,16 @@ function unset_critical_section { set +o pipefail +o errexit; }
|
||||
function main
|
||||
{
|
||||
set_critical_section
|
||||
process_parameters "$@"
|
||||
|
||||
echo "This script installs the latest release of $APP_NAME"
|
||||
echo "and assumes a newly created Uberspace with default settings."
|
||||
echo "Do not run this script if you already use your Uberspace for other apps!"
|
||||
|
||||
if (lsof -nP -iTCP:3000 -sTCP:LISTEN)
|
||||
then echo "Port 3000 is already in use, abbort"; exit 1
|
||||
fi
|
||||
|
||||
if yes-no_question "Do you want to execute this installer for $APP_NAME?"
|
||||
then install_gitea
|
||||
fi
|
||||
|
||||
+22
-5
@@ -12,10 +12,17 @@ GITHUB_API_URL=https://api.github.com/repos/$ORG/$REPO/releases/latest
|
||||
function do_update_procedure
|
||||
{
|
||||
$GITEA_LOCATION manager flush-queues
|
||||
gitea_pid=$(supervisorctl pid gitea)
|
||||
echo "Process-ID is $gitea_pid"
|
||||
supervisorctl stop gitea
|
||||
if [[ $gitea_pid -gt 0 ]] && (ps --pid "$gitea_pid" > /dev/null)
|
||||
then echo "still running! - killing it..."; kill "$gitea_pid"
|
||||
fi
|
||||
if (lsof -nP -iTCP:3000 -sTCP:LISTEN)
|
||||
then echo "port 3000 is still in use, abbort"; exit 1
|
||||
fi
|
||||
wget --quiet --progress=bar:force --output-document "$TMP_LOCATION"/gitea "$DOWNLOAD_URL"
|
||||
verify_file
|
||||
supervisorctl stop gitea
|
||||
mv --verbose "$TMP_LOCATION"/gitea "$GITEA_LOCATION"
|
||||
chmod u+x --verbose "$GITEA_LOCATION"
|
||||
supervisorctl start gitea
|
||||
@@ -64,12 +71,11 @@ function verify_file
|
||||
if gpg --verify "$TMP_LOCATION"/gitea.asc "$TMP_LOCATION"/gitea
|
||||
then rm "$TMP_LOCATION"/gitea.asc; return 0
|
||||
else echo "gpg verification results in a BAD signature"; exit 1
|
||||
echo "$GPG_KEY_FINGERPRINT:6:" | gpg --import-ownertrust
|
||||
fi
|
||||
}
|
||||
|
||||
## this is a helper function to compare two versions as a "lower than" operator
|
||||
function version_lt
|
||||
## version_lower_than A B returns whether A < B
|
||||
function version_lower_than
|
||||
{
|
||||
test "$(echo "$@" |
|
||||
tr " " "n" |
|
||||
@@ -77,8 +83,19 @@ function version_lt
|
||||
head --lines=1)" != "$1"
|
||||
}
|
||||
|
||||
function fix_stop_signal
|
||||
{
|
||||
if (grep --quiet HUP "$HOME"/etc/services.d/gitea.ini)
|
||||
then
|
||||
sed --in-place '/HUP/d' "$HOME"/etc/services.d/gitea.ini
|
||||
supervisorctl reread
|
||||
supervisorctl update
|
||||
fi
|
||||
}
|
||||
|
||||
function main
|
||||
{
|
||||
fix_stop_signal
|
||||
get_local_version
|
||||
get_latest_version
|
||||
|
||||
@@ -87,7 +104,7 @@ function main
|
||||
echo "Your $APP_NAME is already up to date."
|
||||
echo "You are running $APP_NAME $LOCAL_VERSION"
|
||||
else
|
||||
if version_lt "$LOCAL_VERSION" "$LATEST_VERSION"
|
||||
if version_lower_than "$LOCAL_VERSION" "$LATEST_VERSION"
|
||||
then
|
||||
echo "There is a new version available."
|
||||
echo "Doing update from $LOCAL_VERSION to $LATEST_VERSION"
|
||||
|
||||
+3
-3
@@ -7,7 +7,7 @@ LATEST_VERSION=$(curl --silent https://api.github.com/repos/$ORG/$REPO/releases/
|
||||
jq --raw-output .tag_name)
|
||||
|
||||
function do_upgrade() {
|
||||
supervisorctl stop $APP_NAME
|
||||
supervisorctl stop hedgedoc
|
||||
echo "waiting 1 minute until all processes are stopped"
|
||||
sleep 1m
|
||||
mv --verbose ~/hedgedoc ~/hedgedoc_"$LOCAL_VERSION"
|
||||
@@ -20,8 +20,8 @@ function do_upgrade() {
|
||||
cd ~/hedgedoc || exit
|
||||
bin/setup
|
||||
echo "You may need to wait a minute until HedgeDoc is up and running."
|
||||
supervisorctl start $APP_NAME
|
||||
echo "If everything works fine you can delete ~/hedgedoc_$USED_VERSION"
|
||||
supervisorctl start hedgedoc
|
||||
echo "If everything works fine you can delete ~/hedgedoc_$LOCAL_VERSION"
|
||||
echo "Please consider that there might be uploaded files in ~/hedgedoc_$LOCAL_VERSION/public/uploads which were not migrated to the new version if you are using the default setting."
|
||||
rm --recursive ~/hedgedoc_"$LOCAL_VERSION"
|
||||
}
|
||||
|
||||
+95
-37
@@ -1,5 +1,7 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
APP_NAME=Nextcloud
|
||||
|
||||
function install_nextcloud
|
||||
{
|
||||
echo "Please set your Nextcloud login credentials."
|
||||
@@ -20,11 +22,26 @@ function install_nextcloud
|
||||
if [ "$(ls --almost-all ~/html/)" ]; then echo '~/html is not empty, abort!'; exit 1; fi
|
||||
cd ~/html
|
||||
echo "Downloading Nextcloud to ~/html/"
|
||||
curl --progress-bar https://download.nextcloud.com/server/releases/"$(get_version_name)".tar.bz2 |
|
||||
tar -xjf - --strip-components=1
|
||||
release_name=$(get_version_name)
|
||||
release_archive="$release_name".tar.bz2
|
||||
signature_file="$release_archive".asc
|
||||
curl --progress-bar --remote-name https://download.nextcloud.com/server/releases/"$release_archive"
|
||||
curl --silent --remote-name https://download.nextcloud.com/server/releases/"$signature_file"
|
||||
curl --silent --remote-name https://nextcloud.com/nextcloud.asc
|
||||
gpg --import nextcloud.asc
|
||||
PGP_KEY_FINGERPRINT='28806A878AE423A28372792ED75899B9A724937A'
|
||||
#gpg --keyserver pgp.mit.edu --recv-keys $PGP_KEY_FINGERPRINT
|
||||
echo "$PGP_KEY_FINGERPRINT:6:" | gpg --import-ownertrust
|
||||
if ! gpg --verify "$signature_file" "$release_archive"
|
||||
then echo "gpg verification results in a BAD signature"; exit 1
|
||||
fi
|
||||
echo "Extracting archive"
|
||||
tar -xjf "$release_archive" --strip-components=1
|
||||
rm "$release_archive" "$signature_file" nextcloud.asc
|
||||
mysql --verbose --execute="CREATE DATABASE ${USER}_nextcloud"
|
||||
echo "Installing Nextcloud"
|
||||
php ~/html/occ maintenance:install \
|
||||
install_ncc
|
||||
ncc maintenance:install \
|
||||
--admin-user "${NEXTCLOUD_ADMIN_USER}" \
|
||||
--admin-pass "${NEXTCLOUD_ADMIN_PASS}" \
|
||||
--database 'mysql' --database-name "${USER}_nextcloud" \
|
||||
@@ -32,39 +49,68 @@ function install_nextcloud
|
||||
--database-pass "${MYSQL_PASSWORD}" \
|
||||
--data-dir "${HOME}/nextcloud_data"
|
||||
|
||||
php ~/html/occ config:system:set trusted_domains 0 --value="$trusted_domain"
|
||||
php ~/html/occ config:system:set overwrite.cli.url --value="https://$trusted_domain"
|
||||
ncc config:system:set trusted_domains 0 --value="$trusted_domain"
|
||||
ncc config:system:set overwrite.cli.url --value="https://$trusted_domain"
|
||||
|
||||
echo "Setting symbolic links for more easy log file access"
|
||||
ln --symbolic --verbose ~/nextcloud_data/nextcloud.log ~/logs/nextcloud.log
|
||||
ln --symbolic --verbose ~/nextcloud_data/updater.log ~/logs/nextcloud-updater.log
|
||||
|
||||
php ~/html/occ config:system:set mail_domain --value="uber.space"
|
||||
php ~/html/occ config:system:set mail_from_address --value="$USER"
|
||||
php ~/html/occ config:system:set mail_smtpmode --value="sendmail"
|
||||
php ~/html/occ config:system:set mail_sendmailmode --value="pipe"
|
||||
ncc config:system:set mail_domain --value="uber.space"
|
||||
ncc config:system:set mail_from_address --value="$USER"
|
||||
ncc config:system:set mail_smtpmode --value="sendmail"
|
||||
ncc config:system:set mail_sendmailmode --value="pipe"
|
||||
|
||||
php ~/html/occ config:system:set htaccess.RewriteBase --value='/'
|
||||
php ~/html/occ maintenance:update:htaccess
|
||||
ncc config:system:set htaccess.RewriteBase --value='/'
|
||||
ncc maintenance:update:htaccess
|
||||
|
||||
echo "*/5 * * * * php -f $HOME/html/cron.php > $HOME/logs/nextcloud-cron.log 2>&1" |
|
||||
echo "*/5 * * * * sleep $(( 1 + RANDOM % 60 )); php -f $HOME/html/cron.php > $HOME/logs/nextcloud-cron.log 2>&1" |
|
||||
crontab -
|
||||
php ~/html/occ background:cron
|
||||
ncc background:cron
|
||||
|
||||
php ~/html/occ config:system:set memcache.local --value='\OC\Memcache\APCu'
|
||||
php ~/html/occ config:system:set default_phone_region --value='DE'
|
||||
ncc config:system:set memcache.local --value='\OC\Memcache\APCu'
|
||||
ncc config:system:set default_phone_region --value='DE'
|
||||
|
||||
setup_redis
|
||||
install_notify_push
|
||||
install_nextcloud_updater
|
||||
install_ncc
|
||||
|
||||
/usr/sbin/restorecon -R ~/html
|
||||
|
||||
printf "If you want to use another domain read:\n https://lab.uberspace.de/guide_nextcloud.html#set-the-trusted-domain\n"
|
||||
printf "If you want to use another domain read:\n https://lab.uberspace.de/guide_nextcloud/#set-the-trusted-domain\n"
|
||||
printf "You can now access your Nextcloud by directing you Browser to: \n https://%s \n" "$trusted_domain"
|
||||
}
|
||||
|
||||
function uninstall_nextcloud
|
||||
{
|
||||
unset_critical_section
|
||||
if ! yes-no_question "Do you want to keep the Nextcloud user files?"
|
||||
then rm -r ~/nextcloud_data
|
||||
fi
|
||||
if test -f ~/etc/services.d/notify_push.ini
|
||||
then
|
||||
supervisorctl stop notify_push
|
||||
rm ~/etc/services.d/notify_push.ini
|
||||
supervisorctl reread
|
||||
supervisorctl update
|
||||
fi
|
||||
if test -f ~/etc/services.d/redis.ini
|
||||
then
|
||||
supervisorctl stop redis
|
||||
rm ~/etc/services.d/redis.ini
|
||||
rm -r ~/.redis
|
||||
supervisorctl reread
|
||||
supervisorctl update
|
||||
fi
|
||||
rm -r ~/html/* ~/html/.htaccess ~/html/.user.ini
|
||||
mysql --verbose --execute="DROP DATABASE ${USER}_nextcloud"
|
||||
rm ~/bin/ncc ~/bin/nextcloud-update
|
||||
unlink ~/bin/notify_push
|
||||
unlink ~/logs/nextcloud.log
|
||||
unlink ~/logs/nextcloud-updater.log
|
||||
set_critical_section
|
||||
}
|
||||
|
||||
function process_parameters
|
||||
{
|
||||
while test $# -gt 0
|
||||
@@ -76,6 +122,13 @@ function process_parameters
|
||||
VERSION="$1"
|
||||
shift
|
||||
;;
|
||||
uninstall )
|
||||
echo "This command tries to revert the $APP_NAME installation, it will delete all of its scripts, service config, ~/nextcloud_data directory with all contents and drops the database."
|
||||
if yes-no_question "Do you really want to do this?"
|
||||
then uninstall_nextcloud
|
||||
fi
|
||||
exit 0
|
||||
;;
|
||||
* )
|
||||
echo "$1 can not be processed, exiting script"
|
||||
exit 1
|
||||
@@ -162,17 +215,17 @@ end_of_content
|
||||
supervisorctl reread
|
||||
supervisorctl update
|
||||
supervisorctl status
|
||||
php ~/html/occ config:system:set redis host --value="${HOME}/.redis/sock"
|
||||
php ~/html/occ config:system:set redis port --value=0
|
||||
php ~/html/occ config:system:set redis timeout --value=1.5
|
||||
php ~/html/occ config:system:set filelocking.enabled --value='true'
|
||||
php ~/html/occ config:system:set memcache.locking --value='\OC\Memcache\Redis'
|
||||
php ~/html/occ config:system:set memcache.distributed --value='\OC\Memcache\Redis'
|
||||
ncc config:system:set redis host --value="${HOME}/.redis/sock"
|
||||
ncc config:system:set redis port --value=0
|
||||
ncc config:system:set redis timeout --value=1.5
|
||||
ncc config:system:set filelocking.enabled --value='true'
|
||||
ncc config:system:set memcache.locking --value='\OC\Memcache\Redis'
|
||||
ncc config:system:set memcache.distributed --value='\OC\Memcache\Redis'
|
||||
}
|
||||
|
||||
function install_notify_push
|
||||
{
|
||||
php ~/html/occ app:install notify_push
|
||||
ncc app:install notify_push
|
||||
chmod u+x --verbose ~/html/apps/notify_push/bin/x86_64/notify_push
|
||||
ln --symbolic --verbose "$HOME"/html/apps/notify_push/bin/x86_64/notify_push ~/bin/notify_push
|
||||
touch ~/etc/services.d/notify_push.ini
|
||||
@@ -191,8 +244,8 @@ end_of_content
|
||||
trusted_proxy=$(ip route |
|
||||
tail --lines 1 | ## filter last line
|
||||
awk '{print $9}') ## filter the last (9.) string from that line, it is the proxy ip
|
||||
php ~/html/occ config:system:set trusted_proxies 0 --value="$trusted_proxy"
|
||||
php ~/html/occ notify_push:setup https://"$trusted_domain"/push
|
||||
ncc config:system:set trusted_proxies 0 --value="$trusted_proxy"
|
||||
ncc notify_push:setup https://"$trusted_domain"/push
|
||||
}
|
||||
|
||||
function install_ncc
|
||||
@@ -211,23 +264,28 @@ function install_nextcloud_updater
|
||||
cat << 'end_of_content' > ~/bin/nextcloud-update
|
||||
#!/usr/bin/env bash
|
||||
|
||||
APP_LOCATION=$HOME/html
|
||||
APP_LOCATION=~/html
|
||||
|
||||
function ncc
|
||||
{
|
||||
php $APP_LOCATION/occ "$@"
|
||||
}
|
||||
|
||||
## Updater automatically works in maintenance:mode.
|
||||
## Use the Uberspace backup system for files and database if you need to roll back.
|
||||
## The Nextcloud updater creates backups only to safe base and app code data and config files
|
||||
## so it takes ressources you might need for your productive data.
|
||||
## Deactivate NC-updater Backups with --no-backup
|
||||
php "$APP_LOCATION"/updater/updater.phar --no-backup --no-interaction
|
||||
php $APP_LOCATION/updater/updater.phar --no-backup --no-interaction
|
||||
|
||||
## database optimisations
|
||||
php "$APP_LOCATION"/occ db:add-missing-primary-keys --no-interaction
|
||||
php "$APP_LOCATION"/occ db:add-missing-columns --no-interaction
|
||||
php "$APP_LOCATION"/occ db:add-missing-indices --no-interaction
|
||||
php "$APP_LOCATION"/occ db:convert-filecache-bigint --no-interaction
|
||||
ncc db:add-missing-primary-keys --no-interaction
|
||||
ncc db:add-missing-columns --no-interaction
|
||||
ncc db:add-missing-indices --no-interaction
|
||||
ncc db:convert-filecache-bigint --no-interaction
|
||||
|
||||
php "$APP_LOCATION"/occ app:update --all
|
||||
/usr/sbin/restorecon -R "$APP_LOCATION"
|
||||
ncc app:update --all
|
||||
/usr/sbin/restorecon -R $APP_LOCATION
|
||||
|
||||
if test -f ~/etc/services.d/notify_push.ini
|
||||
then supervisorctl restart notify_push
|
||||
@@ -264,16 +322,16 @@ function main
|
||||
|
||||
if [[ -n $VERSION ]]
|
||||
then
|
||||
echo "This script installs Nextcloud $VERSION"
|
||||
echo "This script installs $APP_NAME $VERSION"
|
||||
echo "We recommend to use the latest release."
|
||||
## This feature is mainly used to install older versions and then test the update script.
|
||||
else
|
||||
echo "This script installs the latest release of Nextcloud"
|
||||
echo "This script installs the latest release of $APP_NAME"
|
||||
echo "and assumes a newly created Uberspace with default settings."
|
||||
fi
|
||||
echo "Do not run this script if you already use your Uberspace for other apps!"
|
||||
|
||||
if yes-no_question "Do you want to execute this installer for Nextcloud?"
|
||||
if yes-no_question "Do you want to execute this installer for $APP_NAME?"
|
||||
then install_nextcloud
|
||||
fi
|
||||
|
||||
|
||||
@@ -0,0 +1,232 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
APP_NAME=Nextcloud
|
||||
APP_LOCATION=/var/www/virtual/$USER/html
|
||||
TMP_LOCATION=~/tmp
|
||||
|
||||
VERBOSE_OUTPUT=true
|
||||
NO_BACKUP=false
|
||||
NO_INTERACTION=false
|
||||
|
||||
ORG=nextcloud # Organisation or GitHub user
|
||||
REPO=server
|
||||
GITHUB_API_URL=https://api.github.com/repos/$ORG/$REPO/releases
|
||||
|
||||
function ncc
|
||||
{
|
||||
php "$APP_LOCATION"/occ "$@"
|
||||
}
|
||||
|
||||
function is_verbose
|
||||
{
|
||||
if [[ $VERBOSE_OUTPUT == "true" ]]
|
||||
then return 0
|
||||
else return 1
|
||||
fi
|
||||
}
|
||||
|
||||
function verbose_echo
|
||||
{
|
||||
if is_verbose
|
||||
then echo "$@"
|
||||
fi
|
||||
}
|
||||
|
||||
function get_current_version
|
||||
{
|
||||
ncc --version |
|
||||
awk '{print $NF}'
|
||||
}
|
||||
|
||||
function get_major_version
|
||||
{
|
||||
local complete_version=$1
|
||||
echo "$complete_version" | awk --field-separator "." '{print $1}'
|
||||
}
|
||||
|
||||
function get_latest_version
|
||||
{
|
||||
tag_name=$(curl --silent $GITHUB_API_URL > "$TMP_LOCATION"/github_api_response.json
|
||||
jq . "$TMP_LOCATION"/github_api_response.json |
|
||||
jq 'map(select(.tag_name | test("(v'"$MAJOR_VERSION"'.\\d+.\\d+$)")))' |
|
||||
jq --raw-output '.[0].tag_name')
|
||||
rm "$TMP_LOCATION"/github_api_response.json
|
||||
## remove the first character 'v', for example 'v24.0.1' -> '24.0.1' using substring syntax
|
||||
local version="${tag_name:1}"
|
||||
echo "$version"
|
||||
}
|
||||
|
||||
function do_update_procedure
|
||||
{
|
||||
cd $TMP_LOCATION || exit 1
|
||||
folder_should_not_exist "$TMP_LOCATION/nextcloud"
|
||||
verbose_echo "Download latest-$MAJOR_VERSION.zip"
|
||||
local release_archive="latest-$MAJOR_VERSION.zip"
|
||||
local signature_file=${release_archive}.asc
|
||||
curl --progress-bar --remote-name https://download.nextcloud.com/server/releases/"$release_archive"
|
||||
curl --silent --remote-name https://download.nextcloud.com/server/releases/"$signature_file"
|
||||
curl --silent --remote-name https://nextcloud.com/nextcloud.asc
|
||||
gpg --import nextcloud.asc
|
||||
if ! gpg --verify "$TMP_LOCATION/$signature_file" "$TMP_LOCATION/$release_archive"
|
||||
then echo "gpg verification results in a BAD signature"; exit 1
|
||||
fi
|
||||
verbose_echo "unzip latest-$MAJOR_VERSION.zip"
|
||||
unzip -q latest-"$MAJOR_VERSION".zip
|
||||
verbose_echo "Copy config to new version"
|
||||
cp "$APP_LOCATION"/config/config.php $TMP_LOCATION/nextcloud/config/
|
||||
if [[ $NO_BACKUP == "true" ]]
|
||||
then
|
||||
verbose_echo "Delete $APP_LOCATION"
|
||||
rm -r "$APP_LOCATION"
|
||||
else
|
||||
verbose_echo "Create application backup by moving the directory"
|
||||
verbose_echo "Destination: ~/nextcloud_application_backup_$CURRENT_VERSION"
|
||||
folder_should_not_exist ~/nextcloud_application_backup_"$CURRENT_VERSION"
|
||||
mv "$APP_LOCATION" ~/nextcloud_application_backup_"$CURRENT_VERSION"
|
||||
fi
|
||||
verbose_echo "Moving new files to destination"
|
||||
mv $TMP_LOCATION/nextcloud "$APP_LOCATION"
|
||||
verbose_echo "Removing setup files"
|
||||
rm latest-"$MAJOR_VERSION".zip
|
||||
rm latest-"$MAJOR_VERSION".zip.asc
|
||||
rm nextcloud.asc
|
||||
## official docs: (!) this MUST be executed from within your nextcloud installation directory
|
||||
cd "$APP_LOCATION" || exit 1
|
||||
ncc upgrade
|
||||
ncc db:add-missing-primary-keys --no-interaction
|
||||
ncc db:add-missing-columns --no-interaction
|
||||
ncc db:add-missing-indices --no-interaction
|
||||
ncc db:convert-filecache-bigint --no-interaction
|
||||
ncc app:update --all
|
||||
/usr/sbin/restorecon -R "$APP_LOCATION"
|
||||
if test -f ~/etc/services.d/notify_push.ini
|
||||
then supervisorctl restart notify_push
|
||||
fi
|
||||
}
|
||||
|
||||
function folder_should_not_exist
|
||||
{
|
||||
local folder_path=$1
|
||||
if test -d "$folder_path"
|
||||
then
|
||||
echo "The folder should not exist at this point in time. Delete or move: $folder_path"
|
||||
echo "abort update procedure"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
function process_parameters
|
||||
{
|
||||
while test $# -gt 0
|
||||
do
|
||||
local next_parameter=$1
|
||||
case $next_parameter in
|
||||
--no-backup )
|
||||
NO_BACKUP=true
|
||||
shift
|
||||
;;
|
||||
--no-interaction )
|
||||
NO_INTERACTION=true
|
||||
shift
|
||||
;;
|
||||
--no-verbose | --quiet )
|
||||
VERBOSE_OUTPUT=false
|
||||
shift
|
||||
;;
|
||||
* )
|
||||
echo "$next_parameter can not be processed, exiting script"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
}
|
||||
|
||||
## version_lower_than A B
|
||||
# returns whether A < B
|
||||
function version_lower_than
|
||||
{
|
||||
test "$(echo "$@" |
|
||||
tr " " "n" |
|
||||
sort --version-sort --reverse |
|
||||
head --lines=1)" != "$1"
|
||||
}
|
||||
|
||||
function is_data_used_in_nextcloud_directory
|
||||
{
|
||||
test -d "$APP_LOCATION"/data || return 1
|
||||
# shellcheck disable=SC2012
|
||||
directory_elements_counter=$(ls "$APP_LOCATION"/data | wc -l)
|
||||
## Some older releases provide a data folder with a index.html file
|
||||
if [[ directory_elements_counter -gt 1 ]]
|
||||
then return 0
|
||||
else return 1
|
||||
fi
|
||||
}
|
||||
|
||||
function yes-no_question
|
||||
{
|
||||
local question=$1
|
||||
while true
|
||||
do
|
||||
read -r -p "$question (y/n) " ANSWER
|
||||
case $ANSWER in
|
||||
[Yy]* | [Jj]* )
|
||||
return 0
|
||||
;;
|
||||
[Nn]* )
|
||||
return 1
|
||||
;;
|
||||
* ) echo "Please answer yes or no. ";;
|
||||
esac
|
||||
done
|
||||
}
|
||||
|
||||
function no_interaction_mode
|
||||
{
|
||||
if [[ $NO_INTERACTION == "true" ]]; then return 0; else return 1; fi
|
||||
}
|
||||
|
||||
function set_critical_section { set -o pipefail -o errexit; }
|
||||
function unset_critical_section { set +o pipefail +o errexit; }
|
||||
|
||||
function main
|
||||
{
|
||||
set_critical_section
|
||||
|
||||
process_parameters "$@"
|
||||
|
||||
CURRENT_VERSION=$(get_current_version)
|
||||
MAJOR_VERSION=$(get_major_version "$CURRENT_VERSION")
|
||||
LATEST_VERSION=$(get_latest_version)
|
||||
|
||||
if is_data_used_in_nextcloud_directory
|
||||
then
|
||||
echo "It looks like your data directory is located at the default location inside Nextcloud root"
|
||||
echo "This is not supported by this update script. Please use an external location."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ "$CURRENT_VERSION" = "$LATEST_VERSION" ]
|
||||
then
|
||||
verbose_echo "Your $APP_NAME $MAJOR_VERSION already has the latest point release."
|
||||
verbose_echo "You are running $APP_NAME $CURRENT_VERSION"
|
||||
if is_verbose; then ncc update:check; fi
|
||||
verbose_echo "If you want to do a major update don't skip major releases."
|
||||
verbose_echo "Example: 18.0.5 -> 18.0.11 -> 19.0.5 -> 20.0.2"
|
||||
verbose_echo "Therefore it is recommended to use the built-in updater"
|
||||
else
|
||||
if version_lower_than "$CURRENT_VERSION" "$LATEST_VERSION"
|
||||
then
|
||||
echo "There is a new point release version available."
|
||||
echo "Doing update from $CURRENT_VERSION to $LATEST_VERSION"
|
||||
if no_interaction_mode || yes-no_question "Do you want to start the update procedure?"
|
||||
then do_update_procedure
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
unset_critical_section
|
||||
}
|
||||
|
||||
main "$@"
|
||||
exit $?
|
||||
+13
-8
@@ -1,22 +1,27 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
APP_LOCATION=$HOME/html
|
||||
APP_LOCATION=~/html
|
||||
|
||||
function ncc
|
||||
{
|
||||
php $APP_LOCATION/occ "$@"
|
||||
}
|
||||
|
||||
## Updater automatically works in maintenance:mode.
|
||||
## Use the Uberspace backup system for files and database if you need to roll back.
|
||||
## The Nextcloud updater creates backups only to safe base and app code data and config files
|
||||
## so it takes ressources you might need for your productive data.
|
||||
## Deactivate NC-updater Backups with --no-backup
|
||||
php "$APP_LOCATION"/updater/updater.phar --no-backup --no-interaction
|
||||
php $APP_LOCATION/updater/updater.phar --no-backup --no-interaction
|
||||
|
||||
## database optimisations
|
||||
php "$APP_LOCATION"/occ db:add-missing-primary-keys --no-interaction
|
||||
php "$APP_LOCATION"/occ db:add-missing-columns --no-interaction
|
||||
php "$APP_LOCATION"/occ db:add-missing-indices --no-interaction
|
||||
php "$APP_LOCATION"/occ db:convert-filecache-bigint --no-interaction
|
||||
ncc db:add-missing-primary-keys --no-interaction
|
||||
ncc db:add-missing-columns --no-interaction
|
||||
ncc db:add-missing-indices --no-interaction
|
||||
ncc db:convert-filecache-bigint --no-interaction
|
||||
|
||||
php "$APP_LOCATION"/occ app:update --all
|
||||
/usr/sbin/restorecon -R "$APP_LOCATION"
|
||||
ncc app:update --all
|
||||
/usr/sbin/restorecon -R $APP_LOCATION
|
||||
|
||||
if test -f ~/etc/services.d/notify_push.ini
|
||||
then supervisorctl restart notify_push
|
||||
|
||||
Reference in new issue
Block a user