From b363fc4c5731f3c085eb88a8e699483625bffbfc Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Thu, 21 Dec 2006 14:22:40 +0000 Subject: [PATCH] * Mount all file systems in the fileSystems option. svn path=/nixos/trunk/; revision=7449 --- configuration/upstart.nix | 6 +++++ upstart-jobs/filesystems.nix | 45 ++++++++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+) create mode 100644 upstart-jobs/filesystems.nix diff --git a/configuration/upstart.nix b/configuration/upstart.nix index 5de0164b062..f0870159ead 100644 --- a/configuration/upstart.nix +++ b/configuration/upstart.nix @@ -31,6 +31,12 @@ import ../upstart-jobs/gather.nix { inherit (pkgs) kernel module_init_tools; }) + # Mount file systems. + (import ../upstart-jobs/filesystems.nix { + inherit (pkgs) utillinux; + fileSystems = config.get ["fileSystems"]; + }) + # Swapping. (import ../upstart-jobs/swap.nix { inherit (pkgs) utillinux; 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 + "; + +}