Spaces:
Running
Running
Improve headless Chromium reliability, add AUTO_DOCTOR toggle, and DBus handling
Browse files- Dockerfile +2 -0
- start.sh +51 -6
Dockerfile
CHANGED
|
@@ -24,6 +24,8 @@ RUN apt-get update && apt-get install -y \
|
|
| 24 |
ca-certificates \
|
| 25 |
jq \
|
| 26 |
curl \
|
|
|
|
|
|
|
| 27 |
python3 \
|
| 28 |
python3-pip \
|
| 29 |
chromium \
|
|
|
|
| 24 |
ca-certificates \
|
| 25 |
jq \
|
| 26 |
curl \
|
| 27 |
+
dbus \
|
| 28 |
+
dbus-x11 \
|
| 29 |
python3 \
|
| 30 |
python3-pip \
|
| 31 |
chromium \
|
start.sh
CHANGED
|
@@ -99,6 +99,9 @@ DEVDATA_ENABLED=true
|
|
| 99 |
if ! hc_is_true "$DEVDATA_NORMALIZED"; then
|
| 100 |
DEVDATA_ENABLED=false
|
| 101 |
fi
|
|
|
|
|
|
|
|
|
|
| 102 |
if [ -n "${SPACE_HOST:-}" ]; then
|
| 103 |
OPENCLAW_CONSOLE_LOG_LEVEL="${OPENCLAW_CONSOLE_LOG_LEVEL:-warn}"
|
| 104 |
OPENCLAW_FILE_LOG_LEVEL="${OPENCLAW_FILE_LOG_LEVEL:-info}"
|
|
@@ -508,10 +511,19 @@ inject_provider_models_from_env "github-copilot" "GITHUB_COPILOT_MODELS" "COPILO
|
|
| 508 |
BROWSER_EXECUTABLE_PATH=""
|
| 509 |
for candidate in /usr/bin/chromium /usr/bin/chromium-browser /snap/bin/chromium; do
|
| 510 |
if [ -x "$candidate" ]; then
|
| 511 |
-
|
| 512 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 513 |
fi
|
| 514 |
done
|
|
|
|
|
|
|
|
|
|
| 515 |
|
| 516 |
BROWSER_SHOULD_ENABLE=false
|
| 517 |
if [ "$BROWSER_PLUGIN_MODE" = "enabled" ] && [ -n "$BROWSER_EXECUTABLE_PATH" ] && [ -x "$BROWSER_EXECUTABLE_PATH" ]; then
|
|
@@ -569,7 +581,20 @@ if [ "$BROWSER_SHOULD_ENABLE" = "true" ]; then
|
|
| 569 |
"defaultProfile": "openclaw",
|
| 570 |
"headless": true,
|
| 571 |
"noSandbox": true,
|
| 572 |
-
"executablePath": $execPath
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 573 |
}
|
| 574 |
| .agents.defaults.sandbox.browser.allowHostControl = true' <<<"$CONFIG_JSON")
|
| 575 |
fi
|
|
@@ -821,16 +846,16 @@ warmup_browser() {
|
|
| 821 |
[ "$BROWSER_SHOULD_ENABLE" = "true" ] || return 0
|
| 822 |
|
| 823 |
(
|
| 824 |
-
sleep
|
| 825 |
|
| 826 |
local attempt
|
| 827 |
-
for attempt in 1 2 3 4 5; do
|
| 828 |
if openclaw browser --browser-profile openclaw start >/dev/null 2>&1; then
|
| 829 |
openclaw browser --browser-profile openclaw open about:blank >/dev/null 2>&1 || true
|
| 830 |
echo "Managed browser ready."
|
| 831 |
return 0
|
| 832 |
fi
|
| 833 |
-
sleep
|
| 834 |
done
|
| 835 |
|
| 836 |
echo "Warning: managed browser warm-up did not complete; first browser action may need a retry."
|
|
@@ -1586,6 +1611,16 @@ while true; do
|
|
| 1586 |
if [ "${AUTO_DOCTOR:-false}" = "true" ]; then
|
| 1587 |
openclaw doctor --fix || true
|
| 1588 |
fi
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1589 |
echo "Launching OpenClaw gateway on port 7860..."
|
| 1590 |
|
| 1591 |
GATEWAY_ARGS=(gateway run --port 7860 --bind lan)
|
|
@@ -1635,6 +1670,16 @@ while true; do
|
|
| 1635 |
# 11. Start WhatsApp Guardian after the gateway is accepting connections
|
| 1636 |
start_guardian_once
|
| 1637 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1638 |
# 11.5 Warm up the managed browser so first browser actions have a live tab
|
| 1639 |
warmup_browser
|
| 1640 |
|
|
|
|
| 99 |
if ! hc_is_true "$DEVDATA_NORMALIZED"; then
|
| 100 |
DEVDATA_ENABLED=false
|
| 101 |
fi
|
| 102 |
+
# On HF Spaces, browser is disabled by default (no display server).
|
| 103 |
+
# To enable: set BROWSER_PLUGIN_MODE=enabled as an HF Space secret.
|
| 104 |
+
# WARNING: requires at least CPU Upgrade tier (2 vCPU / 16GB RAM).
|
| 105 |
if [ -n "${SPACE_HOST:-}" ]; then
|
| 106 |
OPENCLAW_CONSOLE_LOG_LEVEL="${OPENCLAW_CONSOLE_LOG_LEVEL:-warn}"
|
| 107 |
OPENCLAW_FILE_LOG_LEVEL="${OPENCLAW_FILE_LOG_LEVEL:-info}"
|
|
|
|
| 511 |
BROWSER_EXECUTABLE_PATH=""
|
| 512 |
for candidate in /usr/bin/chromium /usr/bin/chromium-browser /snap/bin/chromium; do
|
| 513 |
if [ -x "$candidate" ]; then
|
| 514 |
+
# Reject snap stubs β they silently fail in Docker
|
| 515 |
+
if file "$candidate" 2>/dev/null | grep -q "ELF"; then
|
| 516 |
+
BROWSER_EXECUTABLE_PATH="$candidate"
|
| 517 |
+
break
|
| 518 |
+
elif head -1 "$candidate" 2>/dev/null | grep -qv "snap\|exec"; then
|
| 519 |
+
BROWSER_EXECUTABLE_PATH="$candidate"
|
| 520 |
+
break
|
| 521 |
+
fi
|
| 522 |
fi
|
| 523 |
done
|
| 524 |
+
if [ -z "$BROWSER_EXECUTABLE_PATH" ]; then
|
| 525 |
+
echo "Warning: No real Chromium binary found. Browser plugin will be disabled."
|
| 526 |
+
fi
|
| 527 |
|
| 528 |
BROWSER_SHOULD_ENABLE=false
|
| 529 |
if [ "$BROWSER_PLUGIN_MODE" = "enabled" ] && [ -n "$BROWSER_EXECUTABLE_PATH" ] && [ -x "$BROWSER_EXECUTABLE_PATH" ]; then
|
|
|
|
| 581 |
"defaultProfile": "openclaw",
|
| 582 |
"headless": true,
|
| 583 |
"noSandbox": true,
|
| 584 |
+
"executablePath": $execPath,
|
| 585 |
+
"localLaunchTimeoutMs": 45000,
|
| 586 |
+
"localCdpReadyTimeoutMs": 30000,
|
| 587 |
+
"extraArgs": [
|
| 588 |
+
"--disable-dev-shm-usage",
|
| 589 |
+
"--disable-gpu",
|
| 590 |
+
"--disable-setuid-sandbox",
|
| 591 |
+
"--no-first-run",
|
| 592 |
+
"--disable-background-networking",
|
| 593 |
+
"--disable-sync",
|
| 594 |
+
"--disable-translate",
|
| 595 |
+
"--disable-notifications",
|
| 596 |
+
"--disable-speech-api"
|
| 597 |
+
]
|
| 598 |
}
|
| 599 |
| .agents.defaults.sandbox.browser.allowHostControl = true' <<<"$CONFIG_JSON")
|
| 600 |
fi
|
|
|
|
| 846 |
[ "$BROWSER_SHOULD_ENABLE" = "true" ] || return 0
|
| 847 |
|
| 848 |
(
|
| 849 |
+
sleep 8
|
| 850 |
|
| 851 |
local attempt
|
| 852 |
+
for attempt in 1 2 3 4 5 6; do
|
| 853 |
if openclaw browser --browser-profile openclaw start >/dev/null 2>&1; then
|
| 854 |
openclaw browser --browser-profile openclaw open about:blank >/dev/null 2>&1 || true
|
| 855 |
echo "Managed browser ready."
|
| 856 |
return 0
|
| 857 |
fi
|
| 858 |
+
sleep 5
|
| 859 |
done
|
| 860 |
|
| 861 |
echo "Warning: managed browser warm-up did not complete; first browser action may need a retry."
|
|
|
|
| 1611 |
if [ "${AUTO_DOCTOR:-false}" = "true" ]; then
|
| 1612 |
openclaw doctor --fix || true
|
| 1613 |
fi
|
| 1614 |
+
# ββ Silence D-Bus errors for headless Chromium ββ
|
| 1615 |
+
if [ -z "${DBUS_SESSION_BUS_ADDRESS:-}" ]; then
|
| 1616 |
+
if command -v dbus-launch >/dev/null 2>&1; then
|
| 1617 |
+
eval "$(dbus-launch --sh-syntax 2>/dev/null)" || true
|
| 1618 |
+
export DBUS_SESSION_BUS_ADDRESS="${DBUS_SESSION_BUS_ADDRESS:-disabled:}"
|
| 1619 |
+
else
|
| 1620 |
+
export DBUS_SESSION_BUS_ADDRESS="disabled:"
|
| 1621 |
+
fi
|
| 1622 |
+
fi
|
| 1623 |
+
|
| 1624 |
echo "Launching OpenClaw gateway on port 7860..."
|
| 1625 |
|
| 1626 |
GATEWAY_ARGS=(gateway run --port 7860 --bind lan)
|
|
|
|
| 1670 |
# 11. Start WhatsApp Guardian after the gateway is accepting connections
|
| 1671 |
start_guardian_once
|
| 1672 |
|
| 1673 |
+
# ββ Silence D-Bus errors for headless Chromium ββ
|
| 1674 |
+
if [ -z "${DBUS_SESSION_BUS_ADDRESS:-}" ]; then
|
| 1675 |
+
if command -v dbus-launch >/dev/null 2>&1; then
|
| 1676 |
+
eval "$(dbus-launch --sh-syntax 2>/dev/null)" || true
|
| 1677 |
+
export DBUS_SESSION_BUS_ADDRESS="${DBUS_SESSION_BUS_ADDRESS:-disabled:}"
|
| 1678 |
+
else
|
| 1679 |
+
export DBUS_SESSION_BUS_ADDRESS="disabled:"
|
| 1680 |
+
fi
|
| 1681 |
+
fi
|
| 1682 |
+
|
| 1683 |
# 11.5 Warm up the managed browser so first browser actions have a live tab
|
| 1684 |
warmup_browser
|
| 1685 |
|