parent
c94dbb9ca0
commit
960d2e9ae2
|
@ -0,0 +1,211 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
###############################################################################
|
||||
# #
|
||||
# Nextcloud automatic installation script #
|
||||
# #
|
||||
# Designed for stressed VUAs with little to no wish to copypaste a gadzillion #
|
||||
# UNIX commands. #
|
||||
# #
|
||||
# Copyright (c) 2020 - Bryan Pedini #
|
||||
# #
|
||||
###############################################################################
|
||||
|
||||
_parse_params() {
|
||||
VERBOSE=true
|
||||
VERSION="18.0.4"
|
||||
INSTALL_DIR="/var/www/nextcloud"
|
||||
NO_CONFIGURE_MARIADB=false
|
||||
DATABASE_NAME="nextcloud"
|
||||
DATABASE_USER="nextcloud_admin"
|
||||
for par in "$@"; do
|
||||
case "$par" in
|
||||
"-h" | "--help" | "--usage")
|
||||
_print_usage
|
||||
;;
|
||||
"-q" | "--quiet")
|
||||
VERBOSE=false
|
||||
shift
|
||||
;;
|
||||
"--version")
|
||||
[[ -z "$2" ]] && _print_usage "Version not specified" 1
|
||||
[[ "$2:0:1" = "-" ]] && _print_usage
|
||||
VERSION="$2"
|
||||
shift
|
||||
shift
|
||||
;;
|
||||
"--install-dir")
|
||||
[[ -z "$2" ]] && _print_usage "Installation directory not \
|
||||
specified" 1
|
||||
[[ "$2:0:1" = "-" ]] && _print_usage
|
||||
INSTALL_DIR="$2"
|
||||
shift
|
||||
shift
|
||||
;;
|
||||
"--no-configure-mariadb")
|
||||
NO_CONFIGURE_MARIADB=true
|
||||
shift
|
||||
;;
|
||||
"--database-name")
|
||||
[[ -z "$2" ]] && _print_usage "Database name not speficied" 1
|
||||
[[ "$2:0:1" = "-" ]] && _print_usage
|
||||
DATABASE_NAME="$2"
|
||||
shift
|
||||
shift
|
||||
;;
|
||||
"--database-user")
|
||||
[[ -z "$2" ]] && _print_usage "Database admin user not \
|
||||
specified" 1
|
||||
[[ "$2:0:1" = "-" ]] && _print_usage
|
||||
DATABASE_USER="$2"
|
||||
shift
|
||||
shift
|
||||
;;
|
||||
*)
|
||||
_print_usage "Argument not recognized: $1" 1
|
||||
esac
|
||||
done
|
||||
}
|
||||
|
||||
# Usage explaination printed to console
|
||||
_print_usage() {
|
||||
echo "Usage: $0 [OPTIONS]"
|
||||
echo
|
||||
echo "OPTIONS:"
|
||||
echo " -h, --help, --usage Prints this help message and exits"
|
||||
echo " -q, --quiet Turns off verbose logging (default: False)"
|
||||
echo " --version Install a custom version of Nextcloud
|
||||
(default: $VERSION)"
|
||||
echo " --install-dir Specifies a custom path for installation
|
||||
(default: \"/var/www/nextcloud\")"
|
||||
echo " --no-configure-mariadb Does not launch the default MariaDB server
|
||||
configuration scriptlet (default: False)"
|
||||
echo " --database-name Specifies a custom database name
|
||||
(default: \"nextcloud\")"
|
||||
echo " --database-user Specifies a custom database admin user
|
||||
(default \"nextcloud_admin\")"
|
||||
|
||||
if [ "$1" ]; then
|
||||
echo
|
||||
echo "Error: $1"
|
||||
if [ "$2" ]; then
|
||||
exit $2
|
||||
fi
|
||||
fi
|
||||
exit 0
|
||||
}
|
||||
|
||||
# Update current system
|
||||
_update_system() {
|
||||
[[ "$VERBOSE" = true ]] && echo "Updating current system"
|
||||
ERR=$( { apt update 1>/dev/null; } 2>&1 | grep -v "stable CLI interface" )
|
||||
[[ "$ERR" ]] && echo "Error during package cache update: $ERR"
|
||||
ERR=$( { apt -y upgrade 1>/dev/null; } 2>&1 | grep -v \
|
||||
"stable CLI interface" )
|
||||
[[ "$ERR" ]] && echo "Error during system package updates: $ERR"
|
||||
}
|
||||
|
||||
# Ask the user for mysql `root` password and configure mysql in unattended mode
|
||||
_configure_mariadb_server() {
|
||||
read -sp 'Please type a `root` password for mysql database: ' \
|
||||
MYSQL_ROOT_PASSWORD && echo ""
|
||||
|
||||
[[ "$VERBOSE" = true ]] && echo "Configuring mysql in unattended mode"
|
||||
ERR=$( { apt -y install expect >/dev/null; } 2>&1 | grep -v \
|
||||
"stable CLI interface" )
|
||||
[[ "$ERR" ]] && echo "Error during package installations: $ERR"
|
||||
SECURE_MYSQL=$(expect -c "
|
||||
set timeout 10
|
||||
spawn mysql_secure_installation
|
||||
expect \"Enter current password for root (enter for none):\"
|
||||
send \"\r\"
|
||||
expect \"Set root password?\"
|
||||
send \"y\r\"
|
||||
expect \"New password:\"
|
||||
send \"$MYSQL_ROOT_PASSWORD\r\"
|
||||
expect \"Re-enter new password:\"
|
||||
send \"$MYSQL_ROOT_PASSWORD\r\"
|
||||
expect \"Remove anonymous users?\"
|
||||
send \"y\r\"
|
||||
expect \"Disallow root login remotely?\"
|
||||
send \"y\r\"
|
||||
expect \"Remove test database and access to it?\"
|
||||
send \"y\r\"
|
||||
expect \"Reload privilege tables now?\"
|
||||
send \"y\r\"
|
||||
expect eof
|
||||
")
|
||||
ERR=$( { echo "$SECURE_MYSQL" 1>/dev/null; } 2>&1 )
|
||||
[[ "$ERR" ]] && echo "Error during mysql_initialization: $ERR"
|
||||
ERR=$( { apt -y remove --purge expect >/dev/null; } 2>&1 | \
|
||||
grep -v "stable CLI interface" )
|
||||
[[ "$ERR" ]] && echo "Error during package removals: $ERR"
|
||||
|
||||
unset SECURE_MYSQL
|
||||
}
|
||||
|
||||
# Create Nextcloud database with associated login
|
||||
_configure_database() {
|
||||
[[ "$VERBOSE" = true ]] && echo "Creating Nextcloud database with \
|
||||
associated login"
|
||||
MYSQL_ROOT_USER="root"
|
||||
QUERY="command=password&format=plain&scheme=rrnnnrrnrnnnrrnrnnrr"
|
||||
MYSQL_USER_PASSWORD=$(curl -s \
|
||||
"https://www.passwordrandom.com/query?$QUERY")
|
||||
SQL="CREATE DATABASE nextcloud;"
|
||||
mysql -u$MYSQL_ROOT_USER -p$MYSQL_ROOT_PASSWORD -e "$SQL"
|
||||
SQL="GRANT ALL PRIVILEGES ON nextcloud.* TO nextcloud_admin@localhost
|
||||
IDENTIFIED BY '$MYSQL_USER_PASSWORD';"
|
||||
mysql -u$MYSQL_ROOT_USER -p$MYSQL_ROOT_PASSWORD -e "$SQL"
|
||||
SQL="FLUSH PRIVILEGES;"
|
||||
mysql -u$MYSQL_ROOT_USER -p$MYSQL_ROOT_PASSWORD -e "$SQL"
|
||||
|
||||
unset SQL; unset MYSQL_ROOT_USER; unset MYSQL_ROOT_PASSWORD; unset QUERY
|
||||
}
|
||||
|
||||
# Create required folders and set correct permissions
|
||||
_configure_permissions() {
|
||||
[[ "$VERBOSE" = true ]] && echo "Creating required folders and setting \
|
||||
correct permissions"
|
||||
mkdir -p "$INSTALL_DIR"/{public,data}
|
||||
chown -R www-data:www-data "$INSTALL_DIR"
|
||||
}
|
||||
|
||||
# Configure Apache2 to run the website
|
||||
_configure_apache2() {
|
||||
# Ask the user for Apache2 FQDN hostname
|
||||
read -p 'Please type the FQDN Nextcloud should run on: ' \
|
||||
HOSTNAME && echo ""
|
||||
|
||||
[[ "$VERBOSE" = true ]] && echo "Configuring Apache2 to run the website"
|
||||
cat << "EOF" > /etc/apache2/sites-available/cloud.conf
|
||||
<VirtualHost *:80>
|
||||
ServerName $HOSTNAME
|
||||
DocumentRoot "$INSTALL_DIR/public"
|
||||
|
||||
<Directory "$INSTALL_DIR/public">
|
||||
Allow from all
|
||||
Require all granted
|
||||
</Directory>
|
||||
|
||||
ErrorLog $INSTALL_DIR/error.log
|
||||
CustomLog $INSTALL_DIR/access.log combined
|
||||
</VirtualHost>
|
||||
EOF
|
||||
unset HOSTNAME; unset INSTALL_DIR
|
||||
}
|
||||
|
||||
# Main program function, calls all other functions in the correct order
|
||||
_main() {
|
||||
_update_system
|
||||
_configure_permissions
|
||||
[[ "$NO_CONFIGURE_MARIADB" = false ]] && _configure_mariadb_server
|
||||
_configure_database
|
||||
_download_website
|
||||
_configure_apache2
|
||||
_enable_site
|
||||
}
|
||||
|
||||
# Program execution
|
||||
_parse_params $@
|
||||
_main
|
Loading…
Reference in New Issue