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:
33
install.sh
33
install.sh
@@ -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 ✓"
|
||||||
|
|
||||||
|
# ── 下载 ttyd(Web 终端)────────────────────────────────────────────────────
|
||||||
|
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"
|
||||||
|
|
||||||
|
|||||||
12
lib/frpc.js
12
lib/frpc.js
@@ -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 (_) {}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user