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

Changed files
+74 -12
nixos
modules
services
web-servers
apache-httpd
tests
+34 -12
nixos/modules/services/web-servers/apache-httpd/owncloud.nix
···
/* 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)*/
···
'';
+
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 {
···
defaultText = "pkgs.owncloud70";
example = literalExample "pkgs.owncloud70";
description = ''
-
PostgreSQL package to use.
+
ownCloud package to use.
'';
};
···
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
···
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
'';
}
+1
nixos/release.nix
···
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 {};
+39
nixos/tests/owncloud.nix
···
+
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");
+
'';
+
})