在麒麟ARM64服务器部署Gerrit需五步:一、安装ARM64版OpenJDK 17并配置JAVA_HOME;二、创建gerrit2用户、安装依赖、配置Git及SELinux策略;三、下载gerrit-3.7.5.war并用SQLite初始化站点;四、编写systemd服务文件,指定JVM路径与监听地址;五、开放firewalld 8080端口并验证Web访问。

如果您计划在国产化环境的麒麟服务器上部署Gerrit作为代码审查平台,则需适配其ARM64架构、OpenJDK版本及系统级依赖。以下是完成部署的具体步骤:
一、安装兼容版本的OpenJDK
Gerrit 3.7及以上版本要求JDK 11或更高版本,且需确保为ARM64架构编译的OpenJDK,麒麟V10默认源中可能仅提供x86_64包,须手动获取适配版本。
1、执行uname -m确认系统架构为aarch64。
2、从Adoptium官网下载temurin-17.0.2+8-jdk_arm64_linux_hotspot.tar.gz(或Gerrit官方推荐的JDK 17 LTS ARM64构建版)。
3、解压至/opt/java目录:sudo tar -xzf temurin-17.0.2+8-jdk_arm64_linux_hotspot.tar.gz -C /opt/java。
4、配置全局JAVA_HOME:echo 'export JAVA_HOME=/opt/java/jdk-17.0.2+8' | sudo tee -a /etc/profile.d/java.sh,随后执行source /etc/profile.d/java.sh。
5、验证安装:java -version应输出包含ARM64和17.0.2的字符串,若显示x86或版本低于17,则Gerrit服务将无法启动。
二、配置系统级依赖与用户权限
Gerrit需以非root用户运行,并依赖Git、curl、wget及systemd服务管理能力;麒麟系统默认禁用部分SELinux策略,但需显式关闭AppArmor(若启用)并授予Java进程网络绑定权限。
1、安装基础工具:sudo apt update && sudo apt install -y git curl wget gnupg2 procps(适用于麒麟V10 Deb系)。
2、创建专用运行用户:sudo adduser --disabled-password --gecos "" gerrit2。
3、切换至该用户:sudo su - gerrit2。
4、初始化Git配置:git config --global user.name "Gerrit Code Review",git config --global user.email "gerrit2@localhost"。
5、退出后执行sudo setsebool -P allow_java_execmem 1(如SELinux启用),未执行此步可能导致JVM在加载NIO组件时抛出SecurityException。
三、下载并初始化Gerrit WAR包
Gerrit不提供预编译ARM64二进制,必须使用官方发布的全架构兼容WAR包,并通过init命令生成本地站点目录;需指定SQLite数据库以避免额外安装PostgreSQL或MySQL。
1、访问Gerrit Releases仓库,下载gerrit-3.7.5.war(截至2023年最新LTS稳定版)。
2、保存至/home/gerrit2/目录,确保属主为gerrit2用户:sudo chown gerrit2:gerrit2 gerrit-3.7.5.war。
3、执行初始化:java -jar gerrit-3.7.5.war init -d /home/gerrit2/review_site。
4、在交互过程中:选择sqlite作为数据库类型;将HTTP端口设为8080;禁用HTTPS(除非已配置反向代理);设置管理员邮箱为admin@localhost。
5、初始化完成后检查/home/gerrit2/review_site/etc/gerrit.config中[httpd] listenUrl值为http://*:8080/,若仍为localhost绑定,外部客户端将无法访问Web界面。
四、配置systemd服务并启用开机自启
为保障Gerrit长期稳定运行,需将其注册为systemd服务,而非前台运行;服务文件需显式声明ARM64 JVM参数及工作目录,防止路径解析失败。
1、创建服务文件:sudo nano /etc/systemd/system/gerrit.service。
2、写入以下内容:
[Unit]
Description=Gerrit Code Review
After=network.target
[Service]
Type=simple
User=gerrit2
WorkingDirectory=/home/gerrit2/review_site
ExecStart=/opt/java/jdk-17.0.2+8/bin/java -Dgerrit.home=/home/gerrit2/review_site -jar /home/gerrit2/gerrit-3.7.5.war daemon --listen-url http://*:8080/ --secure-cookie false
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
3、重载systemd配置:sudo systemctl daemon-reload。
4、启动服务:sudo systemctl start gerrit。
5、检查状态:sudo systemctl status gerrit,确认输出含active (running)且无Failed行,若出现"Permission denied"错误,请检查/opt/java目录的x权限是否对gerrit2用户开放。
五、开放防火墙端口并验证访问
麒麟服务器默认启用firewalld,需放行8080端口;同时需确认Gerrit监听地址未被本地iptables规则拦截。
1、启用firewalld服务(如未运行):sudo systemctl enable firewalld && sudo systemctl start firewalld。
2、添加端口:sudo firewall-cmd --permanent --add-port=8080/tcp。
3、重载规则:sudo firewall-cmd --reload。
4、从局域网另一台机器访问http://[麒麟服务器IP]:8080,页面应显示Gerrit登录界面。
5、使用初始化时设定的管理员邮箱登录,首次登录后系统自动创建管理员账号,若页面返回502或连接超时,请立即检查gerrit.service日志:journalctl -u gerrit -n 50。










