Compare commits

..
5 Commits
10 changed files with 195 additions and 367 deletions

No files matched your search

-34
View File
@@ -56,37 +56,3 @@ Connect via SSH to your Uberspace an then run:
```sh
bash -c "$(wget -q -O - https://github.com/EV21/uberspace-helper/raw/main/gitea-installer.sh)"
```
```console
[isabell@stardust ~]$ bash -c "$(wget -q -O - https://sh.ev21.de/uberspace/gitea-installer.sh)"
This script installs the latest release of Gitea
and assumes a newly created Uberspace with default settings.
The following files and directories will be created:
/home/isabell
├── bin
│ ├── [-rwxrw-r--] gitea (wrapper script)
│ └── [-rwxrw-r--] gitea-update
├── etc
│ ├── services.d
│ │ └── gitea.ini
│ └── ...
├── gitea
│ ├── custom
│ │ └── conf
│ │ └── app.ini (configuration file)
│ ├── data
│ └── [-rwxrw-r--] gitea (binary file)
└── ...
Do not run this script if you already use your Uberspace for other apps!
Do you want to execute this installer for Gitea? (y/n) y
Installing Gitea 1.18.4
Please set your Gitea login credentials.
Gitea admin user: AdminUserName
Your password input will not be visible.
Gitea admin password:
Gitea admin password confirmation:
... some magic moments later
You can now access your Gitea by directing your browser to:
https://isabell.uber.space
[isabell@stardust ~]$
```
+102 -146
View File
@@ -2,7 +2,7 @@
APP_NAME=Gitea
DEFAULT_PORT=3000
GITEA_BINARY=$HOME/gitea/gitea
GITEA_BIN_LOCATION=$HOME/gitea/gitea
TMP_LOCATION=$HOME/tmp
PGP_KEY_FINGERPRINT=7C9E68152594688862D62AF62D9AE806EC1592E2
ORG=go-gitea # Organisation or GitHub user
@@ -15,52 +15,58 @@ MYSQL_PASSWORD=${MYSQL_PASSWORD_STR:9}
function install_gitea
{
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
ask_for_password
echo "Download $APP_NAME $INSTALL_VERSION"
curl --location --progress-bar --output "$TMP_LOCATION"/gitea "$DOWNLOAD_URL"
read -r -p "$APP_NAME admin password: " ADMIN_PASS
wget --quiet --progress=bar:force --output-document "$TMP_LOCATION"/gitea "$DOWNLOAD_URL"
verify_file
mkdir --parents ~/gitea/custom/conf/
mv --verbose "$TMP_LOCATION"/gitea "$GITEA_BINARY"
chmod u+x --verbose "$GITEA_BINARY"
#ln --symbolic --verbose "$GITEA_BINARY" ~/bin/gitea
mv --verbose "$TMP_LOCATION"/gitea "$GITEA_BIN_LOCATION"
chmod u+x --verbose "$GITEA_BIN_LOCATION"
#ln --symbolic --verbose "$GITEA_BIN_LOCATION" ~/bin/gitea
## gitea does not recognize its real path, maybe use a wrapper for this
install_gitea_wrapper
ln --symbolic --verbose ~/.ssh ~/gitea/.ssh
create_app_ini
mysql --verbose --execute="CREATE DATABASE ${USER}_gitea"
echo "The database initialisation may take a while ..."
$GITEA_BINARY migrate 1>/dev/null
$GITEA_BIN_LOCATION migrate
create_gitea_daemon_config
supervisorctl reread
supervisorctl update gitea
supervisorctl status gitea
echo "waiting 30 seconds ..."
sleep 30
supervisorctl status gitea
$GITEA_BINARY admin user create \
supervisorctl update
supervisorctl status
sleep 5
supervisorctl status
$GITEA_BIN_LOCATION admin user create \
--username "${ADMIN_USER}" \
--password "${ADMIN_PASS}" \
--email "${USER}"@uber.space \
--admin \
--config "/home/${USER}/gitea/custom/conf/app.ini" \
1>/dev/null
--config "/home/${USER}/gitea/custom/conf/app.ini"
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 your browser to: \n https://%s.uber.space \n" "$USER"
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
fix_stop_signal
$GITEA_BINARY manager flush-queues
$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
@@ -68,36 +74,10 @@ function uninstall_gitea
rm ~/bin/gitea
rm ~/bin/gitea-update
supervisorctl reread
supervisorctl update gitea
uberspace web backend set / --apache
supervisorctl update
set_critical_section
}
function ask_for_password
{
echo "Note: Your password input will not be visible."
read -s -r -p "$APP_NAME admin password: " ADMIN_PASS
echo
read -s -r -p "$APP_NAME admin password confirmation: " ADMIN_PASS_CONFIRMATION
echo
while [ -z "$ADMIN_PASS" ] || [ "$ADMIN_PASS" != "$ADMIN_PASS_CONFIRMATION" ]
do
echo That was not correct, try again
ask_for_password
done
}
# This is only relevant for the uninstaller for broken old installations
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 process_parameters
{
while test $# -gt 0
@@ -107,14 +87,11 @@ function process_parameters
use )
shift
USE_VERSION="$1"
if [[ -n $USE_VERSION ]]
then GITHUB_API_URL=https://api.github.com/repos/$ORG/$REPO/releases/tags/v$USE_VERSION
fi
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?"
if yes-no_question "Do you really want to do this?"
then uninstall_gitea
fi
exit 0
@@ -137,7 +114,7 @@ function install_gitea_wrapper
export GITEA_WORK_DIR=$HOME/gitea
FIRST_PARAMETER="$1"
GITEA_BINARY=$HOME/gitea/gitea
GITEA_BIN_LOCATION=$HOME/gitea/gitea
case $FIRST_PARAMETER in
start | stop | restart | status )
@@ -156,12 +133,12 @@ case $FIRST_PARAMETER in
## this command creates a backup zip file with db, repos, config, log, data
## restoring the backup is more difficult
## read: https://docs.gitea.io/en-us/backup-and-restore/#restore-command-restore
$GITEA_BINARY dump --tempdir $HOME/tmp
$GITEA_BIN_LOCATION dump --tempdir $HOME/tmp
exit $?
;;
esac
$GITEA_BINARY "$@"
$GITEA_BIN_LOCATION "$@"
exit $?
end_of_content
chmod u+x --verbose ~/bin/gitea
@@ -169,13 +146,12 @@ end_of_content
function create_app_ini
{
SECRET_KEY=$($GITEA_BINARY generate secret SECRET_KEY)
SECRET_KEY=$($GITEA_BIN_LOCATION generate secret SECRET_KEY)
cat << end_of_content > ~/gitea/custom/conf/app.ini
[server]
DOMAIN = $USER.uber.space
ROOT_URL = https://%(DOMAIN)s
OFFLINE_MODE = true ; Disables use of CDN for static files and Gravatar for profile pictures.
LANDING_PAGE = explore ; possible options are [home, explore, organizations, login, custom like /org/repo or url]
LFS_START_SERVER = true ; Enables Git LFS support
[database]
@@ -190,9 +166,6 @@ MIN_PASSWORD_LENGTH = 8
PASSWORD_COMPLEXITY = lower
SECRET_KEY = $SECRET_KEY
[session]
COOKIE_SECURE = true
[service]
DISABLE_REGISTRATION = true ; security option, only admins can create new users.
SHOW_REGISTRATION_BUTTON = false
@@ -202,12 +175,9 @@ DEFAULT_KEEP_EMAIL_PRIVATE = true
NO_REPLY_ADDRESS = noreply.${USER}.uber.space
[mailer]
ENABLED = true
PROTOCOL = sendmail
FROM = ${USER}@uber.space
[other]
SHOW_FOOTER_VERSION = false
ENABLED = true
MAILER_TYPE = sendmail
FROM = ${USER}@uber.space
end_of_content
}
@@ -222,20 +192,16 @@ autorestart=true
end_of_content
}
function set_install_version
function get_download_url
{
curl --silent "$GITHUB_API_URL" > "$TMP_LOCATION"/github_api_response.json
TAG_NAME=$(jq --raw-output '.tag_name' "$TMP_LOCATION"/github_api_response.json)
INSTALL_VERSION=${TAG_NAME:1}
}
function set_download_url
{
LATEST_VERSION=${TAG_NAME:1}
DOWNLOAD_URL=$(jq --raw-output '.assets[].browser_download_url' "$TMP_LOCATION"/github_api_response.json |
grep --max-count=1 "linux-amd64")
}
function download_signature_file
function get_signature_file
{
SIGNATURE_FILE_URL=$(jq --raw-output '.assets[].browser_download_url' "$TMP_LOCATION"/github_api_response.json |
grep "linux-amd64.asc")
@@ -245,11 +211,10 @@ function download_signature_file
function verify_file
{
download_signature_file
get_signature_file
## downloading public key if it does NOT already exist OR if it is expired
if ! (gpg --fingerprint $PGP_KEY_FINGERPRINT) ||
(gpg --fingerprint $PGP_KEY_FINGERPRINT | grep expired)
## downloading public key if it does not already exist
if ! gpg --fingerprint $PGP_KEY_FINGERPRINT
then
## currently the key download via gpg does not work on Uberspace
#gpg --keyserver keys.openpgp.org --recv $PGP_KEY_FINGERPRINT
@@ -272,7 +237,7 @@ function install_update_script
#!/usr/bin/env bash
APP_NAME=Gitea
GITEA_BINARY=$HOME/gitea/gitea
GITEA_LOCATION=$HOME/gitea/gitea
TMP_LOCATION=$HOME/tmp
PGP_KEY_FINGERPRINT=7C9E68152594688862D62AF62D9AE806EC1592E2
@@ -282,72 +247,73 @@ GITHUB_API_URL=https://api.github.com/repos/$ORG/$REPO/releases/latest
function do_update_procedure
{
curl --location --progress-bar --output "$TMP_LOCATION"/gitea "$DOWNLOAD_URL"
verify_file
$GITEA_BINARY manager flush-queues
$GITEA_LOCATION manager flush-queues
gitea_pid=$(supervisorctl pid gitea)
echo "Process-ID is $gitea_pid"
supervisorctl stop gitea
mv --verbose "$TMP_LOCATION"/gitea "$GITEA_BINARY"
chmod u+x --verbose "$GITEA_BINARY"
echo "$APP_NAME service takes 30 seconds to start"
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
mv --verbose "$TMP_LOCATION"/gitea "$GITEA_LOCATION"
chmod u+x --verbose "$GITEA_LOCATION"
supervisorctl start gitea
supervisorctl status gitea
}
function set_local_version
function get_local_version
{
LOCAL_VERSION=$($GITEA_BINARY --version |
LOCAL_VERSION=$($GITEA_LOCATION --version |
awk '{print $3}')
}
function set_latest_version
function get_latest_version
{
curl --silent $GITHUB_API_URL > "$TMP_LOCATION"/github_api_response.json
TAG_NAME=$(jq --raw-output '.tag_name' "$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 |
DOWNLOAD_URL=$(jq --raw-output '.assets[].browser_download_url' $TMP_LOCATION/github_api_response.json |
grep --max-count=1 "linux-amd64")
}
function download_signature_file
function get_signature_file
{
SIGNATURE_FILE_URL=$(jq --raw-output '.assets[].browser_download_url' "$TMP_LOCATION"/github_api_response.json |
SIGNATURE_FILE_URL=$(jq --raw-output '.assets[].browser_download_url' $TMP_LOCATION/github_api_response.json |
grep "linux-amd64.asc")
rm "$TMP_LOCATION"/github_api_response.json
wget --quiet --progress=bar:force --output-document "$TMP_LOCATION"/gitea.asc "$SIGNATURE_FILE_URL"
rm $TMP_LOCATION/github_api_response.json
wget --quiet --progress=bar:force --output-document $TMP_LOCATION/gitea.asc "$SIGNATURE_FILE_URL"
}
function verify_file
{
download_signature_file
get_signature_file
## downloading public key if it does NOT already exist OR if it is expired
if ! gpg --fingerprint $PGP_KEY_FINGERPRINT ||
(gpg --fingerprint $PGP_KEY_FINGERPRINT | grep expired)
## downloading public key if it does not already exist
if ! gpg --fingerprint $PGP_KEY_FINGERPRINT
then
## currently the key download via gpg does not work on Uberspace
#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 --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
then rm "$TMP_LOCATION"/gitea.asc; return 0
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
fi
}
# is_version_lower_than A B
# returns whether A < B
function is_version_lower_than
## version_lower_than A B returns whether A < B
function version_lower_than
{
test "$(echo "$@" | # get all version arguments
tr " " "\n" | # replace `space` with `new line`
sed '/alpha/d; /beta/d; /rc/d' | # remove pre-release versions (version-sort interprets suffixes as patch versions)
sort --version-sort --reverse | # latest version will be sorted to line 1
head --lines=1)" != "$1" # filter line 1 and compare it to A
test "$(echo "$@" |
tr " " "n" |
sort --version-sort --reverse |
head --lines=1)" != "$1"
}
function fix_stop_signal
@@ -360,32 +326,27 @@ function fix_stop_signal
fi
}
function is_update_available
{
set_local_version
set_latest_version
if is_version_lower_than "$LOCAL_VERSION" "$LATEST_VERSION"
then return 0
else return 1
fi
}
function main
{
fix_stop_signal
get_local_version
get_latest_version
if is_update_available
if [ "$LOCAL_VERSION" = "$LATEST_VERSION" ]
then
echo "There is a new version available."
echo "Doing update from $LOCAL_VERSION to $LATEST_VERSION"
do_update_procedure
else
echo "Your $APP_NAME is already up to date."
echo "You are running $APP_NAME $LOCAL_VERSION"
else
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"
do_update_procedure
fi
fi
}
main "$@"
main "${@}"
exit $?
end_of_content
chmod u+x --verbose ~/bin/gitea-update
@@ -393,26 +354,26 @@ end_of_content
function echo_tree
{
cat << end_of_content
/home/$USER
cat << 'end_of_content'
.
├── bin
│ ├── [-rwxrw-r--] gitea (wrapper script)
│ └── [-rwxrw-r--] gitea-update
│  ├── [-rwxrw-r--] gitea
│  └── [-rwxrw-r--] gitea-update
├── etc
│ ├── services.d
│ │ └── gitea.ini
│ └── ...
│  ├── services.d
│  │  └── gitea.ini
│  └── ...
├── gitea
│ ├── custom
│ │ └── conf
│ │ └── app.ini (configuration file)
│ ├── data
│ └── [-rwxrw-r--] gitea (binary file)
│  ├── custom
│  │  └── conf
│  │  └── app.ini
│  ├── data
│  └── [-rwxrw-r--] gitea
└── ...
end_of_content
}
function yes_no_question
function yes-no_question
{
local question=$1
while true
@@ -438,20 +399,15 @@ function main
set_critical_section
process_parameters "$@"
set_install_version
set_download_url
echo "This script installs $APP_NAME $INSTALL_VERSION"
echo "This script installs the latest release of $APP_NAME"
echo "and assumes a newly created Uberspace with default settings."
echo "The following files and directories will be created:"
echo_tree
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 $INSTALL_VERSION?"
if yes-no_question "Do you want to execute this installer for $APP_NAME?"
then install_gitea
fi
+42 -43
View File
@@ -1,9 +1,9 @@
#!/usr/bin/env bash
APP_NAME=Gitea
GITEA_BINARY=$HOME/gitea/gitea
GITEA_LOCATION=$HOME/gitea/gitea
TMP_LOCATION=$HOME/tmp
PGP_KEY_FINGERPRINT=7C9E68152594688862D62AF62D9AE806EC1592E2
GPG_KEY_FINGERPRINT=7C9E68152594688862D62AF62D9AE806EC1592E2
ORG=go-gitea # Organisation or GitHub user
REPO=gitea
@@ -11,24 +11,31 @@ GITHUB_API_URL=https://api.github.com/repos/$ORG/$REPO/releases/latest
function do_update_procedure
{
curl --location --progress-bar --output "$TMP_LOCATION"/gitea "$DOWNLOAD_URL"
verify_file
$GITEA_BINARY manager flush-queues
$GITEA_LOCATION manager flush-queues
gitea_pid=$(supervisorctl pid gitea)
echo "Process-ID is $gitea_pid"
supervisorctl stop gitea
mv --verbose "$TMP_LOCATION"/gitea "$GITEA_BINARY"
chmod u+x --verbose "$GITEA_BINARY"
echo "$APP_NAME service takes 30 seconds to start"
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
mv --verbose "$TMP_LOCATION"/gitea "$GITEA_LOCATION"
chmod u+x --verbose "$GITEA_LOCATION"
supervisorctl start gitea
supervisorctl status gitea
}
function set_local_version
function get_local_version
{
LOCAL_VERSION=$($GITEA_BINARY --version |
LOCAL_VERSION=$($GITEA_LOCATION --version |
awk '{print $3}')
}
function set_latest_version
function get_latest_version
{
curl --silent $GITHUB_API_URL > "$TMP_LOCATION"/github_api_response.json
TAG_NAME=$(jq --raw-output '.tag_name' "$TMP_LOCATION"/github_api_response.json)
@@ -37,7 +44,7 @@ function set_latest_version
grep --max-count=1 "linux-amd64")
}
function download_signature_file
function get_signature_file
{
SIGNATURE_FILE_URL=$(jq --raw-output '.assets[].browser_download_url' "$TMP_LOCATION"/github_api_response.json |
grep "linux-amd64.asc")
@@ -47,19 +54,18 @@ function download_signature_file
function verify_file
{
download_signature_file
get_signature_file
## downloading public key if it does NOT already exist OR if it is expired
if ! gpg --fingerprint $PGP_KEY_FINGERPRINT ||
(gpg --fingerprint $PGP_KEY_FINGERPRINT | grep expired)
## downloading public key if it does not already exist
if ! gpg --fingerprint $GPG_KEY_FINGERPRINT
then
## currently the key download via gpg does not work on Uberspace
#gpg --keyserver keys.openpgp.org --recv $PGP_KEY_FINGERPRINT
curl --silent https://keys.openpgp.org/vks/v1/by-fingerprint/$PGP_KEY_FINGERPRINT | gpg --import
#gpg --keyserver keys.openpgp.org --recv $GPG_KEY_FINGERPRINT
curl --silent https://keys.openpgp.org/vks/v1/by-fingerprint/$GPG_KEY_FINGERPRINT | gpg --import
fi
if ! gpg --export-ownertrust | grep --quiet $PGP_KEY_FINGERPRINT:6:
then echo "$PGP_KEY_FINGERPRINT:6:" | gpg --import-ownertrust
if ! gpg --export-ownertrust | grep --quiet $GPG_KEY_FINGERPRINT:6:
then echo "$GPG_KEY_FINGERPRINT:6:" | gpg --import-ownertrust
fi
if gpg --verify "$TMP_LOCATION"/gitea.asc "$TMP_LOCATION"/gitea
@@ -68,15 +74,13 @@ function verify_file
fi
}
# is_version_lower_than A B
# returns whether A < B
function is_version_lower_than
## version_lower_than A B returns whether A < B
function version_lower_than
{
test "$(echo "$@" | # get all version arguments
tr " " "\n" | # replace `space` with `new line`
sed '/alpha/d; /beta/d; /rc/d' | # remove pre-release versions (version-sort interprets suffixes as patch versions)
sort --version-sort --reverse | # latest version will be sorted to line 1
head --lines=1)" != "$1" # filter line 1 and compare it to A
test "$(echo "$@" |
tr " " "n" |
sort --version-sort --reverse |
head --lines=1)" != "$1"
}
function fix_stop_signal
@@ -89,28 +93,23 @@ function fix_stop_signal
fi
}
function is_update_available
{
set_local_version
set_latest_version
if is_version_lower_than "$LOCAL_VERSION" "$LATEST_VERSION"
then return 0
else return 1
fi
}
function main
{
fix_stop_signal
get_local_version
get_latest_version
if is_update_available
if [ "$LOCAL_VERSION" = "$LATEST_VERSION" ]
then
echo "There is a new version available."
echo "Doing update from $LOCAL_VERSION to $LATEST_VERSION"
do_update_procedure
else
echo "Your $APP_NAME is already up to date."
echo "You are running $APP_NAME $LOCAL_VERSION"
else
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"
do_update_procedure
fi
fi
}
+4 -5
View File
@@ -6,12 +6,11 @@ LOCAL_VERSION=$(jq --raw-output .Version /var/www/virtual/"$USER"/grocy/version.
TAG_NAME=$(curl -s https://api.github.com/repos/$ORG/$REPO/releases/latest | jq --raw-output .tag_name)
LATEST_VERSION=${TAG_NAME:1} # It is common to use the prefix v for the version tag.
## version_lower_than A B
# returns whether A < B
function version_lower_than
## this is a helper function to compare two versions as a "lower than" operator
function version_lt
{
test "$(echo "$@" |
tr " " "\n" |
tr " " "n" |
sort --version-sort --reverse |
head --lines=1)" != "$1"
}
@@ -19,7 +18,7 @@ function version_lower_than
if [ "$LOCAL_VERSION" = "$LATEST_VERSION" ]; then
echo "Your $APP is running on $LOCAL_VERSION and it is already up to date."
else
if version_lower_than "$LOCAL_VERSION" "$LATEST_VERSION"
if version_lt "$LOCAL_VERSION" "$LATEST_VERSION"
then
echo "There is a new Version available of $ORG"
echo "The latest Version is $LATEST_VERSION"
+9 -18
View File
@@ -6,8 +6,7 @@ LOCAL_VERSION=$(jq --raw-output .version ~/hedgedoc/package.json)
LATEST_VERSION=$(curl --silent https://api.github.com/repos/$ORG/$REPO/releases/latest |
jq --raw-output .tag_name)
function do_upgrade
{
function do_upgrade() {
supervisorctl stop hedgedoc
echo "waiting 1 minute until all processes are stopped"
sleep 1m
@@ -27,7 +26,7 @@ function do_upgrade
rm --recursive ~/hedgedoc_"$LOCAL_VERSION"
}
function yes_no_question
function yes-no_question
{
local question=$1
while true
@@ -46,27 +45,20 @@ function yes_no_question
done
}
# is_version_lower_than A B
# returns whether A < B
function is_version_lower_than
## this is a helper function to compare two versions as a "lower than" operator
function version_lt
{
test "$(echo "$@" |
tr " " "\n" |
tr " " "n" |
sort --version-sort --reverse |
head --lines=1)" != "$1"
}
function is_update_available
{
if is_version_lower_than "$LOCAL_VERSION" "$LATEST_VERSION"
then return 0
else return 1
fi
}
function main
{
if is_update_available
if [ "$LOCAL_VERSION" = "$LATEST_VERSION" ]
then echo "Your HedgeDoc is already up to date."
elif version_lt "$LOCAL_VERSION" "$LATEST_VERSION"
then
echo "There is a new Version available of $APP_NAME"
echo "The latest Version is $LATEST_VERSION"
@@ -75,10 +67,9 @@ function main
echo "Please read the release notes."
echo "Also check if the upgrade instructions have changed."
echo "Your instance might break."
if yes_no_question "Do you wish to proceed with the upgrade?"
if yes-no_question "Do you wish to proceed with the upgrade?"
then do_upgrade
fi
else echo "Your HedgeDoc is already up to date."
fi
}
-52
View File
@@ -1,52 +0,0 @@
#!/usr/bin/env bash
# This script installs syntax highlighting only for shell scripts
# It is ment to be used on fresh Uberspaces
mkdir ~/.nano
cat << 'end_of_content' > ~/.nano/sh.nanorc
## Syntax highlighting for Bourne shell scripts.
## UBERSPACE EDITION (compatible with nano 2.3.1)
syntax "sh" "(\.sh|(\.|/)(a|ba|c|da|k|mk|pdk|tc|z)sh(rc|_profile)?|/(etc/|\.)profile)$"
header "^#!.*/((env\s+)?((a|ba|c|da|k|mk|pdk|tc|z)?sh)|busybox\s+sh|openrc-run|runscript)\>"
header "-\*-.*shell-script.*-\*-"
magic "(POSIX|Bourne-Again) shell script.*text"
#comment "#"
#linter dash -n
# Function declarations.
color brightgreen "^[A-Za-z0-9_-]+\(\)"
# Keywords, symbols, and comparisons.
color green "\<(break|case|continue|do|done|elif|else|esac|exit|fi|for|function|if|in|read|return|select|shift|then|time|until|while)\>"
color green "\<(declare|eval|exec|export|let|local)\>"
color green "[{}():;|`$<>!=&\\]" "(\]|\[)"
color green "-(eq|ne|gt|lt|ge|le|ef|ot|nt)\>"
# Short and long options.
color brightmagenta "[[:blank:]]-[A-Za-z]\>" "[[:blank:]]--[A-Za-z-]+\>"
# Common commands.
color brightblue "\<(awk|cat|cd|ch(grp|mod|own)|cp|cut|echo|env|grep|head|install|ln|make|mkdir|mv|popd|printf|pushd|rm|rmdir|sed|set|sort|tail|tar|touch|umask|unset)\>"
#color normal "[.-]tar\>"
# Basic variable names (no braces).
color brightred "\$[-0-9@*#?$!]" "\$[[:alpha:]_][[:alnum:]_]*"
# More complicated variable names; handles braces and replacements and arrays.
color brightred "\$\{[#!]?([-@*#?$!]|[0-9]+|[[:alpha:]_][[:alnum:]_]*)(\[([[:space:]]*[[:alnum:]_]+[[:space:]]*|@)\])?(([#%/]|:?[-=?+])[^}]*\}|\[|\})"
# Comments.
color cyan "(^|[[:space:]])#.*"
# Strings.
color brightyellow ""(\\.|[^"])*"" "'(\\.|[^'])*'"
# Trailing whitespace.
color ,green "[[:space:]]+$"
end_of_content
cat << end_of_content >> ~/.nanorc
include "~/.nano/sh.nanorc"
end_of_content
+31 -57
View File
@@ -1,16 +1,14 @@
#!/usr/bin/env bash
APP_NAME=Nextcloud
PHP_VERSION=8.2
PGP_KEY_FINGERPRINT='28806A878AE423A28372792ED75899B9A724937A'
function install_nextcloud
{
echo "Please set your Nextcloud login credentials."
read -r -p "Nextcloud admin user: " NEXTCLOUD_ADMIN_USER
ask_for_password
read -r -p "Nextcloud admin password: " NEXTCLOUD_ADMIN_PASS
trusted_domain="$USER.uber.space"
#setup_domains
setup_php
# simply get the first password string from ~/.my.cnf
MYSQL_PASSWORD_STR=$(grep --max-count=1 password= ~/.my.cnf)
@@ -31,6 +29,7 @@ function install_nextcloud
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"
@@ -86,12 +85,11 @@ function install_nextcloud
function uninstall_nextcloud
{
unset_critical_section
if ! yes_no_question "Do you want to keep the Nextcloud user files?"
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
uberspace web backend del /push
supervisorctl stop notify_push
rm ~/etc/services.d/notify_push.ini
supervisorctl reread
@@ -105,30 +103,15 @@ function uninstall_nextcloud
supervisorctl reread
supervisorctl update
fi
rm -r ~/html/* ~/html/.htaccess ~/html/.user.ini ~/_nextcloud_completion
rm -r ~/html/* ~/html/.htaccess ~/html/.user.ini
mysql --verbose --execute="DROP DATABASE ${USER}_nextcloud"
rm ~/bin/ncc ~/bin/nextcloud-update
sed --in-place '/_nextcloud_completion/d' ~/.bash_profile
unlink ~/bin/notify_push
unlink ~/logs/nextcloud.log
unlink ~/logs/nextcloud-updater.log
set_critical_section
}
function ask_for_password
{
echo "Note: Your password input will not be visible."
read -s -r -p "$APP_NAME admin password: " NEXTCLOUD_ADMIN_PASS
echo
read -s -r -p "$APP_NAME admin password confirmation: " ADMIN_PASS_CONFIRMATION
echo
while [ -z "$NEXTCLOUD_ADMIN_PASS" ] || [ "$NEXTCLOUD_ADMIN_PASS" != "$ADMIN_PASS_CONFIRMATION" ]
do
echo That was not correct, try again
ask_for_password
done
}
function process_parameters
{
while test $# -gt 0
@@ -142,7 +125,7 @@ function process_parameters
;;
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?"
if yes-no_question "Do you really want to do this?"
then uninstall_nextcloud
fi
exit 0
@@ -163,10 +146,26 @@ function get_version_name
fi
}
function setup_domains
{
echo "You currently have configured the following domains:"
uberspace web domain list
if yes-no_question "Do you want to add another domain to the web configuration of your uberspace?"
then add_domain
fi
}
function add_domain
{
read -rp "Domain: " DOMAIN
uberspace web domain add "$DOMAIN"
trusted_domain=$DOMAIN
}
function setup_php
{
echo "Applying relevant PHP settings for Nextcloud"
uberspace tools version use php $PHP_VERSION
uberspace tools version use php 8.1
touch ~/etc/php.d/opcache.ini
cat << end_of_content > ~/etc/php.d/opcache.ini
opcache.enable=1
@@ -241,10 +240,7 @@ end_of_content
supervisorctl update
supervisorctl status
uberspace web backend set /push --http --port 7867
local fail_counter=0
while (uberspace web backend list | grep "/push http:7867 => NOT OK") && test $fail_counter -lt 5
do echo 'wait another 5 seconds for notify service'; sleep 5; ((fail_counter++))
done
uberspace web backend list
local trusted_proxy
trusted_proxy=$(ip route |
tail --lines 1 | ## filter last line
@@ -256,14 +252,16 @@ end_of_content
function install_ncc
{
touch ~/bin/ncc
cat << 'end_of_content' > ~/bin/ncc
cat << end_of_content > ~/bin/ncc
#!/usr/bin/env bash
exec php /var/www/virtual/$USER/html/occ "$@"
exec php /var/www/virtual/\$USER/html/occ "\$@"
end_of_content
chmod u+x ~/bin/ncc
chmod u+x ~/html/occ
ncc _completion --generate-hook --program=ncc > ~/_nextcloud_completion
echo "source \$HOME/_nextcloud_completion" >> ~/.bash_profile
# shellcheck source=/dev/null
source ~/.bash_profile
}
function install_nextcloud_updater
@@ -293,8 +291,6 @@ ncc db:add-missing-indices --no-interaction
ncc db:convert-filecache-bigint --no-interaction
ncc app:update --all
## App updates may require additional steps to be done by the `upgrade` command
ncc upgrade
/usr/sbin/restorecon -R $APP_LOCATION
if test -f ~/etc/services.d/notify_push.ini
@@ -304,7 +300,7 @@ end_of_content
chmod u+x ~/bin/nextcloud-update
}
function yes_no_question
function yes-no_question
{
local question=$1
while true
@@ -322,27 +318,6 @@ function yes_no_question
done
}
function echo_tree
{
cat << end_of_content
/home/$USER
├── _nextcloud_completion
├── bin
│ ├── ncc (wrapper shortcut for ~/html/occ)
│ ├── nextcloud-update
│ └── notify_push -> /home/$USER/html/apps/notify_push/bin/x86_64/notify_push
├── nextcloud_data
│ └── >> user files, etc. <<
├── html -> /var/www/virtual/$USER/html
│ └── >> Nextcloud installation <<
├── logs
│ ├── nextcloud-cron.log
│ ├── nextcloud-updater.log -> /home/$USER/nextcloud_data/updater.log
│ └── nextcloud.log -> /home/$USER/nextcloud_data/nextcloud.log
└── ...
end_of_content
}
function set_critical_section { set -o pipefail -o errexit; }
function unset_critical_section { set +o pipefail +o errexit; }
@@ -360,10 +335,9 @@ function main
echo "This script installs the latest release of $APP_NAME"
echo "and assumes a newly created Uberspace with default settings."
fi
echo 'This will be the basic file structure'
echo_tree
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 $APP_NAME?"
if yes-no_question "Do you want to execute this installer for $APP_NAME?"
then install_nextcloud
fi
+3 -5
View File
@@ -98,8 +98,6 @@ function do_update_procedure
ncc db:add-missing-indices --no-interaction
ncc db:convert-filecache-bigint --no-interaction
ncc app:update --all
## App updates may require additional steps to be done by the `upgrade` command
ncc upgrade
/usr/sbin/restorecon -R "$APP_LOCATION"
if test -f ~/etc/services.d/notify_push.ini
then supervisorctl restart notify_push
@@ -148,7 +146,7 @@ function process_parameters
function version_lower_than
{
test "$(echo "$@" |
tr " " "\n" |
tr " " "n" |
sort --version-sort --reverse |
head --lines=1)" != "$1"
}
@@ -165,7 +163,7 @@ function is_data_used_in_nextcloud_directory
fi
}
function yes_no_question
function yes-no_question
{
local question=$1
while true
@@ -221,7 +219,7 @@ function main
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?"
if no_interaction_mode || yes-no_question "Do you want to start the update procedure?"
then do_update_procedure
fi
fi
-2
View File
@@ -21,8 +21,6 @@ ncc db:add-missing-indices --no-interaction
ncc db:convert-filecache-bigint --no-interaction
ncc app:update --all
## App updates may require additional steps to be done by the `upgrade` command
ncc upgrade
/usr/sbin/restorecon -R $APP_LOCATION
if test -f ~/etc/services.d/notify_push.ini
+4 -5
View File
@@ -27,12 +27,11 @@ function do_update_procedure
supervisorctl status
}
## version_lower_than A B
# returns whether A < B
function version_lower_than
## this is a helper function to compare two versions as a "lower than" operator
function version_lt
{
test "$(echo "$@" |
tr " " "\n" |
tr " " "n" |
sort --version-sort --reverse |
head --lines=1)" != "$1"
}
@@ -48,7 +47,7 @@ function main
echo "Your $APP_NAME is already up to date."
echo "You are running $APP_NAME $LOCAL_VERSION"
else
if version_lower_than "$LOCAL_VERSION" "$LATEST_VERSION"
if version_lt "$LOCAL_VERSION" "$LATEST_VERSION"
then
echo "There is a new version available."
echo "Doing update from $LOCAL_VERSION to $LATEST_VERSION"