feat: install.sh 预装 ttyd,frpc.js 去掉运行时下载

install.sh:
- 移除系统自带 ttyd 包(避免与 clawd 托管的 ttyd 端口冲突)
- 安装阶段下载 ttyd 1.7.7 到 /etc/clawd/ttyd,自动检测 arch
- 下载失败时给出提示和手动下载地址

frpc.js:
- startTtyd() 不再尝试运行时下载,binary 不存在时报错提示重跑 install.sh
- pkill 改为杀所有 ttyd 进程(pkill -x ttyd),不限路径,
  避免系统自带 ttyd 占用 7681 端口导致 clawd 的 ttyd 启动失败

Made-with: Cursor
This commit is contained in:
stswangzhiping
2026-04-04 18:16:07 +08:00
parent 46dae37079
commit 3fe5586613
2 changed files with 38 additions and 9 deletions

View File

@@ -110,6 +110,13 @@ systemctl daemon-reload
systemctl enable clawd-rfkill systemctl enable clawd-rfkill
info "WiFi rfkill 解锁服务已创建 ✓" info "WiFi rfkill 解锁服务已创建 ✓"
# ── 移除系统自带 ttyd避免与 clawd 托管的 ttyd 端口冲突)────────────────────
if command -v dpkg &>/dev/null && dpkg -l ttyd 2>/dev/null | grep -q '^ii'; then
info "移除系统 ttyd 包(避免端口冲突)..."
apt-get remove -y ttyd >/dev/null 2>&1 || true
info "系统 ttyd 已移除 ✓"
fi
# ── 安装 clawd ─────────────────────────────────────────────────────────────── # ── 安装 clawd ───────────────────────────────────────────────────────────────
INSTALL_DIR="/opt/clawd" INSTALL_DIR="/opt/clawd"
CONFIG_DIR="/etc/clawd" CONFIG_DIR="/etc/clawd"
@@ -143,6 +150,32 @@ chmod +x "$INSTALL_DIR/bin/clawd.js"
info "clawd 已安装到 /usr/local/bin/clawd ✓" info "clawd 已安装到 /usr/local/bin/clawd ✓"
# ── 下载 ttydWeb 终端)────────────────────────────────────────────────────
TTYD_BIN="$CONFIG_DIR/ttyd"
TTYD_VERSION="1.7.7"
if [ ! -f "$TTYD_BIN" ]; then
ARCH=$(uname -m)
case "$ARCH" in
aarch64|arm64) TTYD_ARCH="aarch64" ;;
x86_64) TTYD_ARCH="x86_64" ;;
armv7l|armv6l) TTYD_ARCH="armv7l" ;;
i686) TTYD_ARCH="i686" ;;
*) TTYD_ARCH="x86_64" ;;
esac
TTYD_URL="https://github.com/tsl0922/ttyd/releases/download/${TTYD_VERSION}/ttyd.${TTYD_ARCH}"
info "下载 ttyd ${TTYD_VERSION} (${TTYD_ARCH})..."
if curl -fsSL -o "$TTYD_BIN" "$TTYD_URL" && [ -s "$TTYD_BIN" ]; then
chmod 755 "$TTYD_BIN"
info "ttyd 已安装到 $TTYD_BIN"
else
rm -f "$TTYD_BIN"
warn "ttyd 下载失败(网络问题?),请手动下载并放置到 $TTYD_BIN"
warn " 下载地址: $TTYD_URL"
fi
else
info "ttyd 已存在,跳过下载 ✓"
fi
# ── 创建配置目录 + 环境变量文件 ────────────────────────────────────────────── # ── 创建配置目录 + 环境变量文件 ──────────────────────────────────────────────
mkdir -p "$CONFIG_DIR" mkdir -p "$CONFIG_DIR"

View File

@@ -101,22 +101,18 @@ async function downloadTtyd() {
} }
/** /**
* 启动 ttyd如未安装先下载)。 * 启动 ttyd由 install.sh 预装到 TTYD_BIN)。
* ttyd 绑定 127.0.0.1:7681供 frpc 代理。 * ttyd 绑定 127.0.0.1:7681供 frpc 代理。
*/ */
async function startTtyd() { async function startTtyd() {
if (!fs.existsSync(TTYD_BIN)) { if (!fs.existsSync(TTYD_BIN)) {
try { log.warn('ttyd', `未找到 ttyd${TTYD_BIN}),请重新运行 install.sh`);
await downloadTtyd();
} catch (e) {
log.warn('ttyd', '下载失败:', e.message);
return false; return false;
} }
}
// 终止旧进程 // 终止所有 ttyd 进程(包括系统自带的,避免端口冲突)
try { try {
execSync(`pkill -f "${TTYD_BIN}"`, { timeout: 3000 }); execSync('pkill -x ttyd 2>/dev/null; pkill -x ttyd.aarch64 2>/dev/null; true', { timeout: 3000, shell: true });
await new Promise(r => setTimeout(r, 500)); await new Promise(r => setTimeout(r, 500));
} catch (_) {} } catch (_) {}