62 lines
2.8 KiB
Text
62 lines
2.8 KiB
Text
= Make Alpine Linux VM Image
|
||
:script-name: alpine-make-vm-image
|
||
:script-sha1: ddf44e4132a32e762cd0ae46e12c0122c5c18877
|
||
:gh-name: alpinelinux/{script-name}
|
||
:version: 0.8.0
|
||
|
||
ifdef::env-github[]
|
||
image:https://github.com/{gh-name}/workflows/CI/badge.svg["Build Status", link="https://github.com/{gh-name}/actions"]
|
||
endif::env-github[]
|
||
|
||
This project provides a script for making customized https://alpinelinux.org/[Alpine Linux] disk images for virtual machines.
|
||
It’s quite simple (300 LoC of shell), fast (~32 seconds on GitHub Actions) and requires minimum dependencies (QEMU and filesystem tools).
|
||
|
||
TIP: Don’t need VM, just want to chroot into Alpine Linux (e.g. on CI)?
|
||
Try https://github.com/alpinelinux/alpine-chroot-install[alpine-chroot-install]!
|
||
|
||
|
||
== Requirements
|
||
|
||
* Linux system with common userland (Busybox or GNU coreutils)
|
||
* POSIX-sh compatible shell (e.g. Busybox ash, dash, Bash, ZSH)
|
||
* qemu-img and qemu-nbd (automatically installed by the script if running on Alpine)
|
||
* e2fsprogs (for ext4), btrfs-progs (for Btrfs), or xfsprogs (for XFS) (automatically installed by the script if running on Alpine)
|
||
|
||
|
||
== Usage
|
||
|
||
Read documentation in link:{script-name}[{script-name}].
|
||
See link:.github/workflows/ci.yml[] for GitHub Actions example.
|
||
|
||
You can copy link:{script-name}[{script-name}] into your repository or download it on demand, e.g.:
|
||
|
||
[source, sh, subs="+attributes"]
|
||
wget https://raw.githubusercontent.com/{gh-name}/v{version}/{script-name} \
|
||
&& echo '{script-sha1} {script-name}' | sha1sum -c \
|
||
|| exit 1
|
||
|
||
|
||
== Pitfalls
|
||
|
||
=== Creating Image for VMware (ESXi)
|
||
|
||
VMware and disk images (virtual disks) is one big mess.
|
||
You can find that VMware uses the VMDK format, but the problem is that this is not a single format.
|
||
Actually it has many subformats with very different structure and various (in)compatibility with VMware hypervisors.
|
||
|
||
When I’ve created a disk image using `qemu-img create -f vmdk` or converted Qcow2 to VMDK using `qemu-img convert -O vmdk`, vSphere client loaded this image without any problem, but the data was corrupted.
|
||
Eventually I found in some old documentation that ESXi does not support “sparse” disks…
|
||
|
||
So after many trials I found out that the least bad and functional solution is to create Qcow2 image and then convert it to VMDK using:
|
||
|
||
[source, sh]
|
||
qemu-img convert -f qcow2 -O vmdk -o adapter_type=lsilogic,subformat=monolithicFlat alpine.qcow2 alpine.vmdk
|
||
|
||
Unfortunately, this creates a “thick” image, i.e. its size equals the “provisioned space”, not actually used space as in Qcow2.
|
||
However, you can compress it with gzip to avoid transferring multiple gigabytes of zeros over network.
|
||
|
||
|
||
== License
|
||
|
||
This project is licensed under http://opensource.org/licenses/MIT/[MIT License].
|
||
For the full text of the license, see the link:LICENSE[LICENSE] file.
|