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

133 lines
4 KiB
Bash
Executable file

#!/bin/sh
# needed packages: debootstrap qemu-user-static cgpt u-boot-tools vboot-kernel-utils
IMAGELENGTH=$(echo '1 * 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"
KERNELVERSION="4.11.0-1-armmp"
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.ext4 ${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 \
buster \
$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-${KERNELVERSION}
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-${KERNELVERSION} ${MOUNTDIR}/boot/initrd.img-${KERNELVERSION} ${KERNELDIR}
cp ${MOUNTDIR}/usr/lib/linux-image-${KERNELVERSION}/rk3288-veyron-speedy.dtb ${KERNELDIR}
cat > ${KERNELDIR}/kernel.flags <<EOF
console=tty1 init=/sbin/init root=PARTUUID=%U/PARTNROFF=1 rootfstype=ext4 rootwait rw quiet
EOF
cp kernel_c201.its ${KERNELDIR}
cd ${KERNELDIR}
mkimage -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
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}