64 lines
2.9 KiB
Text
64 lines
2.9 KiB
Text
= Make Alpine Linux VM Image
|
||
:script-name: alpine-make-vm-image
|
||
:script-sha1: cd2c139a0c6a8291b5ff461119f32f9191811a4f
|
||
:gh-name: alpinelinux/{script-name}
|
||
:version: 0.2.2
|
||
|
||
ifdef::env-github[]
|
||
image:https://travis-ci.org/{gh-name}.svg?branch=master["Build Status", link="https://travis-ci.org/{gh-name}"]
|
||
endif::env-github[]
|
||
|
||
This project provides script for making customized https://alpinelinux.org/[Alpine Linux] disk images for virtual machines.
|
||
It’s quite simple (250 LoC of shell), fast (~40 seconds on Travis CI including Travis VM initialization) 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:.travis.yml[.travis.yml] for Travis 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 format VMDK, 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 created 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 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.
|
||
|
||
Also note that VMware has some problem with hardened kernel, so you have to boot it with `pax_nouderef` (read more https://wiki.alpinelinux.org/wiki/Install_Alpine_on_VMware[here]).
|
||
|
||
|
||
== 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.
|