Moin, setting up Xen with FAI seems to work, the only drawback is that you have to skip the partition task (Xen doesn't support whole disks, only single partitions seem to work).
for those who haven't heard about xen: it is a machine virtualizer a bit similar to the vmware server product line. In contrary to vmware, it doesn't emulate hardware (like hdd controllers or gfx cards), which has the drawback that the OS has to be modified to make calls to the vmm instead, but should lead to much higher performance (haven't benchmarked it with fai installations yet, but a kernel compilation "benchmark" supports their claims so far). For everyone wanting to test it: - download xen from http://www.cl.cam.ac.uk/Research/SRG/netos/xen/index.html - build it according to the supplied documentation - copy the attached experimental.xen to /etc/xen/experimental, fill in the correct addresses and virtual blockdevice configuration. - use the attached hook partition.XEN (and maybe re-fit it for your needs) - put the virtual test machine into the class XEN - start playing around For everyone wondering about the kernel command line containing "LD_ASSUME_KERNEL=2.4.10": it is just a quick hack to keep ld.so from linking in the tls-supporting libc, which would be connected with huge performance drawbacks within xen. -- c u henning
# -*- mode: python; -*- #============================================================================ # Python configuration setup for 'xm create'. # This script sets the parameters used when a domain is created using 'xm create'. # You use a separate script for each domain you want to create, or # you can set the parameters for the domain on the xm command line. #============================================================================ #---------------------------------------------------------------------------- # Kernel image file. kernel = "/boot/vmlinuz-2.6.10-xenU" # Optional ramdisk. #ramdisk = "/boot/initrd.gz" # The domain build function. Default is 'linux'. #builder='linux' # Initial memory allocation (in megabytes) for the new domain. memory = 192 # A name for your domain. All domains must have different names. name = "experimental" # Which CPU to start domain on? #cpu = -1 # leave to Xen to pick #---------------------------------------------------------------------------- # Define network interfaces. # Number of network interfaces. Default is 1. #nics=1 # Optionally define mac and/or bridge for the network interfaces. # Random MACs are assigned if not given. #vif = [ 'mac=aa:00:00:00:00:11, bridge=xen-br0' ] #---------------------------------------------------------------------------- # Define the disk devices you want the domain to have access to, and # what you want them accessible as. # Each disk entry is of the form phy:UNAME,DEV,MODE # where UNAME is the device, DEV is the device name the domain will see, # and MODE is r for read-only, w for read-write. disk = [ 'phy:hdb6,hda1,w' , 'phy:hdb5,hda2,w' ] #---------------------------------------------------------------------------- # Set the kernel command line for the new domain. # You only need to define the IP parameters and hostname if the domain's # IP config doesn't, e.g. in ifcfg-eth0 or via DHCP. # You can use 'extra' to set the runlevel and custom environment # variables used by custom rc scripts (e.g. VMID=, usr= ). # Set if you want dhcp to allocate the IP address. #dhcp="dhcp" ip = "1.2.3.4" # Set netmask. netmask= "255.255.255.0" # Set default gateway. gateway= "5.6.7.8" # Set the hostname. hostname= "experimental" # Set root device. #root = "/dev/hda1 ro" # Root device for nfs. root = "/dev/nfs" # The nfs server. nfs_server = '9.10.11.12' # Root directory on the nfs server. nfs_root = '/srv/fai/nfsroot' # Sets runlevel 4. extra = "LD_ASSUME_KERNEL=2.4.10" #---------------------------------------------------------------------------- # Set according to whether you want the domain restarted when it exits. # The default is 'onreboot', which restarts the domain when it shuts down # with exit code reboot. # Other values are 'always', and 'never'. #restart = 'onreboot' #============================================================================
echo y | mkreiserfs /dev/hda1 > /dev/null mkswap /dev/hda2 > /dev/null cat > /tmp/fai/fstab <<EOF /dev/hda1 / reiserfs defaults 0 0 /dev/hda2 none swap rw 0 0 EOF echo "#!" > $diskvar touch $LOGDIR/skip.partition