diff --git a/README.md b/README.md index a20d114..fd4f06c 100644 --- a/README.md +++ b/README.md @@ -154,7 +154,7 @@ saveconfig ### 操作 #### 自动、远程驾驶 -首先进入工作空间 minibus +首先进入工作空间 JingMenBus 终端一: ``` bash diff --git a/can.sh b/can.sh index f144937..cab94c4 100755 --- a/can.sh +++ b/can.sh @@ -23,7 +23,7 @@ ip link set can0 type can bitrate 250000 ip link set up can0 # RTK -chmod 777 /dev/ttyUSB0 +chmod 777 /dev/ttyCH341USB0 # remote chmod 777 /dev/input/event* diff --git a/install_frp.sh b/install_frp.sh new file mode 100644 index 0000000..3487722 --- /dev/null +++ b/install_frp.sh @@ -0,0 +1,214 @@ +#!/bin/bash +set -euo pipefail + +echo "==============================" +echo " FRPC 安装程序" +echo "==============================" + +# ========================================== +# 0. 工具函数 +# ========================================== +die() { echo "❌ $*" >&2; exit 1; } +info() { echo "✔ $*"; } +step() { echo "➡ $*"; } + +need_cmd() { + command -v "$1" >/dev/null 2>&1 +} + +# 统一下载:优先 wget,其次 curl(断点续传) +download() { + local url="$1" + local out="$2" + + if need_cmd wget; then + # -c: 断点续传 + # -T: 超时 + # -t: 重试次数 + info "使用 wget 下载(支持断点续传)" + wget -c \ + --timeout=20 \ + --read-timeout=20 \ + -t 0 \ + "$url" -O "$out" + + elif need_cmd curl; then + # -C - : 断点续传 + # -f : HTTP 非 2xx 失败 + # -L : 跟随重定向 + # --retry-* : 抗抖动 + info "使用 curl 下载(断点续传)" +curl -fL -C - \ + --connect-timeout 20 \ + --retry 0 \ + --retry-delay 3 \ + --retry-all-errors \ + "$url" -o "$out" + + else + die "系统中既没有 wget 也没有 curl,无法下载:$url" + fi +} + +# ========================================== +# 1. 确保 sudo 权限 +# ========================================== +if ! need_cmd sudo; then + die "系统未安装 sudo,请用 root 执行该脚本" +fi +sudo -v + +# ========================================== +# 2. 输入设备名 +# ========================================== +read -r -p "请输入设备名称(deviceName,例如 z200_01): " deviceName +[ -n "${deviceName}" ] || die "设备名不能为空" + +# 简单合法性校验:只允许字母数字下划线中划线 +if ! [[ "$deviceName" =~ ^[A-Za-z0-9_-]+$ ]]; then + die "设备名不合法:仅允许字母/数字/_/-" +fi + +echo "" +info "设备名:$deviceName" +echo "" + +# ========================================== +# 3. 检测架构 +# ========================================== +ARCH="$(uname -m)" +info "检测到架构:$ARCH" + +case "$ARCH" in + aarch64) PKG="frp_0.65.0_linux_arm64.tar.gz" ;; + armv7l|armv7*) PKG="frp_0.65.0_linux_arm.tar.gz" ;; + x86_64|amd64) PKG="frp_0.65.0_linux_amd64.tar.gz" ;; + *) die "不支持架构:$ARCH" ;; +esac + +BASE="http://36.153.162.171:20080/frp" +URL="$BASE/$PKG" + +# ========================================== +# 4. 下载 / 解压(断电可恢复) +# ========================================== +FRP_DIR="/usr/local/frp" +FRPC_BIN="$FRP_DIR/frpc" + +CACHE_DIR="/var/cache/frp" +PKG_PATH="$CACHE_DIR/$PKG" + +if sudo test -x "$FRPC_BIN"; then + info "检测到本地已有 FRPC:$FRPC_BIN(跳过下载)" +else + step "准备缓存目录:$CACHE_DIR" + sudo mkdir -p "$CACHE_DIR" + sudo chown "$(id -u):$(id -g)" "$CACHE_DIR" + + if [ -f "$PKG_PATH" ]; then + info "检测到缓存文件,继续断点续传:$PKG_PATH" + else + info "缓存中不存在安装包,将开始下载" + fi + + step "下载:$URL" + download "$URL" "$PKG_PATH" + info "下载完成:$PKG_PATH" + + step "解压到:$FRP_DIR" + sudo mkdir -p "$FRP_DIR" + sudo tar -xzf "$PKG_PATH" -C "$FRP_DIR" --strip-components=1 + sudo chmod +x "$FRPC_BIN" || true + + sudo test -x "$FRPC_BIN" || die "解压后未找到可执行 frpc:$FRPC_BIN" + info "解压完成" + + # 可选:如果你希望节省空间,确认安装成功后再删 + # sudo rm -f "$PKG_PATH" +fi + +# ========================================== +# 5. 生成 frpc.toml +# ========================================== +PROXY_NAME="${deviceName}_stcp" +SECRET_KEY="${deviceName}_key" + +step "生成配置 /etc/frp/frpc.toml" +sudo mkdir -p /etc/frp + +sudo tee /etc/frp/frpc.toml >/dev/null </dev/null || true)" +info "服务器返回:$RESULT" + +# ========================================== +# 7. systemd 服务 +# ========================================== +step "写入 systemd 服务 /etc/systemd/system/frpc.service" + +sudo tee /etc/systemd/system/frpc.service >/dev/null <