This repository has been archived on 2025-02-01. You can view files and clone it, but cannot push or open issues or pull requests.
debian-chromebook-c201/build.sh
Thomas Schwery c2189a6120 Copy the build parameters from ArchLinuxARM
The options to build the itb image as well as the generation of
an empty bootloader has been copied from the ArchLinuxARM build
script at
https://archlinuxarm.org/packages/armv7h/linux-armv7-ax3/files/PKGBUILD
2016-11-10 17:54:59 +01:00

131 lines
4 KiB
Bash
Executable file

#!/bin/sh
# needed packages: debootstrap qemu-user-static cgpt u-boot-tools vboot-kernel-utils
IMAGELENGTH=$(echo '2 * 1024 * 1024 * 1024' | bc)
SDCARDDEVICE=/dev/mmcblk1
TGT_HOSTNAME="preila"
read -p "Username: " TGT_USERNAME
# 1234
TGT_PASSWORD='$6$2b3uuej5$fIOp13FK5BnkDo5hX7hP8bmsGeKk9cXl.FAtZ6Ti/3W4dZp4GAY1ZbD2D8jygK5Z7mCnsjGp9uzsIEBRITvO50'
BASEDIR=$(mktemp -d -p .)
IMAGEFILE="${BASEDIR}/image-$(date +'%y-%m-%d_%H_%M').raw"
MOUNTDIR="${BASEDIR}/mnt"
KERNELDIR="${BASEDIR}/kernel"
mkdir ${MOUNTDIR} ${KERNELDIR}
PART_SECTOR_FIRST=34
PART_SECTOR_FIRST_SIZE=49152 # 24MiB = (24 * 1024 * 1024) / 512
PART_SECTOR_SECOND=$(echo $PART_SECTOR_FIRST + $PART_SECTOR_FIRST_SIZE + 1 | bc)
PART_SECTOR_SECOND_END=$(echo $IMAGELENGTH / 512 - 34 | bc) # LBA - 34
PART_SECTOR_SECOND_SIZE=$(echo $PART_SECTOR_SECOND_END - $PART_SECTOR_SECOND | bc)
fallocate -l ${IMAGELENGTH} ${IMAGEFILE}
echo "Partitionning the image file ..."
/sbin/parted --script ${IMAGEFILE} mklabel gpt
cgpt create ${IMAGEFILE}
cgpt add -t kernel -l kernel -b ${PART_SECTOR_FIRST} -s ${PART_SECTOR_FIRST_SIZE} ${IMAGEFILE}
cgpt add -t data -l / -b ${PART_SECTOR_SECOND} -s ${PART_SECTOR_SECOND_SIZE} ${IMAGEFILE}
echo "Formatting the root partition ..."
LOOPDEVICE=$(sudo losetup --partscan --show --find $IMAGEFILE)
sudo mkfs.ext2 ${LOOPDEVICE}p2
sudo mount ${LOOPDEVICE}p2 ${MOUNTDIR}
CURRENTDIR=$(pwd)
if [ -f root.tar.gz ]; then
echo "Extracting provided root image"
cd ${MOUNTDIR} && sudo tar xvf ${CURRENTDIR}/root.tar.gz
cd ${CURRENTDIR}
else
echo "Bootstrapping a Debian install ..."
sudo debootstrap \
--arch=armhf \
--foreign \
--include=sudo,cgpt,vboot-utils,vboot-kernel-utils,locales \
stretch \
$MOUNTDIR \
http://http.debian.net/debian
sudo cp /usr/bin/qemu-arm-static ${MOUNTDIR}/usr/bin/
sudo chroot ${MOUNTDIR} /debootstrap/debootstrap --second-stage
sudo cp /etc/locale.gen ${MOUNTDIR}/etc/locale.gen
sudo chroot ${MOUNTDIR} locale-gen
sudo tee -a ${MOUNTDIR}/etc/apt/sources.list >/dev/null <<EOF
deb http://deb.debian.org/debian sid main
EOF
sudo tee ${MOUNTDIR}/etc/apt/preferences.d/pinning >/dev/null <<EOF
Package: *
Pin: release a=testing
Pin-Priority: 500
Package: *
Pin: release a=unstable
Pin-Priority: 250
EOF
sudo chroot ${MOUNTDIR} apt-get update
sudo chroot ${MOUNTDIR} apt-get --assume-yes install linux-image-4.8.0-1-armmp-unsigned
sudo chroot ${MOUNTDIR} apt-get clean
cd ${MOUNTDIR}
sudo tar cvf ${CURRENTDIR}/root.tar.gz .
cd ${CURRENTDIR}
fi
echo ${TGT_HOSTNAME} | sudo tee ${MOUNTDIR}/etc/hostname >/dev/null
sudo chroot ${MOUNTDIR} passwd -l root
sudo chroot ${MOUNTDIR} useradd -p ${TGT_PASSWORD} -m ${TGT_USERNAME}
sudo chroot ${MOUNTDIR} addgroup ${TGT_USERNAME} sudo
sudo tee ${MOUNTDIR}/etc/fstab >/dev/null <<EOF
${SDCARDDEVICE}p2 / ext4 errors=remount-ro 0 1
EOF
echo "Signing and copying the kernel ..."
cp ${MOUNTDIR}/boot/vmlinuz-4.8.0-1-armmp ${MOUNTDIR}/boot/initrd.img-4.8.0-1-armmp ${KERNELDIR}
cp ${MOUNTDIR}/usr/lib/linux-image-4.8.0-1-armmp/rk3288-veyron-speedy.dtb ${KERNELDIR}
cat > ${KERNELDIR}/kernel.flags <<EOF
console=tty1 printk.time=1 nosplash rootwait root=/dev/mmcblk1p2 rw rootfstype=ext4 lsm.module_locking=0
EOF
cp kernel_c201.its ${KERNELDIR}
cd ${KERNELDIR}
mkimage -D "-I dts -O dtb -p 2048" -f kernel_c201.its kernel_c201.itb
dd if=/dev/zero of=bootloader.bin bs=512 count=1
cd ${CURRENTDIR}
futility --debug vbutil_kernel \
--arch arm \
--version 1 \
--keyblock /usr/share/vboot/devkeys/kernel.keyblock \
--signprivate /usr/share/vboot/devkeys/kernel_data_key.vbprivk \
--bootloader ${KERNELDIR}/bootloader.bin \
--config ${KERNELDIR}/kernel.flags \
--vmlinuz ${KERNELDIR}/kernel_c201.itb \
--pack ${KERNELDIR}/kernel_c201.signed
sudo dd if=${KERNELDIR}/kernel_c201.signed of=${LOOPDEVICE}p1 status=progress
cgpt add -i 1 -P 15 -S 0 -T 1 ${IMAGEFILE}
echo "Cleaning up ..."
sudo umount ${MOUNTDIR}
sudo losetup -d ${LOOPDEVICE}
rm -r ${KERNELDIR}
rmdir ${MOUNTDIR}
mv ${IMAGEFILE} $(basename ${IMAGEFILE})
rmdir ${BASEDIR}