summary refs log tree commit diff
path: root/upstart-jobs/filesystems.nix
diff options
context:
space:
mode:
authorMarc Weber <marco-oweber@gmx.de>2009-03-06 12:27:33 +0000
committerMarc Weber <marco-oweber@gmx.de>2009-03-06 12:27:33 +0000
commitd964466c1af91b1c91264a083d18803e402bbf7b (patch)
treea2b119372db884dfe1d06c47f5e17e57ead1e54a /upstart-jobs/filesystems.nix
parentea60090213ef5d98ba3071ef58fc5ba29e44f7ef (diff)
downloadnixpkgs-d964466c1af91b1c91264a083d18803e402bbf7b.tar
nixpkgs-d964466c1af91b1c91264a083d18803e402bbf7b.tar.gz
nixpkgs-d964466c1af91b1c91264a083d18803e402bbf7b.tar.bz2
nixpkgs-d964466c1af91b1c91264a083d18803e402bbf7b.tar.lz
nixpkgs-d964466c1af91b1c91264a083d18803e402bbf7b.tar.xz
nixpkgs-d964466c1af91b1c91264a083d18803e402bbf7b.tar.zst
nixpkgs-d964466c1af91b1c91264a083d18803e402bbf7b.zip
Convert "filesystems"
svn path=/nixos/branches/fix-style/; revision=14401
Diffstat (limited to 'upstart-jobs/filesystems.nix')
-rw-r--r--upstart-jobs/filesystems.nix202
1 files changed, 104 insertions, 98 deletions
diff --git a/upstart-jobs/filesystems.nix b/upstart-jobs/filesystems.nix
index 24569db11b4..10673cce5f3 100644
--- a/upstart-jobs/filesystems.nix
+++ b/upstart-jobs/filesystems.nix
@@ -1,120 +1,126 @@
-{utillinux, e2fsprogs, fileSystems, mount}:
+{pkgs, config, ...}:
 
-let
+###### implementation
 
-  # !!! use XML
+let
+  inherit (pkgs) e2fsprogs;
   mountPoints = map (fs: fs.mountPoint) fileSystems;
+  fileSystems = config.fileSystems;
   devices = map (fs: if fs ? device then fs.device else "LABEL=" + fs.label) fileSystems;
   fsTypes = map (fs: if fs ? fsType then fs.fsType else "auto") fileSystems;
   optionss = map (fs: if fs ? options then fs.options else "defaults") fileSystems;
   autocreates = map (fs: if fs ? autocreate then fs.autocreate else "0") fileSystems;
+  mount = config.system.sbin.mount;
 
-in 
-
-{
-  name = "filesystems";
+  job = ''
+  start on startup
+  start on new-devices
+  start on ip-up
   
-  job = "
-start on startup
-start on new-devices
-start on ip-up
-
-script
+  script
     PATH=${e2fsprogs}/sbin:$PATH
-
+  
     mountPoints=(${toString mountPoints})  
     devices=(${toString devices})
     fsTypes=(${toString fsTypes})
     optionss=(${toString optionss})
     autocreates=(${toString autocreates})
-
+  
     newDevices=1
-
+  
     # If we mount any file system, we repeat this loop, because new
     # mount opportunities may have become available (such as images
     # for loopback mounts).
-    
-    while test -n \"$newDevices\"; do
-
-        newDevices=
-
-        for ((n = 0; n < \${#mountPoints[*]}; n++)); do
-            mountPoint=\${mountPoints[$n]}
-            device=\${devices[$n]}
-            fsType=\${fsTypes[$n]}
-            options=\${optionss[$n]}
-            autocreate=\${autocreates[$n]}
-
-            isLabel=
-            if echo \"$device\" | grep -q '^LABEL='; then isLabel=1; fi
-
-            isPseudo=
-            if test \"$fsType\" = \"nfs\" || test \"$fsType\" = \"tmpfs\" ||
-              test \"$fsType\" = \"ext3cow\"; then isPseudo=1; fi
-
-            if ! test -n \"$isLabel\" -o -n \"$isPseudo\" -o -e \"$device\"; then
-                echo \"skipping $device, doesn't exist (yet)\"
-                continue
-            fi
-
-            # !!! quick hack: if mount point already exists, try a
-            # remount to change the options but nothing else.
-            if cat /proc/mounts | grep -F -q \" $mountPoint \"; then
-                echo \"remounting $device on $mountPoint\"
-                ${mount}/bin/mount -t \"$fsType\" \\
-                    -o remount,\"$options\" \\
-                    \"$device\" \"$mountPoint\" || true
-                continue
-            fi
-
-            # If $device is already mounted somewhere else, unmount it first.
-            # !!! Note: we use /etc/mtab, not /proc/mounts, because mtab
-            # contains more accurate info when using loop devices.
-
-            # !!! not very smart about labels yet; should resolve the label somehow.
-            if test -z \"$isLabel\" -a -z \"$isPseudo\"; then
-
-                device=$(readlink -f \"$device\")
-
-                prevMountPoint=$(
-                    cat /etc/mtab \\
-                    | grep \"^$device \" \\
-                    | sed 's|^[^ ]\\+ \\+\\([^ ]\\+\\).*|\\1|' \\
-                )
-
-                if test \"$prevMountPoint\" = \"$mountPoint\"; then
-                    echo \"remounting $device on $mountPoint\"
-                    ${mount}/bin/mount -t \"$fsType\" \\
-                        -o remount,\"$options\" \\
-                        \"$device\" \"$mountPoint\" || true
-                    continue
-                fi
-
-                if test -n \"$prevMountPoint\"; then
-                    echo \"unmount $device from $prevMountPoint\"
-                    ${mount}/bin/umount \"$prevMountPoint\" || true
-                fi
-
-            fi
-
-            echo \"mounting $device on $mountPoint\"
-
-            # !!! should do something with the result; also prevent repeated fscks.
-            if test -z \"$isPseudo\"; then
-                fsck -a \"$device\" || true
-            fi
-
-            if test \"\$autocreate\" = 1; then mkdir -p \"\$mountPoint\"; fi
-
-            if ${mount}/bin/mount -t \"$fsType\" -o \"$options\" \"$device\" \"$mountPoint\"; then
-                newDevices=1
-            fi
-        
-        done
-
+  
+    while test -n "$newDevices"; do
+  
+      newDevices=
+  
+      for ((n = 0; n < ''${#mountPoints[*]}; n++)); do
+        mountPoint=''${mountPoints[$n]}
+        device=''${devices[$n]}
+        fsType=''${fsTypes[$n]}
+        options=''${optionss[$n]}
+        autocreate=''${autocreates[$n]}
+  
+        isLabel=
+        if echo "$device" | grep -q '^LABEL='; then isLabel=1; fi
+  
+        isPseudo=
+        if test "$fsType" = "nfs" || test "$fsType" = "tmpfs" ||
+          test "$fsType" = "ext3cow"; then isPseudo=1; fi
+  
+        if ! test -n "$isLabel" -o -n "$isPseudo" -o -e "$device"; then
+            echo "skipping $device, doesn't exist (yet)"
+            continue
+        fi
+  
+        # !!! quick hack: if mount point already exists, try a
+        # remount to change the options but nothing else.
+        if cat /proc/mounts | grep -F -q " $mountPoint "; then
+            echo "remounting $device on $mountPoint"
+            ${mount}/bin/mount -t "$fsType" \
+                -o remount,"$options" \
+                "$device" "$mountPoint" || true
+            continue
+        fi
+  
+        # If $device is already mounted somewhere else, unmount it first.
+        # !!! Note: we use /etc/mtab, not /proc/mounts, because mtab
+        # contains more accurate info when using loop devices.
+  
+        # !!! not very smart about labels yet; should resolve the label somehow.
+        if test -z "$isLabel" -a -z "$isPseudo"; then
+  
+          device=$(readlink -f "$device")
+  
+          prevMountPoint=$(
+              cat /etc/mtab \
+              | grep "^$device " \
+              | sed 's|^[^ ]\+ \+\([^ ]\+\).*|\1|' \
+          )
+  
+          if test "$prevMountPoint" = "$mountPoint"; then
+              echo "remounting $device on $mountPoint"
+              ${mount}/bin/mount -t "$fsType" \
+                  -o remount,"$options" \
+                  "$device" "$mountPoint" || true
+              continue
+          fi
+  
+          if test -n "$prevMountPoint"; then
+              echo "unmount $device from $prevMountPoint"
+              ${mount}/bin/umount "$prevMountPoint" || true
+          fi
+  
+        fi
+  
+        echo "mounting $device on $mountPoint"
+  
+        # !!! should do something with the result; also prevent repeated fscks.
+        if test -z "$isPseudo"; then
+            fsck -a "$device" || true
+        fi
+  
+        if test "$autocreate" = 1; then mkdir -p "$mountPoint"; fi
+  
+        if ${mount}/bin/mount -t "$fsType" -o "$options" "$device" "$mountPoint"; then
+            newDevices=1
+        fi
+  
+      done
+  
     done
+  
+  end script
+  '';
+in
 
-end script
-  ";
-
+{
+  services = {
+    extraJobs = [{
+      name = "filesystems";
+      inherit job;
+    }];
+  };
 }