__nextcloud: remove --webroot parameter

Because the detection of the webroot is not that good, it was removed.
Now, the object id contains the full path of the nextcloud installation.

This changes the installation process a bit, as it will download the
tarball to /tmp rather the webroot.

Also, this commit contains a bit overhaul work.
This commit is contained in:
matze 2020-11-15 16:21:56 +01:00
parent 7490cef49e
commit c24aedd4db
9 changed files with 38 additions and 110 deletions

View file

@ -5,7 +5,7 @@
# Get the installdir # Get the installdir
installdir="$( "$__type_explorer/installdir" )" installdir="/$__object_id"
# Check if the tools are available # Check if the tools are available
if [ -d "$installdir" ]; then if [ -d "$installdir" ]; then

View file

@ -1,16 +0,0 @@
#!/bin/sh -e
# __nextcloud/explorer/installdir
# Detects the directory nextcloud should be installed to.
# by parameter or auto-detection
webroot="$( "$__type_explorer/webroot" )"
if [ -z "$webroot" ]; then
echo "no installdir given and no webroot directory found" >&2
echo "no place to install found; set it via --webroot" >&2
exit 1
fi
# assemble directory with the object id
printf "%s/%s\n" "$webroot" "$__object_id"

View file

@ -5,7 +5,7 @@
# Get the install directory # Get the install directory
installdir="$( "$__type_explorer/installdir" )" installdir="/$__object_id"
# Check if the installation directory exists # Check if the installation directory exists
if [ -d "$installdir" ]; then if [ -d "$installdir" ]; then

View file

@ -1,34 +0,0 @@
#!/bin/sh -e
# __nextcloud/explorer/webroot
# Detects the webroot if any
# Just check if there is some directory and echo + exit on success
#
# Arguments:
# 1: the directory to check
check_dir() {
if [ -d "$1" ]; then
echo "$1"
exit
fi
}
# Check the user choice
parameter="$__object/parameter/webroot"
if [ -f "$parameter" ]; then
cat "$parameter"
exit
fi
# Maybe checking standard webserver configs ..
# Check if there are default directories
check_dir "/srv/www"
check_dir "/var/www/html"
check_dir "/var/www"
# do nothing if no webroot found

View file

@ -49,9 +49,8 @@ version_is="$( cat "$__object/explorer/version" )"
version_should="$( cat "$__object/parameter/version" )" version_should="$( cat "$__object/parameter/version" )"
# the install directory # the install directory
installdir="$( cat "$__object/explorer/installdir" )" installdir="/$__object_id"
updatedir="$( dirname "$installdir" )" tarballdir="$(dirname "$installdir")/.$(basename "$installdir")"
tarballdir="$updatedir/.$__object_id"
# get used user and group # get used user and group
user="$( cat "$__object/parameter/user" )" user="$( cat "$__object/parameter/user" )"
@ -77,11 +76,10 @@ fi
# Remove the old folder and replace it with the new one. # Remove the old folder and replace it with the new one.
if [ "$upgrade" ]; then if [ "$upgrade" ]; then
cat << REMOTE cat << REMOTE
cd '$updatedir'
chown '$user':'$group' -R '$tarballdir' chown '$user':'$group' -R '$tarballdir'
REMOTE REMOTE
# no more changes from the user
occ_maintainer_mode_on occ_maintainer_mode_on
cat << REMOTE cat << REMOTE
@ -91,8 +89,6 @@ mv '$installdir/data' '$tarballdir'
rm -rf '$installdir' rm -rf '$installdir'
mv '$tarballdir' '$installdir' mv '$tarballdir' '$installdir'
cd '$installdir'
REMOTE REMOTE
# do some maintainer stuff # do some maintainer stuff
@ -227,9 +223,11 @@ if [ "$data_old" ] && [ "$data_old" != "$data_new" ]; then
# not be moved. # not be moved.
occ config:system:set datadirectory --type=string --value "'$data_new'" occ config:system:set datadirectory --type=string --value "'$data_new'"
cat << REMOTE cat << REMOTE
cd '$installdir' # only for the users safety
rm -rf '$data_new' rm -rf '$data_new'
mkdir -p '$(dirname "$data_new")' # if the parent not exists mkdir -p '$(dirname "$data_new")' # if the parent not exists
mv '$data_old' '$data_new' mv -T '$data_old' '$data_new'
REMOTE REMOTE
fi fi

View file

@ -8,11 +8,9 @@ cdist-type__nextcloud - Installs and manages a nextcloud instance
DESCRIPTION DESCRIPTION
----------- -----------
This type installs, upgrades and configure a nextcloud instance. This type installs, upgrades and configure a nextcloud instance. The object
id is the absolute path for the installation directory. Nextcloud will be
It installs the application in the webspace based on the object id as relative installed unter that directory.
path from the webroot. If you want to install it directly in the webroot, you
must trick out this type by setting the webroot as parent directory.
REQUIRED PARAMETERS REQUIRED PARAMETERS
@ -40,11 +38,6 @@ admin-password
OPTIONAL PARAMETERS OPTIONAL PARAMETERS
------------------- -------------------
webroot
The webroot which will be used as basis for the installation. This may be
already detected by an explorer. Must be an absolute path (starting with a
slash).
mode mode
Sets the unix file mode of the nextcloud directory. This is not inherited Sets the unix file mode of the nextcloud directory. This is not inherited
to child files or folders. Defaults to `755`. to child files or folders. Defaults to `755`.
@ -152,18 +145,6 @@ database-prefix
``oc_``. ``oc_``.
WEBROOT DETECTION
-----------------
As the `object id` is the install path relatively from the webroot, it must be
known somehow. Therefor, it will try to detect a good location for it. You can
set a custom webroot via the `--webroot` parameter. As default, following
directories will be checked if they exist to be the webroot:
1. ``/srv/www/``
2. ``/var/www/html/``
3. ``/var/www/``
MESSAGES MESSAGES
-------- --------
installed installed
@ -185,10 +166,6 @@ installed. See the parameter description of `--version` for detailed
information. The problem can be fixed by bumping the version value to at least information. The problem can be fixed by bumping the version value to at least
the version that is currently installed or use the parameter `--install-only`. the version that is currently installed or use the parameter `--install-only`.
The type aborts if there is no webroot given as parameter and no could be
detected by the type itself. Please set the webroot via `--webroot` or extend
this type.
It may abort if the data directory can not be moved correctly. Then, the It may abort if the data directory can not be moved correctly. Then, the
nextcloud configuration is broken and must be resolved manually: Move the data nextcloud configuration is broken and must be resolved manually: Move the data
directory to the correct location or change the configuration to point to the directory to the correct location or change the configuration to point to the
@ -210,20 +187,21 @@ EXAMPLES
# minimal nextcloud installation with sqlite and other defaults # minimal nextcloud installation with sqlite and other defaults
# please only use sqlite for minimal or test installations as recommend :) # please only use sqlite for minimal or test installations as recommend :)
__nextcloud nextcloud --version 20.0.0 --admin-password "iaminsecure" \ __nextcloud /var/www/html/nextcloud --version 20.0.0 \
--admin-password "iaminsecure" \
--host localhost --host nextcloud --host localhost --host nextcloud
# installation under the webroot
__nextcloud /var/www/html/ --version 20.0.0
--admin-password "notthatsecure" --host mycloud.example.com
# more extensive configuration # more extensive configuration
__nextcloud cloud --version 20.0.0 --admin-password "iaminsecure" \ __nextcloud /var/www/cloud --version 20.0.0 --admin-password "iaminsecure" \
--host localhost --host nextcloud --host 192.168.1.67 \ --host localhost --host nextcloud --host 192.168.1.67 \
--data-directory /var/lib/nextcloud/what \ --data-directory /var/lib/nextcloud/what \
--database-type mysql --database-host "localhost" --database-name "nextcloud" \ --database-type mysql --database-host "localhost" --database-name "nextcloud" \
--database-user "test" --database-password "not-a-good-password" --database-user "test" --database-password "not-a-good-password"
# install it in the webroot /var/www/html
__nextcloud html --version 20.0.0 --admin-password "notthatsecure" \
--webroot "/var/www" --host localhost
NOTES NOTES
----- -----
@ -277,6 +255,13 @@ php dependencies, but there are not recognised by the server-internal php
environment. This can happen after a database migration between different environment. This can happen after a database migration between different
database types, as it installs the database module only when it is required. database types, as it installs the database module only when it is required.
If the tarball needs to be downloaded, it will be directly downloaded into the
directory ``/tmp`` and will be unpacked to the destination for an installation
or to the same directory but prefixed with a dot for an update. It will
download it into the temp directory because it does not find a better location.
In legacy, it was downloaded to the parent directory, but this may not the best
location as the installation dir can be everywhere.
SEE ALSO SEE ALSO
-------- --------

View file

@ -76,8 +76,7 @@ user="$(cat "$__object/parameter/user")"
group="$(cat "$__object/parameter/group")" group="$(cat "$__object/parameter/group")"
# Get the installation directory # Get the installation directory
webroot="$(cat "$__object/explorer/webroot")" installdir="/$__object_id"
installdir="$(cat "$__object/explorer/installdir")"
# Set permissions after the nextcloud installation/upgrade is done # Set permissions after the nextcloud installation/upgrade is done
# FIXME maybe less strict if some parameter is not given by the user? # FIXME maybe less strict if some parameter is not given by the user?
@ -111,28 +110,25 @@ if [ "$version_is" ]; then
fi fi
# Set destination to a temporary directory # Set destination to a temporary directory
destination="$webroot/.$__object_id" destination="$(dirname "$installdir")/.$(basename "$installdir")"
fi fi
else else
# Set destination to the real destination # Set destination to the real destination
destination="$webroot/$__object_id" destination="$installdir"
fi fi
# Install/Upgrade the nextcloud version if there is a destination set. # Install/Upgrade the nextcloud version if there is a destination set.
# it checks if it is necessary and intended to upgrade # it checks if it is necessary and intended to upgrade
if [ "$destination" ] && [ "$version_is" != "$version_should" ]; then if [ "$destination" ] && [ "$version_is" != "$version_should" ]; then
updatedir="$( dirname "$installdir" )" # download it to the tmp directory
# FIXME --sum is currently rather a hack, see cdist#844
__download "/tmp/nextcloud-${version_should}.tar.bz2" \
--url "$nextcloud_uri" \
--sum "sha256:$(curl -sS -L "$nextcloud_sum" | awk '{print $1}')"
# Be sure the parent directory exists for installation # after this, unpack it from /tmp to $destination
__directory "$updatedir" --parents require="__download/tmp/nextcloud-${version_should}.tar.bz2" \
__unpack "/tmp/nextcloud-${version_should}.tar.bz2" \
require="__directory$updatedir" \
__download "$updatedir/nextcloud.tar.bz2" \
--url "$nextcloud_uri" \
--sum "sha256:$(curl -sS -L "$nextcloud_sum" | awk '{print $1}')" # must be a required parameter??
require="__download$updatedir/nextcloud.tar.bz2" \
__unpack "$updatedir/nextcloud.tar.bz2" \
--tar-strip 1 \ --tar-strip 1 \
--destination "$destination" --destination "$destination"
fi fi

View file

@ -270,7 +270,7 @@ fi
# misc # misc
conf_array host trusted_domains conf_array host trusted_domains
# Already set via the installer # If already set via the installer, we don't need to do this
# set default values from the nextcloud installer to do not override them # set default values from the nextcloud installer to do not override them
if [ -z "$install" ]; then if [ -z "$install" ]; then
# Database to check if the type changed # Database to check if the type changed
@ -312,5 +312,5 @@ if [ -z "$install" ]; then
esac esac
# data-dir is handled in the gencode-remote # data-dir is handled in the gencode-remote
#conf_string data-directory datadirectory installdef "$(cat "$__object/explorer/installdir")/$__object_id/data" #conf_string data-directory datadirectory installdef "/$__object_id/data"
fi fi

View file

@ -1,7 +1,6 @@
mode mode
user user
group group
webroot
database-type database-type
database-host database-host
database-name database-name