-
Notifications
You must be signed in to change notification settings - Fork 5.1k
Description
Since we removed gluster, we don't need the legacy python2 dependency and we can support building on more modern distros like Fedora.
Building the aarch64 version on Fedora 42 and 43 has 2 issues:
selinux issue when running chown via a container
Error:
if ! grep -sq 'docker\|lxc' /proc/1/cgroup; then \
docker run --rm -v /home/nsoffer/minikube/out/buildroot/output-aarch64/build/cri-dockerd-aarch64-55d6e1a1d6f2ee58949e13a0c66afe7d779ac942/packaging/static/build/win:/v -w /v alpine sh -c 'apk update
&& apk add zip && zip -r cri-dockerd-0.4.1.win.amd64.zip cri-dockerd'; \
docker run --rm -v /home/nsoffer/minikube/out/buildroot/output-aarch64/build/cri-dockerd-aarch64-55d6e1a1d6f2ee58949e13a0c66afe7d779ac942/packaging/static:/v -w /v alpine chown -R 1000:1000 build; \
fi
Unable to find image 'alpine:latest' locally
latest: Pulling from library/alpine
014e56e61396: Pull complete
Digest: sha256:51183f2cfa6320055da30872f211093f9ff1d3cf06f39a0bdb212314c5dc7375
Status: Downloaded newer image for alpine:latest
v3.23.0_rc2-34-g319b82182d1 [https://dl-cdn.alpinelinux.org/alpine/v3.23/main]
v3.23.0-1-gbad45407d26 [https://dl-cdn.alpinelinux.org/alpine/v3.23/community]
OK: 27555 distinct packages available
(1/2) Installing unzip (6.0-r16)
(2/2) Installing zip (3.0-r13)
Executing busybox-1.37.0-r29.trigger
OK: 8 MiB in 18 packages
zip warning: name not matched: cri-dockerd
zip error: Nothing to do! (try: zip -r cri-dockerd-0.4.1.win.amd64.zip . -i cri-dockerd)
chown: build: Permission denied
make[4]: *** [Makefile:73: cross-win] Error 1
make[4]: Leaving directory '/home/nsoffer/minikube/out/buildroot/output-aarch64/build/cri-dockerd-aarch64-55d6e1a1d6f2ee58949e13a0c66afe7d779ac942/packaging/static'
make[3]: *** [Makefile:29: static] Error 1
make[3]: Leaving directory '/home/nsoffer/minikube/out/buildroot/output-aarch64/build/cri-dockerd-aarch64-55d6e1a1d6f2ee58949e13a0c66afe7d779ac942/packaging'
make[2]: *** [Makefile:42: static] Error 2
make[2]: Leaving directory '/home/nsoffer/minikube/out/buildroot/output-aarch64/build/cri-dockerd-aarch64-55d6e1a1d6f2ee58949e13a0c66afe7d779ac942'
make[1]: *** [package/pkg-generic.mk:273: /home/nsoffer/minikube/out/buildroot/output-aarch64/build/cri-dockerd-aarch64-55d6e1a1d6f2ee58949e13a0c66afe7d779ac942/.stamp_built] Error 2
make[1]: Leaving directory '/home/nsoffer/minikube/out/buildroot'
make: *** [Makefile:296: minikube-iso-aarch64] Error 2
rm deploy/iso/minikube-iso/board/minikube/aarch64/rootfs-overlay/usr/bin/auto-pause chown does not have permissions:
chown: build: Permission denied
The docker command is wrong, not using :Z for the mounts:
docker run \
--rm \
-v /home/nsoffer/minikube/out/buildroot/output-aarch64/build/cri-dockerd-aarch64-55d6e1a1d6f2ee58949e13a0c66afe7d779ac942/packaging/static:/v \
-w /v \
alpine chown -R 1000:1000 build
It should be:
docker run \
--rm \
-v /home/nsoffer/minikube/out/buildroot/output-aarch64/build/cri-dockerd-aarch64-55d6e1a1d6f2ee58949e13a0c66afe7d779ac942/packaging/static:/v:Z \
-w /v \
alpine chown -R 1000:1000 build
Running with selinux permissive mode works around this issue:
sudo setenforce 0
make minikube-iso-aarch64
This should be fixed in the cri-dockerd package - not sure if this is an issue in the buildroot package (minikube issue) or upstream issue.
The best way is to run the chown command directly on the host - there is no reason to use a container for running chown on a build machine. This is one reason why we cannot run the build in a container, since it depends on running docker in docker.
For now we can document that you need to use permissive mode to build the iso on Fedora. This is a reasonable limitation.
post-image script failure
With selinux issue fixed we fail in the post-image script:
>>> Executing post-image script /home/nsoffer/minikube/deploy/iso/minikube-iso/board/minikube/aarch64/post-image.sh
INFO: cmd: "mkdir -p "/home/nsoffer/minikube/out/buildroot/output-aarch64/build/genimage.tmp"" (stderr):
INFO: cmd: "rm -rf "/home/nsoffer/minikube/out/buildroot/output-aarch64/build/genimage.tmp"/*" (stderr):
INFO: cmd: "mkdir -p "/home/nsoffer/minikube/out/buildroot/output-aarch64/build/genimage.tmp"" (stderr):
INFO: cmd: "cp -a "/tmp/tmp.SFqt1c7qYu" "/home/nsoffer/minikube/out/buildroot/output-aarch64/build/genimage.tmp/root"" (stderr):
INFO: cmd: "mkdir -p "/home/nsoffer/minikube/out/buildroot/output-aarch64/images"" (stderr):
INFO: vfat(efiboot.img): cmd: "mkdosfs -n 'EFIBOOTISO' '/home/nsoffer/minikube/out/buildroot/output-aarch64/images/efiboot.img'" (stderr):
INFO: vfat(efiboot.img): adding file 'efi-part/EFI' as 'EFI' ...
INFO: vfat(efiboot.img): cmd: "MTOOLS_SKIP_CHECK=1 mcopy -sp -i '/home/nsoffer/minikube/out/buildroot/output-aarch64/images/efiboot.img' '/home/nsoffer/minikube/out/buildroot/output-aarch64/images/efi-part/EFI' '::EFI'" (stderr):
INFO: cmd: "rm -rf "/home/nsoffer/minikube/out/buildroot/output-aarch64/build/genimage.tmp/"" (stderr):
xorriso 1.5.6 : RockRidge filesystem manipulator, libburnia project.
Drive current: -outdev 'stdio:boot.iso'
Media current: stdio file, overwriteable
Media status : is blank
Media summary: 0 sessions, 0 data blocks, 0 data, 67.4g free
xorriso : FAILURE : -as genisofs: Unrecognized option '-eltorito-platform=efi'
xorriso : aborting : -abort_on 'FAILURE' encountered 'FAILURE'
make[1]: *** [Makefile:830: target-post-image] Error 5
make[1]: Leaving directory '/home/nsoffer/minikube/out/buildroot'
make: *** [Makefile:296: minikube-iso-aarch64] Error 2
rm deploy/iso/minikube-iso/board/minikube/aarch64/rootfs-overlay/usr/bin/auto-pauseThe error comes from this script:
| mkisofs \ |
We run mkisofs but the actual tool implementing it is xorriso, using the option
-as genisofs
When it emulates genisofs, it does not support the option:
'-eltorito-platform=efi'
Gemini suggests to switch the command to xorisso using this command:
xorriso \
-out boot.iso \
-joliet on \
-rockridge on \
-zisofs on \
-as_needed on \
-not_leaf 'EFI/BOOT' \
-volid 'EFIBOOTISO' \
-publisher 'EFI Boot ISO' \
-map root / \
-boot_image any platform=efi \
-boot_image any efi_path=EFI/BOOT/efiboot.img \
-boot_image any cat_path=/boot.cat
The command should work also on Ubuntu. I did not test it.
/kind improvement
/cc @ vtri950