provision: show output on screen via qt_shell, capture stderr
Some checks failed
prebuilt / build prebuilt (push) Has been cancelled
badges / create badges (push) Has been cancelled

- on_start.sh runs provision through qt_shell for on-screen display
- provision_wrapper.sh redirects stderr to stdout so errors are visible
- provision.sh: SSH setup before WiFi wait, verbose echo output,
  sleep on failure so messages are readable

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-04-14 18:46:20 -05:00
parent 2b481b6656
commit 1e150bc487
3 changed files with 46 additions and 27 deletions

View File

@@ -7,20 +7,5 @@ bash /data/openpilot/system/clearpilot/startup_logo/set_logo.sh
nmcli radio wifi on 2>/dev/null nmcli radio wifi on 2>/dev/null
if [ ! -f /data/quick_boot ]; then if [ ! -f /data/quick_boot ]; then
# No quick_boot flag — wait for internet connectivity (up to 30s) /data/openpilot/system/clearpilot/tools/qt_shell "/data/openpilot/system/clearpilot/provision_wrapper.sh" --title="ClearPilot Provision"
echo "Waiting for internet connectivity (up to 30s)..."
for i in $(seq 1 30); do
if nmcli networking connectivity check 2>/dev/null | grep -q "full"; then
echo "Internet connectivity detected after ${i}s"
break
fi
sleep 1
done
# If online, run provision
if nmcli networking connectivity check 2>/dev/null | grep -q "full"; then
bash /data/openpilot/system/clearpilot/provision.sh
else
echo "No internet connectivity after 30s, skipping provision"
fi
fi fi

View File

@@ -3,46 +3,78 @@
# ClearPilot provision script # ClearPilot provision script
# Runs on first boot (no /data/quick_boot) when internet is available. # Runs on first boot (no /data/quick_boot) when internet is available.
# Sets up SSH, installs packages, pulls latest code, and builds. # Sets up SSH, installs packages, pulls latest code, and builds.
# Output is displayed on screen via qt_shell.
# Dongle gate # Dongle gate
dongle_id=$(cat /data/params/d/DongleId 2>/dev/null) dongle_id=$(cat /data/params/d/DongleId 2>/dev/null)
if [[ ! $dongle_id == 90bb71* ]]; then if [[ ! $dongle_id == 90bb71* ]]; then
echo "provision: dongle ID not recognized, skipping" echo "Dongle ID not recognized, skipping provision"
sleep 3
exit 0 exit 0
fi fi
echo "provision: starting" echo "Dongle ID: $dongle_id"
# 1. SSH authorized keys and service # 1. SSH
echo "Setting up SSH authorized keys..."
cat /data/openpilot/system/clearpilot/dev/GithubSshKeys > /data/params/d/GithubSshKeys cat /data/openpilot/system/clearpilot/dev/GithubSshKeys > /data/params/d/GithubSshKeys
echo -n 1 > /data/params/d/SshEnabled echo -n 1 > /data/params/d/SshEnabled
sudo systemctl enable ssh 2>/dev/null sudo systemctl enable ssh 2>/dev/null
sudo systemctl start ssh sudo systemctl start ssh
echo "SSH enabled and started"
# 2. Remount / read-write and install packages # 2. Wait for internet connectivity
echo "Waiting for internet connectivity (up to 30s)..."
ONLINE=0
for i in $(seq 1 30); do
if nmcli networking connectivity check 2>/dev/null | grep -q "full"; then
echo "Online after ${i}s"
ONLINE=1
break
fi
sleep 1
done
if [ "$ONLINE" -eq 0 ]; then
echo "No internet after 30s, skipping packages and updates"
sleep 3
exit 0
fi
# 3. Install packages
echo "Remounting / read-write..."
sudo mount -o remount,rw / sudo mount -o remount,rw /
echo "Installing packages..."
sudo apt-get update -qq sudo apt-get update -qq
sudo apt-get install -y openvpn sudo apt-get install -y openvpn
echo "Packages installed"
# 3. Pull latest from remote (remote always wins) # 4. Pull latest from remote (remote always wins)
echo "Checking for updates..."
cd /data/openpilot cd /data/openpilot
git fetch origin clearpilot git fetch origin clearpilot
LOCAL=$(git rev-parse HEAD) LOCAL=$(git rev-parse HEAD)
REMOTE=$(git rev-parse origin/clearpilot) REMOTE=$(git rev-parse origin/clearpilot)
if [ "$LOCAL" != "$REMOTE" ]; then if [ "$LOCAL" != "$REMOTE" ]; then
echo "provision: updating from $LOCAL to $REMOTE" echo "Updating: $(git log --oneline -1 HEAD) -> $(git log --oneline -1 origin/clearpilot)"
git reset --hard origin/clearpilot git reset --hard origin/clearpilot
sudo chown -R comma:comma /data/openpilot sudo chown -R comma:comma /data/openpilot
echo "Update complete"
else
echo "Already up to date"
fi fi
# 4. Build # 5. Build
echo "provision: running build" echo ""
echo "Starting build..."
su - comma -c "bash /data/openpilot/build_only.sh" su - comma -c "bash /data/openpilot/build_only.sh"
if [ $? -eq 0 ]; then if [ $? -eq 0 ]; then
echo "provision: build succeeded" echo "Build succeeded"
touch /data/quick_boot touch /data/quick_boot
else else
echo "provision: build failed" echo "Build failed"
sleep 10
fi fi
echo "provision: complete" echo "Provision complete"
sleep 2

View File

@@ -0,0 +1,2 @@
#!/bin/bash
exec bash /data/openpilot/system/clearpilot/provision.sh 2>&1