接手別人的幾個項目,項目管理在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
比如: