summary refs log tree commit diff
diff options
context:
space:
mode:
authorMarc Weber <marco-oweber@gmx.de>2013-10-11 17:18:40 +0200
committerEvgeny Egorochkin <phreedom@yandex.ru>2013-10-21 20:33:11 +0300
commit6cb91c33d0a66fe66e8f23206795e55b65735c0c (patch)
tree5bc2a33e2df82628815a1de8cc2856979010219a
parentae39f6c0cb986f15f83d6609b9689372d0d6580a (diff)
downloadnixlib-6cb91c33d0a66fe66e8f23206795e55b65735c0c.tar
nixlib-6cb91c33d0a66fe66e8f23206795e55b65735c0c.tar.gz
nixlib-6cb91c33d0a66fe66e8f23206795e55b65735c0c.tar.bz2
nixlib-6cb91c33d0a66fe66e8f23206795e55b65735c0c.tar.lz
nixlib-6cb91c33d0a66fe66e8f23206795e55b65735c0c.tar.xz
nixlib-6cb91c33d0a66fe66e8f23206795e55b65735c0c.tar.zst
nixlib-6cb91c33d0a66fe66e8f23206795e55b65735c0c.zip
Firebird service:
 * simplify directory layout
 * clean up option descriptions
 * let the user override Firebird package
 * create firebird user
 * clarify TODO comment

Close  # 1061.
-rw-r--r--nixos/modules/services/databases/firebird.nix89
1 files changed, 51 insertions, 38 deletions
diff --git a/nixos/modules/services/databases/firebird.nix b/nixos/modules/services/databases/firebird.nix
index aca0d58900b1..213320d5c54a 100644
--- a/nixos/modules/services/databases/firebird.nix
+++ b/nixos/modules/services/databases/firebird.nix
@@ -1,9 +1,18 @@
 { config, pkgs, ... }:
 
-# TODO: this file needs some additional work - at least you can connect to
-# firebird ..
-# Example how to connect:
-# isql /var/db/firebird/data/your-db.fdb -u sysdba -p <default password>
+# TODO: This may file may need additional review, eg which configuartions to
+# expose to the user.
+#
+# I only used it to access some simple databases.
+
+# test:
+# isql, then type the following commands:
+# CREATE DATABASE '/var/db/firebird/data/test.fdb' USER 'SYSDBA' PASSWORD 'masterkey';
+# CONNECT '/var/db/firebird/data/test.fdb' USER 'SYSDBA' PASSWORD 'masterkey';
+# CREATE TABLE test ( text varchar(100) );
+# DROP DATABASE;
+#
+# Be careful, virtuoso-opensource also provides a different isql command !
 
 # There are at least two ways to run firebird. superserver has been choosen
 # however there are no strong reasons to prefer this or the other one AFAIK
@@ -18,7 +27,8 @@ let
 
   firebird = cfg.package;
 
-  pidFile = "${cfg.pidDir}/firebirdd.pid";
+  dataDir = "${cfg.baseDir}/data";
+  systemDir = "${cfg.baseDir}/system";
 
 in
 
@@ -32,9 +42,9 @@ in
 
       enable = mkOption {
         default = false;
-        description = "
-          Whether to enable the firebird super server.
-        ";
+        description = ''
+          Whether to enable the Firebird super server.
+        '';
       };
 
       package = mkOption {
@@ -45,29 +55,31 @@ in
             reasons. See comments at the firebirdSuper derivation
         */
 
-        description = "
+        description = ''
           Which firebird derivation to use.
-        ";
+        '';
       };
 
       port = mkOption {
         default = "3050";
-        description = "Port of Firebird.";
+        description = ''
+          Port Firebird uses.
+        '';
       };
 
       user = mkOption {
         default = "firebird";
-        description = "User account under which firebird runs.";
+        description = ''
+          User account under which firebird runs.
+        '';
       };
 
-      dataDir = mkOption {
-        default = "/var/db/firebird/data"; # ubuntu is using /var/lib/firebird/2.1/data/.. ?
-        description = "Location where firebird databases are stored.";
-      };
-
-      pidDir = mkOption {
-        default = "/run/firebird";
-        description = "Location of the file which stores the PID of the firebird server.";
+      baseDir = mkOption {
+        default = "/var/db/firebird"; # ubuntu is using /var/lib/firebird/2.1/data/.. ?
+        description = ''
+          Location containing data/ and system/ directories.
+          data/ stores the databases, system/ stores the password database security2.fdb.
+        '';
       };
 
     };
@@ -79,12 +91,10 @@ in
 
   config = mkIf config.services.firebird.enable {
 
-    users.extraUsers.firebird.description =  "Firebird server user";
-
-    environment.systemPackages = [firebird];
+    environment.systemPackages = [cfg.package];
 
     systemd.services.firebird =
-      { description = "firebird super server";
+      { description = "Firebird Super-Server";
 
         wantedBy = [ "multi-user.target" ];
 
@@ -92,20 +102,17 @@ in
         # is a better way
         preStart =
           ''
-            secureDir="${cfg.dataDir}/../system"
-
             mkdir -m 0700 -p \
-              "${cfg.dataDir}" \
-              "${cfg.pidDir}" \
-              /var/log/firebird \
-              "$secureDir"
+              "${dataDir}" \
+              "${systemDir}" \
+              /var/log/firebird
 
-            if ! test -e "$secureDir/security2.fdb"; then
-                cp ${firebird}/security2.fdb "$secureDir"
+            if ! test -e "${systemDir}/security2.fdb"; then
+                cp ${firebird}/security2.fdb "${systemDir}"
             fi
 
-            chown -R ${cfg.user} "${cfg.pidDir}" "${cfg.dataDir}" "$secureDir" /var/log/firebird
-            chmod -R 700 "${cfg.pidDir}" "${cfg.dataDir}" "$secureDir" /var/log/firebird
+            chown -R ${cfg.user} "${dataDir}" "${systemDir}" /var/log/firebird
+            chmod -R 700         "${dataDir}" "${systemDir}" /var/log/firebird
           '';
 
         serviceConfig.PermissionsStartOnly = true; # preStart must be run as root
@@ -119,9 +126,9 @@ in
 
     # think about this again - and eventually make it an option
     environment.etc."firebird/firebird.conf".text = ''
-      # RootDirectory = Restrict ${cfg.dataDir}
-      DatabaseAccess = Restrict ${cfg.dataDir}
-      ExternalFileAccess = Restrict ${cfg.dataDir}
+      # RootDirectory = Restrict ${dataDir}
+      DatabaseAccess = Restrict ${dataDir}
+      ExternalFileAccess = Restrict ${dataDir}
       # what is this? is None allowed?
       UdfAccess = None
       # "Native" =  traditional interbase/firebird, "mixed" is windows only
@@ -142,8 +149,14 @@ in
       #RemoteAuxPort = 0
       # rsetrict connections to a network card:
       #RemoteBindAddress =
-      # there are some more settings ..
+      # there are some additional settings which should be reviewed
     '';
     };
 
+    users.extraUsers.firebird = {
+      description = "firebird server user";
+      group = "firebird";
+      uid = config.ids.uids.firebird;
+    };
+
 }