Add init script for demo skill
Installs chrome and rodney
This commit is contained in:
parent
a4bca75946
commit
5d20a21499
132
.pi/skills/demo/init.sh
Executable file
132
.pi/skills/demo/init.sh
Executable file
@ -0,0 +1,132 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
# init.sh — Set up the demo skill's headless Chrome container
|
||||
#
|
||||
# Prerequisites:
|
||||
# - go (for installing showboat & rodney)
|
||||
# - docker
|
||||
#
|
||||
# This script:
|
||||
# 1. Installs showboat and rodney if missing
|
||||
# 2. Downloads Chromium for the host (macOS, via rodney)
|
||||
# 3. Downloads Chromium for the Docker image (Linux_x64, from GCS)
|
||||
# 4. Copies Linux binary into chrome/ (the Docker build context)
|
||||
# 5. Builds the demo-chrome image
|
||||
|
||||
SKILL_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
CHROME_DIR="$SKILL_DIR/chrome"
|
||||
IMAGE_NAME="${1:-demo-chrome}"
|
||||
|
||||
echo "==> Checking prerequisites..."
|
||||
|
||||
# ------------------------------------------------------------------
|
||||
# 1. Install CLI tools
|
||||
# ------------------------------------------------------------------
|
||||
GO_BIN_DIR="$(go env GOBIN 2>/dev/null || echo "$HOME/go/bin")"
|
||||
export PATH="$GO_BIN_DIR:$PATH"
|
||||
|
||||
if ! command -v showboat &>/dev/null; then
|
||||
echo "==> Installing showboat..."
|
||||
go install github.com/simonw/showboat@latest
|
||||
else
|
||||
echo " showboat: ok"
|
||||
fi
|
||||
|
||||
if ! command -v rodney &>/dev/null; then
|
||||
echo "==> Installing rodney..."
|
||||
go install github.com/simonw/rodney@latest
|
||||
else
|
||||
echo " rodney: ok"
|
||||
fi
|
||||
|
||||
# ------------------------------------------------------------------
|
||||
# 2. Download macOS Chromium for local rodney
|
||||
# ------------------------------------------------------------------
|
||||
echo "==> Downloading macOS Chromium via rodney..."
|
||||
rodney start 2>/dev/null || true
|
||||
rodney stop 2>/dev/null || true
|
||||
|
||||
ROD_CACHE="$HOME/.cache/rod/browser"
|
||||
if [ -d "$ROD_CACHE" ]; then
|
||||
CHROMIUM_DIR=$(ls -d "$ROD_CACHE"/chromium-* 2>/dev/null | head -1)
|
||||
else
|
||||
echo "ERROR: rod cache not found at $ROD_CACHE"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -z "$CHROMIUM_DIR" ]; then
|
||||
echo "ERROR: No chromium-* directory found in $ROD_CACHE"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo " macOS Chromium at: $CHROMIUM_DIR"
|
||||
|
||||
# Extract revision number from directory name (e.g. chromium-1321438)
|
||||
REVISION=$(basename "$CHROMIUM_DIR" | sed 's/chromium-//')
|
||||
echo " Revision: $REVISION"
|
||||
|
||||
# ------------------------------------------------------------------
|
||||
# 3. Download Linux Chromium for the Docker image
|
||||
# ------------------------------------------------------------------
|
||||
LINUX_ZIP="/tmp/chrome-linux-$REVISION.zip"
|
||||
LINUX_EXTRACT="/tmp/chrome-linux-extract"
|
||||
|
||||
echo "==> Downloading Linux_x64 Chromium (revision $REVISION)..."
|
||||
|
||||
if [ ! -f "$LINUX_ZIP" ]; then
|
||||
curl -fSL \
|
||||
"https://storage.googleapis.com/chromium-browser-snapshots/Linux_x64/$REVISION/chrome-linux.zip" \
|
||||
-o "$LINUX_ZIP"
|
||||
echo " Downloaded: $LINUX_ZIP"
|
||||
else
|
||||
echo " Already cached: $LINUX_ZIP"
|
||||
fi
|
||||
|
||||
# ------------------------------------------------------------------
|
||||
# 4. Extract and copy into build context
|
||||
# ------------------------------------------------------------------
|
||||
echo "==> Extracting Linux Chromium into $CHROME_DIR ..."
|
||||
rm -rf "$LINUX_EXTRACT" "$CHROME_DIR"
|
||||
mkdir -p "$LINUX_EXTRACT"
|
||||
unzip -q "$LINUX_ZIP" -d "$LINUX_EXTRACT"
|
||||
|
||||
# chrome-linux.zip contains a single chrome-linux/ directory
|
||||
mv "$LINUX_EXTRACT/chrome-linux" "$CHROME_DIR"
|
||||
|
||||
# IMPORTANT: set suid on the sandbox binary so Chrome can sandbox child processes
|
||||
if [ -f "$CHROME_DIR/chrome_sandbox" ]; then
|
||||
chmod 4755 "$CHROME_DIR/chrome_sandbox"
|
||||
fi
|
||||
|
||||
echo "==> Files in $CHROME_DIR:"
|
||||
ls -lh "$CHROME_DIR/" | head -15
|
||||
|
||||
# Clean up extraction temp
|
||||
rm -rf "$LINUX_EXTRACT"
|
||||
|
||||
# ------------------------------------------------------------------
|
||||
# 5. Build Docker image
|
||||
# ------------------------------------------------------------------
|
||||
echo "==> Building Docker image '$IMAGE_NAME' ..."
|
||||
docker build --tag "$IMAGE_NAME" "$SKILL_DIR"
|
||||
|
||||
# ------------------------------------------------------------------
|
||||
# 6. Verify
|
||||
# ------------------------------------------------------------------
|
||||
echo ""
|
||||
echo "==> Success!"
|
||||
echo " Image: $IMAGE_NAME"
|
||||
echo ""
|
||||
echo " Run the container:"
|
||||
echo " docker run -d --name demo-chrome \\"
|
||||
echo " --cap-add=SYS_ADMIN --cap-drop=ALL \\"
|
||||
echo " --security-opt=no-new-privileges:false \\"
|
||||
echo " -p 9222:9222 \\"
|
||||
echo " $IMAGE_NAME"
|
||||
echo ""
|
||||
echo " Connect rodney to it:"
|
||||
echo " rodney connect localhost:9222"
|
||||
echo ""
|
||||
echo " Stop the container:"
|
||||
echo " docker stop demo-chrome && docker rm demo-chrome"
|
||||
Loading…
x
Reference in New Issue
Block a user