Hi Nicolas,

On Sun, 28 Aug 2011 01:13:30 +0200, Nicolas Pierron <[email protected]> wrote:
Hi Rickard,

On Sat, Aug 27, 2011 at 13:05, Rickard Nilsson
<[email protected]> wrote:
The only way I have managed to get root fs on NFS to work in NixOS is by using the "nfsmount" program from klibc. The following patch works fine for
me, but since I'm new to NixOS I'm open for any changes:

I am happy to see new users willing to share their configuration.


Index: modules/system/boot/stage-1.nix
===================================================================
--- modules/system/boot/stage-1.nix     (revision 28845)
+++ modules/system/boot/stage-1.nix     (working copy)
@@ -169,6 +169,10 @@
        cp

${kernelPackages.splashutils}/${kernelPackages.splashutils.helperName}
$out/bin/splash_helper
      ''}

+      # Copy nfsmount
+      # TODO: Maybe only do this if there is a nfs mount point defined?

Sure, we don't want to pollute other user environment:

${if fileSystems != [] && filter (fs.fsType == "nfs") fileSystems then ''

+      cp -v ${pkgs.klibc}/lib/klibc/bin.static/nfsmount $out/bin

'' else ""}

+
      ${config.boot.initrd.extraUtilsCommands}

      # Run patchelf to make the programs refer to the copied libraries.




By applying this patch, the following root device specification in
configuration.nix works perfectly for me:

 fileSystems = [
   { mountPoint = "/";
     fsType = "nfs";
     device = "192.168.42.1:/export/nixos_root";
   }
 ];


However, you of course also need to get the network up before mounting the
root fs. I have solved this in the following way directly in
configuration.nix, but I would really appreciate any suggestions on how to solve it more generally in the NixOS repository, so I could write a proper
patch for it:

 boot.initrd.extraUtilsCommands =
   ''
     cp ${pkgs.iproute}/sbin/ip $out/bin
     cp ${pkgs.glibc}/lib/libresolv.so.* $out/lib
   '';

This is ok.

 boot.initrd.postDeviceCommands =
   ''
     ip link set eth0 up
     ip addr add 192.168.42.200/24 dev eth0
   '';

But we probably don't want to hard write this one, best would be to
take into account the networking user configuration.  Such things
could be done by extracting the jobs.dhclient script and giving it as
argument of boot.initrd.postDeviceCommands, but this has never been
experimented before.

 # This is necessary, otherwise upstart will tear
 # down the network connection and the root fs will stop working.
 networking.useDHCP = false;

This should not be necessary if you reused the upstart jobs content to
write the init script.  Otherwise, if another definition gives you
trouble you can still use mkOverride to force it to another value.

I will look into getting DHCP working during init. It is something I have been thinking of already. Thanks for the hint about the upstart jobs. Ideally I would like to adjust the existing network configuration in NixOS to support the possibility to bring up the network before the root mounting. That way the user wouldn't have to do anything else then activate "networking.earlyInit = true" or something like that. And it could even be done automatically if you had a cifs or nfs root.


If you are searching option declarations / definitions, use
"nixos-option -l option.name" to locate it.

Thanks for the tip, I wasn't aware of nixos-option.


Thanks for your interest in NixOS.
Feel free to contribute, I'll take pleasure to review your patches.

I will polish the nfsmount patch a bit and then submit it again. The network stuff will require some more work before being patch-worthy.


Best regards,
  Rickard Nilsson
_______________________________________________
nix-dev mailing list
[email protected]
https://mail.cs.uu.nl/mailman/listinfo/nix-dev

Reply via email to