=head1 NAME

virt-p2v-make-kiwi - Build the virt-p2v kiwi configuration

=head1 SYNOPSIS

 virt-p2v-make-kiwi [--inject-ssh-identity path] [-o kiwi-folder]

=head1 DESCRIPTION

L<virt-p2v(1)> converts a physical machine to run virtualized on KVM,
managed by libvirt, OpenStack, oVirt, Red Hat Enterprise
Virtualisation (RHEV), or one of the other targets supported by
L<virt-v2v(1)>.

Kiwi is a tool used mainly by SUSE Linux Enterprise and openSUSE to
build live CDs, make appliances and so on. It is driven by a few files
including an xml description of the machine.

virt-p2v-make-kiwi builds a folder containing all the pieces needed for
kiwi to build a bootable P2V live CD ISO, USB key, or PXE image.  This tool
only builds the kiwi configuration, but this manual page describes some of
the ways you can use the kiwi configuration.

=head1 BUILDING THE KIWI CONFIGURATION

Using virt-p2v-make-kiwi is very simple:

 virt-p2v-make-kiwi

will build a kiwi configuration based on the current machine’s distribution.

To control the name of the output folder, use the I<-o> parameter.

=head1 BUILDING A LIVE CD / ISO

Once you have the kiwi configuration folder, you can use L<kiwi(1)> to make a
live CD:

 sudo kiwi --build p2v.kiwi -d build --type iso

Before running this, you may have to tweak the C<config.xml> file
to change the locale and keyboard mapping to the one you need.

If running on a SUSE Linux Entreprise Server, add the path to your packages repositories
using the C<--ignore-repos> and C<--add-repo> kiwi parameters.

The generated ISO image will be placed in the C<build> folder.

=head1 BUILDING A BOOTABLE USB KEY

Use the L<dd(1)> program to write the ISO created above to a USB key:

 sudo dd if=path/to/p2v.iso of=/dev/sdX

=head1 BUILDING A PXE BOOT IMAGE

To create a PXE boot image, run kiwi in such a way:

 sudo kiwi --build $PWD/p2v.kiwi -d build --add-profile netboot --type pxe

For more details on how to use the generated image, report to the kiwi documentation
on PXE images: L<https://doc.opensuse.org/projects/kiwi/doc/#chap.pxe>

=head1 ADDING AN SSH IDENTITY

You can inject an SSH identity (private key) file to the kiwi config and
hence into the ISO using the I<--inject-ssh-identity> option.  Note
that you I<cannot> inject a key once the ISO has been built.

First create a key pair.  It must have an empty passphrase:

 ssh-keygen -t rsa -N '' -f id_rsa

This creates a private key (C<id_rsa>) and a public key
(C<id_rsa.pub>) pair.  The public key should be appended to the
C<authorized_keys> file on the virt-v2v conversion server (usually to
C</root/.ssh/authorized_keys>).

The private key should be added to the kiwi config and then
discarded:

 virt-p2v-make-kiwi [...] --inject-ssh-identity id_rsa
 rm id_rsa

The ISO can then be built from the kickstart in the usual way (see
above), and it will contain the embedded SSH identity
(F</var/tmp/id_rsa>).

When booting virt-p2v, specify the URL of the injected file like this:

 │         User name: [root_____________________________] │
 │                                                        │
 │          Password: [    <leave this field blank>     ] │
 │                                                        │
 │  SSH Identity URL: [file:///var/tmp/id_rsa___________] │

or if using the kernel command line, add:

 p2v.identity=file:///var/tmp/id_rsa

For more information, see L<virt-p2v(1)/SSH IDENTITIES>.

=head1 OPTIONS

=over 4

=item B<--help>

Display help.

=item B<--inject-ssh-identity> id_rsa

Add an SSH identity (private key) file into the kickstart.
See L</ADDING AN SSH IDENTITY> above.

=item B<-o> OUTPUT

=item B<--output> OUTPUT

Write kiwi configuration to the C<OUTPUT> folder.  If not specified, the default is
F<p2v.kiwi> in the current directory.

=item B<-V>

=item B<--version>

Display version number and exit.

=back

=head1 FILES

=over 4

=item F<$libdir/virt-p2v/virt-p2v.xz>

The L<virt-p2v(1)> binary which is copied into the kiwi configuration.

The location of the binary can be changed by setting the
C<VIRT_P2V_DATA_DIR> environment variable.

=item F<$datadir/virt-p2v/issue>

=item F<$datadir/virt-p2v/launch-virt-p2v.in>

=item F<$datadir/virt-p2v/kiwi>

=item F<$datadir/virt-p2v/p2v.service>

Various data files that are used to make the kiwi appliance.

The location of these files can be changed by setting the
C<VIRT_P2V_DATA_DIR> environment variable.

=back

=head1 ENVIRONMENT VARIABLES

=over 4

=item C<VIRT_P2V_DATA_DIR>

The directory where virt-p2v-make-kiwi looks for data files and
the virt-p2v binary (see L</FILES> above).  If not set, a compiled-in
location is used.

=back

=head1 SEE ALSO

L<virt-p2v(1)>,
L<virt-p2v-make-disk(1)>,
L<virt-v2v(1)>,
L<kiwi(1)>,
L<http://libguestfs.org/>.

=head1 AUTHORS

Cédric Bosdonnat

=head1 COPYRIGHT

Copyright (C) 2016 SUSE Ltd.
