From: Richard W.M. Jones Date: Thu, 15 Nov 2018 11:30:09 +0000 (+0000) Subject: Start 2019 FOSDEM talk about NBD. X-Git-Url: http://git.annexia.org/?a=commitdiff_plain;h=43a33956f2b26e85ca6c0314d11e6f887c66e3d8;p=libguestfs-talks.git Start 2019 FOSDEM talk about NBD. --- diff --git a/2019-fosdem/.gitignore b/2019-fosdem/.gitignore new file mode 100644 index 0000000..4148a9c --- /dev/null +++ b/2019-fosdem/.gitignore @@ -0,0 +1,11 @@ +/bindings +/history +/1000-loopback-mounting.d/fedora-29.img +/2000-xz-compressed.d/Fedora-Cloud-Base-29-1.2.x86_64.raw.xz +/3500-partitioning.d/boot.img +/3500-partitioning.d/.root.img +/3500-partitioning.d/root.img +/3500-partitioning.d/swap.img +/nbdview/error? +/nbdview/log? +/nbdview/sock? \ No newline at end of file diff --git a/2019-fosdem/0000-introduction.html b/2019-fosdem/0000-introduction.html new file mode 100644 index 0000000..671e7be --- /dev/null +++ b/2019-fosdem/0000-introduction.html @@ -0,0 +1,22 @@ + + + + +
+

+ Better loopback mounts with NBD —
+ Take your loopback mounts to the next level with nbdkit +

+

+ Richard W.M. Jones
+ rjones @ redhat.com +

+

+ Loopback devices let you turn a raw file into a device. + Loopback mounts let you mount filesystems from a raw file. + Network Block Device with the nbdkit server takes + this concept to the next level, elegantly solving simple problems + like how to mount filesystems from a compressed file, but as we + shall see in this talk offering far, far more ... +

+
diff --git a/2019-fosdem/1000-loopback-mounting.d/.stamp b/2019-fosdem/1000-loopback-mounting.d/.stamp new file mode 100644 index 0000000..e69de29 diff --git a/2019-fosdem/1000-loopback-mounting.term b/2019-fosdem/1000-loopback-mounting.term new file mode 100755 index 0000000..9302414 --- /dev/null +++ b/2019-fosdem/1000-loopback-mounting.term @@ -0,0 +1,18 @@ +#!/bin/bash - + +source functions + +# History. +remember 'sudo losetup --list' +remember 'ls -lh fedora-29.img' +remember 'sudo losetup /dev/loop0 fedora-29.img' +remember 'sudo kpartx -av /dev/loop0' +remember 'sudo mount /dev/mapper/loop0p4 /tmp/mnt' +remember 'ls -l /tmp/mnt' + +echo "Loopback mounting" + +./restore +pushd 1000-loopback-mounting.d >/dev/null +terminal +popd >/dev/null diff --git a/2019-fosdem/2000-xz-compressed.d/.stamp b/2019-fosdem/2000-xz-compressed.d/.stamp new file mode 100644 index 0000000..e69de29 diff --git a/2019-fosdem/2000-xz-compressed.term b/2019-fosdem/2000-xz-compressed.term new file mode 100755 index 0000000..f73a32e --- /dev/null +++ b/2019-fosdem/2000-xz-compressed.term @@ -0,0 +1,18 @@ +#!/bin/bash - + +source functions + +# History. +remember 'ls -lh Fedora-Cloud-Base-29-1.2.x86_64.raw.xz' +remember 'nbdkit xz Fedora-Cloud-Base-29-1.2.x86_64.raw.xz' +remember 'ps ax | grep nbdkit' +remember 'sudo nbd-client -b 512 localhost /dev/nbd0' +remember 'sudo mount /dev/nbd0p1 /tmp/mnt' +remember 'ls -l /tmp/mnt' + +echo "XZ compressed image" + +./restore +pushd 2000-xz-compressed.d >/dev/null +terminal +popd >/dev/null diff --git a/2019-fosdem/2100-xz-writable.term b/2019-fosdem/2100-xz-writable.term new file mode 100755 index 0000000..41816bb --- /dev/null +++ b/2019-fosdem/2100-xz-writable.term @@ -0,0 +1,19 @@ +#!/bin/bash - + +source functions + +# History. +remember 'ls -lh Fedora-Cloud-Base-29-1.2.x86_64.raw.xz' +remember 'nbdkit --filter=cow xz Fedora-Cloud-Base-29-1.2.x86_64.raw.xz' +remember 'ps ax | grep nbdkit' +remember 'sudo nbd-client -b 512 localhost /dev/nbd0' +remember 'sudo mount /dev/nbd0p1 /tmp/mnt' +remember 'ls -l /tmp/mnt' +remember 'sudo touch /tmp/mnt/hello-fosdem' + +echo "XZ with a writable filter" + +./restore +pushd 2000-xz-compressed.d >/dev/null +terminal +popd >/dev/null diff --git a/2019-fosdem/2500-about-nbdkit.html b/2019-fosdem/2500-about-nbdkit.html new file mode 100644 index 0000000..b403f01 --- /dev/null +++ b/2019-fosdem/2500-about-nbdkit.html @@ -0,0 +1,42 @@ + + + + +

nbdkit — plugins

+ + +
+ curl + data + ext2 + file + floppy + guestfs + gzip + iso + libvirt + + lua + memory + nbd + null + ocaml + partitioning + pattern + perl + python + + random + ruby + sh + split + streaming + tar + tcl + vddk + xz + zero +
diff --git a/2019-fosdem/2510-about-nbdkit-today.html b/2019-fosdem/2510-about-nbdkit-today.html new file mode 100644 index 0000000..6bde71e --- /dev/null +++ b/2019-fosdem/2510-about-nbdkit-today.html @@ -0,0 +1,51 @@ + + + + +

nbdkit — plugins

+ + + + +
+ curl + data + ext2 + file + floppy + guestfs + gzip + iso + libvirt + + lua + memory + nbd + null + ocaml + partitioning + pattern + perl + python + + random + ruby + sh + split + streaming + tar + tcl + vddk + xz + zero +
diff --git a/2019-fosdem/2520-about-nbdkit-langs.html b/2019-fosdem/2520-about-nbdkit-langs.html new file mode 100644 index 0000000..11f6033 --- /dev/null +++ b/2019-fosdem/2520-about-nbdkit-langs.html @@ -0,0 +1,51 @@ + + + + +

nbdkit — plugins

+ + + + +
+ curl + data + ext2 + file + floppy + guestfs + gzip + iso + libvirt + + lua + memory + nbd + null + ocaml + partitioning + pattern + perl + python + + random + ruby + sh + split + streaming + tar + tcl + vddk + xz + zero +
diff --git a/2019-fosdem/2530-about-nbdkit-filters.html b/2019-fosdem/2530-about-nbdkit-filters.html new file mode 100644 index 0000000..36f2583 --- /dev/null +++ b/2019-fosdem/2530-about-nbdkit-filters.html @@ -0,0 +1,64 @@ + + + + +

nbdkit — filters

+ + +
+ blocksize + cache + cow + delay + error + + fua + log + nozero + offset + partition + truncate +
+ +

+ + +
+ curl + data + ext2 + file + floppy + guestfs + gzip + iso + libvirt + + lua + memory + nbd + null + ocaml + partitioning + pattern + perl + python + + random + ruby + sh + split + streaming + tar + tcl + vddk + xz + zero +
diff --git a/2019-fosdem/2540-about-nbdkit-filters-today.html b/2019-fosdem/2540-about-nbdkit-filters-today.html new file mode 100644 index 0000000..5a508e6 --- /dev/null +++ b/2019-fosdem/2540-about-nbdkit-filters-today.html @@ -0,0 +1,73 @@ + + + + +

nbdkit — filters

+ + + + +
+ blocksize + cache + cow + delay + error + + fua + log + nozero + offset + partition + truncate +
+ +

+ + +
+ curl + data + ext2 + file + floppy + guestfs + gzip + iso + libvirt + + lua + memory + nbd + null + ocaml + partitioning + pattern + perl + python + + random + ruby + sh + split + streaming + tar + tcl + vddk + xz + zero +
diff --git a/2019-fosdem/2550-about-nbdkit-layers.html b/2019-fosdem/2550-about-nbdkit-layers.html new file mode 100644 index 0000000..9b114f6 --- /dev/null +++ b/2019-fosdem/2550-about-nbdkit-layers.html @@ -0,0 +1,104 @@ + + + + +

nbdkit — layers

+ + + +
+ blocksize + cache + cow + delay + error + + fua + log + nozero + offset + partition + truncate +
+ +
+ blocksize + cache + cow + delay + error + + fua + log + nozero + offset + partition + truncate +
+ +
+ blocksize + cache + cow + delay + error + + fua + log + nozero + offset + partition + truncate +
+ +
+ curl + data + ext2 + file + floppy + guestfs + gzip + iso + libvirt + + lua + memory + nbd + null + ocaml + partitioning + pattern + perl + python + + random + ruby + sh + split + streaming + tar + tcl + vddk + xz + zero +
diff --git a/2019-fosdem/2560-about-nbdkit-layers-command.html b/2019-fosdem/2560-about-nbdkit-layers-command.html new file mode 100644 index 0000000..c8f477e --- /dev/null +++ b/2019-fosdem/2560-about-nbdkit-layers-command.html @@ -0,0 +1,127 @@ + + + + +

nbdkit — layers

+ + + +
+ blocksize + cache + cow + delay + error + + fua + log + nozero + offset + partition + truncate +
+ +
+ blocksize + cache + cow + delay + error + + fua + log + nozero + offset + partition + truncate +
+ +
+ blocksize + cache + cow + delay + error + + fua + log + nozero + offset + partition + truncate +
+ +
+ curl + data + ext2 + file + floppy + guestfs + gzip + iso + libvirt + + lua + memory + nbd + null + ocaml + partitioning + pattern + perl + python + + random + ruby + sh + split + streaming + tar + tcl + vddk + xz + zero +
+ +
nbdkit --filter=cow \
+
       --filter=delay \
+
       --filter=partition \
+
       xz file.xz \
+ partition=1 \
+ rdelay=20ms
diff --git a/2019-fosdem/3000-vmware.d/mystery.vmdk b/2019-fosdem/3000-vmware.d/mystery.vmdk new file mode 100755 index 0000000..8790aba Binary files /dev/null and b/2019-fosdem/3000-vmware.d/mystery.vmdk differ diff --git a/2019-fosdem/3000-vmware.term b/2019-fosdem/3000-vmware.term new file mode 100755 index 0000000..5524760 --- /dev/null +++ b/2019-fosdem/3000-vmware.term @@ -0,0 +1,19 @@ +#!/bin/bash - + +source functions + +# History. +remember 'ls' +remember 'LD_LIBRARY_PATH=~/tmp/vddk/vmware-vix-disklib-distrib/lib64 nbdkit vddk file=$PWD/mystery.vmdk' +remember 'ps ax | grep nbdkit' +remember 'sudo nbd-client -b 512 localhost /dev/nbd0' +remember 'ls -l /dev/nbd0*' +remember 'sudo mount /dev/nbd0p2 /tmp/mnt' +remember 'ls -l /tmp/mnt' + +echo "VMware (VDDK)" + +./restore +pushd 3000-vmware.d >/dev/null +terminal +popd >/dev/null diff --git a/2019-fosdem/3500-partitioning.d/.stamp b/2019-fosdem/3500-partitioning.d/.stamp new file mode 100644 index 0000000..e69de29 diff --git a/2019-fosdem/3500-partitioning.term b/2019-fosdem/3500-partitioning.term new file mode 100755 index 0000000..4f216dc --- /dev/null +++ b/2019-fosdem/3500-partitioning.term @@ -0,0 +1,21 @@ +#!/bin/bash - + +source functions + +# History. +remember 'ls' +remember 'nbdkit partitioning boot.img mbr-id=0x82 swap.img mbr-id=0x83 root.img' +remember 'sudo nbd-client -b 512 localhost /dev/nbd0' +remember 'ls -l /dev/nbd0*' +remember 'sudo fdisk -l /dev/nbd0' +remember 'sudo mount /dev/nbd0p3 /tmp/mnt' +remember 'ls -l /tmp/mnt' +remember 'cat /tmp/mnt/etc/fedora-release' +remember 'touch /tmp/mnt/hello-fosdem' + +echo "Create partitions" + +./restore +pushd 3500-partitioning.d >/dev/null +terminal +popd >/dev/null diff --git a/2019-fosdem/4000-giant.term b/2019-fosdem/4000-giant.term new file mode 100755 index 0000000..b55eafb --- /dev/null +++ b/2019-fosdem/4000-giant.term @@ -0,0 +1,17 @@ +#!/bin/bash - + +source functions + +# History. +remember 'nbdkit memory size=$(( 2**63 - 1 ))' +remember 'sudo nbd-client -b 512 localhost /dev/nbd0' +remember 'sudo fdisk /dev/nbd0' +remember 'sudo gdisk /dev/nbd0' +remember 'sudo mkfs.btrfs -K /dev/nbd0p1' +remember 'sudo mount /dev/nbd0p1 /tmp/mnt' +remember 'df -h /tmp/mnt' + +echo "Giant disks" + +./restore +terminal diff --git a/2019-fosdem/4500-testing.html b/2019-fosdem/4500-testing.html new file mode 100644 index 0000000..a4cd003 --- /dev/null +++ b/2019-fosdem/4500-testing.html @@ -0,0 +1,72 @@ + + + + +

Useful nbdkit plugins and filters for testing filesystems

+ + + + +
+ curl + data + ext2 + file + floppy + guestfs + gzip + iso + libvirt + + lua + memory + nbd + null + ocaml + partitioning + pattern + perl + python + + random + ruby + sh + split + streaming + tar + tcl + vddk + xz + zero +
+ +

+ + +
+ blocksize + cache + cow + delay + error + + fua + log + nozero + offset + partition + truncate +
diff --git a/2019-fosdem/4600-testing-delay.html b/2019-fosdem/4600-testing-delay.html new file mode 100644 index 0000000..e0ba6c5 --- /dev/null +++ b/2019-fosdem/4600-testing-delay.html @@ -0,0 +1,47 @@ + + + + +

Useful nbdkit filters: the delay filter

+ + + +
+nbdkit --filter=delay [...] rdelay=1
+
+nbdkit --filter=delay [...] rdelay=100ms wdelay=50ms
+
+ + + + +
+ blocksize + cache + cow + delay + error + + fua + log + nozero + offset + partition + truncate +
diff --git a/2019-fosdem/4700-testing-error.html b/2019-fosdem/4700-testing-error.html new file mode 100644 index 0000000..36e90f1 --- /dev/null +++ b/2019-fosdem/4700-testing-error.html @@ -0,0 +1,48 @@ + + + + +

Useful nbdkit filters: the error filter

+ + + +
+nbdkit --filter=error [...] error=EIO error-rate=10%
+
+nbdkit --filter=error [...] error-rate=100% error-file=/tmp/inject
+
+ + + + +
+ blocksize + cache + cow + delay + error + + fua + log + nozero + offset + partition + truncate +
diff --git a/2019-fosdem/4800-testing-log.html b/2019-fosdem/4800-testing-log.html new file mode 100644 index 0000000..13f3f1a --- /dev/null +++ b/2019-fosdem/4800-testing-log.html @@ -0,0 +1,51 @@ + + + + +

Useful nbdkit filters: the log filter

+ + + +
+nbdkit --filter=log [...] logfile=/tmp/log
+
+ +
+2018-11-16 10:55:19.411474 connection=2 Connect size=0x6400000 write=1 flush=0 rotational=0 trim=1 zero=1 fua=0
+2018-11-16 10:55:19.478631 connection=2 Read id=1 offset=0x0 count=0x200 ...
+2018-11-16 10:55:19.478664 connection=2 ...Read id=1 return=0 (Success)
+2018-11-16 10:55:20.844193 connection=2 Read id=2 offset=0x0 count=0x1000 ...
+2018-11-16 10:55:20.844234 connection=2 ...Read id=2 return=0 (Success)
+2018-11-16 10:55:20.844767 connection=2 Read id=3 offset=0x1000 count=0x1000 ...
+2018-11-16 10:55:20.844823 connection=2 ...Read id=3 return=0 (Success)
+2018-11-16 10:55:21.446872 connection=2 Read id=4 offset=0x63f0000 count=0x1000 ...
+2018-11-16 10:55:21.446930 connection=2 ...Read id=4 return=0 (Success)
+2018-11-16 10:55:21.447175 connection=2 Read id=5 offset=0x63fe000 count=0x1000 ...
+2018-11-16 10:55:21.447197 connection=2 ...Read id=5 return=0 (Success)
+
+ + +
+ blocksize + cache + cow + delay + error + + fua + log + nozero + offset + partition + truncate +
diff --git a/2019-fosdem/4900-testing-log-2.html b/2019-fosdem/4900-testing-log-2.html new file mode 100644 index 0000000..d32a407 --- /dev/null +++ b/2019-fosdem/4900-testing-log-2.html @@ -0,0 +1,12 @@ + + + + +

Useful nbdkit filters: the log filter

+ +
+nbdkit --filter=log [...] logfile=/tmp/log
+
+ + + diff --git a/2019-fosdem/4900-testing-log-2.svg b/2019-fosdem/4900-testing-log-2.svg new file mode 100644 index 0000000..bb3e6ee --- /dev/null +++ b/2019-fosdem/4900-testing-log-2.svg @@ -0,0 +1,657 @@ + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + nbdkit--filter=log...logfile=/tmp/log + + + + + + + + + + + + diff --git a/2019-fosdem/4900-testing-log-2.svg.png b/2019-fosdem/4900-testing-log-2.svg.png new file mode 100644 index 0000000..95daba5 Binary files /dev/null and b/2019-fosdem/4900-testing-log-2.svg.png differ diff --git a/2019-fosdem/5000-single-fs-next b/2019-fosdem/5000-single-fs-next new file mode 100755 index 0000000..9375f8d --- /dev/null +++ b/2019-fosdem/5000-single-fs-next @@ -0,0 +1,19 @@ +#!/bin/bash - + +source functions + +# History. +remember 'nbdkit --filter=log --filter=delay memory size=64M logfile=/tmp/log rdelay=50ms wdelay=50ms' +remember './nbdview.tcl /tmp/log 67108864 &' +remember 'sudo nbd-client -b 512 localhost /dev/nbd0' +remember 'sudo fdisk /dev/nbd0' +remember 'sudo mkfs -t ext4 /dev/nbd0p1' +remember 'sudo mount /dev/nbd0p1 /tmp/mnt' +remember 'sudo chown rjones /tmp/mnt/' + +echo "Visualising a single filesystem" + +./restore +pushd nbdview >/dev/null +terminal +popd >/dev/null diff --git a/2019-fosdem/5000-single-fs.sh b/2019-fosdem/5000-single-fs.sh new file mode 100755 index 0000000..be1bfd4 --- /dev/null +++ b/2019-fosdem/5000-single-fs.sh @@ -0,0 +1,4 @@ +#!/bin/bash - + +xfce4-terminal --disable-server \ + -x ./5000-single-fs-next diff --git a/2019-fosdem/5500-raid-next b/2019-fosdem/5500-raid-next new file mode 100755 index 0000000..2c3d135 --- /dev/null +++ b/2019-fosdem/5500-raid-next @@ -0,0 +1,21 @@ +#!/bin/bash - + +source functions + +# History. +remember 'i=1; rm -f sock$i; nbdkit -U sock$i --filter=error --filter=log --filter=delay memory size=64M logfile=log$i error-rate=100% error-file=error$i rdelay=50ms wdelay=50ms' +remember './nbdraid.tcl 5 67108864 log%s error%s &' +remember 'i=1; sudo nbd-client -unix sock$i -b 512 /dev/nbd$((i-1))' +remember 'sudo mdadm --create /dev/md0 --level=5 --raid-devices=4 /dev/nbd{0,1,2,3} --spare-devices=1 /dev/nbd4' +remember 'sudo fdisk /dev/md0' +remember 'sudo mkfs -t ext4 /dev/md0p1' +remember 'sudo mount /dev/md0p1 /tmp/mnt' +remember 'sudo chown rjones /tmp/mnt/' + +echo "Visualising RAID" + +./restore +pushd nbdview >/dev/null +rm -f sock? error? log? +terminal +popd >/dev/null diff --git a/2019-fosdem/5500-raid.sh b/2019-fosdem/5500-raid.sh new file mode 100755 index 0000000..d333b36 --- /dev/null +++ b/2019-fosdem/5500-raid.sh @@ -0,0 +1,4 @@ +#!/bin/bash - + +xfce4-terminal --disable-server \ + -x ./5500-raid-next diff --git a/2019-fosdem/NOTES b/2019-fosdem/NOTES new file mode 100644 index 0000000..e69de29 diff --git a/2019-fosdem/bashrc b/2019-fosdem/bashrc new file mode 100644 index 0000000..4c6a3c6 --- /dev/null +++ b/2019-fosdem/bashrc @@ -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/2019-fosdem/code.js b/2019-fosdem/code.js new file mode 100644 index 0000000..e69de29 diff --git a/2019-fosdem/functions b/2019-fosdem/functions new file mode 100644 index 0000000..d5347e7 --- /dev/null +++ b/2019-fosdem/functions @@ -0,0 +1,43 @@ +# -*- 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" + +# Ditch libvirt for stability :-( +export LIBGUESTFS_BACKEND=direct + +# remember +# +# 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/2019-fosdem/restore b/2019-fosdem/restore new file mode 100755 index 0000000..ee22354 --- /dev/null +++ b/2019-fosdem/restore @@ -0,0 +1,20 @@ +#!/bin/bash - +# Unmount everything. + +sudo umount /tmp/mnt >&/dev/null + +sudo mdadm --stop /dev/md0 >&/dev/null + +sudo nbd-client -d /dev/nbd0 >&/dev/null +sudo nbd-client -d /dev/nbd1 >&/dev/null +sudo nbd-client -d /dev/nbd2 >&/dev/null +sudo nbd-client -d /dev/nbd3 >&/dev/null +sudo nbd-client -d /dev/nbd4 >&/dev/null + +sudo kpartx -d /dev/loop0 >&/dev/null +sudo losetup -d /dev/loop0 >&/dev/null + +killall nbdkit >&/dev/null +killall wish >&/dev/null + +exit 0 diff --git a/2019-fosdem/run b/2019-fosdem/run new file mode 100755 index 0000000..fe4a70e --- /dev/null +++ b/2019-fosdem/run @@ -0,0 +1,55 @@ +#!/bin/bash - +# Run the talk. + +set -e + +# Avoid GNOME keyring stupidity +export GNOME_KEYRING_CONTROL= +export GNOME_KEYRING_PID= + +# No proxy. +#unset http_proxy +#unset https_proxy +#unset ftp_proxy + +# Check the files are precreated. +if [ ! -f 1000-loopback-mounting.d/fedora-29.img ]; then + pushd 1000-loopback-mounting.d + virt-builder fedora-29 + popd +fi + +if [ ! -f 2000-xz-compressed.d/Fedora-Cloud-Base-29-1.2.x86_64.raw.xz ]; then + pushd 2000-xz-compressed.d + wget https://download.fedoraproject.org/pub/fedora/linux/releases/29/Cloud/x86_64/images/Fedora-Cloud-Base-29-1.2.x86_64.raw.xz + popd +fi + +if [ ! -f 3500-partitioning.d/boot.img ]; then + guestfish --ro -a 1000-loopback-mounting.d/fedora-29.img -i <