KVM Forum talk.
authorRichard W.M. Jones <rjones@redhat.com>
Wed, 31 Oct 2012 10:42:17 +0000 (10:42 +0000)
committerRichard W.M. Jones <rjones@redhat.com>
Tue, 6 Nov 2012 10:24:06 +0000 (11:24 +0100)
33 files changed:
2012-kvm-forum/.gitignore [new file with mode: 0644]
2012-kvm-forum/0000-introduction.html [new file with mode: 0644]
2012-kvm-forum/0100-overview.html [new file with mode: 0644]
2012-kvm-forum/0200-overview2.html [new file with mode: 0644]
2012-kvm-forum/0300-overview3.html [new file with mode: 0644]
2012-kvm-forum/0400-guestfish.d/.dir [new file with mode: 0644]
2012-kvm-forum/0400-guestfish.term [new file with mode: 0755]
2012-kvm-forum/0500-new-features.html [new file with mode: 0644]
2012-kvm-forum/0600-new-features-svirt.html [new file with mode: 0644]
2012-kvm-forum/0800-future.html [new file with mode: 0644]
2012-kvm-forum/0900-summary.html [new file with mode: 0644]
2012-kvm-forum/README [new file with mode: 0644]
2012-kvm-forum/bashrc [new file with mode: 0644]
2012-kvm-forum/cdrom.png [new file with mode: 0644]
2012-kvm-forum/code.js [new file with mode: 0644]
2012-kvm-forum/disk.png [new file with mode: 0644]
2012-kvm-forum/file.png [new file with mode: 0644]
2012-kvm-forum/fish.svg [new file with mode: 0644]
2012-kvm-forum/flash.png [new file with mode: 0644]
2012-kvm-forum/floppy.png [new file with mode: 0644]
2012-kvm-forum/functions [new file with mode: 0644]
2012-kvm-forum/handout/.gitignore [new file with mode: 0644]
2012-kvm-forum/handout/2012-kvm-forum-rjones-libguestfs.tex [new file with mode: 0644]
2012-kvm-forum/handout/Makefile [new file with mode: 0644]
2012-kvm-forum/kvm-forum.png [new file with mode: 0644]
2012-kvm-forum/newfeatures-svirt.svg [new file with mode: 0644]
2012-kvm-forum/newfeatures.svg [new file with mode: 0644]
2012-kvm-forum/notes.txt [new file with mode: 0644]
2012-kvm-forum/openstack.png [new file with mode: 0644]
2012-kvm-forum/overview.svg [new file with mode: 0644]
2012-kvm-forum/redhat.png [new file with mode: 0644]
2012-kvm-forum/run [new file with mode: 0755]
2012-kvm-forum/style.css [new file with mode: 0644]

diff --git a/2012-kvm-forum/.gitignore b/2012-kvm-forum/.gitignore
new file mode 100644 (file)
index 0000000..b3e8227
--- /dev/null
@@ -0,0 +1,3 @@
+*.d/disk.img
+bindings
+history
diff --git a/2012-kvm-forum/0000-introduction.html b/2012-kvm-forum/0000-introduction.html
new file mode 100644 (file)
index 0000000..d9860d7
--- /dev/null
@@ -0,0 +1,18 @@
+<link rel="stylesheet" href="style.css" type="text/css"/>
+<script src="code.js" type="text/javascript"></script>
+
+<div id="titlepage">
+<p class="title">
+  libguestfs <br/>
+  <br/>
+  tools for viewing and modifying <br/>
+  virtual machine disk images
+</p>
+<p><author>
+  Richard W.M. Jones <br/>
+  <small>rjones @ redhat.com</small>
+</author></p>
+</div>
+
+<img style="position: absolute; bottom: 5px; left: 276px;"
+     src="kvm-forum.png" />
diff --git a/2012-kvm-forum/0100-overview.html b/2012-kvm-forum/0100-overview.html
new file mode 100644 (file)
index 0000000..d931f9d
--- /dev/null
@@ -0,0 +1,43 @@
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<link rel="stylesheet" href="style.css" type="text/css"/>
+<script src="code.js" type="text/javascript"></script>
+
+<h1>Library, API, tools</h1>
+
+<img src="overview.svg"
+     style="position: absolute; left: 10px; top: 100px;" />
+
+<!-- XXX WebKit won't render any images embedded in the SVG above.
+     As a nasty hack, place the images which are supposed to be
+     in the SVG on top. -->
+
+<img src="cdrom.png"
+     style="position: absolute; left: 212px; top: 120px; z-index: 10;" />
+<img src="disk.png"
+     style="position: absolute; left: 272px; top: 120px; z-index: 10;" />
+<img src="file.png"
+     style="position: absolute; left: 332px; top: 120px; z-index: 10;" />
+<img src="flash.png"
+     style="position: absolute; left: 392px; top: 120px; z-index: 10;" />
+<img src="floppy.png"
+     style="position: absolute; left: 444px; top: 120px; z-index: 10;" />
+<img src="openstack.png"
+     style="position: absolute; left: 360px; top: 480px; z-index: 10;" />
+
+<!-- XXX End of WebKit hack -->
+
+<!-- Now mask out parts of the diagram. -->
+
+<div
+     style="position: absolute;
+            left: 10px; top: 100px;
+            width: 600px; height: 140px;
+            background-color: white;
+            z-index: 20;" />
+
+<div
+     style="position: absolute;
+            left: 10px; top: 220px;
+            width: 800px; height: 320px;
+            background-color: white;
+            z-index: 20;" />
diff --git a/2012-kvm-forum/0200-overview2.html b/2012-kvm-forum/0200-overview2.html
new file mode 100644 (file)
index 0000000..a41df96
--- /dev/null
@@ -0,0 +1,42 @@
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<link rel="stylesheet" href="style.css" type="text/css"/>
+<script src="code.js" type="text/javascript"></script>
+
+<h1>Library, API, tools</h1>
+
+<img src="overview.svg"
+     style="position: absolute; left: 10px; top: 100px;" />
+
+<!-- XXX WebKit won't render any images embedded in the SVG above.
+     As a nasty hack, place the images which are supposed to be
+     in the SVG on top. -->
+
+<img src="cdrom.png"
+     style="position: absolute; left: 212px; top: 120px; z-index: 10;" />
+<img src="disk.png"
+     style="position: absolute; left: 272px; top: 120px; z-index: 10;" />
+<img src="file.png"
+     style="position: absolute; left: 332px; top: 120px; z-index: 10;" />
+<img src="flash.png"
+     style="position: absolute; left: 392px; top: 120px; z-index: 10;" />
+<img src="floppy.png"
+     style="position: absolute; left: 444px; top: 120px; z-index: 10;" />
+<img src="openstack.png"
+     style="position: absolute; left: 360px; top: 480px; z-index: 10;" />
+
+<!-- XXX End of WebKit hack -->
+
+<!-- Now mask out parts of the diagram. -->
+
+<div
+     style="position: absolute;
+            left: 10px; top: 100px;
+            width: 600px; height: 140px;
+            z-index: 20;" />
+
+<div
+     style="position: absolute;
+            left: 10px; top: 220px;
+            width: 800px; height: 320px;
+            background-color: white;
+            z-index: 20;" />
diff --git a/2012-kvm-forum/0300-overview3.html b/2012-kvm-forum/0300-overview3.html
new file mode 100644 (file)
index 0000000..c36b85c
--- /dev/null
@@ -0,0 +1,27 @@
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<link rel="stylesheet" href="style.css" type="text/css"/>
+<script src="code.js" type="text/javascript"></script>
+
+<h1>Library, API, tools</h1>
+
+<img src="overview.svg"
+     style="position: absolute; left: 10px; top: 100px;" />
+
+<!-- XXX WebKit won't render any images embedded in the SVG above.
+     As a nasty hack, place the images which are supposed to be
+     in the SVG on top. -->
+
+<img src="cdrom.png"
+     style="position: absolute; left: 212px; top: 120px; z-index: 10;" />
+<img src="disk.png"
+     style="position: absolute; left: 272px; top: 120px; z-index: 10;" />
+<img src="file.png"
+     style="position: absolute; left: 332px; top: 120px; z-index: 10;" />
+<img src="flash.png"
+     style="position: absolute; left: 392px; top: 120px; z-index: 10;" />
+<img src="floppy.png"
+     style="position: absolute; left: 444px; top: 120px; z-index: 10;" />
+<img src="openstack.png"
+     style="position: absolute; left: 360px; top: 480px; z-index: 10;" />
+
+<!-- XXX End of WebKit hack -->
diff --git a/2012-kvm-forum/0400-guestfish.d/.dir b/2012-kvm-forum/0400-guestfish.d/.dir
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/2012-kvm-forum/0400-guestfish.term b/2012-kvm-forum/0400-guestfish.term
new file mode 100755 (executable)
index 0000000..291ac5c
--- /dev/null
@@ -0,0 +1,13 @@
+#!/bin/bash -
+
+source functions
+
+# History.
+remember 'ls -l -h'
+remember 'file disk.img'
+remember 'guestfish -a disk.img -i --rw'
+
+echo "Example: Examine a disk image"
+
+cd 0400-guestfish.d
+terminal
diff --git a/2012-kvm-forum/0500-new-features.html b/2012-kvm-forum/0500-new-features.html
new file mode 100644 (file)
index 0000000..1dca6e0
--- /dev/null
@@ -0,0 +1,25 @@
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<link rel="stylesheet" href="style.css" type="text/css"/>
+<script src="code.js" type="text/javascript"></script>
+
+<h1>New in libguestfs 1.20</h1>
+
+<img src="newfeatures.svg"
+     style="position: absolute; left: 10px; top: 100px;" />
+
+<!-- XXX WebKit won't render any images embedded in the SVG above.
+     As a nasty hack, place the images which are supposed to be
+     in the SVG on top. -->
+
+<img src="cdrom.png"
+     style="position: absolute; left: 30px; top: 120px; z-index: 10;" />
+<img src="disk.png"
+     style="position: absolute; left: 90px; top: 120px; z-index: 10;" />
+<img src="file.png"
+     style="position: absolute; left: 150px; top: 120px; z-index: 10;" />
+<img src="flash.png"
+     style="position: absolute; left: 210px; top: 120px; z-index: 10;" />
+<img src="floppy.png"
+     style="position: absolute; left: 262px; top: 120px; z-index: 10;" />
+
+<!-- XXX End of WebKit hack -->
diff --git a/2012-kvm-forum/0600-new-features-svirt.html b/2012-kvm-forum/0600-new-features-svirt.html
new file mode 100644 (file)
index 0000000..2b82459
--- /dev/null
@@ -0,0 +1,25 @@
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<link rel="stylesheet" href="style.css" type="text/css"/>
+<script src="code.js" type="text/javascript"></script>
+
+<h1>New in libguestfs 1.20</h1>
+
+<img src="newfeatures-svirt.svg"
+     style="position: absolute; left: 10px; top: 100px;" />
+
+<!-- XXX WebKit won't render any images embedded in the SVG above.
+     As a nasty hack, place the images which are supposed to be
+     in the SVG on top. -->
+
+<img src="cdrom.png"
+     style="position: absolute; left: 30px; top: 120px; z-index: 10;" />
+<img src="disk.png"
+     style="position: absolute; left: 90px; top: 120px; z-index: 10;" />
+<img src="file.png"
+     style="position: absolute; left: 150px; top: 120px; z-index: 10;" />
+<img src="flash.png"
+     style="position: absolute; left: 210px; top: 120px; z-index: 10;" />
+<img src="floppy.png"
+     style="position: absolute; left: 262px; top: 120px; z-index: 10;" />
+
+<!-- XXX End of WebKit hack -->
diff --git a/2012-kvm-forum/0800-future.html b/2012-kvm-forum/0800-future.html
new file mode 100644 (file)
index 0000000..90c8a94
--- /dev/null
@@ -0,0 +1,31 @@
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<link rel="stylesheet" href="style.css" type="text/css"/>
+<script src="code.js" type="text/javascript"></script>
+
+<h1>Future work</h1>
+
+<ul>
+
+<li> TRIM / SCSI UNMAP from guest to host <small><b>(in progress)</b></small>
+
+<li> 9pfs mapping file
+
+<li> Finer control over <code>-drive snapshot=on</code>
+
+<li> Faster <code>qemu-img create</code> command
+
+<pre style="font-size: smaller;">
+$ time qemu-img create -f qcow2 -b rhel6.raw test.qcow2
+...
+real    <b>0m0.519s</b>
+...
+</pre>
+
+<li> Safer <code>qemu-img info</code> command <br/>
+     <small><b>(qemu: done, libguestfs: not yet impl)</b></small>
+
+<li> <q>All-up</q> testing should gate commits
+
+<li> Nested VMs (that work)
+
+</ul>
diff --git a/2012-kvm-forum/0900-summary.html b/2012-kvm-forum/0900-summary.html
new file mode 100644 (file)
index 0000000..34b50b4
--- /dev/null
@@ -0,0 +1,31 @@
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+<link rel="stylesheet" href="style.css" type="text/css"/>
+<script src="code.js" type="text/javascript"></script>
+
+<h1>libguestfs</h1>
+
+<img id="fish" src="fish.svg"/>
+
+<p>
+<a href="http://libguestfs.org/">libguestfs.org</a>
+<br/>
+<br/>
+</p>
+
+<p>
+PDF handout on the Linux Foundation site or
+  <a href="http://rwmj.wordpress.com">rwmj.wordpress.com</a>
+<br/>
+<br/>
+</p>
+
+<p>
+Available in your favourite Linux distribution.
+<br/>
+<br/>
+</p>
+
+<p>
+<a href="http://git.annexia.org/">git.annexia.org</a> &rarr; libguestfs-talks
+<small>(in Tech Talk format)</small>
+</p>
diff --git a/2012-kvm-forum/README b/2012-kvm-forum/README
new file mode 100644 (file)
index 0000000..b540975
--- /dev/null
@@ -0,0 +1,11 @@
+This is a talk given at the 2012 KVM Forum in Barcelona.
+
+https://events.linuxfoundation.org/events/kvm-forum
+
+The whole talk is designed to take around 15-20 minutes, with lots of
+time at the end for open discussion.
+
+To run the talk you'll need Tech Talk PSE >= 1.1.0.  If you don't have
+Tech Talk then just open up the HTML slides in a web browser.
+
+To start the talk, use `./run'.
diff --git a/2012-kvm-forum/bashrc b/2012-kvm-forum/bashrc
new file mode 100644 (file)
index 0000000..4c6a3c6
--- /dev/null
@@ -0,0 +1,17 @@
+# -*- shell-script -*-
+
+# Colour ls.
+if [ -f /etc/profile.d/colorls.sh ]; then . /etc/profile.d/colorls.sh; fi
+
+# Fancy prompt colours (see
+# https://wiki.archlinux.org/index.php/Color_Bash_Prompt)
+promptcol='\e[0;32m'      ;# colour for the prompt
+commandcol='\e[1;31m'     ;# colour for the typed command
+outputcol='\e[0m'         ;# colour for command output
+
+export PS1="\n\[$promptcol\]\$ \[$commandcol\]"
+
+trap 'echo -ne "$outputcol"' DEBUG
+
+# Load key bindings (if any).
+bind -f $talkdir/bindings
diff --git a/2012-kvm-forum/cdrom.png b/2012-kvm-forum/cdrom.png
new file mode 100644 (file)
index 0000000..9c241cd
Binary files /dev/null and b/2012-kvm-forum/cdrom.png differ
diff --git a/2012-kvm-forum/code.js b/2012-kvm-forum/code.js
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/2012-kvm-forum/disk.png b/2012-kvm-forum/disk.png
new file mode 100644 (file)
index 0000000..087810c
Binary files /dev/null and b/2012-kvm-forum/disk.png differ
diff --git a/2012-kvm-forum/file.png b/2012-kvm-forum/file.png
new file mode 100644 (file)
index 0000000..beff2d4
Binary files /dev/null and b/2012-kvm-forum/file.png differ
diff --git a/2012-kvm-forum/fish.svg b/2012-kvm-forum/fish.svg
new file mode 100644 (file)
index 0000000..7768be4
--- /dev/null
@@ -0,0 +1,366 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="392.4054"
+   height="382.01007"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.48.2 r9819"
+   sodipodi:docname="fish.svg"
+   inkscape:export-filename="/home/rjones/fish.png"
+   inkscape:export-xdpi="90"
+   inkscape:export-ydpi="90">
+  <defs
+     id="defs4">
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient6133">
+      <stop
+         style="stop-color:#003555;stop-opacity:1;"
+         offset="0"
+         id="stop6135" />
+      <stop
+         style="stop-color:#003555;stop-opacity:0;"
+         offset="1"
+         id="stop6137" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient5807">
+      <stop
+         id="stop5815"
+         offset="0"
+         style="stop-color:#667200;stop-opacity:0.824;" />
+      <stop
+         style="stop-color:#003555;stop-opacity:0;"
+         offset="1"
+         id="stop5811" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3755"
+       osb:paint="solid">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop3757" />
+    </linearGradient>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath5771">
+      <rect
+         style="fill:#00385a;fill-opacity:1;stroke:#000000;stroke-width:3.24642348;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         id="rect5773"
+         width="277.56537"
+         height="614.0354"
+         x="-372.27765"
+         y="197.69031"
+         transform="scale(-1,1)" />
+    </clipPath>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5807"
+       id="linearGradient5813"
+       x1="97.288727"
+       y1="505.3093"
+       x2="372.27765"
+       y2="505.3093"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5807"
+       id="linearGradient5837"
+       gradientUnits="userSpaceOnUse"
+       x1="97.288727"
+       y1="505.3093"
+       x2="372.27765"
+       y2="505.3093" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5807"
+       id="linearGradient5863"
+       gradientUnits="userSpaceOnUse"
+       x1="97.288727"
+       y1="505.3093"
+       x2="372.27765"
+       y2="505.3093" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6133"
+       id="linearGradient6148"
+       gradientUnits="userSpaceOnUse"
+       x1="-213.63203"
+       y1="502.83923"
+       x2="86.352829"
+       y2="502.83923" />
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath6154">
+      <rect
+         y="104.38155"
+         x="-212.13203"
+         height="809.04236"
+         width="269.76663"
+         id="rect6156"
+         style="fill:#55004b;fill-opacity:0.56578944;stroke:#000000;stroke-width:1.04515815;stroke-opacity:1" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath6158">
+      <rect
+         y="82.402786"
+         x="-350.09845"
+         height="877.35065"
+         width="297.24725"
+         id="rect6160"
+         style="fill:#55004b;fill-opacity:0.56578944;stroke:#000000;stroke-width:1.14247787;stroke-opacity:1"
+         transform="matrix(-0.99997357,0.00727051,0.07963564,0.99682404,0,0)" />
+    </clipPath>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="0.7"
+     inkscape:cx="32.993046"
+     inkscape:cy="176.30928"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer4"
+     showgrid="false"
+     inkscape:window-width="1024"
+     inkscape:window-height="768"
+     inkscape:window-x="0"
+     inkscape:window-y="25"
+     inkscape:window-maximized="0"
+     showguides="true"
+     inkscape:guide-bbox="true"
+     showborder="true"
+     fit-margin-top="10"
+     fit-margin-left="10"
+     fit-margin-right="10"
+     fit-margin-bottom="10" />
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:groupmode="layer"
+     id="layer4"
+     inkscape:label="Sea"
+     style="display:inline"
+     transform="translate(-527.74867,-495.15697)" />
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="Behind body"
+     style="display:inline"
+     transform="translate(-527.74867,-495.15697)" />
+  <g
+     inkscape:groupmode="layer"
+     id="layer5"
+     inkscape:label="XRay"
+     style="display:inline"
+     transform="translate(-527.74867,-495.15697)" />
+  <g
+     inkscape:groupmode="layer"
+     id="layer6"
+     inkscape:label="Reflection"
+     transform="translate(-527.74867,-495.15697)" />
+  <g
+     inkscape:label="Body"
+     inkscape:groupmode="layer"
+     id="layer1"
+     style="display:inline"
+     transform="translate(-527.74867,-495.15697)" />
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="Eye front"
+     style="display:inline"
+     transform="translate(-527.74867,-495.15697)">
+    <g
+       id="g5558"
+       transform="matrix(0.58765056,0,0,0.58765056,480.5769,388.27746)">
+      <path
+         transform="matrix(0.81786061,0,0,0.66227787,0.24941012,157.87012)"
+         sodipodi:type="arc"
+         style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:3;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline"
+         id="path5236"
+         sodipodi:cx="170"
+         sodipodi:cy="408.07648"
+         sodipodi:rx="50.000004"
+         sodipodi:ry="80"
+         d="m 220,408.07648 c 0,44.18278 -22.38576,80 -50,80 -27.61424,0 -50,-35.81722 -50,-80 0,-44.18278 22.38576,-80 50,-80 27.61424,0 50,35.81722 50,80 z" />
+      <path
+         sodipodi:nodetypes="csssc"
+         inkscape:connector-curvature="0"
+         id="path5212"
+         d="m 356.47596,702.64765 c 35.25059,30.1442 33.46701,30.05783 3.06518,65.00969 -30.40184,34.95186 -30.76651,63.13495 -66.0171,32.99076 -35.25059,-30.14419 -84.89558,-22.91496 -54.49375,-57.86682 6.41862,-7.37924 16.94653,-35.01714 25.52275,-39.77594"
+         style="fill:none;stroke:#000000;stroke-width:3;stroke-miterlimit:4;stroke-opacity:1;display:inline" />
+      <path
+         sodipodi:nodetypes="cssc"
+         inkscape:connector-curvature="0"
+         id="path5209"
+         d="m 253.2701,348.48267 c -24.84022,-31.47437 -13.82202,-73.48088 24.60984,-93.82417 38.43187,-20.34329 122.03476,-22.95542 146.87498,8.51895 17.40329,22.05123 -16.90737,65.21372 -33.82788,87.51554"
+         style="fill:none;stroke:#000000;stroke-width:3;stroke-miterlimit:4;stroke-opacity:1;display:inline"
+         transform="matrix(0.92848409,0,0,1.1049775,18.995693,-64.144632)" />
+      <path
+         sodipodi:nodetypes="csssssssc"
+         inkscape:connector-curvature="0"
+         id="path5206"
+         d="m 452.1512,389.35272 c 34.36125,-52.57386 201.93286,-98.13611 235.06535,-43.6125 4.87656,8.02499 -30.64578,47.38951 -26.66482,62.56625 4.68628,17.8656 43.19243,27.27726 48.97383,49.52202 5.69778,21.92301 -49.12182,44.50322 -47.06821,68.73221 2.02663,23.91071 58.82396,52.47829 66.37454,75.2345 8.15271,24.57097 -59.96813,41.85228 -68.41923,59.33786 -7.35455,15.21679 45.73412,31.62827 40.29331,39.95288 C 670.85078,746.76539 484.75578,643.7834 450.873,605.83275"
+         style="fill:none;stroke:#000000;stroke-width:3;stroke-miterlimit:4;stroke-opacity:1;display:inline" />
+      <path
+         sodipodi:nodetypes="csc"
+         inkscape:connector-curvature="0"
+         id="path5283"
+         d="m 475.71429,423.79075 c 0,0 37.86977,-21.98936 58.57142,-28.57142 22.53085,-7.16365 70,-11.42858 70,-11.42858"
+         style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline" />
+      <path
+         sodipodi:nodetypes="csc"
+         inkscape:connector-curvature="0"
+         id="path5304"
+         d="m 488.57143,476.6479 c 0,0 54.92334,-13.24827 82.85714,-17.14286 C 590.81704,456.80186 630,455.21933 630,455.21933"
+         style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline" />
+      <path
+         sodipodi:nodetypes="cscc"
+         inkscape:connector-curvature="0"
+         id="path5306"
+         d="m 490,523.79075 c 0,0 57.82549,33.12294 88.57143,45.71429 C 591.9521,574.98481 620,582.36218 620,582.36218 l 25.71429,5.71429"
+         style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline" />
+      <path
+         sodipodi:nodetypes="csc"
+         inkscape:connector-curvature="0"
+         id="path5308"
+         d="m 471.42857,572.36218 c 0,0 54.96698,37.35923 84.28571,52.85714 14.70463,7.77289 45.71429,20 45.71429,20"
+         style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline" />
+      <g
+         transform="translate(2.9438002,8.3263245)"
+         id="g5380"
+         style="display:inline">
+        <path
+           transform="matrix(0.57134522,0,0,0.66201098,26.64223,138.40707)"
+           d="m 162.85714,412.36218 c 0,10.25672 -7.67512,18.57143 -17.14286,18.57143 -9.46774,0 -17.14286,-8.31471 -17.14286,-18.57143 0,-10.25671 7.67512,-18.57143 17.14286,-18.57143 9.46774,0 17.14286,8.31472 17.14286,18.57143 z"
+           sodipodi:ry="18.571428"
+           sodipodi:rx="17.142857"
+           sodipodi:cy="412.36218"
+           sodipodi:cx="145.71428"
+           id="path5372"
+           style="fill:#000000;fill-opacity:1;stroke:#282828;stroke-width:3;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           sodipodi:type="arc" />
+        <path
+           transform="matrix(0.76389907,0,0,0.80242301,-7.1448579,74.201706)"
+           d="m 153.57143,419.14789 c 0,4.93111 -2.55837,8.92857 -5.71428,8.92857 -3.15592,0 -5.71429,-3.99746 -5.71429,-8.92857 0,-4.93112 2.55837,-8.92857 5.71429,-8.92857 3.15591,0 5.71428,3.99745 5.71428,8.92857 z"
+           sodipodi:ry="8.9285707"
+           sodipodi:rx="5.7142854"
+           sodipodi:cy="419.14789"
+           sodipodi:cx="147.85715"
+           id="path5374"
+           style="fill:#ffffff;fill-opacity:1;stroke:none"
+           sodipodi:type="arc" />
+      </g>
+      <path
+         sodipodi:nodetypes="ccsssc"
+         inkscape:connector-curvature="0"
+         id="path2985"
+         d="m 160.36978,371.07052 c 78.85768,-62.41953 217.9214,-92.90386 284.61297,2.32949 36.46808,53.46723 48.80405,84.76776 43.05907,147.30185 -4.40912,47.9933 -45.29885,112.54109 -83.73037,150.50311 C 345.58869,729.21036 228.47753,725.24321 146.60834,623.96524 86.851966,550.04238 99.822173,439.9148 165.43144,369.96011"
+         style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2.6848495;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;display:inline" />
+      <path
+         inkscape:connector-curvature="0"
+         id="path5400"
+         d="m 283.86074,705.01524 c -4.69845,-0.6842 -13.51689,-2.5334 -19.59652,-4.10932 -11.32068,-2.93446 -33.28305,-11.23421 -30.07924,-11.36718 3.46881,-0.14398 13.31453,-10.55383 19.75463,-20.88655 25.35385,-40.6786 36.44594,-100.50098 34.41635,-185.61597 -1.50211,-62.99362 -9.51157,-107.46007 -23.96255,-133.0338 -3.87968,-6.86581 -13.11428,-16.48225 -19.1229,-19.91358 -2.20879,-1.26137 -0.34075,-2.17687 11.02063,-5.40107 22.00124,-6.24366 33.34456,-8.06456 56.18698,-9.01952 30.70768,-1.28378 52.02568,2.59843 78.03237,14.21041 26.98816,12.05021 48.84519,35.20813 73.23015,77.58867 18.9995,33.02074 25.75261,64.03458 22.57832,103.69155 -2.31745,28.95248 -9.57768,51.482 -26.28882,81.57797 -20.74985,37.36947 -51.99219,75.57234 -74.05533,90.55423 -27.71676,18.82096 -66.04948,26.97601 -102.11407,21.72416 z m 94.74428,-81.14896 c 15.97737,-8.15104 35.3862,-36.01947 40.97857,-58.83962 2.9634,-12.09242 2.32622,-26.65444 -1.52105,-34.76198 -8.891,-18.73639 -37.33719,-31.05374 -61.96395,-26.83073 -11.32801,1.94254 -17.57982,4.41103 -16.80191,6.63414 0.67508,1.92923 3.7049,1.62892 14.53527,-1.44075 20.70874,-5.86953 50.75571,5.54584 59.44876,22.58561 5.6331,11.0418 4.8859,28.1688 -1.94929,44.68041 -7.43304,17.95588 -25.25678,39.74388 -36.38216,44.47408 -15.75563,6.69884 -35.09237,-4.41752 -44.65946,-25.67398 -2.1784,-4.84005 -5.35891,-14.90724 -7.06779,-22.37152 -4.18648,-18.28629 -4.28827,-18.57143 -6.62919,-18.57143 -2.59926,0 -2.75787,-1.3922 2.20937,19.39261 6.72202,28.1275 15.36925,42.3199 30.32616,49.77324 9.30322,4.636 21.48205,5.02848 29.47667,0.94992 z"
+         style="fill:#ffa100;fill-opacity:1;stroke:none;display:inline" />
+      <path
+         inkscape:connector-curvature="0"
+         id="path5402"
+         d="m 223.83195,684.82459 c -6.59286,-2.35198 -26.0225,-14.88254 -37.14286,-23.95415 -13.22676,-10.78996 -35.42773,-34.05229 -44.08537,-46.19299 -8.54831,-11.98737 -18.28708,-30.85503 -22.47284,-43.53836 -1.73006,-5.24228 -3.41894,-10.27567 -3.75306,-11.18528 -0.41782,-1.13747 1.32008,-0.98849 5.56618,0.4772 17.70381,6.11104 47.26269,5.41557 71.77856,-1.68886 16.41115,-4.75577 25.48219,-9.51259 30.37795,-15.93009 3.58722,-4.70224 4.01715,-6.42451 4.01715,-16.09225 0,-12.42702 -1.4715,-19.17215 -3.98126,-18.24936 -0.95316,0.35046 -1.51445,1.52113 -1.24732,2.60149 0.26714,1.08035 0.79692,6.46428 1.17728,11.96428 0.96968,14.02137 -1.62275,18.40349 -14.84859,25.09926 -5.53978,2.80458 -16.41071,6.65164 -24.15764,8.54901 -23.97768,5.87257 -57.83592,4.23887 -68.12036,-3.2869 -4.09831,-2.99898 -7.14256,-26.44615 -6.1677,-47.50423 0.86067,-18.59132 2.31181,-28.13297 6.93291,-45.58594 l 2.99202,-11.30023 2.69339,6.85686 c 5.5005,14.00316 17.35186,26.01143 30.82761,31.23574 9.30848,3.60875 24.23072,3.13023 33.75635,-1.08244 36.90499,-16.32114 45.62883,-71.97114 15.92829,-101.60771 -8.51809,-8.49973 -17.97669,-13.26419 -29.12691,-14.67171 l -8.08664,-1.02079 12.85696,-8.48203 c 14.23378,-9.39035 42.91508,-24.3558 50.75951,-26.48552 22.31432,-6.05821 40.92848,26.76328 49.24328,86.82844 12.20794,88.18869 1.94302,189.74558 -23.8568,236.02962 -13.89806,24.93266 -21.69925,31.8418 -31.86009,28.21694 z"
+         style="fill:#ffeb00;fill-opacity:1;stroke:none;display:inline" />
+      <path
+         inkscape:connector-curvature="0"
+         id="path5404"
+         d="m 374.32465,318.77156 c -14.52562,-5.34248 -28.84909,-7.15959 -55.4927,-7.03993 -21.85407,0.0981 -29.02491,0.68217 -41.42857,3.37412 -22.1889,4.81563 -21.33409,4.95439 -25.94946,-4.21239 -13.12454,-26.06719 -7.41389,-59.44574 13.80682,-80.70036 15.02529,-15.0493 36.89838,-23.68804 67.0919,-26.49783 34.82575,-3.24086 64.28968,5.30706 77.3103,22.42886 8.86,11.65068 7.39718,26.83825 -5.10642,53.01715 -6.78478,14.20537 -22.84276,41.70011 -24.296,41.60005 -0.39286,-0.027 -3.064,-0.9134 -5.93587,-1.96967 z"
+         style="fill:#ffbc02;fill-opacity:1;stroke:none;display:inline" />
+      <path
+         inkscape:connector-curvature="0"
+         id="path5406"
+         d="m 310.64914,809.43192 c -1.75055,-0.70419 -7.87577,-4.81254 -13.6116,-9.12968 -12.62371,-9.50137 -25.90843,-16.90073 -43.66887,-24.32282 -7.32624,-3.06164 -15.27061,-7.38835 -17.65415,-9.61492 -5.41251,-5.05604 -4.84825,-8.17454 3.67832,-20.32886 3.36209,-4.79254 8.86827,-13.85656 12.23594,-20.14228 3.36768,-6.28571 7.62838,-13.44426 9.46822,-15.90789 l 3.34517,-4.47932 9.69489,2.21226 c 15.0924,3.44391 53.50712,2.99861 68.21827,-0.79079 13.53404,-3.48619 13.14338,-3.6581 28.3719,12.48494 13.86529,14.69794 13.98712,14.22739 -11.81681,45.64401 -6.83145,8.31738 -16.0822,20.37722 -20.55723,26.79964 -12.41698,17.82046 -18.11282,21.43395 -27.70405,17.57571 z"
+         style="fill:#ffbc02;fill-opacity:1;stroke:none;display:inline" />
+      <path
+         inkscape:connector-curvature="0"
+         id="path5408"
+         d="m 665.97481,710.03341 c -26.34237,-4.07186 -40.2667,-7.9418 -67.14286,-18.66085 -41.64022,-16.60741 -103.17468,-51.29194 -131.78571,-74.28238 -10.11072,-8.12449 -10.8644,-9.504 -7.69966,-14.09323 1.06876,-1.54983 4.66307,-8.12317 7.98735,-14.60743 3.86761,-7.54406 6.6403,-11.43763 7.69965,-10.81227 0.91053,0.53751 9.23709,6.03499 18.50346,12.2166 31.03832,20.70576 63.75116,39.34956 84.50814,48.16314 11.2053,4.75786 21.07123,8.65066 21.92428,8.65066 4.05586,0 2.77393,-3.15831 -2.10612,-5.18894 -36.93302,-15.3681 -55.18817,-25.29062 -97.38492,-52.9332 -19.92567,-13.05306 -24.59563,-16.71742 -23.83057,-18.69902 4.82724,-12.50304 10.70753,-31.16907 11.51466,-36.55135 0.54662,-3.64512 1.29806,-6.62749 1.66988,-6.62749 0.37182,0 10.1024,5.26587 21.62351,11.70193 45.66695,25.511 77.9499,39.06191 111.66176,46.87053 7.46429,1.72893 15.66072,3.6699 18.21429,4.31324 3.9143,0.98616 4.64286,0.77761 4.64286,-1.329 0,-1.97797 -2.45609,-3.01273 -11.78572,-4.96531 -19.65013,-4.11255 -49.52854,-13.52973 -64.64285,-20.37438 -7.85715,-3.55817 -28.8836,-14.28328 -46.72545,-23.8336 l -32.43973,-17.3642 0.29687,-21.64332 0.29688,-21.64333 10.71428,-2.40432 c 59.5125,-13.35479 89.26304,-17.80012 119.64286,-17.87706 7.54207,-0.0191 8.92871,-0.41083 8.92946,-2.52261 0.001,-2.83075 -0.20682,-2.83231 -35.71517,-0.26915 -25.26851,1.82399 -66.10318,9.05912 -100.21159,17.75557 -3.57205,0.91075 -3.83439,0.61937 -4.70453,-5.22523 -1.617,-10.86124 -5.45138,-25.87145 -8.77596,-34.35476 l -3.22499,-8.22918 15.24425,-8.18355 c 35.59319,-19.10746 58.21948,-25.76652 101.31567,-29.81781 7.85036,-0.73798 10.35715,-1.49529 10.35715,-3.12895 0,-1.81951 -1.72499,-2.00401 -11.07143,-1.18419 -25.73664,2.25747 -54.60914,7.97579 -68.92857,13.6516 -4.32143,1.71288 -17.11388,7.89074 -28.42766,13.72857 -11.31378,5.83782 -20.73304,10.61422 -20.93168,10.61422 -0.19864,0 -1.02112,-1.89316 -1.82774,-4.20703 -0.80662,-2.31387 -4.72665,-9.72645 -8.71118,-16.4724 -3.98453,-6.74595 -7.2446,-12.75465 -7.2446,-13.35267 0,-0.59801 2.73214,-3.70429 6.07143,-6.90282 23.87671,-22.87033 68.56142,-42.63971 119.18616,-52.73024 16.01407,-3.19193 50.52124,-4.32041 62.75252,-2.05218 18.23807,3.38216 32.12513,10.43296 37.6098,19.09541 l 2.82433,4.46072 -5.4913,10.00918 c -3.02021,5.50505 -8.47241,15.15203 -12.116,21.43775 -8.28924,14.30015 -11.13284,23.27282 -9.34794,29.49639 1.78427,6.2214 6.81517,11.22055 22.79671,22.65283 18.73592,13.40261 25.71429,21.192 25.71429,28.70278 0,5.89988 -6.76554,14.78843 -22.03019,28.94316 -17.62283,16.34145 -23.81764,24.58772 -24.7083,32.89057 -1.28087,11.94064 6.91327,22.62977 37.26427,48.61058 23.53488,20.14613 30.44182,28.90325 28.77659,36.48496 -1.32283,6.02281 -9.81646,13.68231 -25.01666,22.55984 -7.46428,4.35945 -18.62157,10.88753 -24.79398,14.50686 -12.83529,7.52627 -19.49173,14.26487 -19.49173,19.73233 0,5.09701 9.22671,13.74933 24.50014,22.97491 6.62683,4.0028 13.1519,8.49675 14.50017,9.98656 2.31832,2.56171 2.31222,2.83471 -0.11243,5.02901 -5.59235,5.061 -20.90101,8.73893 -30.31642,7.28355 l -3e-5,0 z"
+         style="fill:#ffbc02;fill-opacity:1;stroke:none;display:inline" />
+      <path
+         transform="matrix(1,0,0,0.73033368,0,131.61779)"
+         d="m 220,408.07648 c 0,44.18278 -22.38576,80 -50,80 -27.61424,0 -50,-35.81722 -50,-80 0,-44.18278 22.38576,-80 50,-80 27.61424,0 50,35.81722 50,80 z"
+         sodipodi:ry="80"
+         sodipodi:rx="50.000004"
+         sodipodi:cy="408.07648"
+         sodipodi:cx="170"
+         id="path5216"
+         style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:3;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         sodipodi:type="arc" />
+      <path
+         sodipodi:nodetypes="csc"
+         inkscape:connector-curvature="0"
+         id="path5267"
+         d="m 224.07635,509.23876 c 9.08509,34.56535 -4.31764,40.26175 -36.23186,49.05253 -35.18379,9.69139 -72.03637,1.37157 -73.81834,-4.52651"
+         style="fill:none;stroke:#000000;stroke-width:2.7190001;stroke-miterlimit:4;stroke-opacity:1" />
+      <path
+         sodipodi:nodetypes="csssc"
+         inkscape:connector-curvature="0"
+         id="path5251"
+         d="m 340.30688,510.99397 c 19.89892,-13.58823 68.94815,-5.72365 77.65497,25.33145 8.70681,31.05509 -17.60597,70.3932 -37.50489,83.98144 -19.89892,13.58822 -47.39841,-2.66984 -56.10523,-33.72493 -1.0297,-3.67271 -7.21381,-28.47773 -7.76602,-32.39289"
+         style="fill:#ffbc02;fill-opacity:1;stroke:#000000;stroke-width:3;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         sodipodi:nodetypes="cssc"
+         inkscape:connector-curvature="0"
+         id="path5323"
+         d="m 229.59896,331.40004 c 28.35407,-7.60464 53.61362,38.87503 56.93495,145.15751 3.32133,106.28248 -15.76827,158.17647 -29.09155,181.81749 -11.96618,21.233 -22.05557,36.58259 -37.4499,27.20832"
+         style="fill:none;stroke:#282828;stroke-width:3;stroke-miterlimit:4;stroke-opacity:1" />
+      <g
+         transform="translate(7.8212482,8.8314008)"
+         id="g5376">
+        <path
+           sodipodi:type="arc"
+           style="fill:#000000;fill-opacity:1;stroke:#282828;stroke-width:3;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           id="path5326"
+           sodipodi:cx="145.71428"
+           sodipodi:cy="412.36218"
+           sodipodi:rx="17.142857"
+           sodipodi:ry="18.571428"
+           d="m 162.85714,412.36218 c 0,10.25672 -7.67512,18.57143 -17.14286,18.57143 -9.46774,0 -17.14286,-8.31471 -17.14286,-18.57143 0,-10.25671 7.67512,-18.57143 17.14286,-18.57143 9.46774,0 17.14286,8.31472 17.14286,18.57143 z"
+           transform="matrix(0.74793287,0,0,0.82501496,30.658351,71.442927)" />
+        <path
+           sodipodi:type="arc"
+           style="fill:#ffffff;fill-opacity:1;stroke:none"
+           id="path5341"
+           sodipodi:cx="147.85715"
+           sodipodi:cy="419.14789"
+           sodipodi:rx="5.7142854"
+           sodipodi:ry="8.9285707"
+           d="m 153.57143,419.14789 c 0,4.93111 -2.55837,8.92857 -5.71428,8.92857 -3.15592,0 -5.71429,-3.99746 -5.71429,-8.92857 0,-4.93112 2.55837,-8.92857 5.71429,-8.92857 3.15591,0 5.71428,3.99745 5.71428,8.92857 z"
+           transform="translate(-13.571429,-8.5714286)" />
+      </g>
+    </g>
+  </g>
+</svg>
diff --git a/2012-kvm-forum/flash.png b/2012-kvm-forum/flash.png
new file mode 100644 (file)
index 0000000..8e625cc
Binary files /dev/null and b/2012-kvm-forum/flash.png differ
diff --git a/2012-kvm-forum/floppy.png b/2012-kvm-forum/floppy.png
new file mode 100644 (file)
index 0000000..8bfd718
Binary files /dev/null and b/2012-kvm-forum/floppy.png differ
diff --git a/2012-kvm-forum/functions b/2012-kvm-forum/functions
new file mode 100644 (file)
index 0000000..7baaed0
--- /dev/null
@@ -0,0 +1,40 @@
+# -*- shell-script -*-
+# This creates some standard functions.  See also $talkdir/bashrc
+# which runs in the same bash context as the terminal.
+
+# Place any local environment variables and settings in "local".
+if [ -f local ]; then source local; fi
+
+# Environment variables.
+export HISTFILE=$talkdir/history
+export PATH=$talkdir:$PATH
+export EDITOR="emacs -nw"
+
+# remember <command> <args ...>
+#
+# This function does two things: (1) It adds the command and arguments
+# to the shell history, so that commands can be recalled using up
+# arrow or reverse search.  (2) It makes a function key recall the
+# command.  The first command is assigned to F2, the second to F3 and
+# so forth.
+
+rm -f $HISTFILE
+touch $HISTFILE
+rm -f $talkdir/bindings
+touch bindings
+
+fnum=2
+keys=(- OP OQ OR OS '[15~' '[17~' '[18~' '[19~' '[20~' '[21~')
+
+remember ()
+{
+    echo "$@" >> $HISTFILE
+    echo \"\\e${keys[$fnum]}\":\"\\C-k \\C-u"$@"\" >> $talkdir/bindings
+    ((fnum++))
+}
+
+terminal ()
+{
+    chmod -w $HISTFILE
+    /bin/bash --rcfile $talkdir/bashrc "$@"
+}
diff --git a/2012-kvm-forum/handout/.gitignore b/2012-kvm-forum/handout/.gitignore
new file mode 100644 (file)
index 0000000..3eec47d
--- /dev/null
@@ -0,0 +1,3 @@
+*.aux
+*.log
+*.pdf
diff --git a/2012-kvm-forum/handout/2012-kvm-forum-rjones-libguestfs.tex b/2012-kvm-forum/handout/2012-kvm-forum-rjones-libguestfs.tex
new file mode 100644 (file)
index 0000000..18a9f14
--- /dev/null
@@ -0,0 +1,310 @@
+\documentclass[12pt]{article}
+\usepackage{alltt,graphicx,url}
+\hyphenation{guestfish}
+
+\title{libguestfs\\
+tools for viewing and modifying\\
+virtual machine disk images}
+
+\author{Richard W.M. Jones\\
+\small Software Engineer\\[-0.8ex]
+\small Red Hat\\
+\small \texttt{rjones@redhat.com}\\
+}
+
+\date{November 2012}
+
+\begin{document}
+\maketitle
+
+\section{Introduction}
+
+The libguestfs project is nearly 4 years old, so for my rare
+opportunity to talk at the KVM Forum I thought I'd cover where we've
+got to in those 4 years, and also talk about some of the ways we are
+using the new features in KVM.
+
+\section{Overview of libguestfs}
+
+libguestfs is a C library with a simple, long-term stable API that
+contains about 400 different calls.  It also has bindings in many
+popular high-level languages, including Perl, Python, Ruby, OCaml,
+Java, PHP, and more.  The library lets you write simple programs to
+create, view and modify disk images, like the one in
+Appendix~\ref{perlexample}.
+
+There are many tools which use libguestfs:
+
+\begin{itemize}
+\item[{\bf guestfish}]
+Interactive and scriptable shell.
+\item[{\bf guestmount}]
+Mount filesystems from any guest or disk image on the host.
+\item[{\bf virt-alignment-scan}]
+Check alignment of partitions in guests.
+\item[{\bf virt-cat}]
+Display a file from a guest.
+\item[{\bf virt-copy-in}]
+Copy files and directories into a guest.
+\item[{\bf virt-copy-out}]
+Copy files and directories out of a guest.
+\item[{\bf virt-df}]
+Display disk usage of a guest.
+\item[{\bf virt-edit}]
+Edit a file in a guest.
+\item[{\bf virt-filesystems}]
+Display the partitions, filesystems, logical volumes etc. in a guest.
+\item[{\bf virt-inspector}]
+Inspect a guest and produce a report detailing the operating system,
+version, applications installed and more.
+\item[{\bf virt-ls}]
+List files and directories in a guest.
+\item[{\bf virt-make-fs}]
+Make a new filesystem.
+\item[{\bf virt-rescue}]
+Rescue mode for guests.
+\item[{\bf virt-resize}]
+Resize a guest.
+\item[{\bf virt-sparsify}]
+Make a disk sparse.
+\item[{\bf virt-sysprep}]
+Reset a guest to ``factory configuration''.
+\item[{\bf virt-tar-in}]
+Copy files from a tarball into a guest.
+\item[{\bf virt-tar-out}]
+Copy files out of a guest into a tarball.
+\item[{\bf virt-win-reg}]
+Display and edit the Windows Registry in a guest.
+\end{itemize}
+
+and libguestfs is increasingly being used by major projects:
+
+\begin{itemize}
+\item[{\bf BoxGrinder \& Oz}]
+Projects that can create guests from scratch.
+\item[{\bf OpenStack}]
+Uses libguestfs to inject files into guests.
+\item[{\bf virt-manager}]
+Uses libguestfs to display icons and applications in guests.
+\item[{\bf virt-v2v \& virt-p2v}]
+Migrate between physical machines and different hypervisors.
+\end{itemize}
+
+\section{Using guestfish to view and inject files}
+
+An easy way to get started with libguestfs is to use our shell
+scripting tool,
+{\em guestfish}\footnote{\url{http://libguestfs.org/guestfish.1.html}}
+to open up a disk image and look inside.
+
+You can open up almost any type of disk image, such as a raw file,
+qcow2 file, or a logical volume or partition that contains a virtual
+machine.  You {\em don't} need to be root, unless you need root to
+access the device.
+
+Simply do:
+
+\begin{samepage}
+\begin{verbatim}
+$ guestfish -a disk.img -i
+
+Welcome to guestfish, the libguestfs filesystem interactive shell for
+editing virtual machine filesystems.
+
+Type: 'help' for help on commands
+      'man' to read the manual
+      'quit' to quit the shell
+
+Operating system: Red Hat Enterprise Linux Server release 6.3 (Santiago)
+/dev/vg_rhel6x32/lv_root mounted on /
+/dev/sda1 mounted on /boot
+\end{verbatim}
+\end{samepage}
+
+You can now use guestfish commands to list files and directories and
+create files:
+
+\begin{samepage}
+\begin{verbatim}
+><fs> ls /
+bin
+boot
+cgroup
+[etc]
+
+><fs> write-append /etc/rc.d/rc.local "service sshd start"
+
+><fs> cat /etc/rc.d/rc.local
+#!/bin/sh
+touch /var/lock/subsys/local
+service sshd start
+\end{verbatim}
+\end{samepage}
+
+Some useful commands include:
+
+\begin{itemize}
+\item[\texttt{cat}] Display small text files.
+\item[\texttt{edit}] Edit a file.
+\item[\texttt{less}] Display longer files.
+\item[\texttt{ll}] List (long) directory.
+\item[\texttt{ls}] List directory.
+\item[\texttt{mkdir}] Make a directory.
+\item[\texttt{rm}] Remove a file.
+\item[\texttt{touch}] Touch a file.
+\item[\texttt{upload}] Upload a local file to the disk.
+\item[\texttt{write}] Create a file with content.
+\end{itemize}
+
+As there are hundreds of commands, it's a good idea to read the
+{\em guestfish(1)} and
+{\em guestfs(3)}\footnote{\url{http://libguestfs.org/guestfs.3.html}}
+man pages.  These are also available online at the
+website\footnote{\url{http://libguestfs.org}}.
+
+\section{Introducing virt-rescue}
+
+virt-rescue\footnote{\url{http://libguestfs.org/virt-rescue.1.html}}
+is a good way to rescue virtual machines that don't boot, or just
+generally make ad hoc changes to virtual machines.  It's like a rescue
+CD for virtual machines.
+
+virt-rescue is a little different from guestfish in that you get an
+ordinary shell and ordinary tools.  However unlike guestfish,
+virt-rescue cannot be used from shell scripts, so it's not useful if
+you want to make repeatable changes to lots of your guests.
+
+You must not use virt-rescue on running VMs.
+
+If you had a libvirt guest called ``Fedora'' then:
+
+\begin{samepage}
+\begin{verbatim}
+# virt-rescue -d Fedora
+[lots of boot messages]
+
+Welcome to virt-rescue, the libguestfs rescue shell.
+
+Note: The contents of / are the rescue appliance.
+You have to mount the guest's partitions under /sysroot
+before you can examine them.
+
+><rescue> lvs
+  LV      VG        Attr   LSize Origin Snap%  Move Log Copy%  Convert
+  lv_root vg_f13x64 -wi-a- 7.56g                                      
+  lv_swap vg_f13x64 -wi-a- 1.94g                                      
+><rescue> mount /dev/vg_f13x64/lv_root /sysroot/
+[  107.912813] EXT4-fs (dm-0): mounted filesystem with ordered data mode.
+Opts: (null)
+><rescue> ls -l /sysroot/etc/fstab 
+-rw-r--r--. 1 root root 781 Sep 16  2010 /sysroot/etc/fstab
+><rescue> vi /sysroot/etc/fstab 
+\end{verbatim}
+\end{samepage}
+
+There is a lot more information about virt-rescue in the
+man page {\em virt-rescue(1)}.
+
+\section{New features in libguestfs 1.20}
+
+At the end of this year (2012) we hope to make a major new release of
+libguestfs.  Since the last version was released in May 2012, this
+represents over 6 months of development effort, and it includes and
+uses some major new features from KVM.
+
+The new version will (optionally) use libvirt to manage the libguestfs
+appliance.  From the point of view of libguestfs this hides the
+complexity of dealing with the qemu command line.  It also lets us
+leverage libvirt for:
+
+\begin{itemize}
+\item[security]
+The appliance will now be encapsulated with sVirt (SELinux or
+AppArmor) to prevent a malicious guest from being able to take over
+the qemu process and escape to attack the host.
+\item[remote access]
+libvirt will provide remote access to guests, using the ordinary
+libvirt remote URIs.
+\end{itemize}
+
+We are also using new features from KVM:
+
+\begin{itemize}
+\item[virtio-scsi]
+The primary new feature is Paolo Bonzini's virtio-scsi driver,
+which is far superior in both performance and features compared
+to virtio-blk.
+\item[up to 255 disks]
+With virtio-scsi, we can now access up to 255 disks at a time,
+and possibly many more in future.
+\item[hot-plugging of disks]
+With virtio-scsi and libvirt together we are able to hotplug
+(add and remove) disks, giving libguestfs users a lot more
+performance and flexibility.
+\item[sparsification]
+Coming soon, we'll be able to trim filesystems and cause
+the host backing file to become sparse.
+\item[qcow2 v3]
+We use the new version of qcow2 wherever possible because of
+its performance benefits.
+\end{itemize}
+
+\newpage
+\appendix
+\section{Example: how to inspect a virtual machine disk}
+\label{perlexample}
+
+\begin{verbatim}
+#!/usr/bin/perl -w
+
+use strict;
+use Sys::Guestfs;
+
+if (@ARGV < 1) {
+    die "usage: inspect_vm disk.img"
+}
+
+my $disk = $ARGV[0];
+
+my $g = new Sys::Guestfs ();
+$g->add_drive_opts ($disk, readonly => 1);
+$g->launch ();
+
+# Ask libguestfs to inspect for operating systems.
+my @roots = $g->inspect_os ();
+if (@roots == 0) {
+    die "inspect_vm: no operating systems found";
+}
+
+for my $root (@roots) {
+    # Print basic information about the operating system.
+    printf "  Product name: %s\n",
+        $g->inspect_get_product_name ($root);
+    printf "  Version:      %d.%d\n",
+        $g->inspect_get_major_version ($root),
+        $g->inspect_get_minor_version ($root);
+
+    # Mount up the disks, like guestfish -i.
+    my %mps = $g->inspect_get_mountpoints ($root);
+    my @mps = sort { length $a <=> length $b } (keys %mps);
+    for my $mp (@mps) {
+        eval { $g->mount_ro ($mps{$mp}, $mp) };
+        if ($@) {
+            print "$@ (ignored)\n"
+        }
+    }
+
+    # If /etc/issue.net file exists, print up to 3 lines.
+    my $filename = "/etc/issue.net";
+    if ($g->is_file ($filename)) {
+        printf "--- %s ---\n", $filename;
+        my @lines = $g->head_n (3, $filename);
+        print "$_\n" foreach @lines;
+    }
+
+    # Unmount everything.
+    $g->umount_all ()
+}
+\end{verbatim}
+
+\end{document}
\ No newline at end of file
diff --git a/2012-kvm-forum/handout/Makefile b/2012-kvm-forum/handout/Makefile
new file mode 100644 (file)
index 0000000..77f44b3
--- /dev/null
@@ -0,0 +1,18 @@
+all:   2012-kvm-forum-rjones-libguestfs.pdf
+
+SOURCES = \
+       2012-kvm-forum-rjones-libguestfs.tex
+
+log = 2012-kvm-forum-rjones-libguestfs.log
+
+2012-kvm-forum-rjones-libguestfs.pdf: $(SOURCES)
+       pdflatex $<
+       @if grep -q "LaTeX Warning: There were undefined references" $(log) || \
+          grep -q "Rerun to get cross-references right" $(log); \
+       then \
+         echo "Rerunning to fix references ..."; \
+         pdflatex $<; \
+       fi
+
+clean:
+       rm -f 2012-kvm-forum-rjones-libguestfs.{aux,log,dvi,pdf}
diff --git a/2012-kvm-forum/kvm-forum.png b/2012-kvm-forum/kvm-forum.png
new file mode 100644 (file)
index 0000000..aaee10e
Binary files /dev/null and b/2012-kvm-forum/kvm-forum.png differ
diff --git a/2012-kvm-forum/newfeatures-svirt.svg b/2012-kvm-forum/newfeatures-svirt.svg
new file mode 100644 (file)
index 0000000..f426f49
--- /dev/null
@@ -0,0 +1,243 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="499.67273"
+   height="362.48453"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="newfeatures-svirt.svg">
+  <defs
+     id="defs4">
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend"
+       style="overflow:visible">
+      <path
+         id="path4582"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="1.4"
+     inkscape:cx="82.885924"
+     inkscape:cy="172.30259"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:window-width="1550"
+     inkscape:window-height="841"
+     inkscape:window-x="22"
+     inkscape:window-y="33"
+     inkscape:window-maximized="0"
+     fit-margin-top="20"
+     fit-margin-left="20"
+     fit-margin-right="20"
+     fit-margin-bottom="20">
+    <inkscape:grid
+       type="xygrid"
+       id="grid2991"
+       empspacing="5"
+       visible="true"
+       enabled="true"
+       snapvisiblegridlinesonly="true"
+       originx="-182.08858px"
+       originy="-186.99997px" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-182,-0.36218262)">
+    <rect
+       style="fill:#cc0000;fill-opacity:1;stroke:#000000;stroke-width:0.17716534;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       id="rect2989"
+       width="124.24875"
+       height="39.395943"
+       x="277"
+       y="223.36218"
+       ry="5"
+       rx="4.2487488" />
+    <text
+       xml:space="preserve"
+       style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans"
+       x="340"
+       y="248.36218"
+       id="text2985"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan2987"
+         x="340"
+         y="248.36218"
+         style="font-weight:bold">libvirt</tspan></text>
+    <g
+       id="g3830"
+       transform="translate(310,180)" />
+    <rect
+       style="fill:#f9e0e0;fill-opacity:1;stroke:#060000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       id="rect4185"
+       width="142"
+       height="32"
+       x="270"
+       y="150.36218"
+       ry="5"
+       rx="4.2487488" />
+    <text
+       xml:space="preserve"
+       style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans"
+       x="339"
+       y="173.36218"
+       id="text4187"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4189"
+         x="339"
+         y="173.36218"
+         style="font-weight:bold;fill:#000000;fill-opacity:1">qemu/kernel</tspan></text>
+    <image
+       width="48"
+       height="48"
+       xlink:href="data:image/png;base64,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 DqSBPaEJAAAAAElFTkSuQmCC "
+       id="image4311"
+       x="202"
+       y="20.362183" />
+    <image
+       width="48"
+       height="48"
+       xlink:href="data:image/png;base64,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 "
+       id="image4376"
+       x="262"
+       y="20.362183" />
+    <image
+       width="48"
+       height="48"
+       xlink:href="data:image/png;base64,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 "
+       id="image4441"
+       x="322"
+       y="20.362183" />
+    <image
+       width="48"
+       height="48"
+       xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABHNCSVQICAgIfAhkiAAACwVJREFU aIHVmUuMXMd1hr9TdV/9mJ7mkNIMKVIPkpIoRaECByIpJ4AXRoAYiJAnjASIvfHGCy+ShZdZZJUs kn2QbBNklyBwXnZMGE5A2iFtmY6sKLAp2ZRGJENyZnoe3X1v3XpkcW/3dPc8ODMhHKSAi3Or7uv/ T51z6tS5EkLg/3OLdht8/Y03fluJ/jMfwvxPG1AIwUeRftd59/vfv3Hj6uPul91m4Ocuv7l55uSJ drvVJMsy0jQlTVLSrJJJ3U+ShCRJSNOEOE6I45goiojjGK01WmtEBBFh9B3nHM45rLVYazHGUJYl xhiMMRSm4MOPlrn2rZt978Jbt77z7W8cisDrr//C05L5Oy+98EwmItVNNYiDno/6k7LW7racOJ/F 8Pxzz9Pb2ODav7+9FVz5y9+7efPagQm8dunSUiLqg/MvnG6MxgbDgt76JnlhCLLjHbu3I7iWILQa KQvdDhcuvMzqWo8b3/3+hlh98e23r93Z7ZldfWCyrW/2KfN7/Pqb97l4dh1RR3f6AGPN7xwH6xTX 313g6q0lgsBL589z9rnT2Qd3lr8MfOlQBIRqenvrW3zpV+/wqU9d4tQrXwR7G4kvEMr/OpD05XtI 9DI2/09UcgEzeBedvoLp/wDdeBWz9Q5x81WGG/9BlJ1j8dSfEql7fOOdeR4+fMCpU4vJ+3eWf+fQ BKByOGHI809tcebVX0FkBcK3QJqPlcFfJ/gMl38TlcWU/atoYvLNr5MQ0V//Khma9ZV/oBU0aw// nu7S73L8hU9z5ZU/5ys3hjjnqkCwD869Z0CEAMTaIzpGJIawAaEPodhTBr9FcENM3kPJAJP30LpP nvdIkj75cBVJ+xTDVXSjT5GvkZhqPB8+AMmIIwehDgzs73T7EpjocBCv9N5TmhJRjtIYVGwxpiBO HcYYVGkpTUlsLYUxJNZRFIaGtRSFwVpXAZ7ELEckMENngkAA/wCCA/cBBIszP8YWOUiJKQwqqgDG aQVMMospSmLnKExB6mrgzlIUJdY5vLNoFXbo+zH4DzYDU7MRLNj3IXoR7zwunMeZTaxtUa79Ldbk iL1OUeSQrE8AN6S1pktbA7cO70pEAlEUUAqEaRJPxoTGgyk0fhPvA94HgvK44AniQQJR4gjxCmVx jyAFvQf/RGm2sCvXMcWQfPgQY3YC1yoQR6A1O8PskzQh7wPBl9jyPs7cw9oc7xzOC6jjiH6KQAcV zxFH59GNgC3XyQfLEPV5sPyPOLdB77+/glY5w9430apgsPa1iogG/DSBXRV5aAJBsM7ibUGx8TcE eQaTv49KXiPfvIVKX2Ow/i84H+GDIPppdLxIFC8hep44O0eUnmX+BHi3iS8fEcIQQp9ma5EoniNK fhGthIDfobojEZjKYUSwtiQ4izGeeO51zMZtsuZZCvM2rfZZSvsd5k78Go+W/5Js7kUe3f0azntE Mhqt02St0zSaZ0iSDpK2EamsQwmIAiUBsBw2BzmYEyO40uJ8HVUalRNGZZVNptZhTIG1jsI42uk5 vL/O4pnfYuXuXxMnCYPe1zGbCTqKiZMuUdQkihqIGAibKLG0jv8GnjBt9o8xIXUQlgHqFLiK57a0 lKXZ7o/juMWWJRCIIoiilCSJmF+4RJpkPHXm80TK0O7+PKG8TZIdI5Q/pDn3syhW0Qq0mjGhJ0EA hLIssXXebusFqAJeYG21QI2AV1EloPVIUkcbiGMhTZ8iTmKy5nniWBNnp4ijgFJSm9LBwB+KgHUl rl6AnKs17nYCj2rgUTwDvA6XkQalq74aEVRVCK3wzkShxyB7bBTyQQi2wDmFs6FeiFwFPAT0DPCR xuMJ4GoSeDxxXw18hFIkIXiL9/tCOhgBESHSmqLMeLTuWVr9IQtnPsvCScPcsSuIQGfhMlGsmOtW sjV/hSjWNDtXiCJFo5bp3BXiSJPOXSaOFEnrClpr4uYVkFqi0dknuHv7j/jBT7pkaXIgAnvuyF67 cK6R5zmrvU0Wmh/xuU//hOPHu1hbICoBbxCVEEYyGNRkf2JcdhvfIUu00nx0d8Bf/PM50uw0J04s sLR0kq9e/deN79349q4FhseaULfTYmXjNH/4Vwu0s8GUkz3pVjqFsU3mO20ajfRAzzyWgFKK490O x7sdrHVH2eoeqsWRPtT9B8yF6psP+fKjtNksWNT+gfJQBJyrFq5RCWWvkgpMl1BCqBLBZrMx/UIB W1r6/QFznXa9fZTxNaXV0fcDs87tnKMsS9rtNmo3rchM7j7T7/f728/Vw/fu3mdtrUeWZeR5Tme+ w1y7Pb6ulUbkScyAMAbvvcc6uzfYsZjuK6UrAnW/NCXrvQ3arRZpliECa6trtNutCjiCUqoyoX1m YQ8C1cOjDwpCpKPqXAmKaU3uCn6Kn6C0RWk17vf6PVrtFlkjI/jAcDhgMBjS3+oz350fm17wft8E dc8ZUEpVNlgjEa0QEZSoHeD260+ppTboEAKdTgfnAoXJGfZz8jyne6xLe66Nd75KIL3bYcoHJiBK oZWeMAEhz4tqWvdxYO/9tvZCgAAheEQpfK3NQOWgTy8+zeqjVYaDnOeef45nn32W3voqzjoCAe89 3rujEVBKELUNrNPp7NBGGNUE9xmb7JdlWROo+nEEL738Ipe7l9nYXOfhowcT91AT2D8x2pPA7MNF UewLjvo0MDE2258ZG+ZDPv54meWPl3d5hrp4cEQCzs2w3wXMoQlMib3v2Sbg8e6IPuC9xznH/Qdr 9IfDGeh7tP91nrH9gk67xak0xR1tBkK1cFmLDoYvXPxwR71GxylR0iBOGkRJAx1nxGmTKM5QUVI5 dl3bFFHV+UgCKDV1DRHMcAMz3MSYkj/+u0csnjhGCEd0Yucc3gfiWFNs3CNJMz7z1mcrACpCohSl 0wmZIDoFNN+9eY0ka3DxE29WYKXakr5z6yZCFcUIoS7eBkRUBby/SrHVw7oS0JUPuCPMQAgjJ97W ulaKVrsDohCdIjqZkPURpQRfAVNKk6WNcVVBqWg75I5zqUr71gxr7W9hii2cs8BcZcaHNSHvvaAU zjmC9xQ+5Ze+fBUCrLhBlRLoCKU0ojVKRXWaoGtwiotvvQnAZjDbC6EofuYzn5xZ6KqZcM7iXImz Fucs6xubhH/7g9qJff18vWOeieVTBEREzl+8qNM0qkwoVA83u8+MrtcLmarWCVETYyNUsksGOSIx 3a8U5lDeo+tFyzlPZKOqCD6egQCQAE5E3CSJcapXM4zyra1GAJldB0ZTPplK7wS/W9sbfAh+HOtH Rwjb36zGLD6ggGNAA4hk4oOTuaoCsuFgcIwQxDk3OX0Th9pBZhLsNJf9wIcx4IqIH6ch0wQChKCA 08ACkE7ijmqAUg82ijxvBdDOOULYzneqH9fRlBylyCOTmjyvyGwnb7C9sakAu/FPb+eqn96VL3i0 3t75laUlVEXTJSrZBwoR8SGEMOkDAqitXm/gSnt7s5+/3J1rS5ym/OhH75FlGXGckqYpSZLWf+NH f+TVmMzo2H2GKjIV4HL8p95aM67wWVvSHwy4fOkNVLC8/+M7oRgOb1H5QAxMVJLqssrI/oEOcPLE 4slPLp5c+j0dRecFFc11miIo1Iztj18yA3J2HztV6fYeH2btfjrnCcGTF8Z5H7y15d27H975k7WV lfeAe/WxCbgQQhjXhaTau2U1iS7QbrVa3VansxinaYefcjPD4WppremtrNwHyhp0D9gAilB7+ySB kR8kVI6SMDNd/0ctAA4wQE5Fxo9C6f8Ajlh0/8wOHhEAAAAASUVORK5CYII= "
+       id="image4506"
+       x="382"
+       y="20.362183" />
+    <image
+       width="48"
+       height="48"
+       xlink:href="data:image/png;base64,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 L9kiFx1ruqaWAAAAAElFTkSuQmCC "
+       id="image4571"
+       x="434"
+       y="20.362183" />
+    <path
+       sodipodi:nodetypes="cc"
+       inkscape:connector-curvature="0"
+       id="path4574"
+       d="m 340,222.36218 0,-30"
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)" />
+    <text
+       xml:space="preserve"
+       style="font-size:84.77093506px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans"
+       x="-142.56804"
+       y="219.52768"
+       id="text5617"
+       sodipodi:linespacing="125%"
+       transform="matrix(0,-0.57770443,1.730989,0,0,0)"><tspan
+         sodipodi:role="line"
+         id="tspan5619"
+         x="-142.56804"
+         y="219.52768">{</tspan></text>
+    <g
+       transform="translate(207,191)"
+       id="g3051">
+      <rect
+         style="fill:#cc0000;fill-opacity:1;stroke:#000000;stroke-width:0.17716534;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+         id="rect3053"
+         width="124.24875"
+         height="39.395943"
+         x="70"
+         y="112.36218"
+         ry="5"
+         rx="4.2487488" />
+      <text
+         xml:space="preserve"
+         style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans"
+         x="133"
+         y="137.36218"
+         id="text3055"
+         sodipodi:linespacing="125%"><tspan
+           sodipodi:role="line"
+           id="tspan3057"
+           x="133"
+           y="137.36218"
+           style="font-weight:bold">libguestfs</tspan></text>
+    </g>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
+       d="m 340,302.36218 0,-30"
+       id="path3059"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
+       d="M 339.91142,139.84668 340,98.36218"
+       id="path3065"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <rect
+       rx="5.3205957"
+       ry="11.411095"
+       y="119.84668"
+       x="259.91141"
+       height="90"
+       width="170.00002"
+       id="rect3975"
+       style="fill:none;stroke:#f0ff00;stroke-width:4;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:16, 8, 4, 8;stroke-dashoffset:0" />
+    <text
+       xml:space="preserve"
+       style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#a8a819;fill-opacity:1;stroke:none;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans"
+       x="144.45549"
+       y="272.83478"
+       id="text4491"
+       sodipodi:linespacing="125%"
+       transform="matrix(0.83807316,-0.54555786,0.54555786,0.83807316,0,0)"><tspan
+         sodipodi:role="line"
+         id="tspan4493"
+         x="144.45549"
+         y="272.83478"
+         style="font-size:24px;font-weight:bold;fill:#a8a819;fill-opacity:1;-inkscape-font-specification:Liberation Sans Bold">sVirt / SELinux</tspan></text>
+  </g>
+</svg>
diff --git a/2012-kvm-forum/newfeatures.svg b/2012-kvm-forum/newfeatures.svg
new file mode 100644 (file)
index 0000000..ba54f1c
--- /dev/null
@@ -0,0 +1,271 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="499.67273"
+   height="362.48453"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="newfeatures.svg">
+  <defs
+     id="defs4">
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend"
+       style="overflow:visible">
+      <path
+         id="path4582"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="0.7"
+     inkscape:cx="497.03441"
+     inkscape:cy="222.8127"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:window-width="1550"
+     inkscape:window-height="841"
+     inkscape:window-x="22"
+     inkscape:window-y="33"
+     inkscape:window-maximized="0"
+     fit-margin-top="20"
+     fit-margin-left="20"
+     fit-margin-right="20"
+     fit-margin-bottom="20">
+    <inkscape:grid
+       type="xygrid"
+       id="grid2991"
+       empspacing="5"
+       visible="true"
+       enabled="true"
+       snapvisiblegridlinesonly="true"
+       originx="-182.08858px"
+       originy="-186.99997px" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-182,-0.36218262)">
+    <rect
+       style="fill:#cc0000;fill-opacity:1;stroke:#000000;stroke-width:0.17716534;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       id="rect2989"
+       width="124.24875"
+       height="39.395943"
+       x="277"
+       y="223.36218"
+       ry="5"
+       rx="4.2487488" />
+    <text
+       xml:space="preserve"
+       style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans"
+       x="340"
+       y="248.36218"
+       id="text2985"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan2987"
+         x="340"
+         y="248.36218"
+         style="font-weight:bold">libvirt</tspan></text>
+    <text
+       sodipodi:linespacing="125%"
+       id="text3061"
+       y="127.70382"
+       x="336.6257"
+       style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans"
+       xml:space="preserve"><tspan
+         style="font-size:18px;font-weight:bold;stroke:none"
+         y="127.70382"
+         x="336.6257"
+         id="tspan3063"
+         sodipodi:role="line">virtio-scsi</tspan></text>
+    <g
+       id="g3830"
+       transform="translate(310,180)" />
+    <g
+       id="g5420"
+       transform="translate(0,50)">
+      <rect
+         rx="4.2487488"
+         ry="5"
+         y="100.36218"
+         x="270"
+         height="32"
+         width="142"
+         id="rect4185"
+         style="fill:#f9e0e0;fill-opacity:1;stroke:#060000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+      <text
+         sodipodi:linespacing="125%"
+         id="text4187"
+         y="123.36218"
+         x="339"
+         style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans"
+         xml:space="preserve"><tspan
+           style="font-weight:bold;fill:#000000;fill-opacity:1"
+           y="123.36218"
+           x="339"
+           id="tspan4189"
+           sodipodi:role="line">qemu/kernel</tspan></text>
+    </g>
+    <image
+       width="48"
+       height="48"
+       xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABHNCSVQICAgIfAhkiAAAD19JREFU aIHVmWuMXVd1x39r7X3ucx52bIdEiR2cxHkTJxQnRSUhPCRImzRCoiofovJQqdQ2FnyoFNESjwZT IUtVS2X6oUpLC+VLZagIpHzgQ5OGVhDzSEoSPzB14keCx3Ziz+O+ztl7r37YZ8ZjZ2xMQ1v1Skv7 3DN3zv3/13utK2bG/+eX/l8DeKMv/8t60PT09FrgPu/9Pc65jSmlK1JK61JKXVXtOacnVPXllOzF siyfBB6fmpo6+Ua/V96IC01PT18iIh/13j8IdtOm6zZVV2/c2B0b69Jud2i1WjQaDaoqUJYjhsMh vV6fgwf/s7dnz75CRPZUVfUVM/u7qamp1/7XCExPT7dU9ZOq8ie3vOUmf80117bWrV1LVZUMR0NS TKRkLD7bO4f3Bd55nPc0m02azRYnTp5g3959o2eeeaaKKf1pSunzU1NTw/9RAp/5zGd+W1X/atOm azpbtrytrU6Zn59lNBphZqgoqg5VPXMtiojke6oUvkG73cYXnkajyXA45KnvPDXcu29fL8b4h9u2 bfvHXzqB6elpVdW/nJyc+N33vvfdrU6nw6uvnWA4HKCqiJwBLDicy2CFM8BVHCKy5FoigohQFAWN ZpPTp0/x9W98Yzg3N/c3ZVl+YmpqKv1SCOzYsWOyqspvrl+/fss733lX67VTJ5mbm10CdjZ4QcSj 4lC1JeBLJFTptDt4XyxZRQREBV8UiCrf+tY/j146dGi3qt7/8MMPz74hAjt27JgMoXx28+bbrrzl LTf7I0deYjQargg+n4qlAkHwBbhz3Mk5x9jYWP2/siSLRNQrjUaT7z79vbB79+6jzrnbLkTignVg 165drqqqx2+//fYrb3nLTf7w4RcZDgeklGoxLBlm1KdhiTp4hRQ1309GSkaKCUHO3IvpzP9Zfk4K idFwyNvv/FV/xx13XBljfHzXrl3uv0Vg//79O9+88aq3bb5tsz927GXMEs5lPzYjAzBbOi1xhpgZ KUKMiRiMFPM95xyWAJPa3QSMLIBIhlSORrz9zjv91Rs3/sqBAwd2/sIEpqenP7Rq1eSH3/2ud7WO H/8ZKaWz3MbMSGbEuKhdI6a0DByZZNKMzyBGQ8Rl6yQjGdliqeawmHotWzFUgXvvfX97YmL8w9PT 0x+6aAI7d+5sOud23vvr7+8s9GYJoUJVcc6dOUXBsvYEqQFkkIsWAYgxWypGw0wQXG0hIEFM2d0w QLJ7ZUsIKWWXu/+++zre+507d+5sXhSB2dnZh2688YbOWLdLv99bpnlB1OHqYFRVUkq1m6QlYFUV KauK0bDP3Nw88/MDRqOqthykVFuntkAyW4oLRPJ7M2KMLCzMMzE+wXWbNnVmZ2cfOhfr67LQ9PT0 hPf+6Ec++jvjw0GP/qBHjJEQAills8aYSNEIIZJSql1GSQYL8z1InnanQVEIg75gKVtw1apVTExM 0Ol0cKo4p4gTVARRausKiFFVFTFFRA3vPSElvvylL89XIVw5NTU1d14LiMjHb7t9c1EUnrIancnf blHzHqe+rra5aMVkLPQGnHrtNFUV6rgA5wURiEmIEbxvEoKxsNBnNArElAPdTGqBUVkyv7DAqCwB Q0QIMdJuNbn5lpu9iHz8gi5UFMWDN1x/XascDZfcRFVxmoNPVZFanHoQpbfQp98bkMxISYjJCMFw btGXFURxrsBMSEkYjkp6/SExGdGMqgrMzc8zv9DL7mg5KaRkYEYIFdddt6ldFMWD5yUwPT291sxu Wrt2LSEuD9xlfi8OEUXI2agcVYTKUAdmFUgJMkKd0mw2mVg1xtj4BBMTkyCOmMhiQgiJUVmxsNDn 9OwcZRWWxUid3cwwIITIpZeuI6V0U926A6+fB+67+eYbKrPUWKyOAKqAgYqRVHAqmCaqsmQ4GqHO kVJANbuN98rPZl4q9//0dOz3+61Oe6y/Zs1l/sbrNzdbzQ6jsoIEg8GAV44dY2JinFarAWIg5C+L hqEQI2bZgmbGtddeU+3bt/8+4O9fZ4FGo3HP1Vdf3Y0p4NyZTOPUoc5nkax5EaXX74NliyBKo9nE UrI9e/YMj80c+4vBYLDFzFqDYe/OI0cP/vm//Os3Bq+enjFfeGaOn2TmxKsMy8Ds7DwxQRVTdr8U c3yklDOV5esQIxuvfnO30Wjcs6IFVHXj+Ph4bou1LlYJVBNmIGRX0SRQV151jpgEFY8vlL379o2S 2T3btj3y9LJHvwD88fbt2x97evcTT979jt9ojaqKmMCpUsZIGSINcYRoeBFirK0RU67WSYkx0e10 UNWN5wnidEW73UFEsvbrzCOqgGTNW9Z+rjeelDwkT6M5xszMiRL4/COPnAV+6fXII488nVL8i0NH flKuvmSCKhohJkKCUVlRxZQlJKJlayxKrjeBVrtNSumKFQmEkNa1263c3orUnaSgOMwKUvLEVJBi g1A5vG/TarRptbuMdVdx+vTpFEL4h5XAL75ijF85fvxoHBtrYikSasCDUZnJRCMhxAShDuKYjIQR YqTZapJSWreiC8UYu81mkzSscM6x2GUlMyxGMEUxTBLeQ7frUU2oMyYmGwy+22tefvnlBy5E4PLL Lz9w7Nix5ljXIcTchJhQhUiom7oqRBDFi1EFAVGI9XjqC2KM3RUt4L3rVaFaSp0qgnO5Yjqfi5io yw/EESOEKIQgxKCMj4+XMzMz112IwMzMzHWTk5NVSiWuGAABkYhKwlKqXcoyodoCKeUYNIHRqMQ5 11uRgPP+xHA4zBW29nunSuGFRlNotgTnF4ePBoMhzM8Lp14TTpw01lxyhQP9yIUIqOrHNmy40ofY o/BDnA4QiTSbCkSw7FbRIEQjpEwo1r3SwsICqnpiRQICLw8GuQI7yVrXum3w6ur5VSgaSqvtQAIm gWAVs3M9rr32Zq8qD23fvv2ulcBv3779Lu/91re+9VY3N3+SopHwRYnICKcGBLAAFutAtqVYCDFi IvT7fRB5Zclrln9BSvbiwsLC3W+6dB2qEWeGqaFqJAEVclBrwvu8UYjDim63Q6czRrfb5O673tf8 zr99+9uf/exnd5rZl1JKB1R1k1f9WKPR2PqBDzxQxFghRBoNAQJOFZVITtQORQAlJkNlsXMVUoKF hR6YHVyRwGg0evLATw58cNOma7suOSwJ6iKaLM+rCpIs90ICa9euoywjCcViYtAfsWb1OvnAAx9q Pffcjz7xs2NHH5qbn2uuWjVZbdhwhb/9tltdCCNmT5/Ee6VReFKKFJ0CdICQU7gRcgmIddsSBURQ dRw5dLhXb/ZeTwB4/Pnn9/z1++9935k9TsoWcC5rwClIw9FqeWIUev0Rg2GFOBA1ev0Rzhkb1l/d uOH6G2i3HTFVTXUjjhzeQ0oVvmhgJJyDdruBqhFTiVHkQUc8RrZITkiKRyEZhw8fLoDHVyQwNTV1 cseOHXtmjs3cdtllb8I01auRLEVDaTQ8VVgsLtBoNKmCkUKFioAJc7OnOfXqCbCAWYW6IROrlOFg RNE0XOVRlxNFs+GpYkIlkhgBuVE0E6x2q8WpbebEccS5vVOf/vTSTvV17fRoNPrK88/vHYooormY FUWDZrNJo2icWYHUA7k6pdVq0Ww2Ec1/Gw6HuMLhCsUXDigYDRxmQjkaUlV9sBLvcp8jREwjWJVJ E4CEWcQsklIeag4dPDiMVXVWoXwdATN79JlnnqkWFnpnzb/OnVkP5nhQVGXputHM60LECLEi93eC quCdEoPipIGKp9Vo4ZwQY0mMI5IlLAaQCFQki9mF6onfO2UwGHD4pRcrM3v0ggSmpqbmUkrTTz7x ZD/3/hmgQQ1YajKL7UYmhoB6h/eeNWvWsGrVKsbGujTbTTrdDuPjHVatvoSJ8XV43wCTvMmIiZQi kFcyRh6YzTIBS4lm4Xnh2R/1U0rTy8fJFQkATE5OfmHP3n39kydPgkj+4Fng6wB3tQVcveNBKEOF L/IGutsdY2Jigu54l1anCeJwvoFKE5H8PgaIQWrwYCkB9eLMEo3CsTA3y4ljrwxWr179hXOxrkhg 69atoxDCH3z1a//UDyEiurj+Wxy+ZYmQquAUUCFvYnNcyKKo5l2QalaGOEQLRBuodBBtYuZJydWD i8fycgmniveOZ7//vX5K6fe3bt06uigCANu2bds1Nzf3t19/7LGhkFvzrOPcw0s9mTmXAas6Yowg IOLy4C+Kep9FHeoEcJgo4OvcXiBaEJMnRa3n4KyKVqvFf/zg+8PhqPfFbdu27VoJ5wVXi2VZfvLQ oUO7n/rOU8E5zX5eB653itYW0NqNQkzIYh+lgtQzdJ6CPKIeXLYAuvx0IEKsGzdEabfa/HTv3urU qye/n0L6xPkwXtR22pI9u+WOLVe+49fu8lZv00JlhPq6rIyyiswv9MBiHu6JWCrBAilVJKuwFEix wgh5cZVC7ndCrDcZCXUN2p1xDh44WL18+MgrRVFsvtB2+qJ/H0gpffOq9Vfd8cBvPtBUVxBi3osu zrKDYUl/WBFCbsgsVUuFzCyTMSIxBpBEjHlxFWPO8yFEnC8QCl748QvD2dOzPyiK4r6f9/vARf3M +vDDD8+WZXnP4aOHH/3il744ePW1ExRFXRsUnOTtaOEV7/PMIM5nX5fa59VjlpcDmOZAFo9qgfdN xsZXU5XGD3f/cHD61Okvxhjf+fPAX5QFJO+7l+RTn/rUb411xz6/adOm9l1339MeG5ukrCK9QUkV ImWVW+HsKhFLtQWsBMuahzzfiua14mA4Ys9ze4Ynj5/sDwaDT37uc5/7KpCWi50H6HkJiEhOGRn4 WeeNN97Yvv/++39vYmLij2666Zbi+utvbF566WUEE0ZloKwXVjEEklUIKccGgcVkC8bxmRmOHDo8 euXoy9XCwsKfPfbYY4/u379/sAx4XH6aWbwoAjX4c4G/jsytt946+Z73vOfB1avXfFCVa666amO4 auM17Va7S9Fo0Wi18L6gHPXp9eYZ9Hv0F+Y5evTw8PixYy6E+OKpU6997Yknnvjyc889N1cDPQv0 ufcsF4mLssCK2l9Gpgt06rO9YcOGy7Zs2XLX+vXrN7fbnTc1GsUlqm7MLDVFZFSF2AtVearXG8y8 /PKRH+/evfvfjx49ehzoL5N5oLwA+HBRFjjHEsu1r+dcF0BzmbTOORv151MNbFEG9TkERvVZco7f 1+BDDf4Xi4HzkDmXwKIsFuvFa1Y4bdl5rqT6XK7xdK67vCECFyB1rrDC++XAVyRxPg3/vNd/Aedi DqSBPaEJAAAAAElFTkSuQmCC "
+       id="image4311"
+       x="202"
+       y="20.362183" />
+    <image
+       width="48"
+       height="48"
+       xlink:href="data:image/png;base64,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 "
+       id="image4376"
+       x="262"
+       y="20.362183" />
+    <image
+       width="48"
+       height="48"
+       xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABHNCSVQICAgIfAhkiAAAB3xJREFU aIHVWluPFEUU/k71TM/shV0QWQ0YFdAQuZkYH/RJYjTRZB948cH4A/wjJib67gMxBoxGjAkkKmoU kPhgfDEYUAPEeIkBFPbizg6XnZmu40PdTlV3z7oXNFa2u6tqqru/75zvnKouIGbG/7mo/xrAWkuj 7oczZz65t0DjFWb9EjO3ASD11rC2qXL6W5Fl6rJm/FAUxWcYZG9OT0/fXAsBqpPQyS8/fWP/3sde ntpyz7p5aVAM0OstobvYweU/r97+48rVvkb/9bHWxlcPHDgwWM0zawl8furTxWeffm68P+iBNVtb srEkAwz2VjbPMO1QN/eY8aGeqQytVhtZlqHb7eDX33+5ffXKlbM3G73nX3jmhYWVEqi1rta6TUTQ Whsw7K5swQegHrynaQsDJK0FoCgGuHFzETdudDE+tgEP79jV3rF95+PtfvP8Rx99sH3dCDBre2Vo CZ45WNV6z+s9upp6qNq6ZbTUu4U//ryKPG9h29b7mrse3rVNK3X2+PEPnlwXAlqbV6fgwUIeiQei qzSGAO5fnDXQ6/cwPz+HVmsEW+6eUnse2TdJDXXy2LH3n1gzAe8BHVteSwn5/iQmzAP81bEgQUuB kGUZZmauoZFlaOUtTExOYPfuPaOUqRNHPzy6dW0EtA/b2ANAEgcWsiMhQafPBMnMCqUUAEK/30cz b6HVbGFiwwR27nxooqnpi8OHD7dXTUCLGCgFb5JZYGVkb4BvceINIS0GQEQgRSiKAs1GE81mDqUy TE3d09i6ddvO8cn2kVUTYOF6RgDvpBLSYwXgGtBggGwsEAFZliFTGX76+Sec/e5bXLhwAXPzcwCA B+5/oDUxPjH9zntHXhxGoHYm1jp4IJpRq9mK37g0iBwNih9ARFBKod/vodvtYrGziG63i5GREezd vw8P7tgxOrcw/xqAo3WvXsYDLlARy4URZBRJJryGS2fXH0RkJKSglIIihSzLQEphdnYWZ06fQTNr YGJ8w+Tb7751sA7nEA/EEGRcUjRlkUAvQZI1RPpk5w9CljUwOjqCrJFhdHQUGzdtxFKvh+7iIq5d v46vv/4Ge/bu3jA3N3sQwPEVEWDWQsPOrPbl5IBQhDDUrFbETOw4OhURjITyPEee58DYWBRLuwH0 +j1wwQDoqTqcy05kQi2Q+gjZJwVf10oXFWmd/NkFerOZY/PmuzEYDO47dOhQc0UE3EQmXy8zjrSs g0u+h6y3KjC6A2T+HGICSAwg28qbORhAnudZFc4hMSCQeREFK6XSJqvriJpLmdEoh58Bdm0uhxIB xIRGo1mTf0ypX+v7icw+lMk3yuBjmC7DRCYvkZHd1upEUET23jBYezWsgACXbqoyA8dB6qBQmVJ1 BxISti1JQEyqFaVeQv6mKH9GKIjC2oY8AA5j2fQbcQmA7KiLsYgThSShtQYqI2BYGtVVbqNyjRAC NtGHNyJ7NoGErbgvPOe5kk9plR4oWIpiSBRJoAAYClJaThIuStMIInJs0nlDJAwNAL+tjAAXOjzA Sof8xFtByo1xZ44zqQErpCbf5Zm6hnwDrS0GolttzlahIUZQfFYi5ccsS8V96LAbYiXnvcG6xv7/ NAbkzJXg8ZNPVTYZArr0IH+2SxXhvjV5gMQCnuQ1BS3lMQx8mBLSNaAfQEmkMHNdCAzzgFMgeek4 UOTSqQDt+yRpCaqai1dhDDmOsWET2RAP6BBXRJ4IlYCXQUd1afK6Yp8XzQPCD86YKyLgdWct7ywc rnUEpLUJwjGoZyIXjGLOsBBW5wGthWTYEil7IViYyiQ95uHhXJmWReJYkwcCGAG60vop8JiAFFUa xVQ6x0WvJgvJNBoWh2WdS/CxhwIRzyONB5Hz/XsBt9IOPCuXNcsQ8KwjWVQEqMdYDb4c9OEdwxYo AIPtXLCqecDoLjVXQkICCx2RhOqC37TEF56zOrsPI/M7ELZ4qsqyO3P/rFQTLdVLXqwJ7qRjmAeW 2RutuZHTquzgSNEsa3YzQO54G6nYZ7CL6/i9K/4iIyLyN/mNiDKs0osh9ovkvqg/LPBkx1tuW5b3 U00QdzqdyiwcxQAF3yqO1nIMsmmB2XzvmisAJjCx/8oKH/d1bq/acpGAnUG8VVCwxszMjCIiBYBZ aMoToPAVrgA0/O40YL8DjKsDeLtOd6mQOEw+Jex+76GelPBiSoALxsWLF9sA+gAKItKORJqFFIAm gBECelpzQ5FNqWxmZEMCCRnbrrCv/xp2A4y54pEsL4GA+cRkaGa+dOnSmCWwBGDgSEgCzvo5gPG/ Fjqnzn9/bnr/vkepvLr898rFSxewuLBwbn5+fiMseACF+z31gJMRffzxicNLt29Nbbpr0+Os2e8J RK51Z9lOtxtr2sv+ZoBwZ6Hz45envzoCY1yHLwAOax5SMJsXOYBRAJMANgEYB9C2ZDN7jRP5+hSH W8NYuG+P2wA6AGYBdAHcsv2amVkScBJyIHN7bYh+N2a9wUsS7igsGQ0jm744NGw2iv6lPslE0mXp cScLi6s8HBl24AGU/6sBpfP88PqdKGm2lYTACeC/AVTAtYY0GBp5AAAAAElFTkSuQmCC "
+       id="image4441"
+       x="322"
+       y="20.362183" />
+    <image
+       width="48"
+       height="48"
+       xlink:href="data:image/png;base64,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 "
+       id="image4506"
+       x="382"
+       y="20.362183" />
+    <image
+       width="48"
+       height="48"
+       xlink:href="data:image/png;base64,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 L9kiFx1ruqaWAAAAAElFTkSuQmCC "
+       id="image4571"
+       x="434"
+       y="20.362183" />
+    <path
+       sodipodi:nodetypes="cc"
+       inkscape:connector-curvature="0"
+       id="path4574"
+       d="m 340,222.36218 0,-30"
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)" />
+    <text
+       xml:space="preserve"
+       style="font-size:84.77093506px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans"
+       x="-142.56804"
+       y="219.52768"
+       id="text5617"
+       sodipodi:linespacing="125%"
+       transform="matrix(0,-0.57770443,1.730989,0,0,0)"><tspan
+         sodipodi:role="line"
+         id="tspan5619"
+         x="-142.56804"
+         y="219.52768">{</tspan></text>
+    <g
+       transform="translate(207,191)"
+       id="g3051">
+      <rect
+         style="fill:#cc0000;fill-opacity:1;stroke:#000000;stroke-width:0.17716534;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+         id="rect3053"
+         width="124.24875"
+         height="39.395943"
+         x="70"
+         y="112.36218"
+         ry="5"
+         rx="4.2487488" />
+      <text
+         xml:space="preserve"
+         style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans"
+         x="133"
+         y="137.36218"
+         id="text3055"
+         sodipodi:linespacing="125%"><tspan
+           sodipodi:role="line"
+           id="tspan3057"
+           x="133"
+           y="137.36218"
+           style="font-weight:bold">libguestfs</tspan></text>
+    </g>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
+       d="m 340,302.36218 0,-30"
+       id="path3059"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
+       d="M 339.91142,139.84668 340,98.36218"
+       id="path3065"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
+       d="m 519.91142,239.84668 -110,0"
+       id="path3846"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       sodipodi:nodetypes="cc"
+       inkscape:connector-curvature="0"
+       id="path3848"
+       d="m 519.91142,119.84668 -110,0"
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)" />
+    <text
+       xml:space="preserve"
+       style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans"
+       x="525.97888"
+       y="125.13239"
+       id="text3850"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3852"
+         x="525.97888"
+         y="125.13239">New in qemu</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans"
+       x="526.19812"
+       y="245.84668"
+       id="text3854"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3856"
+         x="526.19812"
+         y="245.84668">New in libguestfs</tspan></text>
+  </g>
+</svg>
diff --git a/2012-kvm-forum/notes.txt b/2012-kvm-forum/notes.txt
new file mode 100644 (file)
index 0000000..91b7964
--- /dev/null
@@ -0,0 +1,108 @@
+libguestfs Barcelona talk (20 minutes)
+
+    "Libguestfs is a C library that provides a way to access and
+    modify virtual machine disk images.  It uses qemu and the Linux
+    kernel, so we can manipulate just about any disk image,
+    filesystem, partitioning scheme, LVM, Windows disks, and more.
+    Above this layer are many specialized "virt-*" tools for carrying
+    out specific tasks.
+
+    In this talk, Richard Jones will give a live demonstration of
+    libguestfs and the virt tools, and talk about the new features
+    available in libguestfs 1.20."
+
+    email slides to: cfp@linuxfoundation.org
+
+----------------------------------------------------------------------
+
+Audience:
+ - KVM developers
+
+Interested in:
+ - What they can use it for
+ - How it works
+ - Problems with KVM
+ - New features, particularly ones which use new features in KVM
+
+What do they want to do with images:
+ - Viewing and file injection for personal use
+ - Use in management tools like oVirt, OpenStack
+
+New features of interest:
+ - libvirt management of appliance
+   . sVirt / SELinux
+   . remote access
+ - virtio-scsi
+   . lots of disks
+   . hot plugging of disks
+   . sparsification
+
+[---- OVERVIEW ----]
+
+C library
+nearly 400 different API calls
+
+handout and website contains example programs
+
+  NEXT SLIDE: 0300
+
+manages a qemu subprocess, running a minimal Linux
+  distro that we call the "appliance"
+
+uses kernel code, qemu so supports
+ - qcow2
+ - VMDK
+ - all filesystems
+ - partitioning
+ - LVM
+ - etc
+
+doesn't need root, doesn't create device nodes, is
+  secure and well-behaved
+
+  NEXT SLIDE: 0400
+
+around the API is a whole ecosystem of tools, programs
+and external projects
+
+  - virt tools, in C, Perl, OCaml
+  - OpenStack (Python)
+  - BoxGrinder (Ruby)
+  - Oz (Python)
+  - virt-p2v, virt-v2v (Perl)
+
+
+[---- NEW FEATURES IN LIBGUESTFS 1.20 ----]
+
+libguestfs 1.20 should be released at the end of this year, after
+a very long (7 month) development cycle.
+
+Two major changes:
+
+ - libvirt
+ - virtio-scsi
+
+Implies:
+
+ . sVirt / SELinux
+ . remote access
+ . 255 disks
+ . hot plugging of disks
+
+
+
+[---- FUTURE WORK IN KVM ----]
+
+
+[---- SUMMARY ----]
+
+Website:
+
+ - code
+ - examples
+ - manual pages and documentation
+
+There is a PDF handout which contains more background material.
+
+This talk and others are available from the libguestfs-talks
+git repository.
diff --git a/2012-kvm-forum/openstack.png b/2012-kvm-forum/openstack.png
new file mode 100644 (file)
index 0000000..146faec
Binary files /dev/null and b/2012-kvm-forum/openstack.png differ
diff --git a/2012-kvm-forum/overview.svg b/2012-kvm-forum/overview.svg
new file mode 100644 (file)
index 0000000..c22dc16
--- /dev/null
@@ -0,0 +1,797 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="805.17719"
+   height="549.4845"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.48.2 r9819"
+   sodipodi:docname="0200-overview.svg">
+  <defs
+     id="defs4">
+    <marker
+       inkscape:stockid="Arrow1Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow1Lend"
+       style="overflow:visible">
+      <path
+         id="path4582"
+         d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
+         transform="matrix(-0.8,0,0,-0.8,-10,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="1.4"
+     inkscape:cx="550.55156"
+     inkscape:cy="339.26051"
+     inkscape:document-units="px"
+     inkscape:current-layer="g5712"
+     showgrid="true"
+     inkscape:window-width="1550"
+     inkscape:window-height="841"
+     inkscape:window-x="22"
+     inkscape:window-y="33"
+     inkscape:window-maximized="0"
+     fit-margin-top="20"
+     fit-margin-left="20"
+     fit-margin-right="20"
+     fit-margin-bottom="20">
+    <inkscape:grid
+       type="xygrid"
+       id="grid2991"
+       empspacing="5"
+       visible="true"
+       enabled="true"
+       snapvisiblegridlinesonly="true" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(0.08858267,-0.36218262)">
+    <g
+       id="g3769"
+       transform="translate(207,61)">
+      <rect
+         rx="4.2487488"
+         ry="5"
+         y="112.36218"
+         x="70"
+         height="39.395943"
+         width="124.24875"
+         id="rect2989"
+         style="fill:#cc0000;fill-opacity:1;stroke:#000000;stroke-width:0.17716534;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+      <text
+         sodipodi:linespacing="125%"
+         id="text2985"
+         y="137.36218"
+         x="133"
+         style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans"
+         xml:space="preserve"><tspan
+           style="font-weight:bold"
+           y="137.36218"
+           x="133"
+           id="tspan2987"
+           sodipodi:role="line">libguestfs.so</tspan></text>
+    </g>
+    <g
+       id="g3812"
+       transform="translate(-73,83)">
+      <rect
+         rx="4.2487488"
+         ry="5"
+         y="187.36218"
+         x="417"
+         height="35"
+         width="103"
+         id="rect3784"
+         style="fill:#cc0000;fill-opacity:1;stroke:#000000;stroke-width:0.17716534;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+      <text
+         sodipodi:linespacing="125%"
+         id="text3786"
+         y="210.36218"
+         x="468"
+         style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans"
+         xml:space="preserve"><tspan
+           style="font-weight:bold"
+           y="210.36218"
+           x="468"
+           id="tspan3788"
+           sodipodi:role="line">Python</tspan></text>
+    </g>
+    <g
+       id="g3817"
+       transform="translate(-7,83)">
+      <rect
+         style="fill:#cc0000;fill-opacity:1;stroke:#000000;stroke-width:0.17716534;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+         id="rect3792"
+         width="103"
+         height="35"
+         x="577"
+         y="187.36218"
+         ry="5"
+         rx="4.2487488" />
+      <text
+         xml:space="preserve"
+         style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans"
+         x="628"
+         y="210.36218"
+         id="text3794"
+         sodipodi:linespacing="125%"><tspan
+           sodipodi:role="line"
+           id="tspan3796"
+           x="628"
+           y="210.36218"
+           style="font-weight:bold">OCaml</tspan></text>
+    </g>
+    <g
+       transform="translate(-50,218)"
+       id="g3822">
+      <rect
+         style="fill:#cc0000;fill-opacity:1;stroke:#000000;stroke-width:0.17716534;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+         id="rect3824"
+         width="124.24875"
+         height="39.395943"
+         x="70"
+         y="112.36218"
+         ry="5"
+         rx="4.2487488" />
+      <text
+         xml:space="preserve"
+         style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans"
+         x="133"
+         y="137.36218"
+         id="text3826"
+         sodipodi:linespacing="125%"><tspan
+           sodipodi:role="line"
+           id="tspan3828"
+           x="133"
+           y="137.36218"
+           style="font-weight:bold">guestfish</tspan></text>
+    </g>
+    <g
+       id="g3830"
+       transform="translate(310,180)" />
+    <g
+       transform="translate(540,238)"
+       id="g3838">
+      <rect
+         style="fill:#cc0000;fill-opacity:1;stroke:#000000;stroke-width:0.17716534;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+         id="rect3840"
+         width="124.24875"
+         height="39.395943"
+         x="70"
+         y="112.36218"
+         ry="5"
+         rx="4.2487488" />
+      <text
+         xml:space="preserve"
+         style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans"
+         x="133"
+         y="137.36218"
+         id="text3842"
+         sodipodi:linespacing="125%"><tspan
+           sodipodi:role="line"
+           id="tspan3844"
+           x="133"
+           y="137.36218"
+           style="font-weight:bold">virt-resize</tspan></text>
+    </g>
+    <g
+       id="g3846"
+       transform="translate(50,288)">
+      <rect
+         rx="4.2487488"
+         ry="5"
+         y="112.36218"
+         x="70"
+         height="39.395943"
+         width="124.24875"
+         id="rect3848"
+         style="fill:#cc0000;fill-opacity:1;stroke:#000000;stroke-width:0.17716534;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+      <text
+         sodipodi:linespacing="125%"
+         id="text3850"
+         y="137.36218"
+         x="133"
+         style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans"
+         xml:space="preserve"><tspan
+           style="font-weight:bold"
+           y="137.36218"
+           x="133"
+           id="tspan3852"
+           sodipodi:role="line">virt-df</tspan></text>
+    </g>
+    <g
+       id="g3854"
+       transform="translate(500,308)">
+      <rect
+         rx="4.2487488"
+         ry="5"
+         y="112.36218"
+         x="70"
+         height="39.395943"
+         width="124.24875"
+         id="rect3856"
+         style="fill:#cc0000;fill-opacity:1;stroke:#000000;stroke-width:0.17716534;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+      <text
+         sodipodi:linespacing="125%"
+         id="text3858"
+         y="137.36218"
+         x="133"
+         style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans"
+         xml:space="preserve"><tspan
+           style="font-weight:bold"
+           y="137.36218"
+           x="133"
+           id="tspan3860"
+           sodipodi:role="line">virt-sparsify</tspan></text>
+    </g>
+    <g
+       transform="translate(450,378)"
+       id="g3862">
+      <rect
+         style="fill:#cc0000;fill-opacity:1;stroke:#000000;stroke-width:0.17716534;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+         id="rect3864"
+         width="124.24875"
+         height="39.395943"
+         x="70"
+         y="112.36218"
+         ry="5"
+         rx="4.2487488" />
+      <text
+         xml:space="preserve"
+         style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans"
+         x="133"
+         y="137.36218"
+         id="text3866"
+         sodipodi:linespacing="125%"><tspan
+           sodipodi:role="line"
+           id="tspan3868"
+           x="133"
+           y="137.36218"
+           style="font-weight:bold">virt-sysprep</tspan></text>
+    </g>
+    <g
+       transform="translate(120,358)"
+       id="g3870">
+      <rect
+         style="fill:#cc0000;fill-opacity:1;stroke:#000000;stroke-width:0.17716534;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+         id="rect3872"
+         width="124.24875"
+         height="39.395943"
+         x="70"
+         y="112.36218"
+         ry="5"
+         rx="4.2487488" />
+      <text
+         xml:space="preserve"
+         style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans"
+         x="133"
+         y="137.36218"
+         id="text3874"
+         sodipodi:linespacing="125%"><tspan
+           sodipodi:role="line"
+           id="tspan3876"
+           x="133"
+           y="137.36218"
+           style="font-weight:bold">virt-edit</tspan></text>
+      <image
+         y="22.362183"
+         x="230"
+         id="image3993"
+         xlink:href="data:image/png;base64,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
+SUVORK5CYII=
+"
+         height="56"
+         width="167" />
+    </g>
+    <g
+       id="g5420">
+      <rect
+         rx="4.2487488"
+         ry="5"
+         y="100.36218"
+         x="270"
+         height="32"
+         width="142"
+         id="rect4185"
+         style="fill:#f9e0e0;fill-opacity:1;stroke:#060000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+      <text
+         sodipodi:linespacing="125%"
+         id="text4187"
+         y="123.36218"
+         x="339"
+         style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans"
+         xml:space="preserve"><tspan
+           style="font-weight:bold;fill:#000000;fill-opacity:1"
+           y="123.36218"
+           x="339"
+           id="tspan4189"
+           sodipodi:role="line">qemu/kernel</tspan></text>
+    </g>
+    <image
+       width="48"
+       height="48"
+       xlink:href="data:image/png;base64,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
+DqSBPaEJAAAAAElFTkSuQmCC
+"
+       id="image4311"
+       x="202"
+       y="20.362183" />
+    <image
+       width="48"
+       height="48"
+       xlink:href="data:image/png;base64,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
+"
+       id="image4376"
+       x="262"
+       y="20.362183" />
+    <image
+       width="48"
+       height="48"
+       xlink:href="data:image/png;base64,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
+"
+       id="image4441"
+       x="322"
+       y="20.362183" />
+    <image
+       width="48"
+       height="48"
+       xlink:href="data:image/png;base64,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
+"
+       id="image4506"
+       x="382"
+       y="20.362183" />
+    <image
+       width="48"
+       height="48"
+       xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABHNCSVQICAgIfAhkiAAABrNJREFU
+aIHVmc9vXUcVxz9nZu5z4tipiU2qCOqESqgIqYElUitFAZE2i2xYdIVoigChroCIvwCWlVC3KBJS
+FwghFhSUNoWKSIEQFYIKEUKFBT/s/KhoQpw4rp13Z+awmLk/3i/znio/kyNdv3fnzpt7vvP9njNn
+xqKqPMxmdtuBD2oPPQA3rPG5577w+YicNUaWAW7dXmP9Yy9M1zNg5q/fZ37fHhTF+7CCyFfefOPN
+X7b7DAWgyNkjhw8vHziwBKpcefuPfPmLT0/H65b94Luv8OjBQ6hG1jfuL6/duX0WONzuMxSAGFle
+XPwwr/7sp8QQ8FF4++93puJ0265fv847f/kzAhw/fpw7/7m93N9nKIBkyluXf8e3znyTCxd/wzc+
+t8Dc3PwOuttr9++v89pLcOP6DZ4//SV8GQgxDvQbGcSqyplvn0FEkB11dTsTTr9wGsGgqsQQBnoM
+ZSDGCAqXf3sJVUASBJHpJi0RuHDhV6gqTz31NCEMMjAUQAgBRRFjENXKf4yZMhciiBgEBVXCuAyE
+EEEVI4IiCAm5MVNmAMEYQRUUJcRxJRQCCjUDiHB3Y427G2s77XOvCS0GII4toRgaBkQQgUf2LbC0
+dHDHfa7s1q1/I9LHwCQSajNQ5SGR6caA5HcKAsr4AGLoZaCK4mnHACIYk1Koqqbs2GfbZKE2A9V4
+0w7izECewPElFHMWyvprGJiyhPoYmCAGMgM5A+wWAyB9DIwpoWrJbjNwd2ONu3+bbhoVoWGACUqJ
+lIW0YSCn0cceO7LTPte2uvrPvBJLXQmMvZCFEEAbBnarnBME6YmBcSUUQ+8qOOX8X5vkLJTPHSaS
+ELQY2C3/BQwGZUIGQl7ImiyUEKjqVFbj6qgnSYiagQlioJcB6yx/unp1h9wdbr+/ciWtAyIomv0a
+e0NTrQMpC8zvm+Wl771cBzdQD5omS0e0N18mbQdwLisgv2P8arSqhXIGmJkp6HT25/G1daUXVnm6
+atP0p9Xe16bJ7eo7rfGqcZq2xIBOwkAIkVjpMLNQv4ykTZU2CEAFQXN7nkgVpAIhTRuqub26zQ81
+zXZq721DJ93QaC9dFZDFAwc4+qkncc71sTHu1cz8++9vcvHir7l540aa8dZ7iqJgbm4f1tpczMhk
+EtI4/ND3E598gqOffpJHDx7CGouxFmst1th8b7DGpRdHJWokxuYKMVCWJcF7br57E1AuXbrcIyeA
+rQcP2NzcZG5uLu0KmaScjo2E+m2ms4elpYP84epbdIoON1ffo+yWPbO8f/9+jh07RlmWlL6kLEt8
+/qzuO50Oyx890ntsI6Akuc7u3cvW5la9Jxl1hj6aAR1EC+CDxxiDs46i6LC1tcWrPz9fPxcRTj7z
+WXzwhOAJIRBCwOfPEALWOqyxebyAGOmNF8BYgytcsy8fgWB0DIyQUAgBI4bCFRSuIIRAYS3tcin4
+xtlQA/H4nIads1jncl+PEVMHfxXkRgzO2taucAIA7Sw08MyHxEBR4FxB8AHnXN/vB2e9AlMUBc45
+nHV135oBmoxlrEmVQM3AcH9GnkpsLyFbM+CDxzk70GeUdJx19Sci+MxowwCggjWudSohIwuyySXk
++yTkQw1AWn22k45zDuscBiF4P4QBxVhBTO/J3NgAtpOQD1lCLknIh0AxwMD20qkYiKr1eP2LojUW
+Y2RgX95vA5tcEZEQAt6nVNdvMb+wcAVFUaQZFOm5gvfbSsdlFsqyS/Ch/p0RgzEGY9JGRkhxYMTU
+DEhfOdzDQH5ojTXnXjt3/vizJ0/Mrq2tUZZli51eCS0tLeG971kHFhYWtpWOsy6Bi5GQ03KzkAGk
+KlSGM+BEJGgOUtfvPLCn+6D71dWVlR++fu78Z545eWLPvXv3ahApbxtc0aFwBadOnRq5YI2SjohQ
++hJflvjMQHK7qbGS/psYaM37HLAhIqWqapsByYD2AvNl6b9z7dq1l994/RdPnHj2RFHNRPAeay3L
+HzmCMSaVB8Hjvaf0nrLsUpYl3bJLjDFVMcb0lBnd7gNiCBlkYHZ2lhhjffoWo9IpZpiZ6dDpFKgq
+KyurOOfe894vAiUQgCDaaMsAe4AFYAl4HDhaFPb5sgyPVyi//uLX6Mx0xivc4v/u0+12+fGPfjIQ
+a/3mnLvnvT8LvAL8C1hX1QEAHWAe+BBwCPg4sJiltZumwH3gH8A7wLvApqoG19fJA5v5/gFwmwRq
+t/8hriTZrANrQBfSf11qBqAnkB3JacPIKmTqpiSnS6DOQj0AoAZRXf9vlneijdMDAB42221tf2D7
+L9kiFx1ruqaWAAAAAElFTkSuQmCC
+"
+       id="image4571"
+       x="434"
+       y="20.362183" />
+    <path
+       sodipodi:nodetypes="cc"
+       inkscape:connector-curvature="0"
+       id="path4574"
+       d="m 340,172.36218 0,-30"
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)" />
+    <path
+       sodipodi:nodetypes="cc"
+       inkscape:connector-curvature="0"
+       id="path5020"
+       d="m 110,322.36218 170,-100"
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)" />
+    <path
+       sodipodi:nodetypes="cc"
+       inkscape:connector-curvature="0"
+       id="path5022"
+       d="m 200,392.36218 110,-170"
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)" />
+    <path
+       sodipodi:nodetypes="cc"
+       inkscape:connector-curvature="0"
+       id="path5024"
+       d="m 260,462.36218 70,-240"
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)" />
+    <path
+       sodipodi:nodetypes="cc"
+       inkscape:connector-curvature="0"
+       id="path5026"
+       d="m 380,262.36218 -10,-40"
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
+       d="m 430,382.36218 -30,-70"
+       id="path5212"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
+       d="m 650,342.36218 -10,-30"
+       id="path5214"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
+       d="m 600,412.36218 10,-100"
+       id="path5216"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
+       d="m 550,482.36218 30,-170"
+       id="path5218"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <g
+       transform="translate(-117,83)"
+       id="g5425">
+      <rect
+         rx="4.2487488"
+         ry="5"
+         y="187.36218"
+         x="577"
+         height="35"
+         width="103"
+         id="rect5427"
+         style="fill:#cc0000;fill-opacity:1;stroke:#000000;stroke-width:0.17716534;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+      <text
+         sodipodi:linespacing="125%"
+         id="text5429"
+         y="210.36218"
+         x="628"
+         style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans"
+         xml:space="preserve"><tspan
+           style="font-weight:bold"
+           y="210.36218"
+           x="628"
+           id="tspan5431"
+           sodipodi:role="line">Perl</tspan></text>
+    </g>
+    <text
+       xml:space="preserve"
+       style="font-size:84.77093506px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans"
+       x="-142.56804"
+       y="219.52768"
+       id="text5617"
+       sodipodi:linespacing="125%"
+       transform="matrix(0,-0.57770443,1.730989,0,0,0)"><tspan
+         sodipodi:role="line"
+         id="tspan5619"
+         x="-142.56804"
+         y="219.52768">{</tspan></text>
+    <g
+       transform="translate(105,83)"
+       id="g5712">
+      <rect
+         rx="4.2487488"
+         ry="5"
+         y="187.36218"
+         x="577"
+         height="35"
+         width="103"
+         id="rect5714"
+         style="fill:#cc0000;fill-opacity:1;stroke:#000000;stroke-width:0.17716534;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+      <text
+         sodipodi:linespacing="125%"
+         id="text5716"
+         y="210.36218"
+         x="628"
+         style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans"
+         xml:space="preserve"><tspan
+           style="font-weight:bold"
+           y="210.36218"
+           x="628"
+           id="tspan5718"
+           sodipodi:role="line">Ruby</tspan></text>
+    </g>
+  </g>
+</svg>
diff --git a/2012-kvm-forum/redhat.png b/2012-kvm-forum/redhat.png
new file mode 100644 (file)
index 0000000..f50076a
Binary files /dev/null and b/2012-kvm-forum/redhat.png differ
diff --git a/2012-kvm-forum/run b/2012-kvm-forum/run
new file mode 100755 (executable)
index 0000000..e65e52d
--- /dev/null
@@ -0,0 +1,16 @@
+#!/bin/bash -
+# Run the talk.
+
+# Avoid GNOME keyring stupidity
+export GNOME_KEYRING_CONTROL=
+export GNOME_KEYRING_PID=
+
+# Clean up everything.
+find -name '*~' -delete
+
+# Get everything into the cache.
+guestfish -a /dev/null run > /dev/null
+guestfish --ro -a 0400-guestfish.d/disk.img -i exit > /dev/null
+
+# Run techtalk.
+techtalk-pse
diff --git a/2012-kvm-forum/style.css b/2012-kvm-forum/style.css
new file mode 100644 (file)
index 0000000..f11ec9a
--- /dev/null
@@ -0,0 +1,67 @@
+/* Red Hat red is rgb(204,0,0). */
+
+body {
+    background: url(redhat.png) no-repeat;
+    background-position: 98% 0;
+    font-size: 24pt; /* For max */
+    /* font-size: 20pt; */ /* For 1024x768 */
+    /* font-family: liberation, helvetica; */
+    font-family: helvetica;
+}
+
+body td { /* why?? */
+    /*font-size: 28pt;*/
+    font-size: 20pt;
+}
+
+h1 {
+    color: rgb(204,0,0);
+    /*font-size: 48px;*/
+    font-size: 40px;
+    top: 8;
+    left: 0;
+    border-bottom: 2px solid rgb(204,0,0);
+}
+
+b {
+    color: rgb(204,0,0);
+}
+
+div#titlepage {
+    margin-top: 100px;
+    text-align: center;
+}
+
+div#titlepage p.title {
+    color: rgb(204,0,0);
+    font-weight: bold;
+    font-size: 48px;
+}
+
+div#titlepage author {
+    font-size: 36px;
+}
+
+/* Code */
+pre.code {
+    margin-left: 1em;
+    background: #eee;
+}
+
+code {
+    color: rgb(204,0,0);
+}
+
+/* Bullet points */
+li {
+    padding-bottom: 16px;
+}
+
+/* Logo */
+img#fish {
+    position: absolute;
+    top: 128px;
+    right: 32px;
+    width: 200px;
+    /*height: 256px;*/
+}
\ No newline at end of file