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