From bff9d08430d9df84bf6b5a7c324a05a6a65b49a8 Mon Sep 17 00:00:00 2001 From: Richard Goodwin Date: Fri, 26 Oct 2018 06:58:09 -0500 Subject: [PATCH 1/9] Merge upstream master --- headless-scripts/Readme.md | 81 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 headless-scripts/Readme.md diff --git a/headless-scripts/Readme.md b/headless-scripts/Readme.md new file mode 100644 index 0000000..2eedbaa --- /dev/null +++ b/headless-scripts/Readme.md @@ -0,0 +1,81 @@ +# Flashable image to get started more quickly + +# This is a WORK IN PROGRESS, SHOULD BE WORKING. + + +## Notes + +* Assumes your Pi has access to Wifi, with internet access (during setup). (But all setup methods do currently.) USB networking still enabled for troubleshooting. + + +## Configure the SD card before first boot of the Pi + + +1. Flash the image from [here (10-24 dated image)](https://www.dropbox.com/s/6f8kxenvtz8pkj9/image_2018-10-24-teslausb_headless-lite.zip?dl=0) using Etcher or similar. (Be sure to click the `...` on Dropbox and download the `.zip` file.) +1. Mount the card again, and in the `boot` directory create a `teslausb_setup_variables.conf` file to export the same environment varibles normally needed for setup (including archive, Wifi, and push notifications (if desired).) A sample conf file is in this repo. I.e. file should contain at a minimum (replace with your own values): + ``` + export archiveserver=Nautilus + export sharename=SailfishCam + export shareuser=sailfish + export sharepassword=pa$$w0rd + export campercent=100 + export SSID=your_ssid + export WIFIPASS=your_wifi_password + # export pushover_enabled=false + # export pushover_user_key=user_key + # export pushover_app_key=app_key + ``` + (Pushover should be working but commented out by default.) +* Boot it in your Pi, give it a bit, watching for a series of flashes (2, 3, 4, 5, maybe 6) and then a reboot and/or the CAM to become available on your PC/Mac. +* The Pi should be available at `teslausb.local` over Wifi (if it works) or USB networking (if it doesn't). Takes about 5 minutes for me. You should see in `/boot` the TESLAUSB_SETUP_FINISHED and WIFI_ENABLED files as markers of success too. +* Currently doesn't create the TeslaCam folder, so you'll need to do that before taking to your car. +* If plugged into just a power source, or your car, give it a few minutes until the LED starts pulsing steadily which means the archive loop is running and you're good to go. + +## What happens under the covers + +When the Pi boots the first time: +* A `/boot/teslausb-headless-setup.log` file will be created and stages logged. This takes the place of the "STOP" commands +* Marker files will be created in `boot` like `TESLA_USB_SETUP_STARTED` and `TESLA_USB_SETUP_FINISHED` to track progress. +* (Working on a progress system so the script can pick back up if needed. This is probably useful for the general/old way of setup too.) +* Wifi is detected by looking for `/boot/WIFI_ENABLED` and if not, creates the `wpa_supplicant.conf` file in place and reboots. +* The Pi LED will flash patterns (2, 3, 4, 5, maybe 6) as it gets to each stage (labeled in the setup-teslausb-headless script). + * 10 flashes means setup failed! + * After the final stage and reboot the LED will go back to normal. Remember, the step to remount the filesystem takes a few minutes. + +At this point the next boot should start the Dashcam/music drives like normal. If you're watching the LED it will start flashing every 1 second, which is the archive loop running. + +> NOTE: Don't delete the `TESLAUSB_SETUP_FINISHED` or `WIFI_ENABLED` files. This is how the system knows setup is complete. + +### Image builder source and patches + +For now the image creation work is at: +* Modified pi-gen [rtgoodwin's fork of pi-gen](https://github.com/rtgoodwin/pi-gen) in (whatever current branch I'm working at the time). +* `headless-patch` branch of rtgoodwin fork [https://github.com/rtgoodwin/teslausb/tree/headless-patch/headless-scripts](https://github.com/rtgoodwin/teslausb/tree/headless-patch/headless-scripts) + + +### Image creation TODOs +1. Patch the hostname to teslausb +1. Make it so if someone deletes the `TESLAUSB_SETUP_FINISHED` file it's handled gracefully. +1. I still see some errors during pi-gen about locale, may need to be fixed? stage0/01-locale/debconf en_US.UTF-8 +1. Cache the remount packages? Might mess with first boot like `rsyslog` +1. Any other steps to move into the base image? +1. Aspirational TODO: Remove more packages and set services to stopped to make the boot process faster? +1. NOTE: I moved all script downloads and variable creation to the initial setup. At this point, I'm designing it to pull the setup scripts dynamically, since development is still ongoing. If/when we reach a good frozen state, we can generate an image that is ready to run. I think it'll also be pretty tricky to do some of the remounting and creating the backing files etc. on the image creation side. Open to suggestions/contributions there though! At the very least we could bake in stable first stage headlessBuild scripts for Mac/Linux/Windows. + + +#### Modifications to pi-gen builder from master + +Built image on a Raspi running Stretch, for maximum Pi-ception. + +1. Add SKIP and SKIP_IMAGES files to stage3, 4, and 5 (if present). +1. Add a stage6. (There are stages0-5, but may be a stage5 in some cases. This will help keep a clean merge later.) +1. Copy the prerun.sh from `stage2`. Be SURE to mark `chmod +x` it. +1. Remove or rename the EXPORT_NOOBS files in all stages. We don't need a NOOBS image built. +1. In `stage6`, create a `00-tweaks` folder, with a `00-patches` folder and patch inside to patch `cmdline.txt` to remove the resize and add the needed modules. The build process uses `quilt` for patching. Note: the path for any patching you do at this stage is `stage6/rootfs/FILEPATH` where `rootfs` represents the Pi's `/`. So, `cmdline.txt` is `stage6/rootfs/boot/cmdline.txt`. +1. Add a patch for the `config.txt` file. +1. Add a file called `series` in the patches directory with the name of each `.diff` file in the order you want them applied. +1. Add a `files` folder in stage6 with modified `rc.local`. The modified `rc.local` will handle pulling down the `setup-teslausb-headless` file the first time. (Still working on build logic here.) Files are moved into final locations in a `00-run.sh` script and the `install` command. See the script for details. +1. (Yes at this point you could suggest that just putting the end state files in place instead of patching would be good, but why not be idiomatic? :) ) +1. Add a script to flash LEDs +1. Run `sudo ./build.sh` from the `pi-gen` directory. +1. If you get a failure, it's almost certainly after stage2, so you can add SKIP files in stage2-stage5 present) and rerun `sudo CLEAN=1 ./build.sh` \ No newline at end of file From 6201dd91efd67e8f8f06c6c102a7a47c6f36ce12 Mon Sep 17 00:00:00 2001 From: Richard Goodwin Date: Tue, 30 Oct 2018 08:15:19 -0500 Subject: [PATCH 2/9] More logging in partition creation --- setup/pi/create-backingfiles-partition.sh | 14 ++++++++++++++ setup/pi/setup-teslausb | 1 + 2 files changed, 15 insertions(+) diff --git a/setup/pi/create-backingfiles-partition.sh b/setup/pi/create-backingfiles-partition.sh index 120130e..3c61b05 100644 --- a/setup/pi/create-backingfiles-partition.sh +++ b/setup/pi/create-backingfiles-partition.sh @@ -1,8 +1,18 @@ #!/bin/bash -eu +function setup_progress () { + SETUP_LOGFILE=/boot/teslausb-headless-setup.log + if [ $HEADLESS_SETUP = "true" ] + then + echo "$( date ) : $1" >> "$SETUP_LOGFILE" + fi + echo $1 +} + BACKINGFILES_MOUNTPOINT="$1" MUTABLE_MOUNTPOINT="$2" +setup_progress "Checking existing partitions..." PARTITION_TABLE=$(parted -m /dev/mmcblk0 unit B print) DISK_LINE=$(echo "$PARTITION_TABLE" | grep -e "^/dev/mmcblk0:") DISK_SIZE=$(echo "$DISK_LINE" | cut -d ":" -f 2 | sed 's/B//' ) @@ -15,19 +25,23 @@ LAST_BACKINGFILES_PARTITION_DESIRED_BYTE="$(( $DISK_SIZE - (100 * (2 ** 20)) - 1 ORIGINAL_DISK_IDENTIFIER=$( fdisk -l /dev/mmcblk0 | grep -e "^Disk identifier" | sed "s/Disk identifier: 0x//" ) +setup_progress "Editing partition table for backing files..." BACKINGFILES_PARTITION_END_SPEC="$(( $LAST_BACKINGFILES_PARTITION_DESIRED_BYTE / 1000000 ))M" parted -a optimal -m /dev/mmcblk0 unit B mkpart primary ext4 "$FIRST_BACKINGFILES_PARTITION_BYTE" "$BACKINGFILES_PARTITION_END_SPEC" LAST_BACKINGFILES_PARTITION_BYTE=$(parted -m /dev/mmcblk0 unit B print | grep -e "^3:" | cut -d ":" -f 3 | sed 's/B//g' ) +setup_progress "Creating mutable (writable) partition for script usage..." MUTABLE_PARTITION_START_SPEC="$(( $LAST_BACKINGFILES_PARTITION_BYTE / 1000000 ))M" parted -a optimal -m /dev/mmcblk0 unit B mkpart primary ext4 "$MUTABLE_PARTITION_START_SPEC" 100% NEW_DISK_IDENTIFIER=$( fdisk -l /dev/mmcblk0 | grep -e "^Disk identifier" | sed "s/Disk identifier: 0x//" ) +setup_progress "Writing updated partitions to fstab and /boot/cmdline.txt" sed -i "s/${ORIGINAL_DISK_IDENTIFIER}/${NEW_DISK_IDENTIFIER}/g" /etc/fstab sed -i "s/${ORIGINAL_DISK_IDENTIFIER}/${NEW_DISK_IDENTIFIER}/" /boot/cmdline.txt +setup_progress "Formatting new partitions..." mkfs.ext4 -F /dev/mmcblk0p3 mkfs.ext4 -F /dev/mmcblk0p4 diff --git a/setup/pi/setup-teslausb b/setup/pi/setup-teslausb index d92ad4b..110419e 100644 --- a/setup/pi/setup-teslausb +++ b/setup/pi/setup-teslausb @@ -16,6 +16,7 @@ then fi function setup_progress () { + SETUP_LOGFILE=/boot/teslausb-headless-setup.log if [ $HEADLESS_SETUP = "true" ] then echo "$( date ) : $1" >> "$SETUP_LOGFILE" From 331721c742851cfe7a042c18cf827fddf6513205 Mon Sep 17 00:00:00 2001 From: Richard Goodwin Date: Tue, 30 Oct 2018 08:23:24 -0500 Subject: [PATCH 3/9] Pass script flag to parted --- setup/pi/create-backingfiles-partition.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/setup/pi/create-backingfiles-partition.sh b/setup/pi/create-backingfiles-partition.sh index 3c61b05..0857cca 100644 --- a/setup/pi/create-backingfiles-partition.sh +++ b/setup/pi/create-backingfiles-partition.sh @@ -25,15 +25,15 @@ LAST_BACKINGFILES_PARTITION_DESIRED_BYTE="$(( $DISK_SIZE - (100 * (2 ** 20)) - 1 ORIGINAL_DISK_IDENTIFIER=$( fdisk -l /dev/mmcblk0 | grep -e "^Disk identifier" | sed "s/Disk identifier: 0x//" ) -setup_progress "Editing partition table for backing files..." +setup_progress "Modifying partition table for backing files..." BACKINGFILES_PARTITION_END_SPEC="$(( $LAST_BACKINGFILES_PARTITION_DESIRED_BYTE / 1000000 ))M" -parted -a optimal -m /dev/mmcblk0 unit B mkpart primary ext4 "$FIRST_BACKINGFILES_PARTITION_BYTE" "$BACKINGFILES_PARTITION_END_SPEC" +parted -s -a optimal -m /dev/mmcblk0 unit B mkpart primary ext4 "$FIRST_BACKINGFILES_PARTITION_BYTE" "$BACKINGFILES_PARTITION_END_SPEC" LAST_BACKINGFILES_PARTITION_BYTE=$(parted -m /dev/mmcblk0 unit B print | grep -e "^3:" | cut -d ":" -f 3 | sed 's/B//g' ) -setup_progress "Creating mutable (writable) partition for script usage..." +setup_progress "Modifying mutable (writable) partition for script usage..." MUTABLE_PARTITION_START_SPEC="$(( $LAST_BACKINGFILES_PARTITION_BYTE / 1000000 ))M" -parted -a optimal -m /dev/mmcblk0 unit B mkpart primary ext4 "$MUTABLE_PARTITION_START_SPEC" 100% +parted -s -a optimal -m /dev/mmcblk0 unit B mkpart primary ext4 "$MUTABLE_PARTITION_START_SPEC" 100% NEW_DISK_IDENTIFIER=$( fdisk -l /dev/mmcblk0 | grep -e "^Disk identifier" | sed "s/Disk identifier: 0x//" ) From 14d1e52a9feede5c7c07cca1989d4c1ab08df96f Mon Sep 17 00:00:00 2001 From: Richard Goodwin Date: Tue, 30 Oct 2018 08:38:28 -0500 Subject: [PATCH 4/9] Clearer logging message --- setup/pi/create-backingfiles-partition.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/setup/pi/create-backingfiles-partition.sh b/setup/pi/create-backingfiles-partition.sh index 0857cca..451c4ef 100644 --- a/setup/pi/create-backingfiles-partition.sh +++ b/setup/pi/create-backingfiles-partition.sh @@ -25,13 +25,13 @@ LAST_BACKINGFILES_PARTITION_DESIRED_BYTE="$(( $DISK_SIZE - (100 * (2 ** 20)) - 1 ORIGINAL_DISK_IDENTIFIER=$( fdisk -l /dev/mmcblk0 | grep -e "^Disk identifier" | sed "s/Disk identifier: 0x//" ) -setup_progress "Modifying partition table for backing files..." +setup_progress "Modifying partition table for backing files partition..." BACKINGFILES_PARTITION_END_SPEC="$(( $LAST_BACKINGFILES_PARTITION_DESIRED_BYTE / 1000000 ))M" parted -s -a optimal -m /dev/mmcblk0 unit B mkpart primary ext4 "$FIRST_BACKINGFILES_PARTITION_BYTE" "$BACKINGFILES_PARTITION_END_SPEC" LAST_BACKINGFILES_PARTITION_BYTE=$(parted -m /dev/mmcblk0 unit B print | grep -e "^3:" | cut -d ":" -f 3 | sed 's/B//g' ) -setup_progress "Modifying mutable (writable) partition for script usage..." +setup_progress "Modifying partition table for mutable (writable) partition for script usage..." MUTABLE_PARTITION_START_SPEC="$(( $LAST_BACKINGFILES_PARTITION_BYTE / 1000000 ))M" parted -s -a optimal -m /dev/mmcblk0 unit B mkpart primary ext4 "$MUTABLE_PARTITION_START_SPEC" 100% From e3230483bcff0fce69d01f1b7c8209aeff60bb89 Mon Sep 17 00:00:00 2001 From: Richard Goodwin Date: Tue, 30 Oct 2018 08:59:57 -0500 Subject: [PATCH 5/9] Add -s to another parted line --- setup/pi/create-backingfiles-partition.sh | 2 +- setup/pi/setup-teslausb | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/setup/pi/create-backingfiles-partition.sh b/setup/pi/create-backingfiles-partition.sh index 451c4ef..14a81ae 100644 --- a/setup/pi/create-backingfiles-partition.sh +++ b/setup/pi/create-backingfiles-partition.sh @@ -13,7 +13,7 @@ BACKINGFILES_MOUNTPOINT="$1" MUTABLE_MOUNTPOINT="$2" setup_progress "Checking existing partitions..." -PARTITION_TABLE=$(parted -m /dev/mmcblk0 unit B print) +PARTITION_TABLE=$(parted -s -m /dev/mmcblk0 unit B print) DISK_LINE=$(echo "$PARTITION_TABLE" | grep -e "^/dev/mmcblk0:") DISK_SIZE=$(echo "$DISK_LINE" | cut -d ":" -f 2 | sed 's/B//' ) diff --git a/setup/pi/setup-teslausb b/setup/pi/setup-teslausb index 110419e..b7561cd 100644 --- a/setup/pi/setup-teslausb +++ b/setup/pi/setup-teslausb @@ -170,6 +170,7 @@ function create_usb_drive_backing_files () { if [ ! -e /dev/mmcblk0p3 ] then + setup_progress "Starting to create backing files partition..." /tmp/create-backingfiles-partition.sh "$BACKINGFILES_MOUNTPOINT" "$MUTABLE_MOUNTPOINT" fi From 0f8c380f54c7f8532ac5c7015f94de9ce8c85c0d Mon Sep 17 00:00:00 2001 From: Richard Goodwin Date: Tue, 30 Oct 2018 14:51:12 -0500 Subject: [PATCH 6/9] trying BACKINGFILES_PARTITION_END_SPEC --- setup/pi/create-backingfiles-partition.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/setup/pi/create-backingfiles-partition.sh b/setup/pi/create-backingfiles-partition.sh index 14a81ae..0849974 100644 --- a/setup/pi/create-backingfiles-partition.sh +++ b/setup/pi/create-backingfiles-partition.sh @@ -13,7 +13,7 @@ BACKINGFILES_MOUNTPOINT="$1" MUTABLE_MOUNTPOINT="$2" setup_progress "Checking existing partitions..." -PARTITION_TABLE=$(parted -s -m /dev/mmcblk0 unit B print) +PARTITION_TABLE=$(parted -m /dev/mmcblk0 unit B print) DISK_LINE=$(echo "$PARTITION_TABLE" | grep -e "^/dev/mmcblk0:") DISK_SIZE=$(echo "$DISK_LINE" | cut -d ":" -f 2 | sed 's/B//' ) @@ -27,13 +27,13 @@ ORIGINAL_DISK_IDENTIFIER=$( fdisk -l /dev/mmcblk0 | grep -e "^Disk identifier" | setup_progress "Modifying partition table for backing files partition..." BACKINGFILES_PARTITION_END_SPEC="$(( $LAST_BACKINGFILES_PARTITION_DESIRED_BYTE / 1000000 ))M" -parted -s -a optimal -m /dev/mmcblk0 unit B mkpart primary ext4 "$FIRST_BACKINGFILES_PARTITION_BYTE" "$BACKINGFILES_PARTITION_END_SPEC" +parted -a optimal -m /dev/mmcblk0 unit B mkpart primary ext4 "$FIRST_BACKINGFILES_PARTITION_BYTE" "$BACKINGFILES_PARTITION_END_SPEC" LAST_BACKINGFILES_PARTITION_BYTE=$(parted -m /dev/mmcblk0 unit B print | grep -e "^3:" | cut -d ":" -f 3 | sed 's/B//g' ) setup_progress "Modifying partition table for mutable (writable) partition for script usage..." -MUTABLE_PARTITION_START_SPEC="$(( $LAST_BACKINGFILES_PARTITION_BYTE / 1000000 ))M" -parted -s -a optimal -m /dev/mmcblk0 unit B mkpart primary ext4 "$MUTABLE_PARTITION_START_SPEC" 100% +MUTABLE_PARTITION_START_SPEC="$BACKINGFILES_PARTITION_END_SPEC" +parted -a optimal -m /dev/mmcblk0 unit B mkpart primary ext4 "$MUTABLE_PARTITION_START_SPEC" 100% NEW_DISK_IDENTIFIER=$( fdisk -l /dev/mmcblk0 | grep -e "^Disk identifier" | sed "s/Disk identifier: 0x//" ) From 589a16f833de9c5ceff82ac0966af18ae28b255f Mon Sep 17 00:00:00 2001 From: Richard Goodwin Date: Tue, 30 Oct 2018 15:15:11 -0500 Subject: [PATCH 7/9] Removed this readme since it's been moved. --- headless-scripts/Readme.md | 81 -------------------------------------- 1 file changed, 81 deletions(-) delete mode 100644 headless-scripts/Readme.md diff --git a/headless-scripts/Readme.md b/headless-scripts/Readme.md deleted file mode 100644 index 2eedbaa..0000000 --- a/headless-scripts/Readme.md +++ /dev/null @@ -1,81 +0,0 @@ -# Flashable image to get started more quickly - -# This is a WORK IN PROGRESS, SHOULD BE WORKING. - - -## Notes - -* Assumes your Pi has access to Wifi, with internet access (during setup). (But all setup methods do currently.) USB networking still enabled for troubleshooting. - - -## Configure the SD card before first boot of the Pi - - -1. Flash the image from [here (10-24 dated image)](https://www.dropbox.com/s/6f8kxenvtz8pkj9/image_2018-10-24-teslausb_headless-lite.zip?dl=0) using Etcher or similar. (Be sure to click the `...` on Dropbox and download the `.zip` file.) -1. Mount the card again, and in the `boot` directory create a `teslausb_setup_variables.conf` file to export the same environment varibles normally needed for setup (including archive, Wifi, and push notifications (if desired).) A sample conf file is in this repo. I.e. file should contain at a minimum (replace with your own values): - ``` - export archiveserver=Nautilus - export sharename=SailfishCam - export shareuser=sailfish - export sharepassword=pa$$w0rd - export campercent=100 - export SSID=your_ssid - export WIFIPASS=your_wifi_password - # export pushover_enabled=false - # export pushover_user_key=user_key - # export pushover_app_key=app_key - ``` - (Pushover should be working but commented out by default.) -* Boot it in your Pi, give it a bit, watching for a series of flashes (2, 3, 4, 5, maybe 6) and then a reboot and/or the CAM to become available on your PC/Mac. -* The Pi should be available at `teslausb.local` over Wifi (if it works) or USB networking (if it doesn't). Takes about 5 minutes for me. You should see in `/boot` the TESLAUSB_SETUP_FINISHED and WIFI_ENABLED files as markers of success too. -* Currently doesn't create the TeslaCam folder, so you'll need to do that before taking to your car. -* If plugged into just a power source, or your car, give it a few minutes until the LED starts pulsing steadily which means the archive loop is running and you're good to go. - -## What happens under the covers - -When the Pi boots the first time: -* A `/boot/teslausb-headless-setup.log` file will be created and stages logged. This takes the place of the "STOP" commands -* Marker files will be created in `boot` like `TESLA_USB_SETUP_STARTED` and `TESLA_USB_SETUP_FINISHED` to track progress. -* (Working on a progress system so the script can pick back up if needed. This is probably useful for the general/old way of setup too.) -* Wifi is detected by looking for `/boot/WIFI_ENABLED` and if not, creates the `wpa_supplicant.conf` file in place and reboots. -* The Pi LED will flash patterns (2, 3, 4, 5, maybe 6) as it gets to each stage (labeled in the setup-teslausb-headless script). - * 10 flashes means setup failed! - * After the final stage and reboot the LED will go back to normal. Remember, the step to remount the filesystem takes a few minutes. - -At this point the next boot should start the Dashcam/music drives like normal. If you're watching the LED it will start flashing every 1 second, which is the archive loop running. - -> NOTE: Don't delete the `TESLAUSB_SETUP_FINISHED` or `WIFI_ENABLED` files. This is how the system knows setup is complete. - -### Image builder source and patches - -For now the image creation work is at: -* Modified pi-gen [rtgoodwin's fork of pi-gen](https://github.com/rtgoodwin/pi-gen) in (whatever current branch I'm working at the time). -* `headless-patch` branch of rtgoodwin fork [https://github.com/rtgoodwin/teslausb/tree/headless-patch/headless-scripts](https://github.com/rtgoodwin/teslausb/tree/headless-patch/headless-scripts) - - -### Image creation TODOs -1. Patch the hostname to teslausb -1. Make it so if someone deletes the `TESLAUSB_SETUP_FINISHED` file it's handled gracefully. -1. I still see some errors during pi-gen about locale, may need to be fixed? stage0/01-locale/debconf en_US.UTF-8 -1. Cache the remount packages? Might mess with first boot like `rsyslog` -1. Any other steps to move into the base image? -1. Aspirational TODO: Remove more packages and set services to stopped to make the boot process faster? -1. NOTE: I moved all script downloads and variable creation to the initial setup. At this point, I'm designing it to pull the setup scripts dynamically, since development is still ongoing. If/when we reach a good frozen state, we can generate an image that is ready to run. I think it'll also be pretty tricky to do some of the remounting and creating the backing files etc. on the image creation side. Open to suggestions/contributions there though! At the very least we could bake in stable first stage headlessBuild scripts for Mac/Linux/Windows. - - -#### Modifications to pi-gen builder from master - -Built image on a Raspi running Stretch, for maximum Pi-ception. - -1. Add SKIP and SKIP_IMAGES files to stage3, 4, and 5 (if present). -1. Add a stage6. (There are stages0-5, but may be a stage5 in some cases. This will help keep a clean merge later.) -1. Copy the prerun.sh from `stage2`. Be SURE to mark `chmod +x` it. -1. Remove or rename the EXPORT_NOOBS files in all stages. We don't need a NOOBS image built. -1. In `stage6`, create a `00-tweaks` folder, with a `00-patches` folder and patch inside to patch `cmdline.txt` to remove the resize and add the needed modules. The build process uses `quilt` for patching. Note: the path for any patching you do at this stage is `stage6/rootfs/FILEPATH` where `rootfs` represents the Pi's `/`. So, `cmdline.txt` is `stage6/rootfs/boot/cmdline.txt`. -1. Add a patch for the `config.txt` file. -1. Add a file called `series` in the patches directory with the name of each `.diff` file in the order you want them applied. -1. Add a `files` folder in stage6 with modified `rc.local`. The modified `rc.local` will handle pulling down the `setup-teslausb-headless` file the first time. (Still working on build logic here.) Files are moved into final locations in a `00-run.sh` script and the `install` command. See the script for details. -1. (Yes at this point you could suggest that just putting the end state files in place instead of patching would be good, but why not be idiomatic? :) ) -1. Add a script to flash LEDs -1. Run `sudo ./build.sh` from the `pi-gen` directory. -1. If you get a failure, it's almost certainly after stage2, so you can add SKIP files in stage2-stage5 present) and rerun `sudo CLEAN=1 ./build.sh` \ No newline at end of file From 9e5324f327bbeb7ef34c2f2d6a5b85e9fc748b4e Mon Sep 17 00:00:00 2001 From: Richard Goodwin Date: Tue, 30 Oct 2018 15:18:23 -0500 Subject: [PATCH 8/9] Missed a default variable setting I hate this whole unbound variable protection mode, but it sure does catch bugs. :) --- setup/pi/create-backingfiles-partition.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/setup/pi/create-backingfiles-partition.sh b/setup/pi/create-backingfiles-partition.sh index 0849974..170c873 100644 --- a/setup/pi/create-backingfiles-partition.sh +++ b/setup/pi/create-backingfiles-partition.sh @@ -1,5 +1,7 @@ #!/bin/bash -eu +HEADLESS_SETUP=${HEADLESS_SETUP:-false} + function setup_progress () { SETUP_LOGFILE=/boot/teslausb-headless-setup.log if [ $HEADLESS_SETUP = "true" ] From 215556acc86e88d1e9d0709ed1bfb4e5d9e046c0 Mon Sep 17 00:00:00 2001 From: Richard Goodwin Date: Tue, 30 Oct 2018 15:31:27 -0500 Subject: [PATCH 9/9] Make HEADLESS variable check local --- setup/pi/create-backingfiles-partition.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/setup/pi/create-backingfiles-partition.sh b/setup/pi/create-backingfiles-partition.sh index 170c873..c0ae689 100644 --- a/setup/pi/create-backingfiles-partition.sh +++ b/setup/pi/create-backingfiles-partition.sh @@ -1,9 +1,10 @@ #!/bin/bash -eu -HEADLESS_SETUP=${HEADLESS_SETUP:-false} + function setup_progress () { SETUP_LOGFILE=/boot/teslausb-headless-setup.log + HEADLESS_SETUP=${HEADLESS_SETUP:-false} if [ $HEADLESS_SETUP = "true" ] then echo "$( date ) : $1" >> "$SETUP_LOGFILE"