#!/bin/bash # Init NextCloud database and perform initial configuration # # Copyleft 2017 by Ignacio Nunez Hernanz # GPL licensed (see end of file) * Use at your own risk! # # More at https://ownyourbits.com/2017/02/13/nextcloud-ready-raspberry-pi-image/ # DBADMIN=ncadmin configure() { echo "Setting up a clean Nextcloud instance... wait until message 'NC init done'" # checks local REDISPASS=$( grep "^requirepass" /etc/redis/redis.conf | cut -d' ' -f2 ) [[ "$REDISPASS" == "" ]] && { echo "redis server without a password. Abort"; return 1; } ## RE-CREATE DATABASE TABLE echo "Setting up database..." # launch mariadb if not already running if ! [[ -f /run/mysqld/mysqld.pid ]]; then echo "Starting mariaDB" mysqld & local db_pid=$! fi # wait for mariadb while :; do [[ -S /run/mysqld/mysqld.sock ]] && break sleep 0.5 done sleep 1 # workaround to emulate DROP USER IF EXISTS ..;) local DBPASSWD=$( grep password /root/.my.cnf | sed 's|password=||' ) mysql </dev/null; then mkdir -p /var/run/redis mkdir -p /var/log/ chown redis /var/run/redis sudo -u redis redis-server /etc/redis/redis.conf > /var/log/redis.log 2>&1 & redis_pid=$! for i in {1..5} do if redis-cli -s //var/run/redis/redis.sock -a "$REDISPASS" ping | grep PONG then break else if [[ $i -ge 5 ]] then echo "FAILED TO START REDIS" cat /var/log/redis.log /var/log/redis/redis-server.log return 1 fi fi sleep 3 done fi while :; do [[ -S /run/redis/redis.sock ]] && break sleep 0.5 done echo "Setting up Nextcloud..." cd /var/www/nextcloud/ rm -f config/config.php ncc maintenance:install --database \ "mysql" --database-name "nextcloud" --database-user "$DBADMIN" --database-pass \ "$DBPASSWD" --admin-user "$ADMINUSER" --admin-pass "$ADMINPASS" # cron jobs ncc background:cron # redis cache sed -i '$d' config/config.php cat >> config/config.php < '\\OC\\Memcache\\Redis', 'memcache.locking' => '\\OC\\Memcache\\Redis', 'redis' => array ( 'host' => '/var/run/redis/redis.sock', 'port' => 0, 'timeout' => 0.0, 'password' => '$REDISPASS', ), ); EOF # tmp upload dir local UPLOADTMPDIR=/var/www/nextcloud/data/tmp mkdir -p "$UPLOADTMPDIR" chown www-data:www-data "$UPLOADTMPDIR" ncc config:system:set tempdirectory --value "$UPLOADTMPDIR" sed -i "s|^;\?upload_tmp_dir =.*$|upload_tmp_dir = $UPLOADTMPDIR|" /etc/php/${PHPVER}/cli/php.ini sed -i "s|^;\?upload_tmp_dir =.*$|upload_tmp_dir = $UPLOADTMPDIR|" /etc/php/${PHPVER}/fpm/php.ini sed -i "s|^;\?sys_temp_dir =.*$|sys_temp_dir = $UPLOADTMPDIR|" /etc/php/${PHPVER}/fpm/php.ini # 4 Byte UTF8 support ncc config:system:set mysql.utf8mb4 --type boolean --value="true" ncc config:system:set trusted_domains 7 --value="nextcloudpi" ncc config:system:set trusted_domains 5 --value="nextcloudpi.local" ncc config:system:set trusted_domains 8 --value="nextcloudpi.lan" ncc config:system:set trusted_domains 3 --value="nextcloudpi.lan" # email ncc config:system:set mail_smtpmode --value="sendmail" ncc config:system:set mail_smtpauthtype --value="LOGIN" ncc config:system:set mail_from_address --value="noreply" ncc config:system:set mail_domain --value="nextcloudpi.com" # Fix NCP theme [[ -e /usr/local/etc/logo ]] && { local ID=$( grep instanceid config/config.php | awk -F "=> " '{ print $2 }' | sed "s|[,']||g" ) [[ "$ID" == "" ]] && { echo "failed to get ID"; return 1; } local theming_base_path="data/appdata_${ID}/theming/global/images" mkdir -p "${theming_base_path}" cp /usr/local/etc/background "${theming_base_path}/" cp /usr/local/etc/logo "${theming_base_path}/logo" cp /usr/local/etc/logo "${theming_base_path}/logoheader" chown -R www-data:www-data "data/appdata_${ID}" } mysql nextcloud < /usr/share/bash-completion/completions/ncp echo ". /etc/bash_completion" >> /etc/bash.bashrc echo ". /usr/share/bash-completion/completions/ncp" >> /etc/bash.bashrc # TODO temporary workaround for https://github.com/nextcloud/server/pull/13358 ncc -n db:convert-filecache-bigint ncc db:add-missing-indices ncc maintenance:repair --include-expensive # Default trusted domain (only from ncp-config) test -f /usr/local/bin/nextcloud-domain.sh && { test -f /.ncp-image || bash /usr/local/bin/nextcloud-domain.sh } # dettach mysql during the build if [[ "${db_pid}" != "" ]]; then echo "Shutting down mariaDB (${db_pid})" mysqladmin -u root shutdown wait "${db_pid}" fi echo "NC init done" } install(){ :; } # License # # This script is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This script is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this script; if not, write to the # Free Software Foundation, Inc., 59 Temple Place, Suite 330, # Boston, MA 02111-1307 USA