[Libguestfs] [PATCH] builder: various improvements to the documentation
Cedric Bosdonnat
cbosdonnat at suse.com
Mon Apr 10 11:29:09 UTC 2017
On Mon, 2017-04-10 at 11:29 +0200, Pino Toscano wrote:
> - convert the Fedora 20 examples to Fedora 25
> - convert the yum examples to dnf
> - convert the Debian 7 examples to Debian 8
> - mention that --core updates all the installed packages, not "core"
> ones
> - convert i386 to i686 for the Fedora 32bit examples
> - mention that autogenerated root passwords are printed on stdout
> - mention --get-kernel is deprecated in favour of virt-get-kernel
> - update URL to the Puppet installation documentation
> - edit the repository index documentation to make it clearer
> non-compressed templates are supported
> - remove old wrong paragraph about customization specified in command
> line not processed in the same order
> - use --install instead of --run-command '$pkgmgr install ...'
> - other minor changes
> ---
> builder/virt-builder.pod | 144 ++++++++++++++++++++++++-----------------------
> 1 file changed, 73 insertions(+), 71 deletions(-)
>
> diff --git a/builder/virt-builder.pod b/builder/virt-builder.pod
> index dbbd646..74bf7bb 100644
> --- a/builder/virt-builder.pod
> +++ b/builder/virt-builder.pod
> @@ -59,14 +59,14 @@ your own too (see below).
> After choosing a guest from the list, you may want to see if there
> are any installation notes:
>
> - virt-builder --notes fedora-20
> + virt-builder --notes fedora-25
>
> =head2 Build a virtual machine
>
> - virt-builder fedora-20
> + virt-builder fedora-25
>
> -will build a Fedora 20 image for the same architecture as virt-builder
> -(so running it from an i386 installation will try to build an i386
> +will build a Fedora 25 image for the same architecture as virt-builder
> +(so running it from an i686 installation will try to build an i686
> image, if available). This will have all default
> configuration (minimal size, no user accounts, random root password,
> only the bare minimum installed software, etc.).
> @@ -77,57 +77,57 @@ The first time this runs it has to download the template over the
> network, but this gets cached (see L</CACHING>).
>
> The name of the output file is derived from the template name, so
> -above it will be F<fedora-20.img>. You can change the output filename
> +above it will be F<fedora-25.img>. You can change the output filename
> using the I<-o> option:
>
> - virt-builder fedora-20 -o mydisk.img
> + virt-builder fedora-25 -o mydisk.img
>
> You can also use the I<-o> option to write to existing devices or
> logical volumes.
>
> - virt-builder fedora-20 --format qcow2
> + virt-builder fedora-25 --format qcow2
>
> -As above, but write the output in qcow2 format to F<fedora-20.qcow2>.
> +As above, but write the output in qcow2 format to F<fedora-25.qcow2>.
>
> - virt-builder fedora-20 --size 20G
> + virt-builder fedora-25 --size 20G
>
> As above, but the output size will be 20 GB. The guest OS is resized
> as it is copied to the output (automatically, using
> L<virt-resize(1)>).
>
> - virt-builder fedora-20 --arch i386
> + virt-builder fedora-25 --arch i686
>
> -As above, but using an i386 template, if available.
> +As above, but using an i686 template, if available.
>
> =head2 Setting the root password
>
> - virt-builder fedora-20 --root-password file:/tmp/rootpw
> + virt-builder fedora-25 --root-password file:/tmp/rootpw
>
> -Create a Fedora 20 image. The root password is taken from the file
> +Create a Fedora 25 image. The root password is taken from the file
> F</tmp/rootpw>.
>
> Note if you I<don’t> set I<--root-password> then the guest is given
> -a I<random> root password.
> +a I<random> root password which is printed on stdout.
>
> You can also create user accounts. See L</USERS AND PASSWORDS> below.
>
> =head2 Set the hostname
>
> - virt-builder fedora-20 --hostname virt.example.com
> + virt-builder fedora-25 --hostname virt.example.com
>
> Set the hostname to C<virt.example.com>.
>
> =head2 Installing software
>
> To install packages from the ordinary (guest) software repository
> -(eg. yum or apt):
> +(eg. dnf or apt):
>
> - virt-builder fedora-20 --install "inkscape, at Xfce Desktop"
> + virt-builder fedora-25 --install "inkscape, at Xfce Desktop"
>
> (In Fedora, C<@> is used to install groups of packages. On Debian
> you would install a meta-package instead.)
>
> -To update the core packages to the latest version:
> +To update the installed packages to the latest version:
>
> virt-builder debian-7 --update
>
> @@ -135,7 +135,7 @@ For guests which use SELinux, like Fedora and Red Hat Enterprise
> Linux, you may need to do SELinux relabelling after installing or
> updating packages (see L</SELINUX> below):
>
> - virt-builder fedora-20 --update --selinux-relabel
> + virt-builder fedora-25 --update --selinux-relabel
>
> =head2 Customizing the installation
>
> @@ -149,27 +149,27 @@ I<--edit> to edit files. I<--upload> to upload files.
>
> For example:
>
> - cat <<'EOF' > /tmp/yum-update.sh
> - yum -y update
> + cat <<'EOF' > /tmp/dnf-update.sh
> + dnf -y --best update
> EOF
>
> - virt-builder fedora-20 --firstboot /tmp/yum-update.sh
> + virt-builder fedora-25 --firstboot /tmp/dnf-update.sh
>
> or simply:
>
> - virt-builder fedora-20 --firstboot-command 'yum -y update'
> + virt-builder fedora-25 --firstboot-command 'dnf -y --best update'
>
> -which makes the L<yum(8)> C<update> command run once the first time
> +which makes the L<dnf(8)> C<update> command run once the first time
> the guest boots.
>
> Or:
>
> - virt-builder fedora-20 \
> - --edit '/etc/yum.conf:
> + virt-builder fedora-25 \
> + --edit '/etc/dnf/dnf.conf:
> s/gpgcheck=1/gpgcheck=0/'
>
> -which edits F</etc/yum.conf> inside the disk image (during disk image
> -creation, long before boot).
> +which edits F</etc/dnf/dnf.conf> inside the disk image (during disk
> +image creation, long before boot).
>
> You can combine these options, and have multiple options of all types.
>
> @@ -301,6 +301,9 @@ This option extracts the kernel and initramfs from a previously built
> disk image called C<IMAGE> (in fact it works for any VM disk image,
> not just ones built using virt-builder).
>
> +Note this method is B<deprecated>: there is a separate tool for this,
> +L<virt-get-kernel(1)>, which has more options for the file extraction.
> +
> The kernel and initramfs are written to the current directory, unless
> you also specify the I<--output> C<outputdir> B<directory> name.
>
> @@ -554,16 +557,16 @@ If the guest OS you are installing is similar to the host OS (eg.
> both are Linux), and if libguestfs supports network connections, then
> you can use I<--install> to install packages like this:
>
> - virt-builder fedora-20 --install inkscape
> + virt-builder fedora-25 --install inkscape
>
> This uses the guest’s package manager and the host’s network
> connection.
>
> =head3 Updating packages at build time
>
> -To update the core set of packages in the template at build time:
> +To update the installed packages in the template at build time:
>
> - virt-builder fedora-20 --update
> + virt-builder fedora-25 --update
>
> Most of the templates that ship with virt-builder come with a very
> minimal selection of packages (known as a "JEOS" or "Just Enough
> @@ -575,7 +578,7 @@ OS from the template. This option updates those template packages.
>
> Another option is to install the packages when the guest first boots:
>
> - virt-builder fedora-20 --firstboot-install inkscape
> + virt-builder fedora-25 --firstboot-install inkscape
>
> This uses the guest’s package manager and the guest’s network
> connection.
> @@ -598,7 +601,7 @@ L<virt-make-fs(1)>. For genisoimage, use a command like this:
> genisoimage -o extra-packages.iso -R -J -V EXTRA cdcontents/
>
> Create a script that mounts the ISO and sets up the repository. For
> -yum, create /tmp/install.sh containing:
> +dnf, create /tmp/install.sh containing:
>
> mkdir /tmp/mount
> mount LABEL=EXTRA /tmp/mount
> @@ -610,7 +613,7 @@ yum, create /tmp/install.sh containing:
> enabled=1
> EOF
>
> - yum -y install famousdatabase
> + dnf -y install famousdatabase
>
> For apt, create /tmp/install.sh containing:
>
> @@ -623,7 +626,7 @@ For apt, create /tmp/install.sh containing:
> Use the I<--attach> option to attach the CD / disk image and the
> I<--run> option to run the script:
>
> - virt-builder fedora-20 \
> + virt-builder fedora-25 \
> --attach extra-packages.iso \
> --run /tmp/install.sh
>
> @@ -702,7 +705,7 @@ keyboard for some common Linux distributions.
>
> For distros that use systemd C<localectl>, use a command like this:
>
> - virt-builder fedora-20 \
> + virt-builder fedora-25 \
> --firstboot-command 'localectl set-keymap uk'
>
> See L<localectl(1)> and
> @@ -726,7 +729,7 @@ For Debian-derived distros using F</etc/default/keyboard>, upload or
> modify the keyboard file using the I<--upload>, I<--write> or
> I<--edit> options. For example:
>
> - virt-builder debian-7 \
> + virt-builder debian-8 \
> --edit '/etc/default/keyboard: s/^XKBLAYOUT=.*/XKBLAYOUT="gb"/'
>
> See L<https://wiki.debian.org/Keyboard>.
> @@ -744,9 +747,9 @@ of virt-builder to do this.
>
> This section contains examples for some common Linux distributions.
>
> -=head3 Setting Japanese in Fedora 20
> +=head3 Setting Japanese in Fedora 25
>
> - virt-builder fedora-20 \
> + virt-builder fedora-25 \
> --size 20G \
> --update \
> --install @japanese-support \
> @@ -757,7 +760,7 @@ This section contains examples for some common Linux distributions.
> --firstboot-command 'localectl set-keymap jp' \
> --firstboot-command 'systemctl isolate graphical.target'
>
> -=head3 Setting Japanese in Debian 7 (Wheezy)
> +=head3 Setting Japanese in Debian 8 (Jessie)
>
> Note that although this enables Japanese in the text console too, it
> is unlikely that you will see properly rendered Japanese there.
> @@ -765,15 +768,14 @@ However Japanese is properly rendered in X applications and terminals.
>
> pkgs=locales,xfce4,\
> ibus,ibus-anthy,\
> - ttf-sazanami-gothic,ttf-sazanami-mincho,\
> + fonts-ipafont-gothic,fonts-ipafont-mincho,\
> fonts-takao-mincho,\
> xfonts-intl-japanese,xfonts-intl-japanese-big,\
> iceweasel-l10n-ja,manpages-ja
>
> - virt-builder debian-7 \
> + virt-builder debian-8 \
> --size 20G \
> --install $pkgs \
> - --edit '/etc/inittab: s,^#([1-9].*respawn.*/sbin/getty.*),$1,' \
> --edit '/etc/locale.gen: s,^#\s*ja,ja,' \
> --write '/etc/default/locale:LANG="ja_JP.UTF-8"' \
> --run-command "locale-gen"
> @@ -788,7 +790,7 @@ logged in one of the following locations:
>
> =item F</tmp/builder.log>
>
> -On Linux, BSD and other guests.
> +On Linux, BSD, and other non-Windows guests.
>
> =item F<C:\Temp\builder.log>
>
> @@ -975,7 +977,7 @@ I<--import> option.
>
> virt-install --import \
> --name guest --ram 2048 \
> - --disk path=disk.img,format=raw --os-variant fedora20
> + --disk path=disk.img,format=raw --os-variant fedora25
>
> Notes:
>
> @@ -1010,7 +1012,7 @@ tools probably work differently as well.
>
> Import the image into Glance (the OpenStack image store) by doing:
>
> - glance image-create --name fedora-20-image --file fedora-20.img \
> + glance image-create --name fedora-25-image --file fedora-25.img \
> --disk-format raw --container-format bare \
> --is-public True
>
> @@ -1020,12 +1022,12 @@ parameter should match virt-builder’s I<--format> option (or C<raw> if
> you didn't use that option). The I<--container-format> should always
> be C<bare> since virt-builder doesn't put images into containers.
>
> -You can use the S<C<glance image-show I<fedora-20-image>>> command to
> +You can use the S<C<glance image-show I<fedora-25-image>>> command to
> display the properties of the image.
>
> To boot up an instance of your image on a Nova compute node, do:
>
> - nova boot fedora-20-server --image fedora-20-image \
> + nova boot fedora-25-server --image fedora-25-image \
> --flavor m1.medium
>
> Use S<C<nova flavor-list>> to list possible machine flavors. Use
> @@ -1056,18 +1058,18 @@ at boot.
>
> A typical virt-builder command would be:
>
> - virt-builder fedora-20 \
> + virt-builder fedora-25 \
> --hostname client.example.com \
> --update \
> --install puppet \
> - --edit '/etc/puppet/puppet.conf:
> - s/^\[agent\]/[agent]\n server = puppetmaster.example.com/' \
> + --append-line '/etc/puppet/puppet.conf:[agent]' \
> + --append-line '/etc/puppet/puppet.conf:server = puppetmaster.example.com/' \
> --run-command 'systemctl enable puppet' \
> --selinux-relabel
>
> The precise instructions vary according to the Linux distro. For
> further information see:
> -L<http://docs.puppetlabs.com/guides/installation.htm>
> +L<https://docs.puppet.com/puppet/latest/install_pre.html>
>
> =head2 DEBUGGING BUILDS
>
> @@ -1277,6 +1279,10 @@ clone existing guests (see L<virt-sysprep(1)>), or you could install a
> guest by hand (L<virt-install(1)>). To see how the templates were
> created for virt-builder, look at the scripts in C<builder/templates>
>
> +Virt-builder supports any image format (e.g. raw, qcow2, etc) as
> +template, both as-is, and compressed as XZ. This way, existing images
> +(e.g. cleaned using L<virt-sysprep(1)>) can be used as templates.
> +
> For best results when compressing the templates, use the following xz
> options (see L<nbdkit-xz-plugin(1)> for further explanation):
>
> @@ -1366,8 +1372,8 @@ The file can be created as follows:
>
> =item C<checksum[sha512]=7b882fe9b82eb0fef...>
>
> -The SHA-512 checksum of the B<compressed> file is checked after it is
> -downloaded. To work out the signature, do:
> +The SHA-512 checksum of the file specified in I<file=..> is checked
> +after it is downloaded. To work out the signature, do:
>
> sha512sum disk.xz
>
> @@ -1395,9 +1401,10 @@ The revision number is optional. If omitted it defaults to C<1>.
>
> =item C<format=qcow2>
>
> -Specify the format of the disk image (before it was compressed). If
> -not given, the format is autodetected, but generally it is better to
> -be explicit about the intended format.
> +Specify the format of the disk image; in case it is compressed, that
> +is the format before the compression. If not given, the format is
> +autodetected, but generally it is better to be explicit about the
> +intended format.
>
> Note this is the source format, which is different from the
> I<--format> option (requested output format). Virt-builder does
> @@ -1418,8 +1425,9 @@ I<--size> option.
>
> =item C<compressed_size=NNN>
>
> -The compressed size of the disk image in bytes. This is just used for
> -information (when using I<--list --long>).
> +The actual size of the disk image in bytes, i.e. what was specified
> +in I<file=..>. This is just used for information (when using C<long>,
> +and C<json> formats of I<--list>).
>
> =item C<expand=/dev/sdaX>
>
> @@ -1568,18 +1576,11 @@ To increase both speed and reliability of installing packages, you can
> set up a local mirror of the target distribution, and point the guest
> package manager at that.
>
> -Because of the order in which each phase of installation happens, you
> -cannot use I<--write> (to point the package manager at a repo)
> -followed by I<--install> (to install from that repo). The I<--write>
> -and I<--install> steps run in the opposite order, regardless of their
> -order on the command line. You have to do this using I<--run-command>
> -instead of I<--install>.
> -
> =head4 Using a local mirror with Fedora
>
> To install a Fedora guest using a local mirror:
>
> - virt-builder fedora-20 \
> + virt-builder fedora-25 \
> --edit '/etc/yum.repos.d/fedora.repo:
> s{.*baseurl=.*}{baseurl=http://example.com/mirror/};
> s{.*metalink=.*}{};
> @@ -1588,8 +1589,8 @@ To install a Fedora guest using a local mirror:
> s{.*baseurl=.*}{baseurl=http://example.com/mirror-updates/};
> s{.*metalink=.*}{};
> ' \
> - --run-command 'yum -y update' \
> - --run-command 'yum -y install pkg1 pkg2 ...'
> + --run-command 'dnf -y update' \
> + --install 'pkg1,pkg2,...'
>
> =head4 Using a local mirror with Debian
>
> @@ -1597,10 +1598,10 @@ Assuming that you are using C<apt-proxy> to mirror the repository, you
> should create a new F<sources.list> file to point to your proxy (see
> L<https://help.ubuntu.com/community/AptProxy>) and then do:
>
> - virt-builder debian-7 \
> + virt-builder debian-8 \
> --upload sources.list:/etc/apt/sources.list \
> --run-command 'apt-get -y update' \
> - --run-command 'apt-get -y install pkg1 pkg2 ...'
> + --install 'pkg1,pkg2,...'
>
> =head2 DIGITAL SIGNATURES
>
> @@ -1876,6 +1877,7 @@ L<guestfish(1)>,
> L<guestmount(1)>,
> L<virt-copy-out(1)>,
> L<virt-customize(1)>,
> +L<virt-get-kernel(1)>,
> L<virt-install(1)>,
> L<virt-rescue(1)>,
> L<virt-resize(1)>,
LGTM
--
Cedric
More information about the Libguestfs
mailing list