Final running order for 2019 FOSDEM talk.
authorRichard W.M. Jones <rjones@redhat.com>
Fri, 16 Nov 2018 20:42:20 +0000 (20:42 +0000)
committerRichard W.M. Jones <rjones@redhat.com>
Fri, 16 Nov 2018 21:15:21 +0000 (21:15 +0000)
15 files changed:
2019-fosdem/.gitignore
2019-fosdem/6000-plugins.html [new file with mode: 0644]
2019-fosdem/6100-plugins-c.html [new file with mode: 0644]
2019-fosdem/6200-plugin-langs.html [new file with mode: 0644]
2019-fosdem/6300-plugins-shell.html [new file with mode: 0644]
2019-fosdem/6400-plugins-shell-2.html [new file with mode: 0644]
2019-fosdem/6450-cd.svg [new file with mode: 0644]
2019-fosdem/6450-plugins-shell-what.html [new file with mode: 0644]
2019-fosdem/6450-tarfile.svg [new file with mode: 0644]
2019-fosdem/6500-shell-next [new file with mode: 0755]
2019-fosdem/6500-shell.d/.stamp [new file with mode: 0644]
2019-fosdem/6500-shell.sh [new file with mode: 0755]
2019-fosdem/9000-final.html [new file with mode: 0644]
2019-fosdem/style.css
2019-fosdem/tar2iso.sh [new file with mode: 0755]

index 349864b..aa996d7 100644 (file)
@@ -6,6 +6,7 @@
 /2200-partitioning.d/.root.img
 /2200-partitioning.d/root.img
 /2200-partitioning.d/swap.img
+/6500-shell.d/tar2iso.sh
 /nbdview/error?
 /nbdview/log?
 /nbdview/sock?
\ No newline at end of file
diff --git a/2019-fosdem/6000-plugins.html b/2019-fosdem/6000-plugins.html
new file mode 100644 (file)
index 0000000..acd95ba
--- /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>Writing plugins</h1>
+
+<!-- note: div must have position: relative so child elements position
+     is correct -->
+<div style="background: #ccf; border: 1px solid rgb(204,0,0);
+            position:relative;
+            width: 800px; height: 400px;">
+  <code style="position: absolute; top: 1px; left: 10px;">curl</code>
+  <code style="position: absolute; top: 50px; left: 20px;">data</code>
+  <code style="position: absolute; top: 100px; left: 10px;">ext2</code>
+  <code style="position: absolute; top: 120px; left: 140px;">file</code>
+  <code style="position: absolute; top: 150px; left: 10px;">floppy</code>
+  <code style="position: absolute; top: 200px; left: 20px;">guestfs</code>
+  <code style="position: absolute; top: 250px; left: 10px;">gzip</code>
+  <code style="position: absolute; top: 280px; left: 150px;">iso</code>
+  <code style="position: absolute; top: 350px; left: 10px;">libvirt</code>
+
+  <code style="position: absolute; top: 5px; left: 340px;">lua</code>
+  <code style="position: absolute; top: 55px; left: 380px;">memory</code>
+  <code style="position: absolute; top: 105px; left: 340px;">nbd</code>
+  <code style="position: absolute; top: 125px; left: 450px;">null</code>
+  <code style="position: absolute; top: 155px; left: 340px;">ocaml</code>
+  <code style="position: absolute; top: 185px; left: 160px;">partitioning</code>
+  <code style="position: absolute; top: 240px; left: 380px;">pattern</code>
+  <code style="position: absolute; top: 300px; left: 320px;">perl</code>
+  <code style="position: absolute; top: 340px; left: 280px;">python</code>
+
+  <code style="position: absolute; top: 10px; left: 600px;">random</code>
+  <code style="position: absolute; top: 60px; left: 600px;">ruby</code>
+  <code style="position: absolute; top: 90px; left: 700px;">sh</code>
+  <code style="position: absolute; top: 130px; left: 590px;">split</code>
+  <code style="position: absolute; top: 180px; left: 600px;">streaming</code>
+  <code style="position: absolute; top: 190px; left: 450px;">tar</code>
+  <code style="position: absolute; top: 230px; left: 580px;">tcl</code>
+  <code style="position: absolute; top: 260px; left: 650px;">vddk</code>
+  <code style="position: absolute; top: 290px; left: 600px;">xz</code>
+  <code style="position: absolute; top: 320px; left: 600px;">zero</code>
+</div>
diff --git a/2019-fosdem/6100-plugins-c.html b/2019-fosdem/6100-plugins-c.html
new file mode 100644 (file)
index 0000000..d2685e5
--- /dev/null
@@ -0,0 +1,155 @@
+<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>Writing plugins in C?</h1>
+
+<style>
+pre {
+    column-count: 3;
+    font-size: 50%;
+}
+</style>
+
+<pre>
+/* The size of disk in bytes (initialized by
+   size=&lt;SIZE&gt; parameter). */
+static int64_t size = 0;
+
+/* Debug directory operations
+   (-D memory.dir=1). */
+int memory_debug_dir;
+
+static struct sparse_array *sa;
+
+static void
+memory_load (void)
+{
+  sa = alloc_sparse_array (memory_debug_dir);
+  if (sa == NULL) {
+    perror ("malloc");
+    exit (EXIT_FAILURE);
+  }
+}
+
+static void
+memory_unload (void)
+{
+  free_sparse_array (sa);
+}
+
+static int
+memory_config (const char *key,
+               const char *value)
+{
+  if (strcmp (key, "size") == 0) {
+    size = nbdkit_parse_size (value);
+    if (size == -1)
+      return -1;
+  }
+  else {
+    nbdkit_error
+      ("unknown parameter '%s'", key);
+    return -1;
+  }
+
+  return 0;
+}
+
+static int
+memory_config_complete (void)
+{
+  if (size == 0) {
+    nbdkit_error ("you must specify "
+      "size=&lt;SIZE&gt; on the "
+      "command line");
+    return -1;
+  }
+  return 0;
+}
+
+#define memory_config_help \
+  "size=&lt;SIZE&gt;  (required)"
+  " Size of the backing disk"
+
+/* Create the per-connection handle. */
+static void *
+memory_open (int readonly)
+{
+  /* Used only as a handle pointer. */
+  static int mh;
+
+  return &amp;mh;
+}
+
+#define THREAD_MODEL \
+NBDKIT_THREAD_MODEL_SERIALIZE_ALL_REQUESTS
+
+/* Get the disk size. */
+static int64_t
+memory_get_size (void *handle)
+{
+  return (int64_t) size;
+}
+
+/* Read data. */
+static int
+memory_pread (void *handle, void *buf,
+              uint32_t count, uint64_t offset)
+{
+  sparse_array_read (sa, buf, count, offset);
+  return 0;
+}
+
+/* Write data. */
+static int
+memory_pwrite (void *handle,
+               const void *buf,
+               uint32_t count, uint64_t offset)
+{
+  return sparse_array_write (sa,
+    buf, count, offset);
+}
+
+/* Zero. */
+static int
+memory_zero (void *handle,
+             uint32_t count,
+             uint64_t offset, int may_trim)
+{
+  sparse_array_zero (sa, count, offset);
+  return 0;
+}
+
+/* Trim (same as zero). */
+static int
+memory_trim (void *handle,
+             uint32_t count, uint64_t offset)
+{
+  sparse_array_zero (sa, count, offset);
+  return 0;
+}
+
+static struct nbdkit_plugin plugin = {
+  .name              = "memory",
+  .version           = PACKAGE_VERSION,
+  .load              = memory_load,
+  .unload            = memory_unload,
+  .config            = memory_config,
+  .config_complete   = memory_config_complete,
+  .config_help       = memory_config_help,
+  .open              = memory_open,
+  .get_size          = memory_get_size,
+  .pread             = memory_pread,
+  .pwrite            = memory_pwrite,
+  .zero              = memory_zero,
+  .trim              = memory_trim,
+  /* In this plugin, errno is preserved
+   * properly along error return
+   * paths from failed system calls.
+   */
+  .errno_is_preserved = 1,
+};
+
+NBDKIT_REGISTER_PLUGIN(plugin)
+</pre>
diff --git a/2019-fosdem/6200-plugin-langs.html b/2019-fosdem/6200-plugin-langs.html
new file mode 100644 (file)
index 0000000..97a7799
--- /dev/null
@@ -0,0 +1,51 @@
+<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>Writing plugins in other languages</h1>
+
+<style>
+b {
+    border: 1px solid rgb(204,0,0);
+    background: #eef;
+    padding: 5px;
+    border-radius: 15px;
+}
+</style>
+
+<!-- note: div must have position: relative so child elements position
+     is correct -->
+<div style="background: #ccf; border: 1px solid rgb(204,0,0);
+            position:relative;
+            width: 800px; height: 400px;">
+  <code style="position: absolute; top: 1px; left: 10px;">curl</code>
+  <code style="position: absolute; top: 50px; left: 20px;">data</code>
+  <code style="position: absolute; top: 100px; left: 10px;">ext2</code>
+  <code style="position: absolute; top: 120px; left: 140px;">file</code>
+  <code style="position: absolute; top: 150px; left: 10px;">floppy</code>
+  <code style="position: absolute; top: 200px; left: 20px;">guestfs</code>
+  <code style="position: absolute; top: 250px; left: 10px;">gzip</code>
+  <code style="position: absolute; top: 280px; left: 150px;">iso</code>
+  <code style="position: absolute; top: 350px; left: 10px;">libvirt</code>
+
+  <code style="position: absolute; top: 5px; left: 340px;"><b>lua</b></code>
+  <code style="position: absolute; top: 55px; left: 380px;">memory</code>
+  <code style="position: absolute; top: 105px; left: 340px;">nbd</code>
+  <code style="position: absolute; top: 125px; left: 450px;">null</code>
+  <code style="position: absolute; top: 155px; left: 340px;"><b>ocaml</b></code>
+  <code style="position: absolute; top: 185px; left: 160px;">partitioning</code>
+  <code style="position: absolute; top: 240px; left: 380px;">pattern</code>
+  <code style="position: absolute; top: 300px; left: 320px;"><b>perl</b></code>
+  <code style="position: absolute; top: 340px; left: 280px;"><b>python</b></code>
+
+  <code style="position: absolute; top: 10px; left: 600px;">random</code>
+  <code style="position: absolute; top: 60px; left: 600px;"><b>ruby</b></code>
+  <code style="position: absolute; top: 90px; left: 700px;"><b>sh</b></code>
+  <code style="position: absolute; top: 130px; left: 590px;">split</code>
+  <code style="position: absolute; top: 180px; left: 600px;">streaming</code>
+  <code style="position: absolute; top: 190px; left: 450px;">tar</code>
+  <code style="position: absolute; top: 230px; left: 580px;"><b>tcl</b></code>
+  <code style="position: absolute; top: 260px; left: 650px;">vddk</code>
+  <code style="position: absolute; top: 290px; left: 600px;">xz</code>
+  <code style="position: absolute; top: 320px; left: 600px;">zero</code>
+</div>
diff --git a/2019-fosdem/6300-plugins-shell.html b/2019-fosdem/6300-plugins-shell.html
new file mode 100644 (file)
index 0000000..eb384a7
--- /dev/null
@@ -0,0 +1,6 @@
+<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>Writing plugins in shell script</h1>
+
diff --git a/2019-fosdem/6400-plugins-shell-2.html b/2019-fosdem/6400-plugins-shell-2.html
new file mode 100644 (file)
index 0000000..5c2e981
--- /dev/null
@@ -0,0 +1,23 @@
+<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>Writing plugins in shell script</h1>
+
+<p>
+(Or <u>any</u> language).
+We only need to write a few callbacks ...
+</p>
+
+<ul>
+<li> <code>config</code>
+<li> <code>config_complete</code>
+<li> <code>open</code>
+<li> <code>get_size</code>
+<li> <code>pread</code>
+<li> <code>pwrite</code>
+</ul>
+
+<p>
+Almost all callbacks are optional.
+</p>
diff --git a/2019-fosdem/6450-cd.svg b/2019-fosdem/6450-cd.svg
new file mode 100644 (file)
index 0000000..881455e
--- /dev/null
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="192" height="192" viewBox="0 0 144 144">
+  <linearGradient id="c" x1="15.193" x2="120.855" y1="77.313" y2="77.313" gradientUnits="userSpaceOnUse">
+    <stop offset="0" stop-color="#fff"/>
+    <stop offset="1"/>
+  </linearGradient>
+  <linearGradient id="d" x1="30.131" x2="101.383" y1="114.274" y2="39.161" gradientUnits="userSpaceOnUse">
+    <stop offset=".011" stop-color="#98aff2"/>
+    <stop offset=".096" stop-color="#9db3f3"/>
+    <stop offset=".199" stop-color="#acbff5"/>
+    <stop offset=".31" stop-color="#c4d2f8"/>
+    <stop offset=".428" stop-color="#e6ecfc"/>
+    <stop offset=".5" stop-color="#fff"/>
+    <stop offset=".519" stop-color="#f7f9fe"/>
+    <stop offset=".611" stop-color="#d5defa"/>
+    <stop offset=".704" stop-color="#bacaf6"/>
+    <stop offset=".799" stop-color="#a7bbf4"/>
+    <stop offset=".897" stop-color="#9cb2f2"/>
+    <stop offset="1" stop-color="#98aff2"/>
+  </linearGradient>
+  <linearGradient id="a">
+    <stop offset=".011" stop-color="#b1caff"/>
+    <stop offset=".111" stop-color="#b6cdff"/>
+    <stop offset=".232" stop-color="#c5d8ff"/>
+    <stop offset=".363" stop-color="#dde8ff"/>
+    <stop offset=".5" stop-color="#fff"/>
+    <stop offset=".526" stop-color="#f8faff"/>
+    <stop offset=".64" stop-color="#dde6ff"/>
+    <stop offset=".755" stop-color="#cad8ff"/>
+    <stop offset=".874" stop-color="#bfd0ff"/>
+    <stop offset="1" stop-color="#bbcdff"/>
+  </linearGradient>
+  <linearGradient id="e" x1="1065.43" x2="1158.018" y1="95.011" y2="2.423" gradientTransform="matrix(.849 -.5284 .5284 .849 -910.0727 618.7241)" gradientUnits="userSpaceOnUse" xlink:href="#a"/>
+  <linearGradient id="f" x1="1073.158" x2="1164.618" y1="102.772" y2="11.311" gradientTransform="matrix(.849 -.5284 .5284 .849 -910.0727 618.7241)" gradientUnits="userSpaceOnUse" xlink:href="#a"/>
+  <linearGradient id="g" x1="75.36" x2="167.626" y1="92.327" y2="241.508" gradientUnits="userSpaceOnUse">
+    <stop offset="0" stop-color="#fff"/>
+    <stop offset="1" stop-color="#9195f2"/>
+  </linearGradient>
+  <linearGradient id="b">
+    <stop offset="0" stop-color="#9ab1ff"/>
+    <stop offset="1" stop-color="#444973"/>
+  </linearGradient>
+  <linearGradient id="h" x1="14.187" x2="117.257" y1="76.693" y2="76.693" gradientUnits="userSpaceOnUse" xlink:href="#b"/>
+  <linearGradient id="i" x1="57.506" x2="73.948" y1="76.751" y2="76.751" gradientUnits="userSpaceOnUse" xlink:href="#b"/>
+  <linearGradient id="j" x1="49.926" x2="81.527" y1="76.751" y2="76.751" gradientUnits="userSpaceOnUse">
+    <stop offset="0" stop-color="#9ab1ff"/>
+    <stop offset="1" stop-color="#626aa4"/>
+  </linearGradient>
+  <g fill="#fff" stroke-width="0">
+    <path fill="none" d="m144 144h-144v-144h144z"/>
+    <path fill="#000" d="m103.995 122.896c0 8.636-23.175 15.634-51.762 15.634-28.588 0-51.764-6.999-51.764-15.634 0-8.633 23.175-15.633 51.764-15.633 28.587 0 51.762 7 51.762 15.633z" opacity=".2"/>
+    <path fill="url(#c)" d="m35.905 25.71c-23.226 14.456-27.676 49.278-9.936 77.78 17.738 28.5 50.945 39.883 74.173 25.426 23.228-14.458 27.677-49.276 9.938-77.778s-50.946-39.886-74.175-25.428zm36.384 58.455c-3.084 1.919-7.494.405-9.848-3.376-2.353-3.783-1.761-8.403 1.32-10.322 3.084-1.92 7.49-.41 9.845 3.374 2.354 3.783 1.766 8.406-1.317 10.325z" opacity=".2"/>
+    <path fill="url(#d)" d="m33.609 25.148c-23.228 14.458-27.678 49.28-9.939 77.78 17.737 28.497 50.947 39.884 74.175 25.426 23.227-14.456 27.677-49.281 9.939-77.778-17.739-28.501-50.949-39.886-74.175-25.428zm36.38 58.452c-3.083 1.918-7.492.408-9.847-3.374-2.354-3.783-1.762-8.408 1.32-10.325 3.083-1.92 7.491-.408 9.846 3.377 2.354 3.781 1.763 8.403-1.32 10.322z"/>
+    <path fill="url(#e)" d="m60.142 80.226c-.219-.352-.398-.709-.572-1.072l-30.372 31.511c10.303 12.641 23.903 20.736 37.559 23.17l-1.525-49.653c-1.94-.536-3.815-1.908-5.09-3.956z"/>
+    <path fill="url(#f)" d="m68.212 70.19 30.373-31.514c-10.144-10.669-22.765-17.367-35.34-19.245l1.526 49.652c1.161.063 2.342.445 3.441 1.107z"/>
+    <path d="m60.142 80.226c-.219-.352-.398-.709-.572-1.072l-30.372 31.511c10.303 12.641 23.903 20.736 37.559 23.17l-1.525-49.653c-1.94-.536-3.815-1.908-5.09-3.956z" opacity=".8"/>
+    <path d="m68.212 70.19 30.373-31.514c-10.144-10.669-22.765-17.367-35.34-19.245l1.526 49.652c1.161.063 2.342.445 3.441 1.107z" opacity=".8"/>
+    <g opacity=".4">
+      <path d="m61.361 81.637c-.281-.3-.538-.609-.775-.93l-20.802 40.32c12.423 9.997 26.838 14.469 40.005 13.19l-12.82-49.967c-1.914-.011-3.964-.887-5.608-2.614z" opacity=".8"/>
+      <path d="m66.504 69.235 20.8-40.325c-11.819-8.038-25.014-11.367-37.055-9.814l12.821 49.96c1.087-.254 2.27-.188 3.434.18z" opacity=".8"/>
+    </g>
+    <g opacity=".68">
+      <path d="m67.781 83.536c-.334.072-.675.1-1.016.111l24.713 46.987c12.397-5.098 21.108-15.822 24.788-29.236l-44.396-21.445c-.692 1.82-2.125 3.177-4.088 3.583z" opacity=".9"/>
+      <path d="m59.734 70.282-24.716-46.993c-10.626 5.847-17.984 16.178-21.045 28.698l44.397 21.445c.182-1.209.657-2.291 1.365-3.15z" opacity=".9"/>
+    </g>
+    <path fill="url(#g)" d="m24.177 102.612c17.497 28.113 50.368 39.383 73.28 25.122 22.91-14.259 27.316-48.731 9.819-76.844-17.497-28.111-50.372-39.381-73.282-25.122-22.912 14.261-27.314 48.732-9.817 76.844zm80.552-50.136c16.623 26.707 12.649 59.326-8.857 72.711-8.838 5.501-19.872 7.095-31.069 4.489-15.048-3.502-28.927-13.944-38.079-28.649-16.623-26.707-12.65-59.326 8.856-72.711s52.526-2.547 69.149 24.161z"/>
+    <path fill="url(#h)" d="m68.213 17.691c16.652 3.875 31.943 15.32 41.952 31.401 18.448 29.642 13.523 66.165-10.979 81.416-24.503 15.251-59.448 3.543-77.898-26.098-7.343-11.796-11.192-25.042-11.192-37.835 0-4.646.508-9.231 1.54-13.667 2.996-12.874 10.323-23.498 20.632-29.914 10.307-6.416 23.072-8.299 35.945-5.303zm28.86 109.421c22.625-14.083 26.978-48.139 9.697-75.906-17.284-27.769-49.76-38.9-72.387-24.815-22.631 14.086-26.983 48.138-9.698 75.906 17.282 27.766 49.757 38.901 72.388 24.815z"/>
+    <path fill="url(#i)" d="m59.133 80.857c2.776 4.459 7.994 6.249 11.631 3.986 3.636-2.263 4.336-7.736 1.561-12.197-2.779-4.462-7.998-6.253-11.635-3.989-3.636 2.264-4.334 7.736-1.556 12.2zm9.795-6.098c1.557 2.502 1.427 5.627-.277 6.688-1.705 1.061-4.565-.203-6.122-2.703-.73-1.174-1.09-2.486-1.09-3.658 0-1.325.46-2.47 1.365-3.034 1.704-1.061 4.566.205 6.125 2.707z"/>
+    <path fill="url(#j)" d="m53.051 84.642c5.338 8.575 15.368 12.014 22.356 7.663 6.991-4.35 8.331-14.866 2.994-23.44-5.337-8.577-15.365-12.018-22.354-7.667-6.99 4.352-8.333 14.871-2.996 23.445zm3.895-2.424c-3.699-5.942-2.769-13.229 2.073-16.244 4.843-3.013 11.79-.63 15.488 5.313 3.698 5.94 2.767 13.225-2.074 16.239-4.843 3.014-11.792.631-15.487-5.308z" opacity=".5"/>
+  </g>
+</svg>
diff --git a/2019-fosdem/6450-plugins-shell-what.html b/2019-fosdem/6450-plugins-shell-what.html
new file mode 100644 (file)
index 0000000..a1ea8ea
--- /dev/null
@@ -0,0 +1,9 @@
+<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>What shell script?</h1>
+
+<img src="6450-tarfile.svg" width="300">
+
+<img src="6450-cd.svg" width="300">
diff --git a/2019-fosdem/6450-tarfile.svg b/2019-fosdem/6450-tarfile.svg
new file mode 100644 (file)
index 0000000..ae57d1a
--- /dev/null
@@ -0,0 +1,251 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   version="1.1"
+   width="48"
+   height="48"
+   id="svg4297">
+  <defs
+     id="defs4299">
+    <radialGradient
+       cx="5"
+       cy="41.5"
+       r="5"
+       fx="5"
+       fy="41.5"
+       id="radialGradient3314"
+       xlink:href="#linearGradient3681"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.5938225,0,0,1.5366531,41.140892,-103.93618)" />
+    <linearGradient
+       id="linearGradient3703">
+      <stop
+         id="stop3705"
+         style="stop-color:black;stop-opacity:0"
+         offset="0" />
+      <stop
+         id="stop3711"
+         style="stop-color:black;stop-opacity:1"
+         offset="0.5" />
+      <stop
+         id="stop3707"
+         style="stop-color:black;stop-opacity:0"
+         offset="1" />
+    </linearGradient>
+    <linearGradient
+       x1="17.554192"
+       y1="46.000275"
+       x2="17.554192"
+       y2="34.999718"
+       id="linearGradient3312"
+       xlink:href="#linearGradient3703"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.7570316,0,0,1.3969574,-17.394014,-16.411698)" />
+    <linearGradient
+       id="linearGradient3681">
+      <stop
+         id="stop3683"
+         style="stop-color:black;stop-opacity:1"
+         offset="0" />
+      <stop
+         id="stop3685"
+         style="stop-color:black;stop-opacity:0"
+         offset="1" />
+    </linearGradient>
+    <radialGradient
+       cx="5"
+       cy="41.5"
+       r="5"
+       fx="5"
+       fy="41.5"
+       id="radialGradient3310"
+       xlink:href="#linearGradient3681"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.5938225,0,0,1.5366531,-6.6594735,-103.93618)" />
+    <linearGradient
+       id="linearGradient3295">
+      <stop
+         id="stop3297"
+         style="stop-color:#c9af8b;stop-opacity:1"
+         offset="0" />
+      <stop
+         id="stop3299"
+         style="stop-color:#ad8757;stop-opacity:1"
+         offset="0.23942046" />
+      <stop
+         id="stop3301"
+         style="stop-color:#c2a57f;stop-opacity:1"
+         offset="0.27582464" />
+      <stop
+         id="stop3303"
+         style="stop-color:#9d7d53;stop-opacity:1"
+         offset="1" />
+    </linearGradient>
+    <linearGradient
+       x1="15.464298"
+       y1="7.9756851"
+       x2="15.464298"
+       y2="45.04248"
+       id="linearGradient3293"
+       xlink:href="#linearGradient3295"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       id="linearGradient3199">
+      <stop
+         id="stop3201"
+         style="stop-color:#dac197;stop-opacity:1"
+         offset="0" />
+      <stop
+         id="stop3203"
+         style="stop-color:#c1a581;stop-opacity:1"
+         offset="0.23942046" />
+      <stop
+         id="stop3205"
+         style="stop-color:#dbc298;stop-opacity:1"
+         offset="0.27582464" />
+      <stop
+         id="stop3207"
+         style="stop-color:#a68b60;stop-opacity:1"
+         offset="1" />
+    </linearGradient>
+    <linearGradient
+       x1="24.822832"
+       y1="15.377745"
+       x2="24.996943"
+       y2="37.27668"
+       id="linearGradient3197"
+       xlink:href="#linearGradient3199"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.2822251,0,0,1.5572619,-6.0701918,-15.290756)" />
+    <linearGradient
+       id="linearGradient4559">
+      <stop
+         id="stop4561"
+         style="stop-color:white;stop-opacity:0"
+         offset="0" />
+      <stop
+         id="stop4563"
+         style="stop-color:white;stop-opacity:0"
+         offset="1" />
+    </linearGradient>
+    <linearGradient
+       x1="23.451576"
+       y1="30.554907"
+       x2="43.00663"
+       y2="45.934479"
+       id="linearGradient2659"
+       xlink:href="#linearGradient4559"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.2822251,0,0,1.1746872,-6.0701918,-5.3031677)" />
+    <linearGradient
+       id="linearGradient3827">
+      <stop
+         id="stop3829"
+         style="stop-color:white;stop-opacity:1"
+         offset="0" />
+      <stop
+         id="stop4295"
+         style="stop-color:white;stop-opacity:1"
+         offset="0.3021296" />
+      <stop
+         id="stop4293"
+         style="stop-color:white;stop-opacity:0.6901961"
+         offset="0.34361121" />
+      <stop
+         id="stop3832"
+         style="stop-color:white;stop-opacity:0"
+         offset="1" />
+    </linearGradient>
+    <linearGradient
+       x1="26"
+       y1="22"
+       x2="26"
+       y2="8"
+       id="linearGradient3834"
+       xlink:href="#linearGradient3827"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       id="linearGradient3275">
+      <stop
+         id="stop3277"
+         style="stop-color:white;stop-opacity:0"
+         offset="0" />
+      <stop
+         id="stop3283"
+         style="stop-color:white;stop-opacity:1"
+         offset="0.245" />
+      <stop
+         id="stop3285"
+         style="stop-color:white;stop-opacity:1"
+         offset="0.77350003" />
+      <stop
+         id="stop3279"
+         style="stop-color:white;stop-opacity:0"
+         offset="1" />
+    </linearGradient>
+    <linearGradient
+       x1="44.994774"
+       y1="17.5"
+       x2="3.0052247"
+       y2="17.5"
+       id="linearGradient3281"
+       xlink:href="#linearGradient3275"
+       gradientUnits="userSpaceOnUse"
+       spreadMethod="reflect" />
+  </defs>
+  <g
+     id="layer1">
+    <g
+       transform="matrix(0.9926623,0,0,0.9761474,0.2751901,1.2929634)"
+       id="g3305"
+       style="opacity:0.4;display:inline">
+      <rect
+         width="2.9601951"
+         height="15.366531"
+         x="-3.6903627"
+         y="-47.848343"
+         transform="scale(-1,-1)"
+         id="rect2484"
+         style="fill:url(#radialGradient3310);fill-opacity:1;stroke:none" />
+      <rect
+         width="40.41172"
+         height="15.366531"
+         x="3.6903627"
+         y="32.481812"
+         id="rect2486"
+         style="fill:url(#linearGradient3312);fill-opacity:1;stroke:none" />
+      <rect
+         width="2.9601951"
+         height="15.366531"
+         x="44.110001"
+         y="-47.848343"
+         transform="scale(1,-1)"
+         id="rect3444"
+         style="fill:url(#radialGradient3314);fill-opacity:1;stroke:none;display:inline" />
+    </g>
+    <path
+       d="m 9.010725,8.5 29.497723,0 c 1.721985,0 2.496922,-0.2865505 2.991552,1 l 3.001734,8 0,25.673912 c 0,1.553304 0.10293,1.315976 -1.619063,1.315976 l -37.7653422,0 c -1.7219924,0 -1.6190635,0.237328 -1.6190635,-1.315976 L 3.4982653,17.5 6.5,9.5 c 0.4808316,-1.2605622 0.7887325,-1 2.510725,-1 z"
+       id="path2488"
+       style="fill:url(#linearGradient3197);fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient3293);stroke-width:0.99420077;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:block;overflow:visible" />
+    <path
+       d="m 9.948194,9.5129459 27.652872,0 c 1.614293,0 2.61338,0.5565361 3.289521,2.0860281 l 2.32894,6.419721 0,23.144557 c 0,1.460676 -0.818759,2.196085 -2.433056,2.196085 l -33.7332031,0 c -1.6142934,0 -2.2727761,-0.808827 -2.2727761,-2.269504 l 0,-23.071138 2.2538109,-6.55736 C 7.4850649,10.275943 8.3338968,9.5129459 9.948194,9.5129459 z"
+       id="path2490"
+       style="opacity:0.50549454;fill:none;stroke:url(#linearGradient2659);stroke-width:0.74211526;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:block;overflow:visible" />
+    <path
+       d="m 22,8 c 1.333333,0 2.666667,0 4,0 0,4.666667 0,9.333333 0,14 -0.393729,0 -0.787458,0 -1.181187,0 -0.403125,0 -0.80625,0 -1.209375,0 -0.324529,0 -0.649057,0 -0.973585,0 C 22.423902,22 22.211951,22 22,22 22,17.333333 22,12.666667 22,8 z"
+       id="rect3326"
+       style="opacity:0.4;fill:url(#linearGradient3834);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+    <path
+       d="m 8.8577805,41 c 0.5320002,0 1.0640004,0 1.5960005,0 0,-1.732 0,-3.463999 0,-5.195999 0.350387,-0.08546 1.120394,0.248701 0.96,-0.347539 -0.102171,-0.33549 0.226561,-1.101884 -0.208523,-1.104461 -0.485647,0.0498 -0.932764,0.06107 -0.751477,-0.556062 0,-0.554647 0,-1.109293 0,-1.663939 -0.5320001,0 -1.0640003,0 -1.5960005,0 0,0.74 0,1.480001 0,2.220001 -0.4271961,-0.005 -0.9818294,-0.137459 -0.7799998,0.486555 0.085799,0.351863 -0.2490168,1.124339 0.3475392,0.965445 0.6265813,-0.204397 0.3964847,0.447885 0.4324606,0.834094 0,1.453968 0,2.907937 0,4.361905 z M 18.959156,34.352001 c -0.488,0 -0.976,0 -1.464001,0 0.0024,0.555388 0.107596,1.227788 -0.437249,0.416063 -1.636804,-1.296088 -4.374285,-0.300099 -4.92452,1.689976 -0.661604,1.81115 0.300763,4.17561 2.285367,4.595045 1.094162,0.292268 2.36525,0.0092 3.076403,-0.917085 0.04748,0.379533 -0.208965,1.062996 0.417046,0.864 0.308688,-0.109805 1.075603,0.238618 1.046954,-0.208523 0,-2.146492 0,-4.292984 0,-6.439476 z m -3.468,1.307999 c 1.580814,-0.09128 2.457037,1.889634 1.6725,3.144 -0.780128,1.464019 -3.38279,1.034012 -3.57968,-0.649758 -0.2612,-1.205372 0.595891,-2.550989 1.90718,-2.494242 z M 20.149031,41 c 0.532,0 1.064,0 1.596,0 0.02695,-1.40671 -0.05762,-2.820653 0.04952,-4.222235 -0.03929,-1.150281 1.695641,-0.622862 1.378482,-1.671335 0.04606,-0.582734 0.107656,-1.301403 -0.765469,-0.817407 -0.801504,0.592003 -0.68196,0.734239 -0.933546,0.06298 -0.441662,0 -0.883324,0 -1.324985,0 0,2.216 0,4.431999 0,6.647999 z m 4.059749,0 c 0.532001,0 1.064001,0 1.596001,0 0,-0.512 0,-1.024 0,-1.535999 -0.532,0 -1.064,0 -1.596001,0 0,0.511999 0,1.023999 0,1.535999 z m 8.295565,-6.647999 c -0.003,0.513942 0.117021,1.189699 -0.411938,0.400875 -1.628193,-1.253571 -4.301621,-0.305806 -4.845656,1.666025 -0.659185,1.848746 0.330662,4.308171 2.388984,4.669669 1.042827,0.237804 2.216921,-0.0832 2.868608,-0.96457 0.169849,1.428755 -1.238328,2.555123 -2.59132,2.036038 -0.634102,-0.357712 -1.131566,-0.786701 -1.909789,-0.620038 -0.627191,-0.06916 -1.188855,-0.02657 -0.462605,0.689528 1.391779,1.957394 5.010526,1.964288 6.118152,-0.290715 0.591171,-1.493473 0.298261,-3.134065 0.369562,-4.701095 0,-0.961906 0,-1.923811 0,-2.885717 -0.507999,0 -1.015999,0 -1.523998,0 z M 30.512344,35.66 c 1.457805,-0.09191 2.302931,1.617593 1.784062,2.857499 -0.50064,1.638565 -3.249057,1.530402 -3.556995,-0.183606 -0.348044,-1.205308 0.365878,-2.744812 1.772932,-2.673893 l 10e-7,0 z M 34.858219,41 c 1.688,0 3.376,0 5.063999,0 0,-0.476 0,-0.952001 0,-1.428001 -1.051999,0 -2.103998,0 -3.155998,0 0.975999,-1.264 1.951998,-2.528 2.927998,-3.792 0,-0.475999 0,-0.951999 0,-1.427998 -1.5,0 -3,0 -4.5,0 0,0.475999 0,0.951999 0,1.427998 0.863999,0 1.727999,0 2.591999,0 -0.975999,1.264 -1.951999,2.528 -2.927998,3.792 0,0.476 0,0.952001 0,1.428001 z"
+       id="text3329"
+       style="font-size:12px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;opacity:0.4;fill:black;fill-opacity:1;stroke:none;display:inline;font-family:URW Gothic L;-inkscape-font-specification:URW Gothic L Semi-Bold" />
+    <path
+       d="m 3.5052248,17.5 40.9895502,0"
+       id="path3273"
+       style="opacity:0.4;fill:none;stroke:url(#linearGradient3281);stroke-width:1px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1;display:inline" />
+  </g>
+</svg>
diff --git a/2019-fosdem/6500-shell-next b/2019-fosdem/6500-shell-next
new file mode 100755 (executable)
index 0000000..0fd1dd0
--- /dev/null
@@ -0,0 +1,21 @@
+#!/bin/bash -
+
+source functions
+
+# Title.
+export title="Writing tar2iso.sh"
+
+# History.
+remember 'emacs tar2iso.sh &'
+remember 'nbdkit sh ./tar2iso.sh file=~/nbdkit-1.9.0.tar.gz'
+remember 'sudo nbd-client -b 512 localhost /dev/nbd0'
+remember 'sudo mount /dev/nbd0 /tmp/mnt'
+
+./restore
+pushd 6500-shell.d >/dev/null
+rm -f tar2iso.sh
+echo '#!/bin/bash' > tar2iso.sh
+echo >> tar2iso.sh
+chmod +x tar2iso.sh
+terminal
+popd >/dev/null
diff --git a/2019-fosdem/6500-shell.d/.stamp b/2019-fosdem/6500-shell.d/.stamp
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/2019-fosdem/6500-shell.sh b/2019-fosdem/6500-shell.sh
new file mode 100755 (executable)
index 0000000..9290481
--- /dev/null
@@ -0,0 +1,4 @@
+#!/bin/bash -
+
+xfce4-terminal --disable-server \
+               -x ./6500-shell-next
diff --git a/2019-fosdem/9000-final.html b/2019-fosdem/9000-final.html
new file mode 100644 (file)
index 0000000..e4e1c8c
--- /dev/null
@@ -0,0 +1,17 @@
+<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>In summary</h1>
+
+<ul>
+<li> Loopback mounts &mdash; don't do much.
+<li> Loopback mounts with NBD and nbdkit &mdash; infinitely flexible.
+<li> Lots of plugins, or write your own.
+<li> nbdkit 1.8 now available in all major Linux distros.
+<li> <a href="https://github.com/libguestfs/nbdkit">https://github.com/libguestfs/nbdkit</a>
+<li> This talk: <a href="http://git.annexia.org/?p=libguestfs-talks.git">http://git.annexia.org/?p=libguestfs-talks.git</a>
+<li> This presentation software: Tech Talk PSE 1.2
+</ul>
+
+<h2>Any Questions?</h2>
index aa57add..1f66f13 100644 (file)
@@ -23,6 +23,13 @@ h1 {
     border-bottom: 2px solid rgb(204,0,0);
 }
 
+h2 {
+    color: rgb(204,0,0);
+    font-size: 32px;
+    font-style: italic;
+    border-bottom: 2px solid rgb(204,0,0);
+}
+
 b {
     color: rgb(204,0,0);
 }
diff --git a/2019-fosdem/tar2iso.sh b/2019-fosdem/tar2iso.sh
new file mode 100755 (executable)
index 0000000..dc4a3b4
--- /dev/null
@@ -0,0 +1,16 @@
+#!/bin/bash
+
+case "$1" in
+    config)
+        [ "$2" = "file" ] && ln -sf "$3" $tmpdir/tarfile  ;;
+    config_complete)
+        tar zxf $tmpdir/tarfile -C $tmpdir
+        rm $tmpdir/tarfile
+        mkisofs -JrT -o $tmpdir/iso $tmpdir ;;
+    open) ;;
+    get_size)
+        stat -c '%s' $tmpdir/iso ;;
+    pread)
+        dd iflag=skip_bytes,count_bytes skip=$4 count=$3 if=$tmpdir/iso ;;
+    *) exit 2 ;;
+esac