Gitlab 服务器上软件包版本混乱,有的是 squeeze,有的是 sid,需要修补漏洞的 OpenSSL 是 sid 中的 1.0.1f。 sid 中的 OpenSSL 包还没有针对这个安全漏洞的补丁,只好降级到 wheezy 中的 1.0.1e,导致一些包的依赖关系不满足,需要重装。

其中 nginx 配置文件还有问题,有两个重复的 default_server(原因是 /etc/nginx/sites-enabled/default 中没有注释掉默认的 server),nginx restart 起不来。

升级的时候看到 mysql 也有 security update,于是就顺手升到了 5.6,没想到这一升级闯下大祸了。GitLab 的 mysql adapter 只支持 5.5 的 client,不支持 5.6(Gemfile 里是这么写的,我不敢随便改,要是运行过程中出现不兼容问题就更麻烦了)。准备把 mysql 降级到 5.5,又有一堆版本依赖和不兼容,在 aptitude 里倒腾了半天才弄清楚。混乱的根源是 gitlab 上添加了 dotdeb 源,dotdeb 源比 debian wheezy 的要新一些,目前 dotdeb 上 mysql 的版本已经是 5.6,而 Debian wheezy 上的还是 5.5。

降级到 5.5 之后问题并未结束,数据库启动不起来了,原因是 InnoDB log 文件的大小与配置文件不符。按照网上的办法操作之后仍未解决,因此只好祭出重建数据库的杀器了。首先把 /var/lib/mysql 备份出来,在 aptitude 里删掉 mysql-server-5.5,rm -rf /var/lib/mysql,在 aptitude 里安装 mysql-server-5.5,然后把备份的 /var/lib/mysql/gitlab 目录(数据库表结构)和备份的 /var/lib/mysql/ibdata1(InnoDB 的数据文件并不放在数据库目录里)还原回去,重启数据库,MySQL 会自动解决 log 的不一致问题。由于数据库权限设置和用户名密码是在 mysql 库中保存的,而 mysql 库是 MyISAM 存储引擎,存储在 /var/lib/mysql/mysql 里,这个目录并未被恢复(我也不想恢复它),gitlab 用户的权限需要重新设置(GRANT 语句)。这下 gitlab 服务终于能正常连上数据库了。

Gitlab 服务于 4月9日凌晨 01:27 恢复,大概停机了 1.5 小时。