#!/bin/bash # # meshgo 安装脚本(Linux) # 功能:git pull 拉取最新代码 → 编译 → 安装到 /opt/meshgo # set -e APP_NAME="meshgo" INSTALL_DIR="/opt/${APP_NAME}" DATA_DIR="/var/lib/${APP_NAME}" REPO_DIR="$(cd "$(dirname "$0")" && pwd)" echo "=== meshgo 安装脚本 ===" echo "安装目录: ${INSTALL_DIR}" echo "仓库目录: ${REPO_DIR}" echo "" # --------------------------------------------------------------------------- # 1. git pull 拉取最新代码 # --------------------------------------------------------------------------- echo "[1/5] 拉取最新代码..." cd "${REPO_DIR}" if ! git diff-index --quiet HEAD -- 2>/dev/null; then echo "警告:本地有未提交的更改,将暂存后拉取..." git stash push -m "install.sh auto stash $(date +%Y%m%d%H%M%S)" fi git pull origin main echo "[1/5] 完成" echo "" # --------------------------------------------------------------------------- # 2. 编译 # --------------------------------------------------------------------------- echo "[2/5] 编译..." CGO_ENABLED=1 go build -ldflags="-s -w" -o meshgo . echo "[2/5] 完成: meshgo" echo "" # --------------------------------------------------------------------------- # 3. 创建用户和数据目录 # --------------------------------------------------------------------------- echo "[3/5] 创建用户和数据目录..." id -u ${APP_NAME} &>/dev/null || sudo useradd -r -s /usr/sbin/nologin -d /nonexistent ${APP_NAME} sudo mkdir -p "${INSTALL_DIR}" sudo mkdir -p "${DATA_DIR}" echo "[3/5] 完成" echo "" # --------------------------------------------------------------------------- # 4. 复制到安装目录并设置权限 # --------------------------------------------------------------------------- echo "[4/5] 复制到 ${INSTALL_DIR}..." sudo cp meshgo "${INSTALL_DIR}/" sudo chown -R ${APP_NAME}:${APP_NAME} "${INSTALL_DIR}" sudo chown -R ${APP_NAME}:${APP_NAME} "${DATA_DIR}" echo "[4/5] 完成" echo "" # --------------------------------------------------------------------------- # 5. 安装 systemd 服务 # --------------------------------------------------------------------------- echo "[5/5] 安装 systemd 服务..." sudo tee /etc/systemd/system/${APP_NAME}.service > /dev/null <