debvm-run - Run a VM image created by debvm-create
debvm-run [-g] [-i image] [-s
sshport] [-- qemu options]
debvm-run is essentially a thin wrapper around qemu
for running a virtual machine image created by debvm-create or
something compatible. The virtual machine image is expected to be a raw ext4
image with a non-empty file system label. The architecture of the machine is
detected from the contained /bin/true. It must contain a symbolic
link pointing to a kernel image at one of (|/boot)/vmlinu[xz] a
symbolic link pointing to an initrd image at initrd.img in the same
directory as the kernel image. Both are extracted and passed to qemu.
A net interface configured for user mode is added automatically.
- --append=cmdline
- While the kernel command line can be modified by passing -append to
qemu directly, doing that always replaces the entire command line
and thus removes important values passed by debvm-run. This variant
instead appends given command line arguments to the automatic ones.
Repeated use also causes appending rather than replacement.
- -g,
--graphical
- By default, the option -nographic is passed to qemu and one
interacts with the serial console of the machine. This configuration is
skipped in the presence of this option. Note that debvm-create
defaults to installing a cloud kernel if available, so you may have to
pass "--include=linux-image-generic"
during image construction to get graphics drivers.
- -i image,
--image=image
- This option specifies the location of the virtual machine image file. By
default rootfs.ext4 in the working directory is used.
- --netopt=option
- debvm-run sets up a user mode network by default. It therefore
passes a -netdev option to qemu. Using this option, you can
customize the value of that -netdev option. For instance, you can
set up additional port forwards by passing e.g.
"--netopt hostfwd=:127.0.0.1:8080-:80".
It can be used multiple times.
- --skip=task
- Skip a particular task or feature. The option may be specified multiple
times or list multiple tasks to be skipped by separating them with a
comma. By default, no tasks are skipped. The following tasks may be
skipped.
- network
- Do not pass configure network card.
- rngdev
- Do not pass a random number generator device.
- root
- Skip all of the following tasks matching
"root/*". If either of these is present,
the VM will not boot unless a suitable replacement is added in another
way.
- root/cmd
- Since debvm-run uses qemu as bootloader it normally passes
the label of the root block device via the kernel command line. This
passing can be inhibited to supply a different location.
- root/dev
- A block device for the root filesystem is no longer passed. This can be
used to customize the block device.
- -s sshport,
--sshport=sshport
- If given, qemu is configured to pass connections to
127.0.0.1:sshport to port 22 of the virtual machine. You can
connect to your virtual machine without updating your known hosts like
this:
ssh -o NoHostAuthenticationForLocalhost=yes -p $sshport root@127.0.0.1
The option is a shorthand for "--netopt
hostfwd=tcp:127.0.0.1:sshport-:22".
- -- qemu
options
- All options beyond a double dash are passed to qemu. This can be
used to configure additional hardware components. One possible use of this
method is passing -snapshot to avoid modifying the virtual machine
image.
Run a virtual machine stored in the image rootfs.ext4 (the
default) with local port 8022 routed to port 22 of the virtual machine. The
-snapshot argument is passed to QEMU and prevents any permanent
changes to rootfs.ext4, resulting in an ephemeral run.
debvm-run -s 8022 -i rootfs.ext4 -- -snapshot
- The debvm-run console renders
wrong.
- Make sure $TERM is set to a value known inside the
VM. You may need to install ncurses-term for more definitions. The
serial console will miss events of resizing the terminal emulator. You may
run "setterm --resize" in that
case.
- How can I kill
debvm-run?
- The wrapped qemu can be terminated by pressing Ctrl-a x. Refer to
the qemu manual page for more escape sequences.
Due to the way kernel and bootloader are being extracted before
running qemu, one cannot upgrade a kernel and then just reboot.
Attempting to do so, will still use the old kernel. Instead, qemu
must be terminated and debvm-run should be launched again to pick up
the new kernel. In order to avoid accidental reboots, one may pass
-no-reboot to qemu.