说来惭愧,一直想搭建CI环境,却因为各种原因迟迟没有动手。当然也不是什么都没做,比如很早就选了git做为代码服务器,并且因为gitlab对CI的支持,两年前在fedora25上就安装了gitlab。当初按照gitlab官方文档,一路下一步就搞定了,顿时自信心爆棚,然后就没有然后了。
最近各方面机缘巧合,决定继续CI的DIY之路,陡然发现fedora已经28了,于是决定更新一下gitlab和fedora,当初F25那么顺利,F28能有多麻烦呢。而且用Fedora不就是看重他的更新速度吗,不跟着最新版本更新还不如去用centos了。
1. 添坑过程
故事很曲折,只想知道如何能够在fedora28上成功安装gitlab的朋友,可以移步文末"结论"部分。
按照 gitlab官网(http://www.gitlab.com)的说明,准备一路安装下去。fedora28可以参考centos7的步骤。
先安装ssh服务,防火墙允许http协议,安装电子邮件服务
然后设置gitlab仓库,下载gitlab并安装
注意官网是以gitlab-ee为例说明,要安装社区版本,将gitlab-ee改为gitlab-ce即可
正当我以为一路按照官方文档,三下五除二,很快就要搞定的时候,第一坑就出现了。。。。
什么情况就没有找到匹配项啊?前边不是特意加了rpm专用的仓库地址吗?一脸懵逼之后,目前只有这个更新rpm仓库脚本作为线索,打开搂一眼先
除了检查操作系统,就是生成了个仓库源的配置,再看一眼/etc/yum.repos.d/gitlab_gitlab-ce.repo
查到这里没找到任何头绪,并且再一次证明了百度的无能之后,回头求助网官的安装文档。
终于找到点有用的线索,看来确实是要改一下仓库地址,修改/etc/yum.repos.d/gitlab_gitlab-ce.repo,fedora28应该使用el7
再次安装gitlab-ce,果然第一个坑添上了
在等待一个400M的RPM下载安装完成之后,接下来官网安装说明告诉我们可以浏览服务见证奇迹了
事实证明,惊喜没有,惊吓要不要?
等一下,好象哪里不对,哥以前也是装过gitlab的,不是应该有个reconfigure的吗?不知道官网文档是怎么想的,把这么重要的步骤给吃了。没关系,自己动手,丰衣足食。
没走出十米远,第二个坑来了,好在提示的很明确,缺软件包,找一下。
磨刀不误砍柴工,打好基础,继续上路,gitlab-ctl reconfigure走你。。。。。。。。。。。。。。。。。。。
然后迅速掉进第三坑
根据提示一顿搜索,这次度娘终于行了一把,大概的意思就是selinux安全检测没过(参考https://www.cnblogs.com/xiaoluo501395377/archive/2013/05/26/3100444.html),在简单了解了一下selinux的机制,以及restroecon等相关命令之后,开始我还想跟selinux支把两下,但很快就发现他山之石也是石头,还是简单粗暴的vi /etc/selinux/config ==> SELINUX=disabled(注意需要重启)
收拾好心情,继续上路,gitlab-ctl reconfigure之后走了很远,都说事不过三,现在三坑都添上了,也算够意思了,正当我准备收工的时候,一口老血吐在屏幕上,要不然这日志怎么都红了呢。。。。。。。
看这进度条,一点不夸张,这够得上天坑了吧。错误日志有1250行,为什么我知道这么清楚,因为日志太特么多了,翻屏根本就看不出来哪出的错,最后还是从/var/log/gitlab/reconfigre下边找到执行日志文件,搜索Error才找到具体错误信息
百度gitlab BCrypt::Errors::InvalidHash: invalid hash之后,并没有太合适的答案,除了了解到是使用ruby on rails做的系统以外,还有的文章说,要启动gitlab的postgresql服务,确认/tmp目录是否可写
可是这些问题在我这里都没有,本着死马当活马医的不负责任态度,又执行了一次gitlab-ctl reconfigure,嘿,竟然成功了!!!
赶紧打开浏览器,让我感受一下管理员登录的喜悦
好象不对,为什么没有root用户修改口令功能?一股不详的预感在心中慢慢升起。注册个新用户试试。。
果然黑线了。,让你们感受一下我当时的心情,另外我心里还有一万只神兽在奔跑。
回想之前reconfigure时,migrate db环节报的错,难道是数据库有问题?可是我之前在fedora25上安装过呀,当时一个坑都没有。
为了验证我不是失忆症患者,立马重新装了一个fedora25,然后在fedora25上安装了一遍gitlab,你猜怎么着?一下就成功了,下就成功了,就成功了,成功了,功了,了。。。。。。。
这才是系统第一次被访问时的页面!!!一个坑都没有就OK了。fedora28你是不是敌人派来玩我的?
吐槽归吐槽,问题还得解决,想来想去,还是从数据库入手。即然fedora25上的数据库可用,那就把好用的库整个备份恢复到fedora28上好了。
别问我怎么知道数据库参数的,postgresql的用法就不在这里罗嗦了(不熟的同学可以参考https://blog.csdn.net/joinplay/article/details/47833759)。再次访问,芝麻~~~~~开门
哈,熟悉的页面出现了,指定root账号口令,点击“change your password”按钮。oops,又挂了。
根据gitlab-ctl tail报告,还是BCrypt问题
看来想绕过问题还是too young too naive了,难道这么明显的问题一直没人解决吗?不就是BCrypt::Errors::InvalidHash (invalid hash)吗?先来查一下BCrypt是何方神圣?
原来如北,果然是个独立的软件包,接下来直接请出程序猿的真爱stack overflow,象这种关于高科技的问题,百度就不要出来丢人现眼了,没有比较就没有伤害。
不看不知道,一看吓一跳,这个HASH肯定是哔了狗了
这修改方案也真是脚疼医脚(作者原话“This is really a uggly hack”),详细描述参考 s-t-a-c-k-o-v-e-r-f-l-o-w.com/questions/50213071/why-does-bcrypt-no-longer-accept-hashes
有了方案,继续动手,修改/opt/gitlab/embedded/lib/ruby/gems/2.3.0/gems/bcrypt-3.1.11/lib/bcrypt/engine.rb,“__bc_crypt(secret.to_s, salt)”==>“__bc_crypt(secret.to_s, salt).gsub(/(\n|\x00).*/, '')”
恢复gitlab环境(gitlab-ctl uninstall)
重新配置(gitlab-ctl reconfigure)
浏览gitlab,修改管理员口令
修改口令成功,使用刚修改的口令,登录系统
终于修成正果了。虽然补丁糙了点,但不管黑猫白猫,能抓老鼠的就是好猫。经比对,fedora25上的“/opt/gitlab/embedded/lib/ruby/gems/2.3.0/gems/bcrypt-3.1.11”与fedora28上的一毛一样!!!好吧,fedora28,你赢了!!!
2. 结论
回头看,fedora28上安装gitlab(10.8.3)的要点如下,红色部分为官方文档以外要补充的:
dnf install -y curl policycoreutils-python openssh-server
systemctl enable sshd
systemctl start sshd
firewall-cmd --permanent --add-service=http
systemctl reload firewalld
dnf install -y policycoreutils-python-utils
dnf install postfix
systemctl enable postfix
systemctl start postfix
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash
vi /etc/yum.repos.d/gitlab_gitlab-ce.repo [fedora/28 ==> el/7]
EXTERNAL_URL="gitlab.yourdomain.com" dnf install -y gitlab-ce
vi /etc/selinux/config [SELINUX=enforcing ==> SELINUX=disabled]
reboot
vi /opt/gitlab/embedded/lib/ruby/gems/2.3.0/gems/bcrypt-3.1.11/lib/bcrypt/engine.rb [__bc_crypt(secret.to_s, salt) ==>__bc_crypt(secret.to_s, salt).gsub(/(\n|\x00).*/, '')]
gitlab-ctl reconfigure