Ryan Grimm
2006-Aug-21 20:55 UTC
[Xen-devel] [PATCH 6 of 6] dm-userspace backend script and xmexample
# HG changeset patch # User Ryan Grimm <grimm@us.ibm.com> # Date 1156190591 18000 # Node ID ac06ebd033aa5f62ff18cd1e21b21e19c67f04b9 # Parent 77a518e8f44d1c0c89dcb93e5a3713da6c5e6131 dm-userspace backend script and xmexample Signed-off-by: Ryan Grimm <grimm@us.ibm.com> Signed-off-by: Dan Smith <danms@us.ibm.com> diff -r 77a518e8f44d -r ac06ebd033aa tools/examples/Makefile --- a/tools/examples/Makefile Mon Aug 21 15:03:10 2006 -0500 +++ b/tools/examples/Makefile Mon Aug 21 15:03:11 2006 -0500 @@ -18,6 +18,7 @@ XEN_CONFIGS += xmexample2 XEN_CONFIGS += xmexample2 XEN_CONFIGS += xmexample.hvm XEN_CONFIGS += xmexample.vti +XEN_CONFIGS += xmexample.dmu XEN_CONFIGS += xend-pci-quirks.sxp XEN_CONFIGS += xend-pci-permissive.sxp @@ -32,6 +33,7 @@ XEN_SCRIPTS += vtpm vtpm-delete XEN_SCRIPTS += vtpm vtpm-delete XEN_SCRIPTS += xen-hotplug-cleanup XEN_SCRIPTS += external-device-migrate +XEN_SCRIPTS += block-dmu XEN_SCRIPT_DATA = xen-script-common.sh locking.sh logging.sh XEN_SCRIPT_DATA += xen-hotplug-common.sh xen-network-common.sh vif-common.sh XEN_SCRIPT_DATA += block-common.sh vtpm-common.sh vtpm-hotplug-common.sh diff -r 77a518e8f44d -r ac06ebd033aa tools/examples/README --- a/tools/examples/README Mon Aug 21 15:03:10 2006 -0500 +++ b/tools/examples/README Mon Aug 21 15:03:11 2006 -0500 @@ -13,6 +13,7 @@ block-common.sh - sourced by block, block-common.sh - sourced by block, block-* block-enbd - binds/unbinds network block devices block-nbd - binds/unbinds network block devices +block-dmu - binds/unbinds dm-userspace devices external-device-migrate - called by xend for migrating external devices locking.sh - locking functions to prevent concurrent access to critical sections inside script files @@ -45,3 +46,5 @@ xmexample.hvm - a configuration sc xmexample.hvm - a configuration script for creating a hvm domain with ''xm create'' xmexample.vti - a configuration script for creating a domain on vti +xmexample.dmu - a configuration script for creating a domain with + dm-userspace diff -r 77a518e8f44d -r ac06ebd033aa tools/examples/block-dmu --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tools/examples/block-dmu Mon Aug 21 15:03:11 2006 -0500 @@ -0,0 +1,49 @@ +#!/bin/sh +# +# Copyright (C) International Business Machines Corp., 2006 +# Author: Ryan Grimm <grimm@us.ibm.com> + +dir=$(dirname "$0") +. "$dir/block-common.sh" + +p=$(xenstore_read "$XENBUS_PATH/params") +mode=$(xenstore_read "$XENBUS_PATH/mode") + +case "$command" in + add) + plugin=$(echo $p | cut -d: -f1) + dmu_file=$(echo $p | cut -d: -f2) + base_file=$(echo $p | cut -d: -f3) + + domain_name=$(xenstore_read "$XENBUS_PATH/domain") + domain_dev=$(xenstore_read "$XENBUS_PATH/dev") + target="$domain_name""_""$domain_dev" + md_dev="/dev/mapper/$target" + + lsmod | grep -q dm_user || modprobe dm-user || fatal \ + ''cannot load module dm-user'' + + if [ ! -e $dmu_file ] + then + dscow_tool -c $dmu_file $base_file || fatal \ + ''creation of $dmu_file failed'' + fi + + cowd --sync --pidfile=/var/run/cowd.$target.pid -p $plugin \ + $target $dmu_file || fatal ''cowd failed'' + + xenstore_write "$XENBUS_PATH/node" "$target" + + claim_lock "block" + write_dev $md_dev + release_lock "block" + exit 0 + ;; + + remove) + node=$(xenstore_read "$XENBUS_PATH/node") + cowd_pid=$(cat "/var/run/cowd.$node.pid") + kill $cowd_pid + exit 0 + ;; +esac diff -r 77a518e8f44d -r ac06ebd033aa tools/examples/xmexample.dmu --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tools/examples/xmexample.dmu Mon Aug 21 15:03:11 2006 -0500 @@ -0,0 +1,151 @@ +# -*- 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-xen" + +# Optional ramdisk. +#ramdisk = "/boot/initrd.gz" + +# The domain build function. Default is ''linux''. +#builder=''linux'' + +# Initial memory allocation (in megabytes) for the new domain. +# +# WARNING: Creating a domain with insufficient memory may cause out of +# memory errors. The domain needs enough memory to boot kernel +# and modules. Allocating less than 32MBs is not recommended. +memory = 128 + +# A name for your domain. All domains must have different names. +name = "ExampleDmuDomain" + +# 128-bit UUID for the domain. The default behavior is to generate a new UUID +# on each call to ''xm create''. +#uuid = "06ed00fe-1162-4fc4-b5d8-11993ee4a8b9" + +# List of which CPUS this domain is allowed to use, default Xen picks +#cpus = "" # leave to Xen to pick +#cpus = "0" # all vcpus run on CPU0 +#cpus = "0-3,5,^1" # run on cpus 0,2,3,5 + +# Number of Virtual CPUS to use, default is 1 +#vcpus = 1 + +#---------------------------------------------------------------------------- +# Define network interfaces. + +# By default, no network interfaces are configured. You may have one created +# with sensible defaults using an empty vif clause: +# +# vif = [ '''' ] +# +# or optionally override backend, bridge, ip, mac, script, type, or vifname: +# +# vif = [ ''mac=00:16:3e:00:00:11, bridge=xenbr0'' ] +# +# or more than one interface may be configured: +# +# vif = [ '''', ''bridge=xenbr1'' ] + +vif = [ '''' ] + +#---------------------------------------------------------------------------- +# 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. + +# for dmu, the syntax is dmu:<plugin>:<cow file>:<base file> +# if <cow file> does not exist, it is created and <base file> is used +# as base. if <cow file> does exist, <base file> is ignored. +disk = [ ''dmu:dscow:/path/to/domain.dscow:/path/to/domain.img,hda1,w''] + +#---------------------------------------------------------------------------- +# Define to which TPM instance the user domain should communicate. +# The vtpm entry is of the form ''instance=INSTANCE,backend=DOM'' +# where INSTANCE indicates the instance number of the TPM the VM +# should be talking to and DOM provides the domain where the backend +# is located. +# Note that no two virtual machines should try to connect to the same +# TPM instance. The handling of all TPM instances does require +# some management effort in so far that VM configration files (and thus +# a VM) should be associated with a TPM instance throughout the lifetime +# of the VM / VM configuration file. The instance number must be +# greater or equal to 1. +#vtpm = [ ''instance=1,backend=0'' ] + +#---------------------------------------------------------------------------- +# 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" +# Set netmask. +#netmask+# Set default gateway. +#gateway+# Set the hostname. +#hostname= "vm%d" % vmid + +# Set root device. +root = "/dev/hda1 ro" + +# Root device for nfs. +#root = "/dev/nfs" +# The nfs server. +#nfs_server = ''169.254.1.0'' +# Root directory on the nfs server. +#nfs_root = ''/full/path/to/root/directory'' + +# Sets runlevel 4. +extra = "4" + +#---------------------------------------------------------------------------- +# Configure the behaviour when a domain exits. There are three ''reasons'' +# for a domain to stop: poweroff, reboot, and crash. For each of these you +# may specify: +# +# "destroy", meaning that the domain is cleaned up as normal; +# "restart", meaning that a new domain is started in place of the old +# one; +# "preserve", meaning that no clean-up is done until the domain is +# manually destroyed (using xm destroy, for example); or +# "rename-restart", meaning that the old domain is not cleaned up, but is +# renamed and a new domain started in its place. +# +# The default is +# +# on_poweroff = ''destroy'' +# on_reboot = ''restart'' +# on_crash = ''restart'' +# +# For backwards compatibility we also support the deprecated option restart +# +# restart = ''onreboot'' means on_poweroff = ''destroy'' +# on_reboot = ''restart'' +# on_crash = ''destroy'' +# +# restart = ''always'' means on_poweroff = ''restart'' +# on_reboot = ''restart'' +# on_crash = ''restart'' +# +# restart = ''never'' means on_poweroff = ''destroy'' +# on_reboot = ''destroy'' +# on_crash = ''destroy'' + +#on_poweroff = ''destroy'' +#on_reboot = ''restart'' +#on_crash = ''restart'' + +#=========================================================================== _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
Ryan Grimm
2006-Aug-22 17:05 UTC
Re: [Xen-devel] [PATCH 6 of 6] dm-userspace backend script and xmexample
Here''s the updated patch, just added to xmexample1 instead of a whole new example. Signed-off-by: Ryan Grimm <grimm@us.ibm.com> Signed-off-by: Dan Smith <danms@us.ibm.com> diff -r 5e07f07351fd -r 1e3f83f3baab tools/examples/Makefile --- a/tools/examples/Makefile Tue Aug 22 11:49:18 2006 -0500 +++ b/tools/examples/Makefile Tue Aug 22 12:02:22 2006 -0500 @@ -32,6 +32,7 @@ XEN_SCRIPTS += vtpm vtpm-delete XEN_SCRIPTS += vtpm vtpm-delete XEN_SCRIPTS += xen-hotplug-cleanup XEN_SCRIPTS += external-device-migrate +XEN_SCRIPTS += block-dmu XEN_SCRIPT_DATA = xen-script-common.sh locking.sh logging.sh XEN_SCRIPT_DATA += xen-hotplug-common.sh xen-network-common.sh vif-common.sh XEN_SCRIPT_DATA += block-common.sh vtpm-common.sh vtpm-hotplug-common.sh diff -r 5e07f07351fd -r 1e3f83f3baab tools/examples/README --- a/tools/examples/README Tue Aug 22 11:49:18 2006 -0500 +++ b/tools/examples/README Tue Aug 22 12:02:22 2006 -0500 @@ -13,6 +13,7 @@ block-common.sh - sourced by block, block-common.sh - sourced by block, block-* block-enbd - binds/unbinds network block devices block-nbd - binds/unbinds network block devices +block-dmu - binds/unbinds dm-userspace devices external-device-migrate - called by xend for migrating external devices locking.sh - locking functions to prevent concurrent access to critical sections inside script files diff -r 5e07f07351fd -r 1e3f83f3baab tools/examples/xmexample1 --- a/tools/examples/xmexample1 Tue Aug 22 11:49:18 2006 -0500 +++ b/tools/examples/xmexample1 Tue Aug 22 12:02:22 2006 -0500 @@ -64,6 +64,13 @@ vif = [ '''' ] # and MODE is r for read-only, w for read-write. disk = [ ''phy:hda1,hda1,w'' ] + +#---------------------------------------------------------------------------- +# Using a dm-userspace backed device +# for dmu, the syntax is dmu:<plugin>:<cow file>:<base file> +# if <cow file> does not exist, it is created and <base file> is used +# as a base. if <cow file> does exist, <base file> is ignored. +# disk = [ ''dmu:dscow:/path/to/domain.dscow:/path/to/domain.img,hda1,w''] #---------------------------------------------------------------------------- # Define to which TPM instance the user domain should communicate. diff -r 5e07f07351fd -r 1e3f83f3baab tools/examples/block-dmu --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tools/examples/block-dmu Tue Aug 22 12:02:22 2006 -0500 @@ -0,0 +1,49 @@ +#!/bin/sh +# +# Copyright (C) International Business Machines Corp., 2006 +# Author: Ryan Grimm <grimm@us.ibm.com> + +dir=$(dirname "$0") +. "$dir/block-common.sh" + +p=$(xenstore_read "$XENBUS_PATH/params") +mode=$(xenstore_read "$XENBUS_PATH/mode") + +case "$command" in + add) + plugin=$(echo $p | cut -d: -f1) + dmu_file=$(echo $p | cut -d: -f2) + base_file=$(echo $p | cut -d: -f3) + + domain_name=$(xenstore_read "$XENBUS_PATH/domain") + domain_dev=$(xenstore_read "$XENBUS_PATH/dev") + target="$domain_name""_""$domain_dev" + md_dev="/dev/mapper/$target" + + lsmod | grep -q dm_user || modprobe dm-user || fatal \ + ''cannot load module dm-user'' + + if [ ! -e $dmu_file ] + then + dscow_tool -c $dmu_file $base_file || fatal \ + ''creation of $dmu_file failed'' + fi + + cowd --sync --pidfile=/var/run/cowd.$target.pid -p $plugin \ + $target $dmu_file || fatal ''cowd failed'' + + xenstore_write "$XENBUS_PATH/node" "$target" + + claim_lock "block" + write_dev $md_dev + release_lock "block" + exit 0 + ;; + + remove) + node=$(xenstore_read "$XENBUS_PATH/node") + cowd_pid=$(cat "/var/run/cowd.$node.pid") + kill $cowd_pid + exit 0 + ;; +esac -- Thanks, Ryan Grimm IBM Linux Technology Center _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel