mirror of
https://github.com/cimryan/teslausb.git
synced 2026-03-01 04:30:33 +00:00
More logging and automation
This commit is contained in:
41
headless-scripts/Readme.md
Normal file
41
headless-scripts/Readme.md
Normal 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`
|
||||
|
||||
@@ -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 ""
|
||||
|
||||
@@ -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."
|
||||
|
||||
Reference in New Issue
Block a user