summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJames Hogarth <james.hogarth@gmail.com>2017-03-01 00:49:06 +0000
committerJames Hogarth <james.hogarth@gmail.com>2017-03-01 00:49:06 +0000
commitff74a2f3b5b2ea97f5d1f148910515e26b376c48 (patch)
tree6430bcdd6ff78571767522e2046128a07cd5a382
parent8d3b8566de3445a209b73d2b25e24b8e4dfb7513 (diff)
Update to 10.0.4
This also includes: - a few php7+ bug fixes - systemd based cron for background tasks - migration steps from owncloud
-rw-r--r--nextcloud-10.0.3-dont-check-php-version.patch25
-rw-r--r--nextcloud-10.0.4-correct-cli-upgrade.patch43
-rw-r--r--nextcloud-MIGRATION.fedora150
-rw-r--r--nextcloud-README.fedora8
-rw-r--r--nextcloud-defaults.inc13
-rw-r--r--nextcloud-systemd-timer.service8
-rw-r--r--nextcloud-systemd-timer.timer10
-rw-r--r--nextcloud.spec26
8 files changed, 265 insertions, 18 deletions
diff --git a/nextcloud-10.0.3-dont-check-php-version.patch b/nextcloud-10.0.3-dont-check-php-version.patch
index a0dbb17..77bd1ef 100644
--- a/nextcloud-10.0.3-dont-check-php-version.patch
+++ b/nextcloud-10.0.3-dont-check-php-version.patch
@@ -25,6 +25,31 @@ index b2724db..149c265 100644
function exceptionHandler($exception) {
echo "An unhandled exception has been thrown:" . PHP_EOL;
echo $exception;
+diff --git a/cron.php b/cron.php
+index 4473dba..7a4e1a6 100644
+--- a/cron.php
++++ b/cron.php
+@@ -30,20 +30,6 @@
+ *
+ */
+
+-// Show warning if a PHP version below 5.4.0 is used
+-if (version_compare(PHP_VERSION, '5.4.0') === -1) {
+- echo 'This version of Nextcloud requires at least PHP 5.4.0<br/>';
+- echo 'You are currently running ' . PHP_VERSION . '. Please update your PHP version.';
+- return;
+-}
+-
+-// Show warning if PHP 7.1 is used as Nextcloud is not compatible with PHP 7.1 for now
+-// @see https://github.com/nextcloud/docker-ci/issues/10
+-if (version_compare(PHP_VERSION, '7.1.0') !== -1) {
+- echo 'This version of Nextcloud is not compatible with PHP 7.1.<br/>';
+- echo 'You are currently running ' . PHP_VERSION . '.';
+- return;
+-}
+
+ try {
+
diff --git a/index.php b/index.php
index e72d38c..29920d7 100644
--- a/index.php
diff --git a/nextcloud-10.0.4-correct-cli-upgrade.patch b/nextcloud-10.0.4-correct-cli-upgrade.patch
new file mode 100644
index 0000000..3a52aaa
--- /dev/null
+++ b/nextcloud-10.0.4-correct-cli-upgrade.patch
@@ -0,0 +1,43 @@
+diff --git a/core/templates/update.admin.php b/core/templates/update.admin.php
+index 87f9396..368a533 100644
+--- a/core/templates/update.admin.php
++++ b/core/templates/update.admin.php
+@@ -37,7 +37,7 @@
+ <input class="updateButton" type="button" value="<?php p($l->t('Start update')) ?>">
+ <div class="infogroup">
+ <?php p($l->t('To avoid timeouts with larger installations, you can instead run the following command from your installation directory:')) ?>
+- <pre>./occ upgrade</pre>
++ <pre>sudo -u apache php /usr/share/nextcloud/occ upgrade</pre>
+ </div>
+ </div>
+
+diff --git a/core/templates/update.use-cli.php b/core/templates/update.use-cli.php
+index 52d40cd..945d4d9 100644
+--- a/core/templates/update.use-cli.php
++++ b/core/templates/update.use-cli.php
+@@ -7,8 +7,10 @@
+ } else {
+ p($l->t('Please use the command line updater because automatic updating is disabled in the config.php.'));
+ } ?><br><br>
+- <?php
+- print_unescaped($l->t('For help, see the <a target="_blank" rel="noreferrer" href="%s">documentation</a>.', [link_to_docs('admin-cli-upgrade')])); ?><br><br>
++ <code>
++sudo -u apache php /usr/share/nextcloud/occ upgrade
++</code>
++ <br><br>
+ </div>
+ </div>
+ </div>
+diff --git a/updater/index.php b/updater/index.php
+index 017ca70..085c250 100644
+--- a/updater/index.php
++++ b/updater/index.php
+@@ -1830,7 +1830,7 @@ if(strpos($updaterUrl, 'index.php') === false) {
+ var el = document.getElementById('step-maintenance-mode')
+ .getElementsByClassName('output')[0];
+ if (keepActive) {
+- el.innerHTML = 'Maintenance mode will kept active.<br>Now trigger the migration via command line: <code>./occ upgrade</code><br>';
++ el.innerHTML = 'Maintenance mode will kept active.<br>Now trigger the migration via command line: <code>sudo -u apache php /usr/share/nextcloud/occ upgrade</code><br>';
+ successStep('step-maintenance-mode');
+ currentStep('step-done');
+ performStep(11, performStepCallbacks[11]);
diff --git a/nextcloud-MIGRATION.fedora b/nextcloud-MIGRATION.fedora
index e3c1e11..454ed69 100644
--- a/nextcloud-MIGRATION.fedora
+++ b/nextcloud-MIGRATION.fedora
@@ -1,47 +1,165 @@
-Migration from owncloud
-=======================
+# Migration from owncloud
+
+When migrating from an existing owncloud install it's possible to use the same database,
+or to rename the database to reduce confusion.
+
+Before carrying out the migration it is important to prevent anyone from changing things.
+
+Of course it's advised to carry out a backup of the database and files before any migration.
### Prevent people using owncloud
sudo -u apache php /usr/share/owncloud/occ maintenance:mode --on
+### Migration whilst keeping owncloud data intact
+
+This is the safest option as it is nondestructive to owncloud, but it will require
+double the data storage during the migration.
-### If enough disk space for temporary double data usage
-## Copy data over from one location to the other
+#### Copy data over from one location to the other
+The data layout is identical, it's just the location that differs.
+```
rsync -aPh /var/lib/owncloud/ /var/lib/nextcloud/
+```
-## If wanting to rename the database
+## Renaming the database
+This is optional but might serve to confuse less, and prevents any changes to the owncloud
+database in case there are issues requiring a fallback. Naturally use better credentials and
+use the correct database names for your setup!
+
+##### MySQL
+```
mysql -e 'create database nextclouddb;'
mysql -e "grant all on nextclouddb.* to 'nextcloud_user'@'localhost' identified by 'nextcloud_pass';"
mysqldump -v ownclouddb | mysql -D nextclouddb
+```
+
+##### PostgreSQL
+```
+sudo -u postgres psql <<EOF
+ /* Create the user for nextcloud */
+ CREATE USER nextcloud_user WITH PASSWORD 'nextcloud_pass';
+
+ /* KILL ALL EXISTING CONNECTION FROM ORIGINAL DB (ownclouddb)*/
+ SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity
+ WHERE pg_stat_activity.datname = 'ownclouddb' AND pid <> pg_backend_pid();
+ /* CLONE DATABASE TO NEW ONE(nextclouddb) */
+ CREATE DATABASE nextclouddb WITH TEMPLATE ownclouddb OWNER nextcloud_user;
-### If not enough space for temporary double data
-## Copy data over from one location to the other
+ GRANT ALL PRIVILEGES ON DATABASE nextclouddb TO nextcloud_user;
+
+/* The tables need to be transferred in owner as well */
+\c nextclouddb;
+REASSIGN OWNED BY owncloud_user TO nextcloud_user;
+ EOF
+
+```
+Don't forget to update pg_hba.conf to allow access to the new database as the new user!
+
+```
+host nextclouddb nextcloud_user ::1/128 password
+host nextclouddb nextcloud_user 127.0.0.1/32 password
+```
+
+### Migration in place without preserving owncloud data
+
+If there is not sufficient disk then data can be moved, this will break owncloud in the process
+and there won't be a fallback option if things go wrong beyond restiring data/backups.
+
+#### Copy data over from one location to the other
+```
mv /var/lib/owncloud/* /var/lib/nextcloud/
+```
+
+#### Renaming the database
+This is even more optional since the old database will be destroyed in the process, but it may serve
+to lessen confusion later on for future maintenance. Again replace with the desired credentials and
+database names for your environment.
-## If wanting to rename the database
-mysql -e 'create database nextclouddb'
+Note that since the database sizes are small it's more reliable and safer for the data stores to follow
+the steps to duplicate the database laid out above.
+
+##### MySQL
+```
+mysql -e 'create database nextclouddb;'
mysql -e "grant all on nextclouddb.* to 'nextcloud_user'@'localhost' identified by 'nextcloud_pass';"
mysql ownclouddb -sNe 'show tables' | while read table; do mysql -sNe "rename table ownclouddb.$table to nextclouddb.$table;"; done
+```
+
+##### PostgreSQL
+```
+sudo -u postgres psql <<EOF
+ /* Create the user for nextcloud */
+ CREATE USER nextcloud_user WITH PASSWORD 'nextcloud_pass';
+
+ /* KILL ALL EXISTING CONNECTION FROM ORIGINAL DB (ownclouddb)*/
+ SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity
+ WHERE pg_stat_activity.datname = 'ownclouddb' AND pid <> pg_backend_pid();
+
+ /* ALTER DATABASE to rename it */
+ ALTER DATABASE ownclouddb RENAME TO nextclouddb;
+ ALTER DATABASE nextclouddb OWNER TO nextcloud_user;
+
+ GRANT ALL PRIVILEGES ON DATABASE nextclouddb TO nextcloud_user;
+
+/* The tables need to be transferred in owner as well */
+\c nextclouddb;
+REASSIGN OWNED BY owncloud_user TO nextcloud_user;
+EOF
+```
+Again remember to update pg_hba.conf so the new database and user can be used.
### Bring over the old configuration and update paths
+The config can be copied as-is which will preserve most settings. This is a coarse rename of everything
+from owncloud to nextcloud, but if the database isn't renamed then this too much. Verify the database
+credentials and name in the config file are correct before moving on to the next step.
+```
cp /etc/owncloud/config.php /etc/nextcloud/config.php
sed -i '/owncloud/nextcloud/g' /etc/nextcloud/config.php
-
+```
### Enable the nextcloud interface on httpd
+If using httpd then enable the interface the same way as the README describes for a fresh install
+```
ln -s /etc/httpd/conf.d/nextcloud-access.conf.avail /etc/httpd/conf.d/z-nextcloud-access.conf
+```
### Carry out any migration required
-sudo -u apache php /usr/share/nextcloud/occ upgrade
+A migration step for database schemas etc needs to be carried out to ensure everything is correct.
+Although the WebUI will be prompting the standard "click here to update" it is best for this major
+migration to carry it out at the command line.
+```
+sudo -u apache php /usr/share/nextcloud/occ upgrade
+```
-### Enable allow people to use nextcloud
+### Verify that everything looks right
+It's best at this stage to enter as an admin and have the instance in single user mode only
+```
+sudo -u apache php /usr/share/nextcloud/occ maintenance:singleuser --on
sudo -u apache php /usr/share/nextcloud/occ maintenance:mode --off
+```
+__NOTE__ It is usual for things like webdav to be disabled during singleuser which may prevent seeing
+files, however just use this to verify the admin screens. On testing apps needed to be disabled
+and then enabled again for nextcloud to correctly pick them up.
-
-### Clean up the owncloud stuff after testing
+### Enable allow people to use nextcloud
+If things are looking good then open the floodgates to everyone else.
+```
+sudo -u apache php /usr/share/nextcloud/occ maintenance:singleuser --off
+```
+
+### Clean up the owncloud stuff
+Finally clean up the old owncloud install, replace with the database and user for your own setup.
+```
dnf remove -y owncloud\*
-rm -rf /var/lib/owncloud /etc/owncloud
-mysql -e 'drop database ownclouddb;'
+rm -rf /var/lib/owncloud /etc/owncloud /etc/httpd/conf.d/*owncloud*
+# mysql
+mysql -e "drop database ownclouddb; drop user owncloud_user@'localhost';"
+# postgres
+sudo -u postgres psql <<EOF
+DROP DATABASE ownclouddb;
+DROP USER owncloud_user;
+EOF
+```
diff --git a/nextcloud-README.fedora b/nextcloud-README.fedora
index 5468a78..b64fc8d 100644
--- a/nextcloud-README.fedora
+++ b/nextcloud-README.fedora
@@ -104,6 +104,14 @@ dnf install 'php-pecl(apcu)'
For further information see http://nextcloud.org/ and http://doc.nextcloud.org/
+Scheduling Background Jobs
+--------------------------
+The default behaviour is to use the AJAX webcron, however this is fairly inefficient and does not scale very well.
+
+It's recommended to set the option "Cron" to use the system scheduler and to enable the included systemd timer.
+
+systemctl enable --now nextcloud-cron.timer
+
Migration from owncloud
-----------------------
diff --git a/nextcloud-defaults.inc b/nextcloud-defaults.inc
index 06f088f..c5d4478 100644
--- a/nextcloud-defaults.inc
+++ b/nextcloud-defaults.inc
@@ -36,6 +36,19 @@ ErrorDocument 404 /nextcloud/core/templates/404.php
</IfModule>
</IfModule>
+<IfModule mod_php7.c>
+ php_value upload_max_filesize 10G
+ php_value post_max_size 10G
+ php_value memory_limit 512M
+ php_value mbstring.func_overload 0
+ php_value always_populate_raw_post_data -1
+ php_value default_charset 'UTF-8'
+ php_value output_buffering off
+ <IfModule mod_env.c>
+ SetEnv htaccessWorking true
+ </IfModule>
+</IfModule>
+
# The rewrites for legacy caldav and carddav URLs are omitted here
# because they do not work with Fedora's ownCloud directory layout.
# See https://github.com/nextcloud/core/issues/243#issuecomment-75426453
diff --git a/nextcloud-systemd-timer.service b/nextcloud-systemd-timer.service
new file mode 100644
index 0000000..ccff38f
--- /dev/null
+++ b/nextcloud-systemd-timer.service
@@ -0,0 +1,8 @@
+[Unit]
+Description=Cron for nextcloud background jobs
+
+[Service]
+Type=oneshot
+ExecStart=/usr/bin/php -f /usr/share/nextcloud/cron.php
+User=apache
+
diff --git a/nextcloud-systemd-timer.timer b/nextcloud-systemd-timer.timer
new file mode 100644
index 0000000..cfaf4b7
--- /dev/null
+++ b/nextcloud-systemd-timer.timer
@@ -0,0 +1,10 @@
+[Unit]
+Description=This triggers the nextcloud cron service
+
+[Timer]
+OnBootSec=5min
+OnUnitInactiveSec=15min
+
+[Install]
+WantedBy=timers.target
+
diff --git a/nextcloud.spec b/nextcloud.spec
index da80b1b..fe499bf 100644
--- a/nextcloud.spec
+++ b/nextcloud.spec
@@ -1,5 +1,5 @@
Name: nextcloud
-Version: 10.0.3
+Version: 10.0.4
Release: 1%{?dist}
Summary: Private file sync and share server
@@ -25,6 +25,7 @@ Source103: %{name}-defaults.inc
Source3: %{name}-README.fedora
Source4: %{name}-mysql.txt
Source5: %{name}-postgresql.txt
+Source6: %{name}-MIGRATION.fedora
# config.php containing just settings we want to specify, nextcloud's
# initial setup will fill out other settings appropriately
Source7: %{name}-config.php
@@ -32,6 +33,10 @@ Source7: %{name}-config.php
# Our autoloader for core
Source8: %{name}-fedora-autoloader.php
+# Systemd timer for background jobs
+Source10: %{name}-systemd-timer.service
+Source11: %{name}-systemd-timer.timer
+
# Stop OC from trying to do stuff to .htaccess files. Just calm down, OC.
# Distributors are on the case.
Patch1: %{name}-9.1.0-dont_update_htacess.patch
@@ -53,8 +58,14 @@ Patch6: %{name}-463e2ea-php71-backport.patch
Patch7: %{name}-b129d5d-php71-backport.patch
Patch8: %{name}-10.0.3-dont-check-php-version.patch
+# Direct the admin to the correct cli command for upgrades
+Patch9: %{name}-10.0.4-correct-cli-upgrade.patch
+
BuildArch: noarch
+# For the systemd macros
+%{?systemd_requires}
+BuildRequires: systemd
# expand pear macros on install
BuildRequires: php-pear
@@ -467,6 +478,7 @@ find . -name .github -type d -prune -exec rm -r {} \; -print
cp %{SOURCE3} README.fedora
cp %{SOURCE4} README.mysql
cp %{SOURCE5} README.postgresql
+cp %{SOURCE6} MIGRATION.fedora
mv 3rdparty/composer.json 3rdparty_composer.json
mv apps/files_external/3rdparty/composer.json files_external_composer.json
@@ -720,6 +732,9 @@ install -Dpm 644 %{SOURCE202} \
%{buildroot}%{_sysconfdir}/php-fpm.d/%{name}.conf
%endif
+# Install the systemd timer
+install -Dpm 644 %{SOURCE10} %{buildroot}%{_unitdir}/nextcloud-cron.service
+install -Dpm 644 %{SOURCE11} %{buildroot}%{_unitdir}/nextcloud-cron.timer
%post httpd
/usr/bin/systemctl reload httpd.service > /dev/null 2>&1 || :
@@ -765,7 +780,7 @@ semanage fcontext -d -t httpd_sys_rw_content_t '%{_localstatedir}/lib/%{name}(/.
fi
%files
-%doc AUTHORS README.fedora config/config.sample.php
+%doc AUTHORS README.fedora MIGRATION.fedora config/config.sample.php
%doc *_composer.json
%license *-LICENSE
@@ -782,6 +797,8 @@ fi
%dir %attr(0750,apache,apache) %{_localstatedir}/lib/%{name}/data
%attr(-,apache,apache) %{_localstatedir}/lib/%{name}/apps
+%{_unitdir}/nextcloud-cron.service
+%{_unitdir}/nextcloud-cron.timer
%files httpd
%config(noreplace) %{_sysconfdir}/httpd/conf.d/%{name}.conf
@@ -801,6 +818,11 @@ fi
%changelog
+* Tue Feb 28 2017 James Hogarth <james.hogarth@gmail.com> - 10.0.4-1
+- update to 10.0.4
+- Add migration from owncloud documentation
+- Add systemd timer for background jobs
+
* Wed Feb 08 2017 James Hogarth <james.hogarth@gmail.com> - 10.0.3-1
- update to 10.0.3