#!/bin/bash # Gerrit 完全卸载并重新安装脚本 # 注意:会删除所有现有数据 set -e # 颜色输出 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' # No Color # 配置变量 GERRIT_HOME="/home/renjianbo/gerrit_install" GERRIT_VERSION="3.9.0" GERRIT_PORT="8080" GERRIT_SSH_PORT="29418" SERVER_IP="101.43.95.130" # JDK 17 路径 JAVA17_HOME="/usr/local/java/jdk-17.0.12+7" export JAVA_HOME=$JAVA17_HOME export PATH=$JAVA_HOME/bin:$PATH echo -e "${GREEN}========================================${NC}" echo -e "${GREEN}Gerrit 完全卸载并重新安装${NC}" echo -e "${GREEN}版本: ${GERRIT_VERSION}${NC}" echo -e "${RED}警告:将删除所有现有数据!${NC}" echo -e "${GREEN}========================================${NC}" echo "" # 1. 停止服务 echo -e "${YELLOW}[1/6] 停止 Gerrit 服务...${NC}" if [ -d "${GERRIT_HOME}/review_site" ]; then cd ${GERRIT_HOME}/review_site if [ -f "bin/gerrit.sh" ]; then bin/gerrit.sh stop 2>/dev/null || true sleep 2 echo -e "${GREEN}✓ 服务已停止${NC}" else echo -e "${YELLOW}⚠ gerrit.sh 不存在${NC}" fi else echo -e "${YELLOW}⚠ review_site 目录不存在${NC}" fi echo "" # 2. 杀死残留进程 echo -e "${YELLOW}[2/6] 清理残留进程...${NC}" pkill -f "gerrit.war daemon" 2>/dev/null || true sleep 1 echo -e "${GREEN}✓ 进程清理完成${NC}" echo "" # 3. 删除旧安装 echo -e "${YELLOW}[3/6] 删除旧安装...${NC}" if [ -d "${GERRIT_HOME}/review_site" ]; then rm -rf ${GERRIT_HOME}/review_site echo -e "${GREEN}✓ 已删除 review_site 目录${NC}" else echo -e "${YELLOW}⚠ review_site 目录不存在${NC}" fi echo "" # 4. 检查 Gerrit war 文件 echo -e "${YELLOW}[4/6] 检查 Gerrit 安装包...${NC}" cd ${GERRIT_HOME} if [ ! -f "gerrit-${GERRIT_VERSION}.war" ]; then echo " 下载 Gerrit ${GERRIT_VERSION}..." wget -q https://gerrit-releases.storage.googleapis.com/gerrit-${GERRIT_VERSION}.war if [ $? -ne 0 ]; then echo -e "${RED}下载失败${NC}" exit 1 fi echo -e "${GREEN}✓ 下载完成${NC}" else echo -e "${GREEN}✓ Gerrit ${GERRIT_VERSION} 已存在${NC}" fi echo "" # 5. 重新初始化 echo -e "${YELLOW}[5/6] 重新初始化 Gerrit...${NC}" cd ${GERRIT_HOME} echo " 正在初始化(这可能需要几分钟)..." $JAVA_HOME/bin/java -jar gerrit-${GERRIT_VERSION}.war init \ -d review_site \ --batch \ --no-auto-start \ -D gerrit.canonicalWebUrl=http://${SERVER_IP}:${GERRIT_PORT}/ \ --install-plugin=download-commands \ --install-plugin=replication \ --install-plugin=reviewnotes 2>&1 | tail -20 if [ $? -eq 0 ]; then echo -e "${GREEN}✓ 初始化完成${NC}" else echo -e "${YELLOW}⚠ 初始化过程中可能有警告,但可能已成功完成${NC}" fi echo "" # 6. 配置 Gerrit echo -e "${YELLOW}[6/6] 配置 Gerrit...${NC}" cd ${GERRIT_HOME} # 创建配置文件 cat > review_site/etc/gerrit.config << EOCONFIG [gerrit] basePath = git canonicalWebUrl = http://${SERVER_IP}:${GERRIT_PORT}/ serverId = $(uuidgen 2>/dev/null || echo $(date +%s)) [database] type = h2 database = db/ReviewDB [auth] type = DEVELOPMENT_BECOME_ANY_ACCOUNT gitBasicAuth = true [sshd] listenAddress = *:${GERRIT_SSH_PORT} [httpd] listenUrl = http://*:${GERRIT_PORT}/ cookieSecure = false cookieSameSite = LAX cookiePath = / [cache] directory = cache [index] type = LUCENE [receive] enableSignedPush = false EOCONFIG echo -e "${GREEN}✓ 配置完成${NC}" echo "" # 7. 配置启动脚本使用 Java 17 echo -e "${YELLOW}配置启动脚本...${NC}" cd ${GERRIT_HOME}/review_site if [ -f "bin/gerrit.sh" ]; then cp bin/gerrit.sh bin/gerrit.sh.bak sed -i "2i export JAVA_HOME=${JAVA17_HOME}\nexport PATH=\$JAVA_HOME/bin:\$PATH" bin/gerrit.sh echo -e "${GREEN}✓ 已更新 gerrit.sh 使用 Java 17${NC}" fi echo "" # 8. 启动服务 echo -e "${YELLOW}启动 Gerrit 服务...${NC}" cd ${GERRIT_HOME}/review_site bin/gerrit.sh start sleep 8 # 检查服务状态 if bin/gerrit.sh status 2>&1 | grep -q "Gerrit running\|Running"; then echo -e "${GREEN}✓ 服务启动成功${NC}" else echo -e "${YELLOW}⚠ 检查服务状态...${NC}" bin/gerrit.sh status 2>&1 | head -10 fi echo "" # 检查端口 echo -e "${YELLOW}检查端口监听...${NC}" if command -v netstat &> /dev/null; then netstat -tlnp 2>/dev/null | grep ":8080" && echo -e "${GREEN}✓ 端口 8080 正在监听${NC}" || echo -e "${YELLOW}⚠ 端口 8080 未被监听${NC}" elif command -v ss &> /dev/null; then ss -tlnp 2>/dev/null | grep ":8080" && echo -e "${GREEN}✓ 端口 8080 正在监听${NC}" || echo -e "${YELLOW}⚠ 端口 8080 未被监听${NC}" fi echo "" # 输出信息 echo -e "${GREEN}========================================${NC}" echo -e "${GREEN}重新安装完成!${NC}" echo -e "${GREEN}========================================${NC}" echo "" echo -e "${YELLOW}重要提示:${NC}" echo -e " ${GREEN}1. 第一个登录的用户将自动成为管理员${NC}" echo -e " 2. 请清除浏览器 Cookie 和缓存(重要!)" echo -e " 3. 访问: http://${SERVER_IP}:${GERRIT_PORT}" echo -e " 4. 点击 'Sign In',输入用户名(例如:admin)" echo -e " 5. 第一个登录的用户将自动成为管理员" echo -e " 6. 登录后应该能看到 'CREATE NEW' 按钮" echo "" echo -e "${YELLOW}访问信息:${NC}" echo -e " Web 界面: http://${SERVER_IP}:${GERRIT_PORT}" echo -e " SSH 端口: ${GERRIT_SSH_PORT}" echo "" echo -e "${YELLOW}常用命令:${NC}" echo -e " 查看状态: cd ${GERRIT_HOME}/review_site && bin/gerrit.sh status" echo -e " 查看日志: tail -f ${GERRIT_HOME}/review_site/logs/error_log" echo -e " 停止服务: cd ${GERRIT_HOME}/review_site && bin/gerrit.sh stop" echo -e " 重启服务: cd ${GERRIT_HOME}/review_site && bin/gerrit.sh restart" echo "" echo -e "${GREEN}========================================${NC}"