From cb4b9b1cc196fec213c98541752f9df0cc6ee320 Mon Sep 17 00:00:00 2001 From: Bas van Dijk Date: Tue, 31 Oct 2017 17:53:49 +0100 Subject: [PATCH] owncloud: fix some but not all errors * Don't set timezone when it's null * Don't create the postgres role because the postgresqsl service already does that. * Fix documentation * Add a test suite --- .../web-servers/apache-httpd/owncloud.nix | 46 ++++++++++++++----- nixos/release.nix | 1 + nixos/tests/owncloud.nix | 39 ++++++++++++++++ 3 files changed, 74 insertions(+), 12 deletions(-) create mode 100644 nixos/tests/owncloud.nix diff --git a/nixos/modules/services/web-servers/apache-httpd/owncloud.nix b/nixos/modules/services/web-servers/apache-httpd/owncloud.nix index 94e85f1f4289..d689e9dd8e4c 100644 --- a/nixos/modules/services/web-servers/apache-httpd/owncloud.nix +++ b/nixos/modules/services/web-servers/apache-httpd/owncloud.nix @@ -188,8 +188,7 @@ let /* date format to be used while writing to the owncloud logfile */ 'logdateformat' => 'F d, Y H:i:s', - /* timezone used while writing to the owncloud logfile (default: UTC) */ - 'logtimezone' => '${serverInfo.fullConfig.time.timeZone}', + ${tzSetting} /* Append all database queries and parameters to the log file. (watch out, this option can increase the size of your log file)*/ @@ -339,6 +338,31 @@ let ''; + tzSetting = let tz = serverInfo.fullConfig.time.timeZone; in optionalString (!isNull tz) '' + /* timezone used while writing to the owncloud logfile (default: UTC) */ + 'logtimezone' => '${tz}', + ''; + + postgresql = serverInfo.fullConfig.services.postgresql.package; + + setupDb = pkgs.writeScript "setup-owncloud-db" '' + #!${pkgs.stdenv.shell} + PATH="${postgresql}/bin" + createuser --no-superuser --no-createdb --no-createrole "${config.dbUser}" || true + createdb "${config.dbName}" -O "${config.dbUser}" || true + psql -U postgres -d postgres -c "alter user ${config.dbUser} with password '${config.dbPassword}';" || true + + QUERY="CREATE TABLE appconfig + ( appid VARCHAR( 255 ) NOT NULL + , configkey VARCHAR( 255 ) NOT NULL + , configvalue VARCHAR( 255 ) NOT NULL + ); + GRANT ALL ON appconfig TO ${config.dbUser}; + ALTER TABLE appconfig OWNER TO ${config.dbUser};" + + psql -h "/tmp" -U postgres -d ${config.dbName} -Atw -c "$QUERY" || true + ''; + in rec { @@ -373,7 +397,7 @@ rec { defaultText = "pkgs.owncloud70"; example = literalExample "pkgs.owncloud70"; description = '' - PostgreSQL package to use. + ownCloud package to use. ''; }; @@ -574,13 +598,7 @@ rec { chmod -R o-rwx ${config.dataDir} chown -R wwwrun:wwwrun ${config.dataDir} - ${pkgs.postgresql}/bin/createuser -s -r postgres - ${pkgs.postgresql}/bin/createuser --no-superuser --no-createdb --no-createrole "${config.dbUser}" || true - ${pkgs.postgresql}/bin/createdb "${config.dbName}" -O "${config.dbUser}" || true - ${pkgs.sudo}/bin/sudo -u postgres ${pkgs.postgresql}/bin/psql -U postgres -d postgres -c "alter user ${config.dbUser} with password '${config.dbPassword}';" || true - - QUERY="CREATE TABLE appconfig (appid VARCHAR( 255 ) NOT NULL ,configkey VARCHAR( 255 ) NOT NULL ,configvalue VARCHAR( 255 ) NOT NULL); GRANT ALL ON appconfig TO ${config.dbUser}; ALTER TABLE appconfig OWNER TO ${config.dbUser};" - ${pkgs.sudo}/bin/sudo -u postgres ${pkgs.postgresql}/bin/psql -h "/tmp" -U postgres -d ${config.dbName} -Atw -c "$QUERY" || true + ${pkgs.sudo}/bin/sudo -u postgres ${setupDb} fi if [ -e ${config.package}/config/ca-bundle.crt ]; then @@ -591,7 +609,11 @@ rec { chown wwwrun:wwwrun ${config.dataDir}/owncloud.log || true - QUERY="INSERT INTO groups (gid) values('admin'); INSERT INTO users (uid,password) values('${config.adminUser}','${builtins.hashString "sha1" config.adminPassword}'); INSERT INTO group_user (gid,uid) values('admin','${config.adminUser}');" - ${pkgs.sudo}/bin/sudo -u postgres ${pkgs.postgresql}/bin/psql -h "/tmp" -U postgres -d ${config.dbName} -Atw -c "$QUERY" || true + QUERY="INSERT INTO groups (gid) values('admin'); + INSERT INTO users (uid,password) + values('${config.adminUser}','${builtins.hashString "sha1" config.adminPassword}'); + INSERT INTO group_user (gid,uid) + values('admin','${config.adminUser}');" + ${pkgs.sudo}/bin/sudo -u postgres ${postgresql}/bin/psql -h "/tmp" -U postgres -d ${config.dbName} -Atw -c "$QUERY" || true ''; } diff --git a/nixos/release.nix b/nixos/release.nix index d5f59a524e04..053ce925c9a1 100644 --- a/nixos/release.nix +++ b/nixos/release.nix @@ -302,6 +302,7 @@ in rec { tests.leaps = callTest tests/leaps.nix { }; tests.nsd = callTest tests/nsd.nix {}; tests.openssh = callTest tests/openssh.nix {}; + tests.owncloud = callTest tests/owncloud.nix {}; tests.pam-oath-login = callTest tests/pam-oath-login.nix {}; #tests.panamax = hydraJob (import tests/panamax.nix { system = "x86_64-linux"; }); tests.peerflix = callTest tests/peerflix.nix {}; diff --git a/nixos/tests/owncloud.nix b/nixos/tests/owncloud.nix new file mode 100644 index 000000000000..0dcdea40b064 --- /dev/null +++ b/nixos/tests/owncloud.nix @@ -0,0 +1,39 @@ +import ./make-test.nix ({ pkgs, ... }: + +{ + name = "owncloud"; + nodes = + { web = + { config, pkgs, ... }: + { + services.postgresql.enable = true; + services.httpd = { + enable = true; + logPerVirtualHost = true; + adminAddr = "example@example.com"; + virtualHosts = [ + { + hostName = "owncloud"; + extraSubservices = + [ + { + serviceType = "owncloud"; + adminPassword = "secret"; + dbPassword = "secret"; + } + ]; + } + ]; + }; + }; + }; + + testScript = '' + startAll; + + $web->waitForUnit("postgresql"); + $web->waitForUnit("httpd"); + + $web->succeed("curl -L 127.0.0.1:80"); + ''; +})