当前位置: 首页 > news >正文

【ubuntu20】--- 搭建 gerrit 最新最详细

在这里插入图片描述

  • 在编程的艺术世界里,代码和灵感需要寻找到最佳的交融点,才能打造出令人为之惊叹的作品。
  • 而在这座秋知叶i博客的殿堂里,我们将共同追寻这种完美结合,为未来的世界留下属于我们的独特印记。

【ubuntu20】--- 搭建 gerrit 最新最详细

  • 一、环境准备
  • 二、安装Gerrit
    • 1. **下载Gerrit**
    • 2. **安装Gerrit**
  • 三、创建账号
  • 四、配置反向代理(以Nginx为例)
  • 五、启动Gerrit服务
  • 五、修改权限
  • 六、设置用户权限
  • 七、验证安装
  • 八、报错
    • 1、报错log
    • 2、解决方法


一、环境准备

  1. 更新系统

    • 打开终端,执行以下命令来更新Ubuntu系统及其软件包列表:
      sudo apt-get update
      sudo apt-get upgrade
      
  2. 安装Java环境

    • Gerrit需要Java环境来运行。可以通过添加PPA源并安装OpenJDK 8(或更高版本,但确保与Gerrit兼容)来实现:
      sudo add-apt-repository ppa:openjdk-r/ppa
      sudo apt-get update
      sudo apt-get install openjdk-8-jdk
      
    • 验证Java安装:
      java -version
      
  3. 安装Git

    • Gerrit建立在Git之上,因此需要安装Git:
      sudo apt-get install git
      
    • 验证Git安装:
      git --version
      
  4. 创建Gerrit用户

    • 为了安全和管理方便,建议为Gerrit创建一个专用用户:
      sudo adduser gerrit
      sudo usermod -a -G sudo gerrit  # 将gerrit用户添加到sudo组
      

二、安装Gerrit

  • 登录到gerrit用户:

1. 下载Gerrit

  • 访问Gerrit官网,下载最新版本的Gerrit安装包(例如gerrit-3.10.0.war)。在这里插入图片描述
  • 也可以使用wget命令从命令行下载:
wget https://gerrit-releases.storage.googleapis.com/gerrit-3.10.0.war
  • 将下载的文件移动到Gerrit用户的主目录下(或您选择的任何目录)。

2. 安装Gerrit

  • 在Gerrit用户的主目录下,执行以下命令来初始化Gerrit安装:
  • 创建安装文件夹
mkdir gerrit_file
  • 初始化Gerrit安装
  • 全部都默认回车下去
java -jar gerrit-3.10.0.war init -d ~/gerrit_file
  • 安装完成
Jul 15, 2024 5:34:27 PM org.apache.lucene.store.MMapDirectory lookupProvider
WARNING: You are running with Java 22 or later. To make full use of MMapDirectory, please update Apache Lucene.============================================================================
Welcome to the Gerrit communityFind more information on the homepage: https://www.gerritcodereview.com
Discuss Gerrit on the mailing list: https://groups.google.com/g/repo-discuss
============================================================================
Initialized /home/gerrit/gerrit_file
Init complete, reindexing accounts,changes,groups,projects with: reindex --site-path /home/gerrit/gerrit_file --threads 1 --index accounts --index changes --index groups --index projectsReindexed 0 documents in accounts index in 0.0s (0.0/s)
Index accounts in version 14 is ready
Reindexing groups:      100% (2/2)
Reindexed 2 documents in groups index in 0.3s (7.6/s)
Index groups in version 11 is ready
Reindexing changes: Slicing projects: 100% (2/2), done
Reindexed 0 documents in changes index in 0.0s (0.0/s)
Index changes in version 86 is ready
Reindexing projects:    100% (2/2)
Reindexed 2 documents in projects index in 0.1s (18.2/s)
Index projects in version 9 is ready
Executing /home/gerrit/gerrit_file/bin/gerrit.sh start
Starting Gerrit Code Review: WARNING: Could not adjust Gerrit's process for the kernel's out-of-memory killer.This may be caused by /home/gerrit/gerrit_file/bin/gerrit.sh not being run as root.Consider changing the OOM score adjustment manually for Gerrit's PID=9572 with e.g.:echo '-1000' | sudo tee /proc/9572/oom_score_adj
OK
Waiting for server on qiuzhiyei:8080 ... OK
Please open the following URL in the browser: http://qiuzhiyei:8080/#/admin/projects/gerrit@qiuzhiyei:~$
  • 这里-d ~/gerrit_file指定了Gerrit的安装目录。您可以根据需要更改这个目录。
  • 安装过程中,会有一系列交互式配置选项。大多数选项可以使用默认值(通过按回车键选择),但请注意以下几点:
  • 认证方式:选择HTTP,因为Gerrit需要通过反向代理(如Nginx或Apache)来访问。
  • 插件安装:根据需要安装额外的插件,如download-commands插件可以生成项目的克隆地址。

三、创建账号

  • 将密钥文件存放在 gerrit_file/gerrit.password
  • 第一个默认是管理员账号
htpasswd -c gerrit_file/gerrit.password admin

四、配置反向代理(以Nginx为例)

  1. 安装Nginx
  • 切换回root用户或使用sudo命令来安装Nginx:
sudo apt-get install nginx
  1. 配置Nginx反向代理
  • 编辑Nginx的配置文件(通常位于/etc/nginx/sites-available/目录下),
vim /etc/nginx/sites-available/default
  • 添加一个server块来配置反向代理:
server {listen 80;  # 监听标准的 HTTP 端口server_name 172.28.17.230;  # 使用局域网内的 IP 地址auth_basic "Welcomme to Gerrit Code Review Site!";auth_basic_user_file /home/gerrit/gerrit_file/gerrit.password;location / {proxy_pass http://localhost:8080;  # Gerrit 服务的地址和端口proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;}
}
  • 注意:确保Nginx配置文件的语法正确,并启用该server块(可能需要创建一个到sites-enabled目录的符号链接)。

  • 修改 nginx 默认的运行用户

vim /etc/nginx/nginx.conf
  • 搜索 user 将其修改为 gerrit
user gerrit;
  1. 重启Nginx
  • 应用配置更改并重启Nginx服务:
sudo systemctl restart nginx

五、启动Gerrit服务

  • 切换到Gerrit用户,并启动Gerrit服务:
cd ~/gerrit_file/bin
./gerrit.sh start
  • 修改了配置要重启
./gerrit.sh restart

五、修改权限

  • u: 后面的是之前创建用来运行 gerrit的账户 gerrit
  • 一般来说会专门创建一个 nginx 用户 来运行 Nginx
setfacl -R -m u:gerrit:rx /home/gerrit/gerrit_file 

六、设置用户权限

  • 使用Gerrit的Web界面或通过SSH访问Gerrit来设置用户权限和访问控制列表(ACLs)。

七、验证安装

  • 在Web浏览器中访问http://172.28.17.230/,您应该能够看到Gerrit的登录页面。
http://172.28.17.230/
  • 弹出之前的账号密码
    ]在这里插入图片描述

完成上述步骤后,您应该能够在Ubuntu 20.04系统上成功安装并配置Gerrit来管理您的代码。请确保按照Gerrit的官方文档和最佳实践来操作,以确保系统的安全和稳定。

八、报错

1、报错log

gerrit@qiuzhiyei:~$ java -jar gerrit-3.10.0.war init -d ~/gerrit_file
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.UnsupportedClassVersionError: Main has been compiled by a more recent version of the Java Runtime (class file version 61.0), this version of the Java Runtime only recognizes class file versions up to 52.0at java.lang.ClassLoader.defineClass1(Native Method)at java.lang.ClassLoader.defineClass(ClassLoader.java:756)at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)at java.net.URLClassLoader.defineClass(URLClassLoader.java:473)at java.net.URLClassLoader.access$100(URLClassLoader.java:74)at java.net.URLClassLoader$1.run(URLClassLoader.java:369)at java.net.URLClassLoader$1.run(URLClassLoader.java:363)at java.security.AccessController.doPrivileged(Native Method)at java.net.URLClassLoader.findClass(URLClassLoader.java:362)at java.lang.ClassLoader.loadClass(ClassLoader.java:418)at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)at java.lang.ClassLoader.loadClass(ClassLoader.java:351)at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:621)

2、解决方法

  • 遇到的错误提示表明,您尝试运行的Gerrit版本是用比您当前安装的Java版本更高的Java编译器编译的。错误中提到的“class file version 61.0”对应于Java 17,而您的系统可能只安装了Java 8。

为了解决这个问题,需要升级Java环境

  1. 升级Java环境
  • 在Ubuntu 20.04上下载并安装Oracle JDK 22,可以直接使用wget命令从Oracle的官方网站下载JDK的压缩包。以下是一个示例命令,用于下载x64架构的JDK 22压缩包:
wget https://download.oracle.com/java/22/latest/jdk-22_linux-x64_bin.tar.gz

下载完成后,您可以使用以下命令解压JDK压缩包:

tar -zxvf jdk-22_linux-x64_bin.tar.gz

解压后,您可以将解压后的JDK目录移动到/usr/local/或其他您选择的目录。例如:

sudo mv jdk-22 /usr/local/java/jdk-22

接下来,您需要设置JAVA_HOME环境变量,以便系统能够识别JDK的位置。您可以通过编辑/etc/profile文件或用户的shell配置文件(如~/.bashrc)来设置环境变量。例如,在 .bashrc 文件中添加以下内容:

export JAVA_HOME=/usr/local/java/jdk-22
export PATH=$PATH:$JAVA_HOME/bin

保存文件后,执行以下命令使更改生效:

source ~/.bashrc

最后,您可以使用以下命令验证JDK是否已成功安装:

java -version

如果一切设置正确,您应该能够看到JDK 22的版本信息。

  1. 验证Java安装:
java -version
gerrit@qiuzhiyei:~$ java -version
java version "22.0.1" 2024-04-16
Java(TM) SE Runtime Environment (build 22.0.1+8-16)
Java HotSpot(TM) 64-Bit Server VM (build 22.0.1+8-16, mixed mode, sharing)
gerrit@qiuzhiyei:~$
  1. 确保使用新安装的Java版本来启动Gerrit:
  • 可以更新~/gerrit_file/bin/gerrit.sh脚本中的JAVA_HOME变量,以指向新安装的Java版本。
  1. 重新启动Gerrit服务:
cd ~/gerrit_file/bin
./gerrit.sh restart
  • 验证Gerrit是否正在运行:
  • 检查Gerrit日志以确认没有错误。
  • 在Web浏览器中访问Gerrit的Web界面。

相关文章:

【ubuntu20】--- 搭建 gerrit 最新最详细

在编程的艺术世界里,代码和灵感需要寻找到最佳的交融点,才能打造出令人为之惊叹的作品。而在这座秋知叶i博客的殿堂里,我们将共同追寻这种完美结合,为未来的世界留下属于我们的独特印记。 【ubuntu20】--- 搭建 gerrit 最新最详细…...

HCIA-DHCP

1、定义:DHCP即动态主机配置协议,通过C/S模型架构,无需主机配置IP地址,自动分配网络配置参数的网络协议。 2、作用 对比项目无 DHCP有 DHCP配置难度配置多,容易出错自动为客户端分配 IP 地址及其他网络配置参数&…...

wxWidgets GUI 跨平台 入门学习笔记

准备 参考 https://wiki.wxwidgets.org/Microsoft_Visual_C_NuGethttps://wiki.wxwidgets.org/Tools#Rapid_Application_Development_.2F_GUI_Buildershttps://docs.wxwidgets.org/3.2/https://docs.wxwidgets.org/latest/overview_helloworld.htmlhttps://wizardforcel.gitb…...

OmniParser技术分析(一)

1.引言 通过上篇文章介绍 OmniParser:下一代纯视觉UI自动化测试先驱相信大家已经对OmniParser有初步了解,接下来详细介绍下OmniParser使用了哪些技术模型实现了对UI纯视觉的检测和理解。 2.整体方案 通过阅读OmniParser提供的运行Demo代码知道,其实整…...

什么是hive

Apache Hive 是一个基于 Hadoop 生态系统构建的数据仓库工具,主要用于处理和分析大规模的结构化数据。它允许用户通过类似 SQL 的查询语言(HiveQL)进行数据操作,而无需直接编写复杂的 MapReduce 程序。以下是 Hive 的核心特点和应…...

PyTorch系列教程:Tensor.view() 方法详解

这篇简明扼要的文章是关于PyTorch中的tensor.view()方法的介绍与应用,与reshape()方法的区别,同时给出示例进行详细解释。 Tensor基础 Tensor(张量)的视图是一个新的Tensor,它与原始Tensor共享相同的底层数据,但具有不同的形状或…...

从零开始了解Manus(文末附教程)

大家好,我是樱木。 《从零开始了解Manus》,这个教程对于想了解 Manus的同学,全部都在里面了! Manus 是一款能像真人一样帮你干活的AI助手,运行在云端,不占电脑内存。 它可以自动完成复杂任务&#xff0c…...

不同开发语言之for循环的用法、区别总结

一、Objective-C &#xff08;1&#xff09;标准的c风格 for (int i 0; i < 5; i) {NSLog("i %d", i); } &#xff08;2&#xff09;for in循环。 NSArray *array ["apple", "banana", "orange"]; for (NSString *fruit in …...

CentOS 7 aarch64上制作kernel rpm二进制包 —— 筑梦之路

环境说明 centos 7 aarch64 gcc 8.3.1 kernel 5.4.290 准备编译制作 # 安装必要的工具和包yum install rpm-devel rpmdevtools yum groupinstall "Development Tools"yum install ncurses-devel bc elfutils-libelf-devel openssl-devel # 安装gcc 8.3.1# 修改…...

Cursor 使用经验,一个需求开发全流程

软件开发中 Cursor 的使用经验成为关注焦点&#xff0c;尤其是处理大型数据集的需求。用户提到“Cursor 使用经验&#xff0c;一个需求开发全流程”&#xff0c;但“Cursor”可能指数据库游标&#xff0c;涉及逐行处理数据。本文将详细探讨开发一个需求的完整流程&#xff0c;包…...

2025-03-08 学习记录--C/C++-PTA 习题9-2 计算两个复数之积

合抱之木&#xff0c;生于毫末&#xff1b;九层之台&#xff0c;起于累土&#xff1b;千里之行&#xff0c;始于足下。&#x1f4aa;&#x1f3fb; 一、题目描述 ⭐️ 二、代码&#xff08;C语言&#xff09;⭐️ #include <stdio.h>struct complex{int real;int imag; …...

DeepSeek-R1本地化部署(Mac)

一、下载 Ollama 本地化部署需要用到 Ollama&#xff0c;它能支持很多大模型。官方网站&#xff1a;https://ollama.com/ 点击 Download 即可&#xff0c;支持macOS,Linux 和 Windows&#xff1b;我下载的是 mac 版本&#xff0c;要求macOS 11 Big Sur or later&#xff0c;Ol…...

【时时三省】(C语言基础)赋值语句

山不在高,有仙则名。水不在深,有龙则灵。 ----CSDN 时时三省 赋值语句 在C程序中,最常用的语句是:赋值语句和输入输出语句。其中最基本的是赋值语句程序中的计算功能大部分是由赋值语句实现的,几乎每一个有实用价值的程序都包括赋值语句。有的程序中的大部分语句都是赋值…...

如何提取图片文字

如何分析图片风格&#xff1a; 分析下图片是什么风格&#xff0c;用即梦AI的提示语描述。我要使用描述语去即梦生成同样的图...

3.3.2 用仿真图实现点灯效果

文章目录 文章介绍Keil生成.hex代码Proteus仿真图中导入.hex代码文件开始仿真 文章介绍 点灯之前需要准备好仿真图keil代码 仿真图参考前文&#xff1a;3.3.2 Proteus第一个仿真图 keil安装参考前文&#xff1a;3.1.2 Keil4安装教程 keil新建第一个项目参考前文&#xff1a;3.1…...

BGP 基本配置实验

实验拓扑 实验需求 按照图示配置 IP 地址&#xff0c;R1 和 R5 上使用环回口模拟业务网段&#xff0c;R2&#xff0c;R3&#xff0c;R4 的环回口用于配置 Router-id 和建立 IBGP 邻居AS 200 运行 OSPF 实现内部网络互通R1&#xff0c;R2&#xff0c;R4&#xff0c;R5 运行 BGP…...

关于 QPalette设置按钮背景未显示出来 的解决方法

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/146047054 长沙红胖子Qt&#xff08;长沙创微智科&#xff09;博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV…...

## DeepSeek写水果记忆配对手机小游戏

DeepSeek写水果记忆配对手机小游戏 提问 根据提的要求&#xff0c;让DeepSeek整理的需求&#xff0c;进行提问&#xff0c;内容如下&#xff1a; 请生成一个包含以下功能的可运行移动端水果记忆配对小游戏H5文件&#xff1a; 要求 可以重新开始游戏 可以暂停游戏 卡片里的水果…...

P8662 [蓝桥杯 2018 省 AB] 全球变暖--DFS

P8662 [蓝桥杯 2018 省 AB] 全球变暖--dfs 题目 解析讲下DFS代码 题目 解析 这道题的思路就是遍历所有岛屿&#xff0c;判断每一块陆地是否会沉没。对于这种图的遍历&#xff0c;我们首先应该想到DFS。 代码的注意思想就是&#xff0c;在主函数中遍历找出所有岛屿&#xff0c…...

opentitan riscv

OpenTitan‌是一个开源的硅根信任&#xff08;Root of Trust, RoT&#xff09;项目&#xff0c;旨在使硅RoT的设计和实现更加透明、可信和安全&#xff0c;适用于企业、平台提供商和芯片制造商。该项目由lowRISC CIC管理&#xff0c;作为一个协作项目&#xff0c;旨在生产高质量…...

【Oracle APEX开发小技巧12】

有如下需求&#xff1a; 有一个问题反馈页面&#xff0c;要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据&#xff0c;方便管理员及时处理反馈。 我的方法&#xff1a;直接将逻辑写在SQL中&#xff0c;这样可以直接在页面展示 完整代码&#xff1a; SELECTSF.FE…...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统

医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上&#xff0c;开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识&#xff0c;在 vs 2017 平台上&#xff0c;进行 ASP.NET 应用程序和简易网站的开发&#xff1b;初步熟悉开发一…...

关于nvm与node.js

1 安装nvm 安装过程中手动修改 nvm的安装路径&#xff0c; 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解&#xff0c;但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后&#xff0c;通常在该文件中会出现以下配置&…...

(二)原型模式

原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...

C++ 基础特性深度解析

目录 引言 一、命名空间&#xff08;namespace&#xff09; C 中的命名空间​ 与 C 语言的对比​ 二、缺省参数​ C 中的缺省参数​ 与 C 语言的对比​ 三、引用&#xff08;reference&#xff09;​ C 中的引用​ 与 C 语言的对比​ 四、inline&#xff08;内联函数…...

04-初识css

一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...

DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”

目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...

在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)

考察一般的三次多项式&#xff0c;以r为参数&#xff1a; p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]&#xff1b; 此多项式的根为&#xff1a; 尽管看起来这个多项式是特殊的&#xff0c;其实一般的三次多项式都是可以通过线性变换化为这个形式…...

深入理解Optional:处理空指针异常

1. 使用Optional处理可能为空的集合 在Java开发中&#xff0c;集合判空是一个常见但容易出错的场景。传统方式虽然可行&#xff0c;但存在一些潜在问题&#xff1a; // 传统判空方式 if (!CollectionUtils.isEmpty(userInfoList)) {for (UserInfo userInfo : userInfoList) {…...

uniapp 实现腾讯云IM群文件上传下载功能

UniApp 集成腾讯云IM实现群文件上传下载功能全攻略 一、功能背景与技术选型 在团队协作场景中&#xff0c;群文件共享是核心需求之一。本文将介绍如何基于腾讯云IMCOS&#xff0c;在uniapp中实现&#xff1a; 群内文件上传/下载文件元数据管理下载进度追踪跨平台文件预览 二…...