Fix ARM64 ISO: local kernel repo + Image symlink fallback

Dockerfile.arm64: after pre-downloading linux-aarch64, build a local
pacman repo from the cached package using repo-add so mkarchiso can
install the kernel from file:// without touching the [alarm] mirror.

entrypoint-arm64.sh: put [alarm-local] first in the profile pacman.conf
so pacstrap always resolves linux-aarch64 from the baked-in repo.
Also add a symlink fallback in customize_airootfs.sh: ALARM aarch64
may install the kernel as /boot/Image instead of /boot/vmlinuz-linux-aarch64;
the symlink ensures archiso's vmlinuz-* glob and systemd-boot both find it.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
nmemmertandClaude Sonnet 4.6 committed 2026-07-24 12:05:15 -04:00
1 parent 4a4f3ddba5
commit 5160a30d72
2 files changed
+30 -4

No files matched your search

+7 -3
View File
@@ -65,9 +65,13 @@ RUN git clone --depth=1 https://gitlab.archlinux.org/archlinux/archiso.git /tmp/
cp -a /tmp/archiso/configs /usr/share/archiso/ && \ cp -a /tmp/archiso/configs /usr/share/archiso/ && \
rm -rf /tmp/archiso rm -rf /tmp/archiso
# Pre-download linux-aarch64 so mkarchiso can install it from local cache # Pre-download linux-aarch64 and create a local pacman repo so mkarchiso
# even if the [alarm] mirror is unreliable at ISO-build time. # can install the kernel without depending on the [alarm] mirror at build time.
RUN pacman -Sw --noconfirm linux-aarch64 RUN pacman -Sw --noconfirm linux-aarch64 && \
mkdir -p /alarm-local-repo && \
find /var/cache/pacman/pkg -name "linux-aarch64-*.pkg.tar.*" ! -name "*.sig" \
-exec cp {} /alarm-local-repo/ \; && \
repo-add /alarm-local-repo/alarm-local.db.tar.gz /alarm-local-repo/linux-aarch64-*.pkg.tar.*
WORKDIR /orionos WORKDIR /orionos
COPY . . COPY . .
+23 -1
View File
@@ -23,9 +23,15 @@ cat > "$PROFILE/pacman.conf" <<'PACMANCONF'
[options] [options]
HoldPkg = pacman glibc HoldPkg = pacman glibc
Architecture = aarch64 Architecture = aarch64
# Mirrors occasionally lack .db.sig files — disable sig checks for reliability
SigLevel = Never SigLevel = Never
# alarm-local is a file:// repo baked into the Docker image containing the
# pre-downloaded linux-aarch64 package. It comes first so pacstrap can always
# find the kernel even when the upstream [alarm] mirror is unreliable.
[alarm-local]
SigLevel = Never
Server = file:///alarm-local-repo
[core] [core]
Include = /etc/pacman.d/mirrorlist Include = /etc/pacman.d/mirrorlist
@@ -651,6 +657,22 @@ echo "=== /usr/lib/modules/ ==="
ls /usr/lib/modules/ 2>&1 || echo "(empty)" ls /usr/lib/modules/ 2>&1 || echo "(empty)"
echo "=== end diagnostics ===" echo "=== end diagnostics ==="
# ALARM aarch64 sometimes installs the kernel as /boot/Image (uncompressed EFI
# stub) rather than /boot/vmlinuz-linux-aarch64. Archiso's vmlinuz glob and
# systemd-boot both expect the vmlinuz-* naming — create a symlink when needed.
if [[ ! -f /boot/vmlinuz-linux-aarch64 ]]; then
if [[ -f /boot/Image ]]; then
ln -sf Image /boot/vmlinuz-linux-aarch64
echo ">>> Symlinked /boot/Image -> vmlinuz-linux-aarch64"
elif [[ -f /boot/Image.gz ]]; then
ln -sf Image.gz /boot/vmlinuz-linux-aarch64
echo ">>> Symlinked /boot/Image.gz -> vmlinuz-linux-aarch64"
else
echo "WARNING: no kernel image found in /boot/ — build will likely fail"
ls /boot/ 2>&1 || true
fi
fi
useradd -m -G wheel,audio,video,storage,input -s /bin/bash orion 2>/dev/null || true useradd -m -G wheel,audio,video,storage,input -s /bin/bash orion 2>/dev/null || true
echo "orion:orionos" | chpasswd echo "orion:orionos" | chpasswd