diff options
Diffstat (limited to 'upstart-jobs/filesystems.nix')
-rw-r--r-- | upstart-jobs/filesystems.nix | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/upstart-jobs/filesystems.nix b/upstart-jobs/filesystems.nix new file mode 100644 index 00000000000..0c581db9634 --- /dev/null +++ b/upstart-jobs/filesystems.nix @@ -0,0 +1,45 @@ +{utillinux, fileSystems}: + +let + + # !!! use XML + mountPoints = map (fs: fs.mountPoint) fileSystems; + devices = map (fs: fs.device) fileSystems; + +in + +{ + name = "filesystems"; + + job = " +start on startup +start on new-devices + +script + mountPoints=(${toString mountPoints}) + devices=(${toString devices}) + + for ((n = 0; n < \${#mountPoints[*]}; n++)); do + mountPoint=\${mountPoints[$n]} + device=\${devices[$n]} + + # If $device is already mounted somewhere else, unmount it first. + prevMountPoint=$(cat /proc/mounts | grep \"^$device \" | sed 's|^[^ ]\\+ \\+\\([^ ]\\+\\).*|\\1|') + + if test \"$prevMountPoint\" = \"$mountPoint\"; then continue; fi + + if test -n \"$prevMountPoint\"; then + echo \"unmount $device from $prevMountPoint\" + ${utillinux}/bin/umount \"$prevMountPoint\" || true + fi + + echo \"mounting $device on $mountPoint\" + + mkdir -p \"$mountPoint\" || true + ${utillinux}/bin/mount \"$device\" \"$mountPoint\" || true + done + +end script + "; + +} |