mirror of
https://github.com/linuxkit/linuxkit.git
synced 2025-07-18 17:01:07 +00:00
Signed-off-by: Avi Deitcher <avi@deitcher.net> Signed-off-by: Avi Deitcher <avi@deitcher.net>
86 lines
3.7 KiB
Markdown
86 lines
3.7 KiB
Markdown
# LinuxKit with qemu/kvm
|
|
|
|
The `qemu` backend is the most versatile `run` backend for
|
|
`linuxkit`. It can boot both `x86_64` and `arm64` images, runs on
|
|
macOS and Linux (and possibly Windows), and can boot most types of
|
|
output formats. On Linux, `kvm` acceleration is enabled by default if
|
|
available. On macOS, `hvf` acceleration (using the Hypervisor
|
|
framework) is used if your `qemu` version supports it (versions
|
|
released after Jan/Feb 2018 should support it). `s390x` is currently
|
|
only supported in `kvm` mode as the emulated `s390x` architecture (aka
|
|
`tcg` mode) does not seem to support several required platform
|
|
features. Further, on `s390x` platforms you need to set
|
|
`vm.allocate_pgste=1` via `sysctl` (or use `echo 1 >
|
|
/proc/sys/vm/allocate_pgste`).
|
|
|
|
|
|
## Boot
|
|
|
|
By default `linuxkit run qemu` will boot with the host architecture
|
|
(e.g., `aarch64` on `arm64` systems). The architecture can be
|
|
specified with `-arch` and currently accepts `x86_64`, `aarch64`, and
|
|
`s390x` as arguments.
|
|
|
|
`linuxkit run qemu` can boot in different types of images:
|
|
|
|
- `kernel+initrd`: This is the default mode of `linuxkit run qemu` [`x86_64`, `arm64`, `s390x`]
|
|
- `kernel+squashfs`: `linuxkit run qemu --squashfs <path to directory>`. This expects a kernel and a squashfs image. [`x86_64`, `arm64`, `s390x`]
|
|
- `iso-bios`: `linuxkit run qemu --iso <path to iso>` [`x86_64`]
|
|
- `iso-efi`: `linuxkit run qemu --iso --uefi <path to iso>`. This looks in `/usr/share/ovmf/bios.bin` for the EFI firmware by default. Can be overwritten with `-fw`. [`x86_64`, `arm64`]
|
|
- `qcow-bios`: `linuxkit run qemu disk.qcow2` [`x86_64`]
|
|
- `raw-bios`: `linuxkit run qemu disk.img` [`x86_64`]
|
|
- `aws`: `linuxkit run qemu disk.img` boots a raw AWS disk image. [`x86_64`]
|
|
|
|
The formats `qcow-efi` and `raw-efi` may also work, but are currently not tested.
|
|
|
|
The default `kernel+initrd` boot uses a RAM disk for the root
|
|
filesystem. If you have RAM constraints or large images we recommend
|
|
using one of the other methods, such as `kernel+squashfs` or booting
|
|
via a ISO image.
|
|
|
|
## Console
|
|
|
|
With `linuxkit run qemu` the serial console is redirected to stdio,
|
|
providing interactive access to the VM. You can specify `-gui` to get
|
|
a console window.
|
|
|
|
|
|
## Disks
|
|
|
|
The qemu backend supports multiple disks to be attached to the VM
|
|
using the standard `linuxkit` `-disk` syntax. The qemu backend
|
|
supports a number of different disk formats.
|
|
|
|
|
|
## Networking
|
|
|
|
The `qemu` backend supports a number of networking options, depending
|
|
on the platform you are running. The default is the userspace
|
|
networking which provides the VM with a internal DHCP server and
|
|
network connectivity, but does not provide access to the VMs network
|
|
from the outside.
|
|
|
|
With user mode networking you can publish selected VM ports on the
|
|
host, using the `-publish` option. It uses the same syntax as the
|
|
`qemu` binary. For example `linuxkit run qemu -publish 8080:80
|
|
linuxkit` exposes port `80` from the VM as port `8080` on the host.
|
|
|
|
On Linux, you can attach the VM either to an existing bridge or tap
|
|
interface. These require root privileges and you may want to use the
|
|
[`qemu-bridge-helper`](http://wiki.qemu.org/Features/HelperNetworking). To
|
|
attach to an existing bridge `br0` (e.g., one created with
|
|
`virt-manager`) you can use `linuxkit run qemu -networking
|
|
bridge,br0 linuxkit`.
|
|
|
|
|
|
## Integration services and Metadata
|
|
|
|
The `qemu` backend also allows passing custom userdata into the
|
|
[metadata package](./metadata.md) using either the `-data` or
|
|
`-data-file` command-line option. This attaches a CD device with the
|
|
data on.
|
|
|
|
If the `linuxkit/qemu-ga` package is added to the YAML the [Qemu Guest
|
|
Agent](https://wiki.libvirt.org/page/Qemu_guest_agent) will be
|
|
enabled. This provides better integration with `libvirt`.
|