Gerrit 2.16管理员帐号丢失的一次处理

接手别人的几个项目,项目管理在gerrit上,由于中途经过多次转手,管理员帐号已经丢失。

服务器在手,但大家都只能得到普通用户权限。

因此目标是拿到Administrators群组的权限,即,将一个帐号加入此群组。

基本信息:

Gerrit版本:2.16.7

Gerrit认证方式:LDAP

Gerrit数据库存储方式:H2

Gerrit安装在:/data/gerrit/gerrit_app

Gerrit仓库位于:/data/gerrit/gerrit_app/git/repositories

前期走了很多弯路,因为网络上的资料大多是2.4版本,都是指导让登陆gsql,在数据库中去操作。

停掉Gerrit服务后,手工登陆进gsql,完全找不到要操作的诸如accounts、account_group_by_id等表。来回折腾很久还是搞不定。

最近随着Gerrit了解的深入,看到Gerrit的版本日志提到,2.15版本将account表已经转为NoteDB,2.16版本将group表转为NoteDB。

这才恍然大悟,转向搜索gerrit notedb的资料搜索。

找到如下网页信息参考:

https://blog.nanpuyue.com/2018/044.html

虽然上文,操作的是迁移登陆插件,但其基本原因是大致相同的。

最终一顿操作猛如虎,终究搞定这个难题。

原理大致是,NoteDB实际在后台会是一个Git仓库,直接从Git仓库中Clone出数据来,然后修改相应Groups下的信息,提交上去,就OK了。

在Gerrit文档中/Documentation/config-groups.html有groups的一些操作说明。

如下命令均是在Gerrit服务器上直接执行的。

第0步,停止gerrit服务

/data/gerrit/gerrit_app/bin/gerrit.sh stop

第一步,克隆出All-Users仓库

git clone /data/gerrit/gerrit_app/git/repositories/All-Users.git

这儿的克隆命令实际为从裸仓库克隆出一个工作仓库出来。

第二步,从All-Users/groups中得到Administrators群组的UUID

 第三步,修改当前工作仓库的指向

cd All-Users
git fetch origin refs/groups/f4/f417bd0437a0e6f7e08885d07626b0698b4ecec2:refs/groups/f4/f417bd0437a0e6f7e08885d07626b0698b4ecec2

如果当前工作仓库是由root用户创建,则git命令前,应添加sudo

第四步,取出当前指向的内容。

git checkout refs/groups/f4/f417bd0437a0e6f7e08885d07626b0698b4ecec2

此时,All-Users取得就是gerrit文档中所说的groups的信息(即Administrators群组下的信息)

 可以看到,没有subgroups,而members信息即为我们要修改的文件。

vim打开后,将一个新用户的id插入在末尾(此ID通常是10000打头)。

修改好后,保存,准备提交。

第五步,add并commit

git add .
git commit -m"xxxx"

第六步,更新引用

git update-ref refs/groups/f4/f417bd0437a0e6f7e08885d07626b0698b4ecec2 $(git rev-parse HEAD)

第七步,推上修改至仓库

git push origin refs/groups/f4/f417bd0437a0e6f7e08885d07626b0698b4ecec2

至此,重新启动Gerrit服务,新用户就添加进了Administrators群组了。

PS,用户ID的信息取得。

首先用户应是Gerrit中已注册的一个用户,在用户的Groups页面,任一群组里打开相应的Audit Log,即可看到相应用户的Id

比如:

原文地址:https://www.cnblogs.com/eaglexmw/p/15421218.html