More logging and automation

This commit is contained in:
Richard Goodwin
2018-10-20 18:25:30 -05:00
parent 1d5d2d1641
commit e08e34c558
3 changed files with 94 additions and 14 deletions

View File

@@ -0,0 +1,41 @@
# Flashable image to get started more quick
# This is a WORK IN PROGRESS, NOT CURRENTLY WORKING.
For now the image creation work is at [rtgoodwin's fork of pi-gen](https://github.com/rtgoodwin/pi-gen) in (whatever current branch I'm working at the time).
* Assumes your Pi comes up on Wifi, with internet access. (But so does most of this guide.) USB networking still enabled for troubleshooting.
* 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!
1. Flash the image
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.)
1. Run the `setup-piForHeadlessBuild.sh` (note: **not** `setup-piForHeadlessSetup.sh`)
1. If all goes well, put card into Pi and boot.
* 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. May use a progress system so the script can pick back up if needed. (This is probably useful for the general/old way of setup too.)
#### 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. 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`
### Image creation TODOs
1. TODO: Patch the hostname to teslausb
1. TODO: I still see some errors during pi-gen about locale, may need to be fixed? stage0/01-locale/debconf en_US.UTF-8
1. Aspirational TODO: Remove more packages etc to make the boot process faster? OR start from `stage1` if we don't need all of `stage2`

View File

@@ -128,7 +128,7 @@ CONFIG_TXT_PATH="$BOOT_DIR/config.txt"
if ! grep -q "dtoverlay=dwc2" $CONFIG_TXT_PATH
then
echo "Updating $CONFIG_TXT_PATH ..."
good_message "Updating $CONFIG_TXT_PATH ..."
echo "" >> "$CONFIG_TXT_PATH"
echo "dtoverlay=dwc2" >> "$CONFIG_TXT_PATH"
else
@@ -174,7 +174,6 @@ EOF
echo ""
good_message '-- Files updated and ready for headless setup --'
echo ''
good_message '-- You can now insert your SD card into the Pi for headless setup'
echo ''
echo 'You can now insert your SD card into the Pi for headless setup. Plug in power to the Pi and it will boot and run.'
echo "When done (this may take a vew minutes), the Pi should be available over SSH as pi@teslausb.local"
echo ""

View File

@@ -1,9 +1,9 @@
#!/bin/bash -eu
REPO=rtgoodwin
BRANCH="headless-patch"
REPO=cimryan
BRANCH=master
user_enabled_pushover=false
LOGFIlE=/boot/teslausb-headless-setup.log
LOGFILE=/boot/teslausb-headless-setup.log
setup_complete=false
# if ! [ $(id -u) = 0 ]
@@ -13,19 +13,28 @@ setup_complete=false
# fi
function setup_log () {
echo "$( date )" >> "$LOGFILE"
echo "$1" >> "$LOGFILE"
echo "$( date ) : $1" >> "$LOGFILE"
}
if [ ! -e /boot/TESLAUSB_SETUP_FINISHED ]
then
setup_log "Setting up teslausb functionality"
touch /boot/TESLA_USB_SETUP_STARTED
touch /boot/TESLAUSB_SETUP_STARTED
fi
function mark_setup_failed () {
setup_log "ERROR: Setup Failed."
touch /boot/TESLAUSB_SETUP_FAILED
}
function mark_setup_success () {
if [ -e /boot/TESLAUSB_SETUP_FAILED ]
then
rm /boot/TESLAUSB_SETUP_FAILED
rm /boot/TESLAUSB_SETUP_STARTED
fi
touch /boot/TESLAUSB_SETUP_FINISHED
setup_log "Setup completed. Remounting file systems read only (may cause a reboot)."
}
function check_variable () {
@@ -38,8 +47,29 @@ function check_variable () {
fi
}
function check_pushover_enabled () {
if [ ! -z "${pushover_enabled+x}" ]
then
if [ ! -n "${pushover_user_key+x}" ] || [ ! -n "${pushover_app_key+x}" ]
then
setup_log "ERROR: "
echo "STOP: You're trying to setup Pushover but didn't provide your User and/or App key."
echo "Define the variables like this:"
echo "export pushover_user_key=put_your_userkey_here"
echo "export pushover_app_key=put_your_appkey_here"
exit 1
elif [ "${pushover_user_key}" = "put_your_userkey_here" ] || [ "${pushover_app_key}" = "put_your_appkey_here" ]
then
echo "STOP: You're trying to setup Pushover, but didn't replace the default User and App key values."
exit 1
else
user_enabled_pushover=true
echo "export pushover_enabled=true" > /root/.teslaCamPushoverCredentials
echo "export pushover_user_key=$pushover_user_key" >> /root/.teslaCamPushoverCredentials
echo "export pushover_app_key=$pushover_app_key" >> /root/.teslaCamPushoverCredentials
fi
fi
}
function check_archive_server_reachable () {
echo "Verifying that the archive server $archiveserver is reachable..."
@@ -187,6 +217,14 @@ function make_root_fs_readonly () {
/tmp/make-root-fs-readonly.sh
}
if [ ! -e /boot/teslausb_setup_variables.conf ]
then
setup_log "ERROR: teslausb_setup_variables.conf file not found. Can't continue setup."
exit 1
fi
source /boot/teslausb_setup_variables.conf
echo "Verifying environment variables..."
check_variable "archiveserver"
@@ -221,6 +259,8 @@ configure_rc_local
configure_hostname
mark_setup_success
make_root_fs_readonly
echo "All done."