Cant boot into home-rolled Arch Linux image
#1
As a learning experience, I've been trying to roll my own Arch Linux image. I've been cobbling together bits and pieces from the following locations while adding some bits of my own:
  1. anarsoul's build scripts
  2. Blutkoete's manual setup
  3. hku2's manual setup
  4. enospc's mostly upstream uboot
Below is a copy of my image building script. My issue is, after writing the image to my SD card and rebooting, my pinebook pro boots into debian on the eMMC. I figure I must be missing some important component to the boot process on ARM but I have no idea what that is. Since the pinebook boots into debian without showing me any sort of error message, I don't know how to debug this. Does anyone see what I am missing, or does anyone know how to get some more info out of the pinebook during boot?


Code:
#!/usr/bin/env bash
set -x
set -euo pipefail
IFS=$'\n\t'
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"

# Manual Steps
##############
#
# Install dirmngr
#
# trust arch linux arm key
# gpg --recv-keys 68B3537F39A313B3E574D06777193F152BDBE6A6

WORKSPACE=$(mktemp -d -t "arch-pinebook-pro-build-XXXXXXX")
cleanup() {
   if [ -d "$MOUNT" ]; then
       umount -R "$MOUNT" || true
   fi

   if [ -z "$LOOP_DEVICE" ]; then
       losetup -d "$LOOP_DEVICE"
   fi

if [ -d "$WORKSPACE" ]; then
rm -rf "$WORKSPACE"
fi
}
trap cleanup EXIT

DOWNLOADS="$WORKSPACE/downloads"
mkdir -p "$DOWNLOADS"
ROOT="$WORKSPACE/root"
mkdir -p "$ROOT"
MOUNT="$WORKSPACE/mount"
mkdir -p "$MOUNT"
IMAGE_FILE="$WORKSPACE/archlinux.img"
IMAGE_SIZE="$(( 1024*1024*1024*6 ))" # bytes

archroot() {
   CHROOT="$1"
   shift 1
   CMD="$@"
   mount -o bind /tmp "$CHROOT/tmp"
   mount -o bind /dev "$CHROOT/dev"
   chroot "$CHROOT" mount -t proc proc /proc
   chroot "$CHROOT" mount -t sysfs sys /sys
   chroot "$CHROOT" "$CMD"
   chroot "$CHROOT" umount /sys
   chroot "$CHROOT" umount /proc
   umount "$CHROOT/dev"
   umount "$CHROOT/tmp"
}

wget -O "$DOWNLOADS/base.tar.gz.sig" http://os.archlinuxarm.org/os/ArchLinuxARM-aarch64-latest.tar.gz.sig
wget -O "$DOWNLOADS/base.tar.gz" http://os.archlinuxarm.org/os/ArchLinuxARM-aarch64-latest.tar.gz
gpg --verify "$DOWNLOADS/base.tar.gz.sig" "$DOWNLOADS/base.tar.gz"

# Disk positions (in bytes)
sector_size=512
boot_start=$((1024*1024*20))
boot_size=$((1024*1024*1024*1))
main_start=$((boot_start + boot_size + sector_size))


dd if=/dev/zero of="$IMAGE_FILE" bs=1 count=0 seek=$IMAGE_SIZE

fdisk "$IMAGE_FILE" <<EOF
o
n
p
1
$((boot_start/sector_size))
+$((boot_size/sector_size))
t
c
n
p
2
$((main_start/sector_size))

t
2
83
a
2
w
EOF

LOOP_DEVICE=$(losetup -f)
losetup -P $LOOP_DEVICE $IMAGE_FILE

dd if="$DIR/idbloader.img" of=$LOOP_DEVICE seek=64 conv=notrunc
dd if="$DIR/u-boot.itb" of=$LOOP_DEVICE seek=16384 conv=notrunc

mkfs.vfat -n BOOT -F32 ${LOOP_DEVICE}p1
mkfs.ext4 -L ARCH ${LOOP_DEVICE}p2

mount ${LOOP_DEVICE}p2 "$MOUNT"
mkdir "$MOUNT/boot"
mount ${LOOP_DEVICE}p1 "$MOUNT/boot"

# bsdtar too old on base pinebook install
#bsdtar -xpf "$DOWNLOADS/base.tar.gz" -C "$MOUNT"
tar -xpf "$DOWNLOADS/base.tar.gz" -C "$MOUNT"
# no genfstab on base pinebook install, do in chroot instead
# genfstab -U "$MOUNT" >> "$MOUNT/etc/fstab"
mv "$MOUNT/etc/resolv.conf" "$MOUNT/etc/resolv.conf.bak"
cp /etc/resolv.conf "$MOUNT/etc/resolv.conf"

cat > "$MOUNT/chroot_commands" <<EOF
#!/usr/bin/env bash
set -x
set -euo pipefail
IFS=$'\n\t'

pacman-key --init
pacman-key --populate archlinuxarm
killall -KILL gpg-agent
pacman -Syu --noconfirm
# wget to fetch manjaro packages
# arch-install-scripts for genfstab
pacman -S --noconfirm wget arch-install-scripts


mkdir /manjaro_packages
pushd .
cd /manjaro_packages
wget "http://ftp-nyc.osuosl.org/pub/manjaro-arm/repo/stable/aarch64/core/linux-pinebookpro-5.5.0-3-aarch64.pkg.tar.xz"
wget "http://ftp-nyc.osuosl.org/pub/manjaro-arm/repo/stable/aarch64/core/uboot-pinebookpro-2020.01-4-aarch64.pkg.tar.xz"
wget "http://ftp-nyc.osuosl.org/pub/manjaro-arm/repo/stable/aarch64/community/pinebookpro-post-install-20200203-1-any.pkg.tar.xz"
wget "http://ftp-nyc.osuosl.org/pub/manjaro-arm/repo/stable/aarch64/community/ap6256-firmware-2020.01-1-aarch64.pkg.tar.xz"

pacman -U linux-pinebookpro-5.5.0-3-aarch64.pkg.tar.xz
pacman -U uboot-pinebookpro-2020.01-4-aarch64.pkg.tar.xz
pacman -U pinebookpro-post-install-20200203-1-any.pkg.tar.xz
pacman -U ap6256-firmware-2020.01-1-aarch64.pkg.tar.xz
popd

genfstab -U / >> /etc/fstab

# clean up
#yes | pacman -Scc
EOF
chmod +x "$MOUNT/chroot_commands"
archroot "$MOUNT" "/chroot_commands"
rm "$MOUNT/chroot_commands"
mv "$MOUNT/etc/resolv.conf.bak" "$MOUNT/etc/resolv.conf"

sync
umount -R "$MOUNT"
losetup -d "$LOOP_DEVICE"

cp $IMAGE_FILE "$DIR/archlinux.img"

Its worth noting that when I write the official manjaro image to the SD card, it does boot that successfully.


Messages In This Thread
Cant boot into home-rolled Arch Linux image - by craftkiller - 02-16-2020, 08:02 PM

Possibly Related Threads…
Thread Author Replies Views Last Post
  Pinebook Pro upgrading from the factory image yamsoup 12 1,113 02-22-2024, 04:02 PM
Last Post: tllim
  Attempting to install Void Linux, boots into a black screen 9a3eedi 0 208 02-18-2024, 08:54 AM
Last Post: 9a3eedi
  By the way, yay arch... KC9UDX 3 508 12-24-2023, 09:53 AM
Last Post: KC9UDX
  Need Help Recovering Manjaro /boot Contents on Pinebook Pro calinb 6 1,979 12-11-2023, 03:47 AM
Last Post: calinb
  Boot Order in Pinebook Pro food 8 992 11-23-2023, 07:37 AM
Last Post: KC9UDX
  [Manjaro] u-boot won't boot from eMMC with (unbootable) SD card present zackw 1 1,853 08-21-2023, 09:08 PM
Last Post: vanessadonald
  Would a Pinebook Pro be good for a Linux newbie? cassado10 6 1,322 08-08-2023, 04:58 AM
Last Post: moobythegoldensock
  Kali Linux for Pinebook Pro - stuck on the login screen owaspfap 0 607 07-13-2023, 05:21 PM
Last Post: owaspfap
  Emergency Mode Boot Hotkey? jiacovelli 20 3,879 06-02-2023, 01:32 PM
Last Post: wdt
  Kali Linux for Pinebook Pro Luke 100 156,164 05-03-2023, 06:10 AM
Last Post: dachalife

Forum Jump:


Users browsing this thread: 1 Guest(s)