Skip to content

Instantly share code, notes, and snippets.

@xtenduke
Last active May 3, 2022 12:16
Show Gist options
  • Save xtenduke/c14c3eb74da81a7843fa4c5d7d193a99 to your computer and use it in GitHub Desktop.
Save xtenduke/c14c3eb74da81a7843fa4c5d7d193a99 to your computer and use it in GitHub Desktop.
build qemu image
set -x
# create empty image
truncate -s500m build/alpine-vm-arm64.img
# Format the image with a gpt table
parted -s build/alpine-vm-arm64.img mktable gpt
# bootable partiton
parted -s build/alpine-vm-arm64.img mkpart ext4 1 "100%"
# mount image on loop device, get device from losetup as HDA_LOOP_DEV
HDA_LOOP_DEV=$(sudo losetup -Pf --show build/alpine-vm-arm64.img)
FS_LOOP_DEV="${HDA_LOOP_DEV?}p1"
# Initialize the ext4 filesystem in the primary partition.
sudo mkfs -t ext4 -v "${FS_LOOP_DEV?}"
# mount
mkdir /tmp/mountpoint
sudo mount "${FS_LOOP_DEV?}" /tmp/mountpoint
sudo chown -R ${USER?} /tmp/mountpoint
# unpack tarball to disk
tar -xvf build/alpine-vm-base-fs.tar -C /tmp/mountpoint/
# unmount and clean up
sudo umount /tmp/mountpoint
sudo rm -rf /tmp/mountpoint
# remove loop device
sudo losetup -d ${HDA_LOOP_DEV}
# dont forget to prep your buildx builder..........
docker buildx build --platform linux/arm64 --load --build-arg ARCH=arm64 -f Containerfile -t alpine-vm-base .
mkdir -p build
docker export -o build/alpine-vm-base-fs.tar `docker run -d alpine-vm-base:latest /bin/true`
docker run -v $PWD/build:/output:Z alpine-vm-base:latest cp /usr/share/u-boot/qemu_arm64/u-boot.bin /output/alpine-vm-bios-arm64.img
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment