blob: a340c64255a46cd2494f09b807ddf717bbed4fa1 [file] [log] [blame]
Austin Schuhab8c0c52020-02-22 13:42:37 -08001#!/bin/bash
2
3set -xe
4
Jim Ostrowskic58989a2022-01-29 16:12:08 -08005# Full path to Raspberry Pi Bullseye disk image
6IMAGE="2021-10-30-raspios-bullseye-armhf-lite.img"
Austin Schuhd4df9552020-09-13 18:59:50 -07007BOOT_PARTITION="${IMAGE}.boot_partition"
8PARTITION="${IMAGE}.partition"
Austin Schuhab8c0c52020-02-22 13:42:37 -08009
10function target() {
11 HOME=/root/ USER=root sudo proot -0 -q qemu-arm-static -w / -r "${PARTITION}" "$@"
12}
13
14function user_pi_target() {
15 USER=root sudo proot -0 -q qemu-arm-static -w / -r "${PARTITION}" sudo -h 127.0.0.1 -u pi "$@"
16}
17
Austin Schuh90c82782020-02-26 19:54:51 -080018
Austin Schuhab8c0c52020-02-22 13:42:37 -080019mkdir -p "${PARTITION}"
Austin Schuhe6965982020-02-26 23:12:05 -080020mkdir -p "${BOOT_PARTITION}"
21
22if mount | grep "${BOOT_PARTITION}" >/dev/null ;
23then
24 echo "Already mounted"
25else
Jim Ostrowski33ea41e2021-03-11 12:17:38 -080026 OFFSET="$(/sbin/fdisk -lu "${IMAGE}" | grep "${IMAGE}1" | awk '{print 512*$2}')"
Austin Schuhe6965982020-02-26 23:12:05 -080027 sudo mount -o loop,offset=${OFFSET} "${IMAGE}" "${BOOT_PARTITION}"
28fi
29
30# Enable the camera on boot.
31if ! grep "start_x=1" "${BOOT_PARTITION}/config.txt"; then
32 echo "start_x=1" | sudo tee -a "${BOOT_PARTITION}/config.txt"
33fi
34if ! grep "gpu_mem=128" "${BOOT_PARTITION}/config.txt"; then
35 echo "gpu_mem=128" | sudo tee -a "${BOOT_PARTITION}/config.txt"
36fi
Jim Ostrowskic58989a2022-01-29 16:12:08 -080037# For now, disable the new libcamera driver in favor of legacy ones
38sudo sed -i s/^camera_auto_detect=1/#camera_auto_detect=1/ "${BOOT_PARTITION}/config.txt"
Austin Schuhe6965982020-02-26 23:12:05 -080039
Jim Ostrowskic58989a2022-01-29 16:12:08 -080040# Seeing a race condition with umount, so doing lazy umount
41sudo umount -l "${BOOT_PARTITION}"
Austin Schuhe6965982020-02-26 23:12:05 -080042rmdir "${BOOT_PARTITION}"
Austin Schuhab8c0c52020-02-22 13:42:37 -080043
44if mount | grep "${PARTITION}" >/dev/null ;
45then
46 echo "Already mounted"
47else
Jim Ostrowski33ea41e2021-03-11 12:17:38 -080048 OFFSET="$(/sbin/fdisk -lu "${IMAGE}" | grep "${IMAGE}2" | awk '{print 512*$2}')"
Austin Schuh90c82782020-02-26 19:54:51 -080049
Austin Schuh7da6fe42021-06-20 15:37:55 -070050 if [[ "$(stat -c %s "${IMAGE}")" < 2000000000 ]]; then
Austin Schuh90c82782020-02-26 19:54:51 -080051 echo "Growing image"
Austin Schuhd4df9552020-09-13 18:59:50 -070052 dd if=/dev/zero bs=1G count=1 >> "${IMAGE}"
Jim Ostrowski33ea41e2021-03-11 12:17:38 -080053 START="$(/sbin/fdisk -lu "${IMAGE}" | grep "${IMAGE}2" | awk '{print $2}')"
Austin Schuh90c82782020-02-26 19:54:51 -080054
Jim Ostrowski33ea41e2021-03-11 12:17:38 -080055 sed -e 's/\s*\([\+0-9a-zA-Z]*\).*/\1/' << EOF | /sbin/fdisk "${IMAGE}"
Austin Schuh90c82782020-02-26 19:54:51 -080056 d # remove old partition
57 2
58 n # new partition
59 p # primary partition
60 2 # partion number 2
61 532480 # start where the old one starts
62 # To the end
63 p # print the in-memory partition table
64 w # Flush
65 q # and we're done
66EOF
67
68 sudo losetup -o "${OFFSET}" -f "${IMAGE}"
69 LOOPBACK="$(sudo losetup --list | grep "${IMAGE}" | awk '{print $1}')"
70 sudo e2fsck -f "${LOOPBACK}"
71 sudo resize2fs "${LOOPBACK}"
72 sudo losetup -d "${LOOPBACK}"
73 fi
74
Austin Schuhab8c0c52020-02-22 13:42:37 -080075 echo "Mounting"
76 sudo mount -o loop,offset=${OFFSET} "${IMAGE}" "${PARTITION}"
77fi
78
79sudo cp target_configure.sh "${PARTITION}/tmp/"
80sudo cp dhcpcd.conf "${PARTITION}/tmp/dhcpcd.conf"
Austin Schuh2fe4b712020-03-15 14:21:45 -070081sudo cp sctp.conf "${PARTITION}/etc/sysctl.d/sctp.conf"
Austin Schuhf3318a72021-11-01 22:05:32 -070082sudo cp logind.conf "${PARTITION}/etc/systemd/logind.conf"
Austin Schuhab8c0c52020-02-22 13:42:37 -080083sudo cp change_hostname.sh "${PARTITION}/tmp/change_hostname.sh"
James Kuszmaul2d8fa2a2020-03-01 13:51:50 -080084sudo cp frc971.service "${PARTITION}/etc/systemd/system/frc971.service"
Austin Schuh92aa2de2020-09-19 19:09:55 -070085sudo cp rt.conf "${PARTITION}/etc/security/limits.d/rt.conf"
Austin Schuh867bd922021-11-07 16:59:52 -080086sudo cp usb-mount@.service "${PARTITION}/etc/systemd/system/usb-mount@.service"
87sudo cp 99-usb-mount.rules "${PARTITION}/etc/udev/rules.d/99-usb-mount.rules"
Austin Schuhab8c0c52020-02-22 13:42:37 -080088
89target /bin/mkdir -p /home/pi/.ssh/
90cat ~/.ssh/id_rsa.pub | target tee /home/pi/.ssh/authorized_keys
91
Jim Ostrowskic58989a2022-01-29 16:12:08 -080092# Downloads and installs our target libraries
Austin Schuhab8c0c52020-02-22 13:42:37 -080093target /bin/bash /tmp/target_configure.sh
94
Jim Ostrowskic58989a2022-01-29 16:12:08 -080095# Add a file to show when this image was last modified and by whom
96TIMESTAMP_FILE="${PARTITION}/home/pi/.ImageModifiedDate.txt"
97date > "${TIMESTAMP_FILE}"
98git rev-parse HEAD >> "${TIMESTAMP_FILE}"
99whoami >> "${TIMESTAMP_FILE}"
100
Austin Schuhab8c0c52020-02-22 13:42:37 -0800101# Run a prompt as root inside the target to poke around and check things.
102target /bin/bash --rcfile /root/.bashrc
103
Jim Ostrowskic58989a2022-01-29 16:12:08 -0800104sudo umount -l "${PARTITION}"
Austin Schuhab8c0c52020-02-22 13:42:37 -0800105rmdir "${PARTITION}"
Jim Ostrowskic58989a2022-01-29 16:12:08 -0800106
107# Move the image to a different name, to indicated we've modified it
108MOD_IMAGE_NAME=`echo ${IMAGE} | sed s/.img/-frc-mods.img/`
109mv ${IMAGE} ${MOD_IMAGE_NAME}