Skip to content

Commit 7ff6dc8

Browse files
authored
Merge pull request #31 from lima-vm/qemu-binfmt
Install qemu-* files from tonistiigi/binfmt
2 parents bc0f3af + d6281fe commit 7ff6dc8

File tree

6 files changed

+36
-6
lines changed

6 files changed

+36
-6
lines changed

.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,4 @@
44
/rd.yaml
55
/std.yaml
66
/nerdctl-*
7+
/qemu-*

Dockerfile

+6
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
11
ARG ALPINE_VERSION=latest
2+
ARG BINFMT_IMAGE=tonistiigi/binfmt:latest
3+
4+
FROM ${BINFMT_IMAGE} as binfmt
5+
26
FROM alpine:${ALPINE_VERSION}
37
RUN apk add alpine-sdk build-base apk-tools alpine-conf busybox \
48
fakeroot xorriso squashfs-tools sudo \
@@ -8,6 +12,8 @@ RUN apk add alpine-sdk build-base apk-tools alpine-conf busybox \
812
ARG TARGETARCH
913
RUN if [ "${TARGETARCH}" = "amd64" ]; then apk add syslinux; fi
1014

15+
COPY --from=binfmt /usr/bin /binfmt
16+
1117
RUN addgroup root abuild
1218
RUN abuild-keygen -i -a -n
1319
RUN apk update

Makefile

+8-2
Original file line numberDiff line numberDiff line change
@@ -18,24 +18,30 @@ ARCH_ALIAS_aarch64 = arm64
1818
ARCH_ALIAS = $(shell echo "$(ARCH_ALIAS_$(ARCH))")
1919

2020
NERDCTL_VERSION=0.14.0
21+
QEMU_VERSION=v6.1.0
22+
BINFMT_IMAGE=tonistiigi/binfmt:qemu-$(QEMU_VERSION)
2123

2224
.PHONY: mkimage
2325
mkimage:
2426
cd src/aports && git fetch && git checkout $(GIT_TAG)
2527
docker build \
2628
--tag mkimage:$(ALPINE_VERSION)-$(ARCH) \
2729
--build-arg ALPINE_VERSION=$(ALPINE_VERSION) \
30+
--build-arg BINFMT_IMAGE=$(BINFMT_IMAGE) \
2831
--platform linux/$(ARCH_ALIAS) \
2932
.
3033

3134
.PHONY: iso
32-
iso: nerdctl-$(NERDCTL_VERSION)-$(ARCH)
33-
ALPINE_VERSION=$(ALPINE_VERSION) NERDCTL_VERSION=$(NERDCTL_VERSION) REPO_VERSION=$(REPO_VERSION) EDITION=$(EDITION) BUILD_ID=$(BUILD_ID) ARCH=$(ARCH) ARCH_ALIAS=$(ARCH_ALIAS) ./build.sh
35+
iso: nerdctl-$(NERDCTL_VERSION)-$(ARCH) qemu-$(QEMU_VERSION)-copying
36+
ALPINE_VERSION=$(ALPINE_VERSION) NERDCTL_VERSION=$(NERDCTL_VERSION) QEMU_VERSION=$(QEMU_VERSION) REPO_VERSION=$(REPO_VERSION) EDITION=$(EDITION) BUILD_ID=$(BUILD_ID) ARCH=$(ARCH) ARCH_ALIAS=$(ARCH_ALIAS) ./build.sh
3437

3538

3639
nerdctl-$(NERDCTL_VERSION)-$(ARCH):
3740
curl -o $@ -Ls https://github.com/containerd/nerdctl/releases/download/v$(NERDCTL_VERSION)/nerdctl-full-$(NERDCTL_VERSION)-linux-$(ARCH_ALIAS).tar.gz
3841

42+
qemu-$(QEMU_VERSION)-copying:
43+
curl -o $@ -Ls https://raw.githubusercontent.com/qemu/qemu/$(QEMU_VERSION)/COPYING
44+
3945
.PHONY: lima
4046
lima:
4147
ALPINE_VERSION=$(ALPINE_VERSION) EDITION=$(EDITION) ARCH=$(ARCH) ./lima.sh

build.sh

+1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ docker run --rm \
1717
-v "${PWD}/lima-init-local.openrc:/home/build/lima-init-local.openrc:ro" \
1818
-v "${PWD}/lima-network.awk:/home/build/lima-network.awk:ro" \
1919
-v "${PWD}/nerdctl-${NERDCTL_VERSION}-${ARCH}:/home/build/nerdctl.tar.gz:ro" \
20+
-v "${PWD}/qemu-${QEMU_VERSION}-copying:/home/build/qemu-copying:ro" \
2021
-v "${PWD}/sshd.pam:/home/build/sshd.pam:ro" \
2122
$(env | grep ^LIMA_ | xargs -n 1 printf -- '-e %s ') \
2223
-e "LIMA_REPO_VERSION=${REPO_VERSION}" \

genapkovl-lima.sh

+20-1
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,20 @@ if [ "${LIMA_INSTALL_DOCKER}" == "true" ]; then
159159
fi
160160

161161
if [ "${LIMA_INSTALL_BINFMT_MISC}" == "true" ]; then
162-
echo "qemu-aarch64" >> "$tmp"/etc/apk/world
162+
# install qemu-aarch64 on x86_64 and vice versa
163+
OTHERARCH=aarch64
164+
if [ "$(uname -m)" == "${OTHERARCH}" ]; then
165+
OTHERARCH=x86_64
166+
fi
167+
168+
# Installing into /usr/bin instead of /usr/local/bin because that's
169+
# where /etc/init.d/qemu-binfmt will be looking for it
170+
mkdir -p "${tmp}/usr/bin/"
171+
cp /binfmt/qemu-${OTHERARCH} "${tmp}/usr/bin/"
172+
173+
# Copy QEMU license into /usr/share/doc (using Debian naming convention)
174+
mkdir -p "${tmp}/usr/share/doc/qemu/"
175+
cp /home/build/qemu-copying "${tmp}/usr/share/doc/qemu/copyright"
163176

164177
mkdir -p "${tmp}/etc/init.d/"
165178
APKBUILD=/home/build/aports/community/qemu-openrc/APKBUILD
@@ -168,6 +181,12 @@ if [ "${LIMA_INSTALL_BINFMT_MISC}" == "true" ]; then
168181
wget "${URL}/v${PKGVER}/qemu-binfmt.initd" -O "${tmp}/etc/init.d/qemu-binfmt"
169182
chmod +x "${tmp}/etc/init.d/qemu-binfmt"
170183

184+
# qemu-binfmt doesn't include an entry for x86_64
185+
magic="7f454c4602010100000000000000000002003e00"
186+
mask="fffffffffffefe00fffffffffffffffffeffffff"
187+
arch="x86_64"
188+
sed -i "/^FMTS=/a \\\t${magic} ${mask} ${arch}" "${tmp}/etc/init.d/qemu-binfmt"
189+
171190
rc_add qemu-binfmt default
172191
fi
173192

mkimg.lima.sh

-3
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,6 @@ profile_lima() {
2727
if [ "${LIMA_INSTALL_LIMA_INIT}" == "true" ]; then
2828
apks="$apks e2fsprogs lsblk sfdisk shadow sudo udev"
2929
fi
30-
if [ "${LIMA_INSTALL_BINFMT_MISC}" == "true" ]; then
31-
apks="$apks qemu-aarch64"
32-
fi
3330
if [ "${LIMA_INSTALL_K3S}" == "true" ]; then
3431
apks="$apks k3s"
3532
fi

0 commit comments

Comments
 (0)