前言: 公司准备开发android 7.1的OS,所以搭建了gerrit服务器,进行源码的管理,服务器搭建之后,源码同步到服务器,然后各开发人员注册账号进行代码同步到本地修改及提交.
此时出现问题
1、注册
可以看之前发布的文章 https://blog.csdn.net/yi_tianchou/article/details/106781589
注册之后 ,可以拉取代码,
2、修改并提交
但是提交的时候出现了问题,提示公钥失败(如图)
经过一番排查对比
发现 注册的时候 使用的用户名 和邮箱的用户名不一致.
操作记录:
1、登录服务器,删除 gerrit.passwd 文件中用户
gerrit项目文件在 home根目录下
用户文件路径: ../gerrit/review_site7.1/etc/gerrit.passwd
em@em:/home/gerrit/review_site7.1/etc$ sudo vim gerrit.passwd
使用vim指令删除了 当前有问题的用户记录
结果就是 用户不能登录 不能拉取代码,(以为这就删除用户了,太天真了,这个只是删除了登录用户的名称和密码,其实数据库里还是有记录的,下一步就知道了)
2、在服务器上 新增用户 ,用户名和使用的邮箱名一致(因为都是公司邮箱,所以第一次注册的邮箱和第二次注册使用的邮箱一样,这个是诱发以下问题的主要原因)
em@em:/home/gerrit/review_site7.1/etc$ htpasswd gerrit.passwd xxxxx
xxxx 就是用户名
添加成功之后 ,要到网页端登录 注册邮箱和 添加公钥.
(2.1) 添加公钥,没什么说的,
(2.2)注册邮箱. 出现了问题
提示已经注册过.无法验证邮箱.
难道不能直接删除用户?需要先删除邮箱.
3、恢复之前删除的用户,登录网页之后,通过页面删除邮箱
4、删除邮箱之后,重新发送邮件注册邮箱.
至此 新用户添加好了,不过出现了新的问题,诡异的现象,恢复之前的用户和现在的用户都正常了,都可以提交和拉取代码,
然后对比两个用户,
登录名(username)不同,
FULL name 相同
邮箱 相同
为什么 新用户注册之后 ,之前的用户也可以使用? 诡异 (原因后面将提到)
既然能用了,以为大功告成.
过了 10分钟 ,同事提出新的需求,账号要有管理员权限.
登录网页操作,在add用户的时候搜索出两条一样的记录,点击ADD 提示 “
add Account Not Found: xxxx <xxxx@126.com>”
无法添加,明明搜索到两条,却说不存在,只能是有一个原因,这两个账号虽然用户名不同,但是对于数据库认为是一样的,搜索的时候出现两条则报错了,
后面是艰辛的 gerrit服务器之旅,
所有的东西都别人处理的,我最多到服务器上添加一个用户,现在处理这样的问题,头大.
百度..................
好一个帖子解决了我很多的疑惑
Gerrit+apache+H2数据库简单安装配置及建库流程
../gerrit 目录下
bin 下 gerrit.sh 脚本 参数 start 启动 stop停止服务
gerrit.war 是服务器编译代码
db 是gerrit 使用的H2的数据库,(我们用的就是gerrit自带的)
etc 是 gerrit的配置文件
gerrit.config 服务器配置文件
gerrit.passwd 启动服务之后,web页面登录使用的用户信息
logs 下面是 服务器运行日志和 用户通过ssh 连接的日志,提交的日志等
操作流程:
gerrit2@ubuntu:~/review_site$ ./bin/gerrit.sh stop
Stopping Gerrit Code Review: OK
gerrit2@ubuntu:~/review_site$ ls bin
gerrit.sh gerrit.war
gerrit2@ubuntu:~/review_site$ java -jar bin/gerrit.war gsql
[2013-05-01 01:05:57,003] INFO com.google.gerrit.server.git.LocalDiskRepositoryManager : Defaulting core.streamFileThreshold to 220m
Welcome to Gerrit Code Review 2.6-rc1
(H2 1.3.168 (2012-07-13))
Type '\h' for help. Type '\r' to clear the buffer.
gerrit> \h
General
\q quit
Query Buffer
\g execute the query buffer
\p display the current buffer
\r clear the query buffer
Informational
\d list all tables
\d NAME describe table
gerrit> \d
List of relations
TABLE_SCHEM | TABLE_NAME | TABLE_TYPE
------------+--------------------------------------+-----------
PUBLIC | ACCOUNTS | TABLE
PUBLIC | ACCOUNT_DIFF_PREFERENCES | TABLE
PUBLIC | ACCOUNT_EXTERNAL_IDS | TABLE
PUBLIC | ACCOUNT_GROUPS | TABLE
PUBLIC | ACCOUNT_GROUP_INCLUDES_BY_UUID | TABLE
PUBLIC | ACCOUNT_GROUP_INCLUDES_BY_UUID_AUDIT | TABLE
PUBLIC | ACCOUNT_GROUP_MEMBERS | TABLE
PUBLIC | ACCOUNT_GROUP_MEMBERS_AUDIT | TABLE
PUBLIC | ACCOUNT_GROUP_NAMES | TABLE
PUBLIC | ACCOUNT_PATCH_REVIEWS | TABLE
PUBLIC | ACCOUNT_PROJECT_WATCHES | TABLE
PUBLIC | ACCOUNT_SSH_KEYS | TABLE
PUBLIC | CHANGES | TABLE
PUBLIC | CHANGE_MESSAGES | TABLE
PUBLIC | PATCH_COMMENTS | TABLE
PUBLIC | PATCH_SETS | TABLE
PUBLIC | PATCH_SET_ANCESTORS | TABLE
PUBLIC | PATCH_SET_APPROVALS | TABLE
PUBLIC | SCHEMA_VERSION | TABLE
PUBLIC | STARRED_CHANGES | TABLE
PUBLIC | SUBMODULE_SUBSCRIPTIONS | TABLE
PUBLIC | SYSTEM_CONFIG | TABLE
PUBLIC | TRACKING_IDS | TABLE
gerrit> select * from ACCOUNTS
-> \g
REGISTERED_ON | FULL_NAME | PREFERRED_EMAIL | CONTACT_FILED_ON | MAXIMUM_PAGE_SIZE | SHOW_SITE_HEADER | USE_FLASH_CLIPBOARD | DOWNLOAD_URL | DOWNLOAD_COMMAND | COPY_SELF_ON_EMAIL | DATE_FORMAT | TIME_FORMAT | REVERSE_PATCH_SET_ORDER | RELATIVE_DATE_IN_CHANGE_TABLE | COMMENT_VISIBILITY_STRATEGY | DIFF_VIEW | CHANGE_SCREEN | SIZE_BAR_IN_CHANGE_TABLE | LEGACYCID_IN_CHANGE_TABLE | REVIEW_CATEGORY_STRATEGY | INACTIVE | ACCOUNT_ID
------------------------+-------------+-------------------------+------------------+-------------------+------------------+---------------------+--------------+------------------+--------------------+-------------+-------------+-------------------------+-------------------------------+-----------------------------+-----------+---------------+--------------------------+---------------------------+--------------------------+----------+-----------
2020-04-14 11:43:38.132 | NULL | NULL | NULL | 25 | Y | Y | SSH | CHECKOUT | N | NULL | NULL | N | N | NULL | NULL | NULL | Y | N | NULL | N | 1000000
2020-04-17 11:47:24.168 | msc-cs | jiang@126.com | NULL | 25 | Y | Y | NULL | NULL | N | NULL | NULL | N | N | NULL | NULL | NULL | Y | N | NULL | N | 1000001
2020-04-21 09:10:52.688 | sophie | NULL | NULL | 25 | Y | Y | NULL | NULL | N | NULL | NULL | N | N | NULL | NULL | NULL | Y | N | NULL | N | 1000003
2020-04-21 14:18:22.056 | NULL | xxxx@qq.com | NULL | 25 | Y | Y | NULL | NULL | N | NULL | NULL | N | N | NULL | NULL | NULL | Y | N | NULL | N | 1000004
2020-04-21 14:39:34.902 | NULL | qqqq@163.com | NULL | 25 | Y | Y | NULL | NULL | N | NULL | NULL | N | N | NULL | NULL | NULL | Y | N | NULL | N | 1000005
2020-04-26 14:44:29.203 | NULL | NULL | NULL | 25 | Y | Y | NULL | NULL | N | NULL | NULL | N | N | NULL | NULL | NULL | Y | N | NULL | N | 1000006
2020-04-26 14:51:58.234 | NULL | wwww.mu@126.com | NULL | 25 | Y | Y | NULL | NULL | N | NULL | NULL | N | N | NULL | NULL | NULL | Y | N | NULL | N | 1000007
2020-04-27 11:04:47.902 | NULL | ssss@126.com | NULL | 25 | Y | Y | NULL | NULL | N | NULL | NULL | N | N | NULL | NULL | NULL | Y | N | NULL | N | 1000008
2020-05-12 15:28:59.151 | NULL | 33333333@qq.com | NULL | 25 | Y | Y | NULL | NULL | N | NULL | NULL | N | N | NULL | NULL | NULL | Y | N | NULL | N | 1000038
2020-06-01 15:43:16.573 | 111222333 | 111222333@163.com | NULL | 25 | Y | Y | NULL | NULL | N | NULL | NULL | N | N | NULL | NULL | NULL | Y | N | NULL | N | 1000039
2020-06-02 15:19:06.282 | NULL | NULL | NULL | 25 | Y | Y | NULL | NULL | N | NULL | NULL | N | N | NULL | NULL | NULL | Y | N | NULL | N | 1000040
2020-04-18 15:19:18.539 | sophie.peng | 111222.333@126.com | NULL | 25 | Y | Y | NULL | NULL | N | NULL | NULL | N | N | NULL | NULL | NULL | Y | N | NULL | N | 1000071
2020-10-28 13:17:26.515 | NULL | NULL | NULL | 25 | Y | Y | NULL | NULL | N | NULL | NULL | N | N | NULL | NULL | NULL | Y | N | NULL | N | 1000072
(13 rows; 6 ms)
gerrit> uupdate ACCOUNTS set PREFERRED_EMAIL=NULL where ACCOUNT_ID = 1000006
-> \g #输入/g 之后sql才会执行
gerrit> \q #退出数据库操作
-> \q
Bye
em@em:/home/gerrit/review_site7.1$ ./bin/gerrit.sh start
Starting Gerrit Code Review: start-stop-daemon: unable to open pidfile '/home/gerrit/review_site7.1/logs/gerrit.pid' for writing (Permission denied)
FAILED
em@em:/home/gerrit/review_site7.1$ sudo ./bin/gerrit.sh start
[sudo] password for em:
Starting Gerrit Code Review: OK
可能出现情况
gerrit> uupdate ACCOUNTS set PREFERRED_EMAIL=NULL where ACCOUNT_ID = 1000006
ERROR: The database is read only; SQL statement:
update ACCOUNTS set PREFERRED_EMAIL=NULL where ACCOUNT_ID = 1000006 [90097-174]
gerrit> chown admin:admin ReviewDB.h2.db
# ReviewDB.h2.db默认的用户是 gerrit:gerrit 要切换用户,否则权限不够
通过sql语句查看 ACCOUNTS 发现 只有FULL_NAME | PREFERRED_EMAIL 所以管理员在给用户分配权限的时候,查询到两条,
有一种可能就是在验证邮箱的时候, fullname是取的邮箱命,gerrit在校验权限的时候用的fullname和邮箱,所以同事的新旧账号都可以用.
--结束--
多说一句,1、如果出现和我一样的问题 不建议直接操作数据库,可能会带来风险,上面的sql,只是示例,其实操作挺多的,各个库是有外键关联的.
2、条件允许,建议换一个邮箱重新注册,安全规范.