diff --git a/install.sh b/install.sh index 57b9369..3239d1a 100644 --- a/install.sh +++ b/install.sh @@ -1,7 +1,7 @@ -#!/usr/bin/env bash -# clawd 一键安装脚本 -# 用法:curl -fsSL https://git.cutos.ai/claw-daemon/clawd/raw/branch/main/install.sh | sudo bash -# 需要 root 权限,需要已安装 Node.js >= 18 +#!/usr/bin/env bash +# clawd ?????? +# ???curl -fsSL https://git.cutos.ai/claw-daemon/clawd/raw/branch/main/install.sh | sudo bash +# ?? root ???????? Node.js >= 18 set -e @@ -11,26 +11,26 @@ info() { echo -e "${GREEN}[clawd]${NC} $*"; } warn() { echo -e "${YELLOW}[clawd]${NC} $*"; } error() { echo -e "${RED}[clawd]${NC} $*"; exit 1; } -# -- 检查 root +# ?? ?? root ???????????????????????????????????????????????????????????????? if [ "$EUID" -ne 0 ]; then - error "请以 root 身份运行(sudo bash install.sh)" + error "?? root ?????sudo bash install.sh?" fi -# -- 检查 Node.js +# ?? ?? Node.js ????????????????????????????????????????????????????????????? if ! command -v node &>/dev/null; then - error "未找到 Node.js,请先安装 Node.js >= 18" + error "??? Node.js????? Node.js >= 18" fi NODE_VER=$(node -e "process.stdout.write(process.versions.node)") MAJOR=$(echo "$NODE_VER" | cut -d. -f1) if [ "$MAJOR" -lt 18 ]; then - error "Node.js 版本过低(当前 $NODE_VER),需要 >= 18" + error "Node.js ??????? $NODE_VER???? >= 18" fi -info "Node.js $NODE_VER OK" +info "Node.js $NODE_VER ?" -# -- 检查/安装 dnsmasq(WiFi 配网需要) +# ?? ??/?? dnsmasq?WiFi ??????????????????????????????????????????? if ! command -v dnsmasq &>/dev/null; then - info "安装 dnsmasq(WiFi 配网所需)..." + info "?? dnsmasq?WiFi ?????..." if command -v apt-get &>/dev/null; then apt-get install -y -qq dnsmasq >/dev/null 2>&1 elif command -v yum &>/dev/null; then @@ -38,25 +38,25 @@ if ! command -v dnsmasq &>/dev/null; then elif command -v apk &>/dev/null; then apk add --quiet dnsmasq >/dev/null 2>&1 else - warn "无法自动安装 dnsmasq,WiFi 配网功能可能不可用" + warn "?????? dnsmasq?WiFi ?????????" fi - # 禁止 dnsmasq 系统服务自启(clawd 自己管理) + # ?? dnsmasq ???????clawd ????? systemctl disable dnsmasq 2>/dev/null || true systemctl stop dnsmasq 2>/dev/null || true fi if command -v dnsmasq &>/dev/null; then - info "dnsmasq OK" + info "dnsmasq ?" fi -# -- 启用 NetworkManager(WiFi 配网需要) +# ?? ?? NetworkManager?WiFi ??????????????????????????????????????????? if command -v nmcli &>/dev/null; then if ! systemctl is-active --quiet NetworkManager 2>/dev/null; then - info "启用 NetworkManager..." + info "?? NetworkManager..." systemctl enable --now NetworkManager 2>/dev/null || true fi - info "NetworkManager OK" + info "NetworkManager ?" - # 预写 DNS 劫持配置(运行时 /etc 可能为只读) + # ?? DNS ???????? /etc ?????? NM_DNSMASQ_DIR="/etc/NetworkManager/dnsmasq-shared.d" mkdir -p "$NM_DNSMASQ_DIR" cat > "$NM_DNSMASQ_DIR/clawd-captive.conf" << 'DNSCONF' @@ -64,20 +64,20 @@ if command -v nmcli &>/dev/null; then # All DNS queries resolve to gateway to trigger captive portal address=/#/10.42.0.1 DNSCONF - info "DNS 劫持配置已写入 $NM_DNSMASQ_DIR" + info "DNS ??????? $NM_DNSMASQ_DIR ?" fi -# -- WiFi rfkill 解锁(部分设备默认禁用 WiFi) +# ?? WiFi rfkill ??????????? WiFi????????????????????????????????? for rf in /sys/class/rfkill/rfkill*; do if [ -f "$rf/type" ] && [ "$(cat "$rf/type")" = "wlan" ]; then if [ "$(cat "$rf/soft")" = "1" ]; then - info "解锁 WiFi ($(basename "$rf"))..." + info "?? WiFi ($(basename "$rf"))..." echo 0 > "$rf/soft" fi fi done -# 持久化:独立脚本 + systemd 服务,确保开机自动解锁 WiFi +# ???????? + systemd ??????????? WiFi RFKILL_SCRIPT="/usr/local/bin/clawd-unblock-wifi.sh" cat > "$RFKILL_SCRIPT" << 'SCRIPT' #!/bin/sh @@ -108,51 +108,58 @@ WantedBy=multi-user.target UNIT systemctl daemon-reload systemctl enable clawd-rfkill -info "WiFi rfkill 解锁服务已创建" +info "WiFi rfkill ??????? ?" -# -- 安装 ttyd(Web 终端) -info "安装 ttyd..." +# ?? ?? ttyd?Web ??????????????????????????????????????????????????????? +info "?? ttyd..." if apt-get install -y ttyd >/dev/null 2>&1; then - info "ttyd 已安装" + info "ttyd ??? ?" else - warn "ttyd 安装失败,Web 终端功能将不可用" + warn "ttyd ?????Web ????????" fi -# -- 安装 clawd +# ?? ?? clawd ??????????????????????????????????????????????????????????????? INSTALL_DIR="/opt/clawd" CONFIG_DIR="/etc/clawd" ENV_FILE="$CONFIG_DIR/env" -info "安装到 $INSTALL_DIR ..." +info "??? $INSTALL_DIR ..." mkdir -p "$INSTALL_DIR" cd "$INSTALL_DIR" -# 下载源码(若目录已有 package.json,视为离线/已解压部署,跳过 git/tarball) -if [ -f "package.json" ]; then - info "检测到已有源码,跳过 git/tarball 下载" -elif command -v git &>/dev/null; then - if [ -d ".git" ]; then - git pull --quiet - else - git clone --depth=1 https://git.cutos.ai/claw-daemon/clawd.git . +# ?????????? package.json?????/???????? git/tarball? +CUTOS_REPO="https://git.cutos.ai/claw-daemon/clawd.git" +if command -v git &>/dev/null && [ -d ".git" ]; then + CURRENT_REMOTE=$(git remote get-url origin 2>/dev/null || echo "") + if echo "$CURRENT_REMOTE" | grep -q "github.com"; then + info "?? git remote ? git.cutos.ai ..." + git remote set-url origin "$CUTOS_REPO" fi + info "??????..." + git fetch origin + git reset --hard origin/main + git clean -fd +elif [ -f "package.json" ]; then + info "????????? git??????" +elif command -v git &>/dev/null; then + git clone --depth=1 "$CUTOS_REPO" . else TARBALL_URL="https://git.cutos.ai/claw-daemon/clawd/archive/main.tar.gz" curl -fsSL "$TARBALL_URL" | tar -xz --strip-components=1 fi -# 安装依赖 -info "安装 npm 依赖..." +# ???? +info "?? npm ??..." npm install --omit=dev --silent -# 创建可执行链接 +# ??????? ln -sf "$INSTALL_DIR/bin/clawd.js" /usr/local/bin/clawd chmod +x "$INSTALL_DIR/bin/clawd.js" -info "clawd 已安装到 /usr/local/bin/clawd" +info "clawd ???? /usr/local/bin/clawd ?" -# -- 创建配置目录 + 环境变量文件 +# ?? ?????? + ?????? ?????????????????????????????????????????????? mkdir -p "$CONFIG_DIR" if [ ! -f "$CONFIG_DIR/config.json" ]; then @@ -164,36 +171,36 @@ if [ ! -f "$CONFIG_DIR/config.json" ]; then "heartbeat_interval": 30 } EOF - info "配置文件已创建:$CONFIG_DIR/config.json" + info "????????$CONFIG_DIR/config.json ?" fi if [ ! -f "$ENV_FILE" ]; then cat > "$ENV_FILE" < "$JOURNAL_CONF" </dev/null || true - info "journald 日志限制已配置" + info "journald ??????? ?" fi -# -- 启用并启动 +# ?? ????? ?????????????????????????????????????????????????????????????? systemctl daemon-reload systemctl enable clawd systemctl restart clawd sleep 2 if systemctl is-active --quiet clawd; then - info "clawd 服务运行中" + info "clawd ????? ?" echo "" - echo " 查看日志: journalctl -u clawd -f" - echo " 查看状态: systemctl status clawd" - echo " 停止服务: systemctl stop clawd" - echo " 配置文件: $CONFIG_DIR/config.json" - echo " 环境变量: $ENV_FILE" - echo " 文件日志: $CONFIG_DIR/logs/clawd.log" + echo " ????? journalctl -u clawd -f" + echo " ????? systemctl status clawd" + echo " ????? systemctl stop clawd" + echo " ????? $CONFIG_DIR/config.json" + echo " ????? $ENV_FILE" + echo " ????? $CONFIG_DIR/logs/clawd.log" echo "" else - warn "服务启动失败,请检查日志:" + warn "?????????????" echo " journalctl -u clawd -n 50 --no-pager" -fi \ No newline at end of file +fi diff --git a/package.json b/package.json index 7eb42cd..8a2b1fe 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "clawd", - "version": "1.2.1", + "version": "1.2.2", "description": "Claw Box daemon - connects local Linux box to claw.cutos.ai via WebSocket", "main": "lib/client.js", "bin": { diff --git a/tools/update-clawd.sh b/tools/update-clawd.sh index 1377316..8119e27 100644 --- a/tools/update-clawd.sh +++ b/tools/update-clawd.sh @@ -23,6 +23,13 @@ fi cd "$REPO_DIR" +# 如果 remote 仍指向 GitHub,迁移到 git.cutos.ai +CURRENT_REMOTE=$(git remote get-url "$REMOTE" 2>/dev/null || echo "") +if echo "$CURRENT_REMOTE" | grep -q "github.com"; then + echo "==> Migrating remote from GitHub to git.cutos.ai ..." + git remote set-url "$REMOTE" https://git.cutos.ai/claw-daemon/clawd.git +fi + echo "==> Fetching latest from $REMOTE/$BRANCH ..." git fetch "$REMOTE"