133 lines
4 KiB
Bash
Executable file
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}
|