|
| 1 | +#!/usr/bin/env bash |
| 2 | +# install-chromium.sh - Install Chromium for OCA browser automation |
| 3 | +# Usage: bash install-chromium.sh [install|update] |
| 4 | +# |
| 5 | +# What it does: |
| 6 | +# 1. Install x11-repo (Termux X11 packages repository) |
| 7 | +# 2. Install chromium package |
| 8 | +# 3. Configure OpenClaw browser settings in openclaw.json |
| 9 | +# 4. Verify installation |
| 10 | +# |
| 11 | +# Browser automation allows OpenClaw to control a headless Chromium browser |
| 12 | +# for web scraping, screenshots, and automated browsing tasks. |
| 13 | +# |
| 14 | +# This script is WARN-level: failure does not abort the parent installer. |
| 15 | +set -euo pipefail |
| 16 | + |
| 17 | +GREEN='\033[0;32m' |
| 18 | +YELLOW='\033[1;33m' |
| 19 | +NC='\033[0m' |
| 20 | + |
| 21 | +MODE="${1:-install}" |
| 22 | + |
| 23 | +# ── Helper ──────────────────────────────────── |
| 24 | + |
| 25 | +fail_warn() { |
| 26 | + echo -e "${YELLOW}[WARN]${NC} $1" |
| 27 | + exit 0 |
| 28 | +} |
| 29 | + |
| 30 | +# ── Detect Chromium binary path ─────────────── |
| 31 | + |
| 32 | +detect_chromium_bin() { |
| 33 | + for bin in "$PREFIX/bin/chromium-browser" "$PREFIX/bin/chromium"; do |
| 34 | + if [ -x "$bin" ]; then |
| 35 | + echo "$bin" |
| 36 | + return 0 |
| 37 | + fi |
| 38 | + done |
| 39 | + return 1 |
| 40 | +} |
| 41 | + |
| 42 | +# ── Pre-checks ──────────────────────────────── |
| 43 | + |
| 44 | +if [ -z "${PREFIX:-}" ]; then |
| 45 | + fail_warn "Not running in Termux (\$PREFIX not set)" |
| 46 | +fi |
| 47 | + |
| 48 | +# ── Check current installation ──────────────── |
| 49 | + |
| 50 | +SKIP_PKG_INSTALL=false |
| 51 | +if CHROMIUM_BIN=$(detect_chromium_bin); then |
| 52 | + if [ "$MODE" = "install" ]; then |
| 53 | + echo -e "${GREEN}[SKIP]${NC} Chromium already installed ($CHROMIUM_BIN)" |
| 54 | + SKIP_PKG_INSTALL=true |
| 55 | + fi |
| 56 | +fi |
| 57 | + |
| 58 | +# ── Step 1: Install x11-repo + Chromium ─────── |
| 59 | + |
| 60 | +if [ "$SKIP_PKG_INSTALL" = false ]; then |
| 61 | + echo "Installing x11-repo (Termux X11 packages)..." |
| 62 | + if ! pkg install -y x11-repo; then |
| 63 | + fail_warn "Failed to install x11-repo" |
| 64 | + fi |
| 65 | + echo -e "${GREEN}[OK]${NC} x11-repo installed" |
| 66 | + |
| 67 | + echo "Installing Chromium..." |
| 68 | + echo " (This is a large package (~400MB) — may take several minutes)" |
| 69 | + if ! pkg install -y chromium; then |
| 70 | + fail_warn "Failed to install Chromium" |
| 71 | + fi |
| 72 | + echo -e "${GREEN}[OK]${NC} Chromium installed" |
| 73 | +fi |
| 74 | + |
| 75 | +# ── Step 2: Detect binary path ──────────────── |
| 76 | + |
| 77 | +if ! CHROMIUM_BIN=$(detect_chromium_bin); then |
| 78 | + fail_warn "Chromium binary not found after installation" |
| 79 | +fi |
| 80 | + |
| 81 | +# ── Step 3: Configure OpenClaw browser settings |
| 82 | + |
| 83 | +echo "Configuring OpenClaw browser settings..." |
| 84 | + |
| 85 | +if command -v node &>/dev/null; then |
| 86 | + export CHROMIUM_BIN |
| 87 | + if node << 'NODESCRIPT' |
| 88 | +const fs = require('fs'); |
| 89 | +const path = require('path'); |
| 90 | +
|
| 91 | +const configDir = path.join(process.env.HOME, '.openclaw'); |
| 92 | +const configPath = path.join(configDir, 'openclaw.json'); |
| 93 | +
|
| 94 | +let config = {}; |
| 95 | +try { |
| 96 | + config = JSON.parse(fs.readFileSync(configPath, 'utf8')); |
| 97 | +} catch { |
| 98 | + // File doesn't exist or invalid — start fresh |
| 99 | +} |
| 100 | +
|
| 101 | +if (!config.browser) config.browser = {}; |
| 102 | +config.browser.executablePath = process.env.CHROMIUM_BIN; |
| 103 | +if (config.browser.headless === undefined) config.browser.headless = true; |
| 104 | +if (config.browser.noSandbox === undefined) config.browser.noSandbox = true; |
| 105 | +
|
| 106 | +fs.mkdirSync(configDir, { recursive: true }); |
| 107 | +fs.writeFileSync(configPath, JSON.stringify(config, null, 2) + '\n'); |
| 108 | +console.log(' Written to ' + configPath); |
| 109 | +NODESCRIPT |
| 110 | + then |
| 111 | + echo -e "${GREEN}[OK]${NC} openclaw.json browser settings configured" |
| 112 | + else |
| 113 | + echo -e "${YELLOW}[WARN]${NC} Could not update openclaw.json automatically" |
| 114 | + echo " Add this to ~/.openclaw/openclaw.json manually:" |
| 115 | + echo " \"browser\": {\"executablePath\": \"$CHROMIUM_BIN\", \"headless\": true, \"noSandbox\": true}" |
| 116 | + fi |
| 117 | +else |
| 118 | + echo -e "${YELLOW}[INFO]${NC} Node.js not available — manual browser configuration needed" |
| 119 | + echo " After running 'openclaw onboard', add to ~/.openclaw/openclaw.json:" |
| 120 | + echo " \"browser\": {\"executablePath\": \"$CHROMIUM_BIN\", \"headless\": true, \"noSandbox\": true}" |
| 121 | +fi |
| 122 | + |
| 123 | +# ── Step 4: Verify ──────────────────────────── |
| 124 | + |
| 125 | +echo "" |
| 126 | +if [ -x "$CHROMIUM_BIN" ]; then |
| 127 | + CHROMIUM_VER=$("$CHROMIUM_BIN" --version 2>/dev/null || echo "unknown version") |
| 128 | + echo -e "${GREEN}[OK]${NC} $CHROMIUM_VER" |
| 129 | + echo " Binary: $CHROMIUM_BIN" |
| 130 | + echo "" |
| 131 | + echo -e "${YELLOW}[NOTE]${NC} Chromium uses ~300-500MB RAM at runtime." |
| 132 | + echo " Devices with less than 4GB RAM may experience slowdowns." |
| 133 | +else |
| 134 | + fail_warn "Chromium verification failed — binary not executable" |
| 135 | +fi |
| 136 | + |
| 137 | +# ── Step 5: Ensure image processing works ──── |
| 138 | + |
| 139 | +SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" |
| 140 | +if [ -f "$SCRIPT_DIR/build-sharp.sh" ]; then |
| 141 | + echo "" |
| 142 | + bash "$SCRIPT_DIR/build-sharp.sh" || true |
| 143 | +fi |
0 commit comments