From d5ed61baa8deb36d33c7595cc83249991c66fe1f Mon Sep 17 00:00:00 2001 From: "Richard W.M. Jones" Date: Thu, 10 Dec 2015 14:36:30 +0000 Subject: [PATCH] 2015 virt tools talk. --- 2015-virt-tools/.gitignore | 2 + 2015-virt-tools/0000-introduction.html | 21 ++ 2015-virt-tools/1000-virt-resize.d/.gitignore | 2 + 2015-virt-tools/1000-virt-resize.term | 15 ++ 2015-virt-tools/2000-thin-provisioning.svg | 275 +++++++++++++++++++++++ 2015-virt-tools/2000-virt-sparsify.d/.gitignore | 2 + 2015-virt-tools/2000-virt-sparsify.html | 11 + 2015-virt-tools/2100-virt-sparsify.term | 17 ++ 2015-virt-tools/3000-virt-customize.d/.gitignore | 2 + 2015-virt-tools/3000-virt-customize.html | 17 ++ 2015-virt-tools/3100-virt-customize.term | 13 ++ 2015-virt-tools/4000-virt-sysprep.d/.gitignore | 2 + 2015-virt-tools/4000-virt-sysprep.term | 13 ++ 2015-virt-tools/5000-prepare-templates.html | 18 ++ 2015-virt-tools/5000-virt-builder.d/.gitignore | 2 + 2015-virt-tools/5100-virt-builder-list.term | 13 ++ 2015-virt-tools/5200-run-virt-builder.html | 17 ++ 2015-virt-tools/5300-run-virt-builder.term | 15 ++ 2015-virt-tools/5400-distro-metadata.html | 60 +++++ 2015-virt-tools/9000-final.html | 29 +++ 2015-virt-tools/NOTES | 151 +++++++++++++ 2015-virt-tools/README | 4 + 2015-virt-tools/bashrc | 17 ++ 2015-virt-tools/code.js | 0 2015-virt-tools/functions | 43 ++++ 2015-virt-tools/redhat.png | Bin 0 -> 4763 bytes 2015-virt-tools/run | 46 ++++ 2015-virt-tools/style.css | 67 ++++++ 28 files changed, 874 insertions(+) create mode 100644 2015-virt-tools/.gitignore create mode 100644 2015-virt-tools/0000-introduction.html create mode 100644 2015-virt-tools/1000-virt-resize.d/.gitignore create mode 100755 2015-virt-tools/1000-virt-resize.term create mode 100644 2015-virt-tools/2000-thin-provisioning.svg create mode 100644 2015-virt-tools/2000-virt-sparsify.d/.gitignore create mode 100644 2015-virt-tools/2000-virt-sparsify.html create mode 100755 2015-virt-tools/2100-virt-sparsify.term create mode 100644 2015-virt-tools/3000-virt-customize.d/.gitignore create mode 100644 2015-virt-tools/3000-virt-customize.html create mode 100755 2015-virt-tools/3100-virt-customize.term create mode 100644 2015-virt-tools/4000-virt-sysprep.d/.gitignore create mode 100755 2015-virt-tools/4000-virt-sysprep.term create mode 100644 2015-virt-tools/5000-prepare-templates.html create mode 100644 2015-virt-tools/5000-virt-builder.d/.gitignore create mode 100755 2015-virt-tools/5100-virt-builder-list.term create mode 100644 2015-virt-tools/5200-run-virt-builder.html create mode 100755 2015-virt-tools/5300-run-virt-builder.term create mode 100644 2015-virt-tools/5400-distro-metadata.html create mode 100644 2015-virt-tools/9000-final.html create mode 100644 2015-virt-tools/NOTES create mode 100644 2015-virt-tools/README create mode 100644 2015-virt-tools/bashrc create mode 100644 2015-virt-tools/code.js create mode 100644 2015-virt-tools/functions create mode 100644 2015-virt-tools/redhat.png create mode 100755 2015-virt-tools/run create mode 100644 2015-virt-tools/style.css diff --git a/2015-virt-tools/.gitignore b/2015-virt-tools/.gitignore new file mode 100644 index 0000000..d678620 --- /dev/null +++ b/2015-virt-tools/.gitignore @@ -0,0 +1,2 @@ +/bindings +/history diff --git a/2015-virt-tools/0000-introduction.html b/2015-virt-tools/0000-introduction.html new file mode 100644 index 0000000..35916b1 --- /dev/null +++ b/2015-virt-tools/0000-introduction.html @@ -0,0 +1,21 @@ + + + + +
+

+ virt-resize, virt-sparsify, virt-customize, virt-sysprep, virt-builder +

+

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

+

+ libguestfs is a library and set of tools for manipulating + virtual machine disk images. +

+

+ This talk is about the virt-tools which build on this + library to provide many useful abstractions. +

+
diff --git a/2015-virt-tools/1000-virt-resize.d/.gitignore b/2015-virt-tools/1000-virt-resize.d/.gitignore new file mode 100644 index 0000000..c96a04f --- /dev/null +++ b/2015-virt-tools/1000-virt-resize.d/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore \ No newline at end of file diff --git a/2015-virt-tools/1000-virt-resize.term b/2015-virt-tools/1000-virt-resize.term new file mode 100755 index 0000000..adffc85 --- /dev/null +++ b/2015-virt-tools/1000-virt-resize.term @@ -0,0 +1,15 @@ +#!/bin/bash - + +source functions + +# History. +remember 'qemu-img info fedora-22.qcow2' +remember 'virt-df -a fedora-22.qcow2 -h' +remember 'qemu-img create -f qcow2 fedora-22-bigger.qcow2 10G' +remember 'virt-resize fedora-22.qcow2 fedora-22-bigger.qcow2 --expand sda3' +remember 'virt-df -a fedora-22-bigger.qcow2 -h' + +echo "Running virt-resize" + +cd 1000-virt-resize.d +terminal diff --git a/2015-virt-tools/2000-thin-provisioning.svg b/2015-virt-tools/2000-thin-provisioning.svg new file mode 100644 index 0000000..c7cc146 --- /dev/null +++ b/2015-virt-tools/2000-thin-provisioning.svg @@ -0,0 +1,275 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + deleted/unused space in the guest + unallocated disk blocks on the host + + diff --git a/2015-virt-tools/2000-virt-sparsify.d/.gitignore b/2015-virt-tools/2000-virt-sparsify.d/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/2015-virt-tools/2000-virt-sparsify.d/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/2015-virt-tools/2000-virt-sparsify.html b/2015-virt-tools/2000-virt-sparsify.html new file mode 100644 index 0000000..320c2e9 --- /dev/null +++ b/2015-virt-tools/2000-virt-sparsify.html @@ -0,0 +1,11 @@ + + + + +

Thin provisioning

+ + + + diff --git a/2015-virt-tools/2100-virt-sparsify.term b/2015-virt-tools/2100-virt-sparsify.term new file mode 100755 index 0000000..1f74a75 --- /dev/null +++ b/2015-virt-tools/2100-virt-sparsify.term @@ -0,0 +1,17 @@ +#!/bin/bash - + +source functions + +# History. + +remember 'qemu-img info fedora-22.img' +remember 'du -sh fedora-22.img' +remember 'virt-df -a fedora-22.img -h' +remember 'virt-sparsify --inplace fedora-22.img' +remember 'qemu-img info fedora-22.img' +remember 'du -sh fedora-22.img' + +echo "Running virt-sparsify" + +cd 2000-virt-sparsify.d +terminal diff --git a/2015-virt-tools/3000-virt-customize.d/.gitignore b/2015-virt-tools/3000-virt-customize.d/.gitignore new file mode 100644 index 0000000..c96a04f --- /dev/null +++ b/2015-virt-tools/3000-virt-customize.d/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore \ No newline at end of file diff --git a/2015-virt-tools/3000-virt-customize.html b/2015-virt-tools/3000-virt-customize.html new file mode 100644 index 0000000..4011c94 --- /dev/null +++ b/2015-virt-tools/3000-virt-customize.html @@ -0,0 +1,17 @@ + + + + +

virt-customize

+ + diff --git a/2015-virt-tools/3100-virt-customize.term b/2015-virt-tools/3100-virt-customize.term new file mode 100755 index 0000000..070ccc9 --- /dev/null +++ b/2015-virt-tools/3100-virt-customize.term @@ -0,0 +1,13 @@ +#!/bin/bash - + +source functions + +# History. + +remember 'virt-customize -a fedora-22.img --install gcc,gdb --root-password password:123456 --edit /etc/selinux/config:s/^SELINUX=.*/SELINUX=permissive/' +remember 'virt-cat -a fedora-22.img /etc/selinux/config' + +echo "Running virt-customize" + +cd 3000-virt-customize.d +terminal diff --git a/2015-virt-tools/4000-virt-sysprep.d/.gitignore b/2015-virt-tools/4000-virt-sysprep.d/.gitignore new file mode 100644 index 0000000..c96a04f --- /dev/null +++ b/2015-virt-tools/4000-virt-sysprep.d/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore \ No newline at end of file diff --git a/2015-virt-tools/4000-virt-sysprep.term b/2015-virt-tools/4000-virt-sysprep.term new file mode 100755 index 0000000..0b90a4c --- /dev/null +++ b/2015-virt-tools/4000-virt-sysprep.term @@ -0,0 +1,13 @@ +#!/bin/bash - + +source functions + +# History. + +remember 'virt-sysprep -a fedora-22.img' +remember 'virt-sysprep --list-operations' + +echo "Running virt-sysprep" + +cd 4000-virt-sysprep.d +terminal diff --git a/2015-virt-tools/5000-prepare-templates.html b/2015-virt-tools/5000-prepare-templates.html new file mode 100644 index 0000000..8d480fa --- /dev/null +++ b/2015-virt-tools/5000-prepare-templates.html @@ -0,0 +1,18 @@ + + + + +

virt-builder: Preparing templates

+ +

+virt-install
+↓
+virt-sysprep
+↓
+virt-sparsify
+↓
+xz compress
+↓
+Online template repository
+(http://libguestfs.org/download/builder) +

diff --git a/2015-virt-tools/5000-virt-builder.d/.gitignore b/2015-virt-tools/5000-virt-builder.d/.gitignore new file mode 100644 index 0000000..c96a04f --- /dev/null +++ b/2015-virt-tools/5000-virt-builder.d/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore \ No newline at end of file diff --git a/2015-virt-tools/5100-virt-builder-list.term b/2015-virt-tools/5100-virt-builder-list.term new file mode 100755 index 0000000..97dc6f5 --- /dev/null +++ b/2015-virt-tools/5100-virt-builder-list.term @@ -0,0 +1,13 @@ +#!/bin/bash - + +source functions + +# History. + +remember 'virt-builder -l' +remember 'virt-builder --notes rhel-7.1' + +echo "virt-builder" + +cd 5000-virt-builder.d +terminal diff --git a/2015-virt-tools/5200-run-virt-builder.html b/2015-virt-tools/5200-run-virt-builder.html new file mode 100644 index 0000000..677f810 --- /dev/null +++ b/2015-virt-tools/5200-run-virt-builder.html @@ -0,0 +1,17 @@ + + + + +

virt-builder: Running

+ +

+Download a template
+↓
+xz uncompress
+↓
+virt-resize
+↓
+virt-customize
+↓
+Disk image ready to boot +

diff --git a/2015-virt-tools/5300-run-virt-builder.term b/2015-virt-tools/5300-run-virt-builder.term new file mode 100755 index 0000000..dd42e31 --- /dev/null +++ b/2015-virt-tools/5300-run-virt-builder.term @@ -0,0 +1,15 @@ +#!/bin/bash - + +source functions + +# History. + +remember 'virt-builder rhel-7.1' +remember 'virt-builder rhel-7.1 --install gcc --selinux-relabel' +remember 'virt-builder rhel-7.1 --size 20G' +remember 'virt-df -a rhel-7.1.img -h' + +echo "Running virt-builder" + +cd 5000-virt-builder.d +terminal diff --git a/2015-virt-tools/5400-distro-metadata.html b/2015-virt-tools/5400-distro-metadata.html new file mode 100644 index 0000000..cfb769a --- /dev/null +++ b/2015-virt-tools/5400-distro-metadata.html @@ -0,0 +1,60 @@ + + + + +

virt-builder: Distro metadata

+ + + + + + +
+ +
+

+virt-install
+↓
+virt-sysprep
+↓
+virt-sparsify
+↓
+xz compress
+↓
+Online template repository
+(http://libguestfs.org/download/builder) +

+
+ +
+ +
+-----BEGIN PGP SIGNED MESSAGE-----
+Hash: SHA1
+
+[centos-6.6]
+name=CentOS 6.6
+arch=x86_64
+file=CentOS-6.6-x86_64-Cloud.raw.xz
+checksum[sha512]=fc403ea3555a560...
+format=raw
+size=6442450944
+compressed_size=199265736
+expand=/dev/sda3
+
+-----BEGIN PGP SIGNATURE-----
+
+ +
+ +

+virt-builder can pull templates from multiple +repositories. +

diff --git a/2015-virt-tools/9000-final.html b/2015-virt-tools/9000-final.html new file mode 100644 index 0000000..56479fe --- /dev/null +++ b/2015-virt-tools/9000-final.html @@ -0,0 +1,29 @@ + + + + +

More information

+ + diff --git a/2015-virt-tools/NOTES b/2015-virt-tools/NOTES new file mode 100644 index 0000000..9223840 --- /dev/null +++ b/2015-virt-tools/NOTES @@ -0,0 +1,151 @@ +virt-resize, virt-sparsify, virt-customize, virt-sysprep, virt-builder +---------------------------------------------------------------------- + +Audience: + + - Interested in manipulating disk images. + - May be familiar with disk images, formats, but may not be. + - Not developers. + + +1000: Resizing a disk image +---------------------------------------------------------------------- + +Show a disk image, use 'qemu-img info' to get data about it. + + $ qemu-img info fedora-22.qcow2 + +--> Format +--> Size : virtual and physical may not be related + +What the guest would see when booted up: + + $ virt-df -a fedora-22.qcow2 -h + +Always use 'qemu-img info', not 'ls -l'. + +What if the guest needs more space? +There are various ways to resize a disk image: + + - Just make the container bigger ('qemu-img resize' or even 'truncate'). + But the partitions won't get bigger. [illustrate with picture] + + - Run a tool inside the guest, like parted. It won't usually work + if the disk is mounted. + + - Run a tool alongside the guest, but still in a VM, eg. PartitionMagic, + GParted Live. + + - Use virt-resize on the host for offline resizing. + + $ qemu-img create -f qcow2 fedora-22-bigger.qcow2 10G + $ virt-resize fedora-22.qcow2 fedora-22-bigger.qcow2 --expand sda3 + $ virt-df -a fedora-22-bigger.qcow2 -h + +virt-resize is quite flexible: For example you could give /dev/sda1 +500 MB and give the rest to /dev/sda3, or you could tell virt-resize +to put the new space into an extra partition. + +Also works for Windows. + + +2000: Sparsifying a disk image +---------------------------------------------------------------------- + +Show a fully allocated disk image, this time with 'ls -lh': + + $ qemu-img info fedora-22.img + $ du -sh fedora-22.img + $ virt-df -a fedora-22.img -h + +Sparsify it in place: + + $ virt-sparsify --inplace fedora-22.img + $ qemu-img info fedora-22.img + $ du -sh fedora-22.img + +Explain the two modes for sparsification. + +Also works for Windows. + + +3000: Customizing a disk image +---------------------------------------------------------------------- + +The situation is that you have an existing guest operating system, and +you want to _offline_ install packages, set the root password, inject +files, set the hostname, or about a dozen other things. + + $ virt-customize -a fedora-22.img --install gcc,gdb --root-password password:123456 --edit /etc/selinux/config:s/^SELINUX=.*/SELINUX=permissive/ + $ virt-cat -a fedora-22.img /etc/selinux/config + +Also works for a limited range of operations on Windows. On Windows, +most work is done using "firstboot" batch files that run once at the +next boot. + + +4000: Sysprepping a disk image +---------------------------------------------------------------------- + +SYSPREP.EXE is a Microsoft proprietary program for preparing a Windows +system for duplication. It removes the identity of the system. + +We borrow the name of this program for the next tool, virt-sysprep, +which does a similar job for Linux systems, turning them into +templates from which you can clone further guests. This is a tool +you'll probably either use all the time or never need to use at all. + + $ virt-sysprep -a fedora-22.img + +It runs on the guest in-place. + +It performs a serious of sysprepping operations, which you can read +about in the manual. + +There are some operations which are not enabled by default: + + $ virt-sysprep --list-operations + +You'll want to read the manual before using this. + +This deletes the SSH host keys, because you wouldn't want those to be +duplicated across clones. But it can't set up a fresh random seed for +each clone. For that you need to set a random seed after the clone, +using virt-customize. Virt-builder which I'll talk about next also +sets a fresh random seed automatically. + + +5000: Building a disk image +---------------------------------------------------------------------- + +Show a diagram of the whole process and how the tools are related. + + preparing templates for virt-builder + virt-install ---> sysprep ---> sparsify ---> compress ---> templates + (OS installer) repository + + running virt-builder as an end user + download a template ---> uncompress ---> resize/format ---> customize ---> result + or a cloud image + + + $ virt-builder -l + $ virt-builder --notes rhel-7.1 + $ virt-builder rhel-7.1 + +Speed is important! + +Any virt-customize options can be used: + + $ virt-builder rhel-7.1 --install gcc --selinux-relabel + +If you use the --size option, virt-resize is invoked which takes a bit +longer: + + $ virt-builder rhel-7.1 --size 20G + $ virt-df -a rhel-7.1.img -h + +virt-builder only builds disk images. It doesn't run them or upload +them into glance. + +Other tools have been built around virt-builder. diff --git a/2015-virt-tools/README b/2015-virt-tools/README new file mode 100644 index 0000000..192228d --- /dev/null +++ b/2015-virt-tools/README @@ -0,0 +1,4 @@ +This is a talk about particular virt tools (virt-resize, +virt-sparsify, virt-customize, virt-sysprep, virt-builder) which I +gave privately to Red Hat colleagues (December 2015) and then recorded +for QEMU's Hangouts on Air programme. diff --git a/2015-virt-tools/bashrc b/2015-virt-tools/bashrc new file mode 100644 index 0000000..4c6a3c6 --- /dev/null +++ b/2015-virt-tools/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/2015-virt-tools/code.js b/2015-virt-tools/code.js new file mode 100644 index 0000000..e69de29 diff --git a/2015-virt-tools/functions b/2015-virt-tools/functions new file mode 100644 index 0000000..d5347e7 --- /dev/null +++ b/2015-virt-tools/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/2015-virt-tools/redhat.png b/2015-virt-tools/redhat.png new file mode 100644 index 0000000000000000000000000000000000000000..f50076ad8e004c4b299f28c79526e98f7c8a3d8d GIT binary patch literal 4763 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 literal 0 HcmV?d00001 diff --git a/2015-virt-tools/run b/2015-virt-tools/run new file mode 100755 index 0000000..9a80550 --- /dev/null +++ b/2015-virt-tools/run @@ -0,0 +1,46 @@ +#!/bin/bash - +# Run the talk. + +set -e + +# Avoid GNOME keyring stupidity +export GNOME_KEYRING_CONTROL= +export GNOME_KEYRING_PID= + +# Clean up everything. +find -name '*~' -delete +rm -f [1-9]000-*.d/* + +# No proxy. +#unset http_proxy +#unset https_proxy +#unset ftp_proxy + +# Get everything into the cache. +guestfish -a /dev/null run || exit 1 + +# If not 'quick mode', create the initial images. +if [ "$1" != "--quick" ]; then + pushd 1000-virt-resize.d + virt-builder --format qcow2 fedora-22 + popd + + pushd 2000-virt-sparsify.d + qemu-img convert ../1000-virt-resize.d/fedora-22.qcow2 -O raw -o preallocation=falloc fedora-22.img + popd + + pushd 3000-virt-customize.d + qemu-img convert ../1000-virt-resize.d/fedora-22.qcow2 -O raw fedora-22.img + popd + + pushd 4000-virt-sysprep.d + qemu-img convert ../1000-virt-resize.d/fedora-22.qcow2 -O raw fedora-22.img + popd + + pushd 5000-virt-builder.d + popd +fi + +# Run techtalk. +#techtalk-pse +~/d/techtalk-pse/techtalk-pse diff --git a/2015-virt-tools/style.css b/2015-virt-tools/style.css new file mode 100644 index 0000000..4a33b8f --- /dev/null +++ b/2015-virt-tools/style.css @@ -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: 28pt; */ /* For max */ + font-size: 20pt; /* For 1024x768 */ + /* font-family: liberation, helvetica; */ + font-family: helvetica; +} + +body td, body th { /* why?? */ + font-size: 24pt; + padding-bottom: 8px; +} + +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 -- 1.8.3.1