Commit graph

80 commits

Author SHA1 Message Date
Sander van der Burg 9c722e474d - Added nixos-build-vms command, which builds a virtual network from a network.nix expression (also used by nixos-deploy-network)
- Added a backdoor option to the interactive run-vms script. This allows me to intergrate the virtual network approach with Disnix
- Small documentation fixes

Some explanation:

The nixos-build-vms command line tool can be used to build a virtual network of a network.nix specification.
For example, a network configuration (network.nix) could look like this:

{
  test1 = 
    {pkgs, config, ...}:
 
    {
      services.openssh.enable = true;
      ...
    };

  test2 =
    {pkgs, config, ...}:
    
    {
      services.openssh.enable = true;
      services.xserver.enable = true;
    }

    ;
}

By typing the following instruction:

$ nixos-build-vms -n network.nix

a virtual network is built, which can be started by typing:

$ ./result/bin/run-vms

It is also possible to enable a backdoor. In this case *.socket files are stored in the current directory
which can be used by the end-user to invoke remote instruction on a VM in the network through a Unix
domain socket.

For example by building the network with the following instructions:

$ nixos-build-vms -n network.nix --use-backdoor

and launching the virtual network:

$ ./result/bin/run-vms

You can find two socket files in your current directory, namely: test1.socket and test2.socket.
These Unix domain sockets can be used to remotely administer the test1 and test2 machine
in the virtual network.

For example by running:

$ socat ./test1.socket stdio
ls /root

You can retrieve the contents of the /root directory of the virtual machine with identifier test1


svn path=/nixos/trunk/; revision=24410
2010-10-21 22:50:12 +00:00
Eelco Dolstra fa04ae9738 * It's "tun", not "tap".
svn path=/nixos/trunk/; revision=24217
2010-10-11 17:06:49 +00:00
Eelco Dolstra 81dbac4af3 * Don't run ntpd in DomU.
svn path=/nixos/trunk/; revision=24125
2010-10-06 20:22:36 +00:00
Eelco Dolstra cda2e41c01 * Added a "xendomains" job to automatically start the domains defined
in /etc/xen/auto at boot time, to save all running domains during
  shutdown, and to restore all saved domains at boot time.

svn path=/nixos/trunk/; revision=24121
2010-10-06 16:07:16 +00:00
Eelco Dolstra 8b5fba4942 * Added a module that provides common configuration for DomU
machines.

svn path=/nixos/trunk/; revision=24084
2010-10-05 15:44:40 +00:00
Eelco Dolstra c5b39e70ef * Rename the xen module to xen-dom0.
svn path=/nixos/trunk/; revision=24078
2010-10-05 14:23:12 +00:00
Eelco Dolstra deca72f3cf * Xen (or rather QEMU) needs /dev/net/tun, so load the tap
module.

svn path=/nixos/trunk/; revision=23970
2010-09-27 16:32:42 +00:00
Eelco Dolstra 0442e7e82a * Add Xen's udev rules. This is necessary to get automatically
created block and network devices to work.

svn path=/nixos/trunk/; revision=23823
2010-09-16 15:24:46 +00:00
Eelco Dolstra 071b192c9d * Start dhclient after xend.
svn path=/nixos/trunk/; revision=23782
2010-09-14 11:58:06 +00:00
Eelco Dolstra 72d9235992 * Added an Upstart job for the Xen control daemon (xend).
svn path=/nixos/trunk/; revision=23781
2010-09-14 11:22:50 +00:00
Eelco Dolstra c4f910f550 * Substitute the path of the system derivation directly in the stage 2
init script.  This removes the need for the `systemConfig' boot
  parameter; `init=<stage-2-init>' is enough.  However, the GRUB menu
  builder still needs to add `systemConfig' to the kernel command line
  for compatibility with old configurations.

svn path=/nixos/trunk/; revision=23775
2010-09-13 22:10:25 +00:00
Eelco Dolstra f8f04aa756 * Fix the tests.
svn path=/nixos/trunk/; revision=23764
2010-09-13 16:02:54 +00:00
Eelco Dolstra f729f12e4e Some cleanups in the activation script:
* Moved some scriptlets to the appropriate modules.
* Put the scriptlet that sets the default path at the start, since it
  never makes sense not to have it there.  It no longer needs to be
  declared as a dependency.
* If a scriptlet has no dependencies, it can be denoted as a plain
  string (i.e., `noDepEntry' is not needed anymore).

svn path=/nixos/trunk/; revision=23762
2010-09-13 15:41:38 +00:00
Eelco Dolstra f99e42cfbc * Doh.
svn path=/nixos/trunk/; revision=23748
2010-09-13 13:43:53 +00:00
Eelco Dolstra c1295661c4 * Added a command `nixos-rebuild build-vm-with-bootloader'. This is
like `build-vm', but boots using the regular boot loader (i.e. GRUB
  1 or 2) rather than booting directly from the kernel/initrd.  Thus
  it allows testing of GRUB.

svn path=/nixos/trunk/; revision=23747
2010-09-13 12:34:58 +00:00
Eelco Dolstra e871e84159 * mkOverrideTemplate -> mkOverride.
svn path=/nixos/trunk/; revision=23743
2010-09-13 11:33:05 +00:00
Eelco Dolstra 6b2844c6b2 * Mount /proc/xen.
svn path=/nixos/trunk/; revision=23741
2010-09-12 22:56:54 +00:00
Eelco Dolstra 987dd76811 * Added a module to enable the Xen hypervisor.
svn path=/nixos/trunk/; revision=23739
2010-09-12 22:43:45 +00:00
Nicolas Pierron c9dc3651da Replace mkOverride by its alias mkOverrideTemplate to remove the unused
template argument of mkOverride later.

svn path=/nixos/trunk/; revision=23631
2010-09-03 19:10:59 +00:00
Eelco Dolstra d550cc6d63 * Grmbl. Create the missing mount points.
svn path=/nixos/trunk/; revision=23592
2010-09-01 11:00:35 +00:00
Eelco Dolstra 68ebbb6093 * Put /nix on /ephemeral0 using AUFS (with the original /nix from the
AMI as a base) because the root filesystem is rather small.

svn path=/nixos/trunk/; revision=23534
2010-08-29 22:29:10 +00:00
Eelco Dolstra 34719e0c4a * On second thought, panicking in stage 1 doesn't help because it
won't actually cause the instance to be terminated (even if
  "panic=1" were to be set), merely rebooted.

svn path=/nixos/trunk/; revision=23533
2010-08-29 22:11:33 +00:00
Eelco Dolstra a242602b40 * /data -> /ephemeral0.
* Put /tmp and /var on the /ephemeral0, as it has much more
  space than the root filesystem.
* Panic on stage 1 errors since they cannot be repaired anyway.

svn path=/nixos/trunk/; revision=23532
2010-08-29 22:09:15 +00:00
Eelco Dolstra 4963f769d9 * Print the host public key on the console so that the user can obtain
it securely by parsing the output of ec2-get-console-output.

svn path=/nixos/trunk/; revision=23524
2010-08-29 21:03:22 +00:00
Eelco Dolstra 4bca743766 * Typo.
svn path=/nixos/trunk/; revision=23485
2010-08-27 15:31:04 +00:00
Eelco Dolstra 392275f185 * Move support for writable Nix stores to qemu-vm.nix.
svn path=/nixos/trunk/; revision=23393
2010-08-24 12:59:16 +00:00
Rob Vermaas e87a298c33 qemu virtualiztion: do not pass username on guest cifs mount, use sec=none in stead
svn path=/nixos/trunk/; revision=23243
2010-08-19 08:32:31 +00:00
Eelco Dolstra 31db968be4 * In QEMU, set a higher refresh rate in xorg.conf so that resolutions
higher than 800x600 work.
* Add a "Monitor" statement to the "Screen" section, because otherwise
  the Monitor section is ignored.

svn path=/nixos/trunk/; revision=23068
2010-08-09 20:10:16 +00:00
Eelco Dolstra d659488209 * Use the regular GRUB menu builder for Amazon. There are two issues:
we want to generate the GRUB menu without actually installing GRUB
  (because Amazon supplies its own pv-grub), and each menu entry
  requires "root (hd0)".  For the first, allow boot.loader.grub.device
  to be set to "nodev" to indicate that the GRUB menu should be
  generated without installing GRUB.  For the second, add an option
  boot.loader.grub.extraPerEntryConfig to allow commands to be added
  to each GRUB menu entry (in this case, "root (hd0)").

svn path=/nixos/trunk/; revision=22712
2010-07-22 14:40:29 +00:00
Eelco Dolstra d7f638da0c * Amazon now supports booting a custom kernel in the AMI using
pv-grub, so supply a GRUB menu that starts our own kernel and
  initrd.

svn path=/nixos/trunk/; revision=22678
2010-07-20 13:53:14 +00:00
Eelco Dolstra b614179eed * Install a configuration.nix in the AMI.
svn path=/nixos/trunk/; revision=22607
2010-07-15 11:09:30 +00:00
Eelco Dolstra 4b018d1294 svn path=/nixos/trunk/; revision=22587 2010-07-13 20:47:31 +00:00
Eelco Dolstra 363806e89b * To establish the connection to the root shell in the guest, let the
guest connect to a Unix domain socket on the host rather than the
  other way around.  The former is a QEMU feature (guestfwd to a
  socket) while the latter requires a patch (which we can now get rid
  of).

svn path=/nixos/branches/boot-order/; revision=22331
2010-06-18 19:31:02 +00:00
Eelco Dolstra 46ac1375a7 * Don't use -smb and -no-kvm-irqchip. Maybe this makes VM builds more
reliable.

svn path=/nixos/branches/boot-order/; revision=22280
2010-06-15 16:15:17 +00:00
Eelco Dolstra e2dbfbdcf4 * Use writeback caching for virtual disks instead of writethrough
caching.  This makes a huge performance difference (e.g. from 4 MB/s
  `dd' throughput to 140 MB/s on the Hydra machines).  As the QEMU
  manual says: "Some block drivers perform badly with
  ‘cache=writethrough’, most notably, qcow2."

svn path=/nixos/branches/boot-order/; revision=22248
2010-06-13 23:36:55 +00:00
Eelco Dolstra 156ba2def2 * Don't use the "kvm-clock" clock source because it's unreliable.
When starting multiple VMs, some will have perfectly synchronised
  clocks, while others will have their clocks run much slower (say, a
  factor of 5).

svn path=/nixos/branches/boot-order/; revision=22195
2010-06-09 13:15:15 +00:00
Eelco Dolstra c1ecdf708f * Put the hostname of the VM in the window title.
svn path=/nixos/branches/boot-order/; revision=22191
2010-06-09 10:51:05 +00:00
Eelco Dolstra 085a47c88a * Bind mounts should have filesystem type "none" to prevent an
invocation of "fsck.auto" at boot time.

svn path=/nixos/branches/boot-order/; revision=22166
2010-06-07 12:16:59 +00:00
Eelco Dolstra dc49a0ce3f * Don't use klibc in the initrd. It's simpler (and slightly smaller)
to use the standard (coreutils) tools.
* Use util-linux's `switch_root' to switch over to the target root
  FS.  It automatically moves over the /dev, /proc and /sys from stage
  1, so stage 2 doesn't need to set them up again.

svn path=/nixos/trunk/; revision=22085
2010-06-01 15:53:24 +00:00
Eelco Dolstra 4dac9e5814 * Allow more complex network topologies in distributed tests. Each
machine can now declare an option `virtualisation.vlans' that causes
  it to have network interfaces connected to each listed virtual
  network.  For instance,

    virtualisation.vlans = [ 1 2 ];

  causes the machine to have two interfaces (in addition to eth0, used
  by the test driver to control the machine): eth1 connected to
  network 1 with IP address 192.168.1.<i>, and eth2 connected to
  network 2 with address 192.168.2.<i> (where <i> is the index of the
  machine in the `nodes' attribute set).  On the other hand,
  
    virtualisation.vlans = [ 2 ];

  causes the machine to only have an eth1 connected to network 2 with
  address 192.168.2.<i>.  So each virtual network <n> is assigned the
  IP range 192.168.<n>.0/24.

  Each virtual network is implemented using a separate multicast
  address on the host, so guests really cannot talk to networks to
  which they are not connected.

* Added a simple NAT test to demonstrate this.

* Added an option `virtualisation.qemu.options' to specify QEMU
  command-line options.  Used to factor out some commonality between
  the test driver script and the interactive test script.

svn path=/nixos/trunk/; revision=21928
2010-05-20 21:07:32 +00:00
Eelco Dolstra ad8ed39285 * It should not be necessary to run ntpd in the guest.
svn path=/nixos/trunk/; revision=21925
2010-05-20 14:51:46 +00:00
Rob Vermaas 310eefffe7 added virtualisation.diskSize option to specify default image size of disk in qemu-kvm vm
svn path=/nixos/trunk/; revision=21422
2010-04-29 12:37:26 +00:00
Rob Vermaas 94e36ec1c7 virtualisation/qemu-kvm.nix: use noacl option for hostfs mount
svn path=/nixos/trunk/; revision=21129
2010-04-16 15:53:54 +00:00
Rob Vermaas 46b109e97e revert previous commit
svn path=/nixos/trunk/; revision=21128
2010-04-16 15:45:59 +00:00
Rob Vermaas b75d15a9a8 virtualisation: add option to switch off readonly host fs in vm
svn path=/nixos/trunk/; revision=21126
2010-04-16 15:09:47 +00:00
Ludovic Courtès 8e16742b79 Update users of `services.sshd'.
svn path=/nixos/trunk/; revision=20575
2010-03-11 17:02:53 +00:00
Eelco Dolstra fc583b7054 * When QEMU encounters a "disk full" condition on the host filesystem,
its default behaviour is to stop the emulator (i.e. suspend the VM).
  For automated tests, this is bad, because is makes the VM appear to
  hang without any error message.  The "werror=report" flag causes
  QEMU to report the problem to the VM.  As a side effect QEMU exits
  very elegantly:

    [    2.308668] end_request: I/O error, dev vda, sector 534400
    [    2.309611] Buffer I/O error on device vda, logical block 66800
    ...
    *** glibc detected *** /nix/store/yhngqrww53j0aw7z7v4bv948x5g5fc3d-qemu-kvm-0.12.1.2/bin/qemu-system-x86_64: double free or corruption (!prev): 0x08e3e040 ***
    Aborted

  So I guess we now depend on a bug in QEMU :-)

svn path=/nixos/trunk/; revision=19703
2010-01-27 10:36:43 +00:00
Eelco Dolstra 32995b3d36 * Make the AMI disk a bit bigger. Thanks to sparse images and
compression this shouldn't be expensive.

svn path=/nixos/trunk/; revision=19647
2010-01-25 10:40:08 +00:00
Eelco Dolstra cb728f833f svn path=/nixos/trunk/; revision=19624 2010-01-22 21:07:06 +00:00
Eelco Dolstra 9094ecb546 * Some hacks to get the image to work with newer EC2 kernels/initrds.
svn path=/nixos/trunk/; revision=19622
2010-01-22 20:22:40 +00:00