-
Notifications
You must be signed in to change notification settings - Fork 25
/
Copy pathDockerfile.img
86 lines (77 loc) · 3.26 KB
/
Dockerfile.img
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
{{.SpecBuild}}
FROM {{.RootDiskImage}} AS rootdisk
# Temporarily set to root in order to do the "merge" step, so that it's possible to make changes in
# the final VM to files owned by root, even if the source image sets the user to something else.
USER root
{{.SpecMerge}}
FROM alpine:3.16 AS vm-runtime
# add busybox
ENV BUSYBOX_VERSION 1.35.0
RUN set -e \
&& mkdir -p /neonvm/bin /neonvm/runtime /neonvm/config \
&& wget -q https://busybox.net/downloads/binaries/${BUSYBOX_VERSION}-x86_64-linux-musl/busybox -O /neonvm/bin/busybox \
&& chmod +x /neonvm/bin/busybox \
&& /neonvm/bin/busybox --install -s /neonvm/bin
# add udevd and agetty (with shared libs)
RUN set -e \
&& apk add --no-cache --no-progress --quiet \
acpid \
udev \
agetty \
su-exec \
e2fsprogs-extra \
blkid \
flock \
&& mv /sbin/acpid /neonvm/bin/ \
&& mv /sbin/udevd /neonvm/bin/ \
&& mv /sbin/agetty /neonvm/bin/ \
&& mv /sbin/su-exec /neonvm/bin/ \
&& mv /usr/sbin/resize2fs /neonvm/bin/resize2fs \
&& mv /sbin/blkid /neonvm/bin/blkid \
&& mv /usr/bin/flock /neonvm/bin/flock \
&& mkdir -p /neonvm/lib \
&& cp -f /lib/ld-musl-x86_64.so.1 /neonvm/lib/ \
&& cp -f /lib/libblkid.so.1.1.0 /neonvm/lib/libblkid.so.1 \
&& cp -f /lib/libcrypto.so.1.1 /neonvm/lib/ \
&& cp -f /lib/libkmod.so.2.3.7 /neonvm/lib/libkmod.so.2 \
&& cp -f /lib/libudev.so.1.6.3 /neonvm/lib/libudev.so.1 \
&& cp -f /lib/libz.so.1.2.12 /neonvm/lib/libz.so.1 \
&& cp -f /usr/lib/liblzma.so.5.2.5 /neonvm/lib/liblzma.so.5 \
&& cp -f /usr/lib/libzstd.so.1.5.2 /neonvm/lib/libzstd.so.1 \
&& cp -f /lib/libe2p.so.2 /neonvm/lib/libe2p.so.2 \
&& cp -f /lib/libext2fs.so.2 /neonvm/lib/libext2fs.so.2 \
&& cp -f /lib/libcom_err.so.2 /neonvm/lib/libcom_err.so.2 \
&& cp -f /lib/libblkid.so.1 /neonvm/lib/libblkid.so.1 \
&& mv /usr/share/udhcpc/default.script /neonvm/bin/udhcpc.script \
&& sed -i 's/#!\/bin\/sh/#!\/neonvm\/bin\/sh/' /neonvm/bin/udhcpc.script \
&& sed -i 's/export PATH=.*/export PATH=\/neonvm\/bin/' /neonvm/bin/udhcpc.script
# tools for qemu disk creation
RUN set -e \
&& apk add --no-cache --no-progress --quiet \
qemu-img \
e2fsprogs
# Install vector.dev binary
RUN set -e \
&& wget https://packages.timber.io/vector/0.26.0/vector-0.26.0-x86_64-unknown-linux-musl.tar.gz -O - \
| tar xzvf - --strip-components 3 -C /neonvm/bin/ ./vector-x86_64-unknown-linux-musl/bin/vector
# init scripts
COPY inittab /neonvm/bin/inittab
COPY vminit /neonvm/bin/vminit
COPY vmstart /neonvm/bin/vmstart
COPY vmshutdown /neonvm/bin/vmshutdown
COPY vmacpi /neonvm/acpi/vmacpi
COPY vector.yaml /neonvm/config/vector.yaml
RUN chmod +rx /neonvm/bin/vminit /neonvm/bin/vmstart /neonvm/bin/vmshutdown
FROM vm-runtime AS builder
ARG DISK_SIZE
COPY --from=rootdisk / /rootdisk
COPY --from=vm-runtime /neonvm /rootdisk/neonvm
RUN set -e \
&& mkdir -p /rootdisk/etc \
&& mkdir -p /rootdisk/etc/vector \
&& cp -f /rootdisk/neonvm/bin/inittab /rootdisk/etc/inittab \
&& mkfs.ext4 -L vmroot -d /rootdisk /disk.raw ${DISK_SIZE} \
&& qemu-img convert -f raw -O qcow2 -o cluster_size=2M,lazy_refcounts=on /disk.raw /disk.qcow2
FROM alpine:3.16
RUN apk add --no-cache --no-progress --quiet qemu-img
COPY --from=builder /disk.qcow2 /