gitlab使用samba/cifs作为存储
[| 2021/09/17 02:14]
gitlab默认是无法直接使用cifs挂载作为数据存储目录的,不过经过一些小小的移植,可以实现正常运行。
1,关注.ssh/authorzed_keys,由于cifs挂载默认使用同样的权限,而.ssh/authorized_keys分别要求目录是700,文件是600权限,所以默认会导致推送代码时公钥认证失败,一般对.ssh目录额外进行一个挂载即可,挂载参数添加file_mode=0600,dir_mode=0700。另外该目录所有人需要是gitlab-shell指定的用户,默认为git,需要查询git在/etc/passwd内的uid,/etc/group中的gid,指定uid=xxx,gid=yyy。(同样适用于docker内)。
2,关注repositories,默认迁移后会发现一个诡异的问题,就是提交代码可以成功,代码库也可以看到新代码,但是push events没有更新。其实是因为gitlab的hooks默认是软链,迁移至samba后,被屏蔽掉了,这里推荐gitlab自带的check工具(scripts目录下),可以检查每个仓库的hooks是否正常安装了。如果提示hooks有问题,那么直接ln -s是不行的,需要在挂载参数里添加mfsymlinks,启用软链支持,然后需要在samba server上将原有软链删除掉(如果不删除,则client端既看不到软链,但创建时又提示存在),再使用ln -s重新修复hook即可,此时可以看到,samba server是使用一个特殊文件来存储软链信息的。理论上对于所有的软链,迁移至samba后都要进行这个修复。
修复后,就可以使用了。
1,关注.ssh/authorzed_keys,由于cifs挂载默认使用同样的权限,而.ssh/authorized_keys分别要求目录是700,文件是600权限,所以默认会导致推送代码时公钥认证失败,一般对.ssh目录额外进行一个挂载即可,挂载参数添加file_mode=0600,dir_mode=0700。另外该目录所有人需要是gitlab-shell指定的用户,默认为git,需要查询git在/etc/passwd内的uid,/etc/group中的gid,指定uid=xxx,gid=yyy。(同样适用于docker内)。
2,关注repositories,默认迁移后会发现一个诡异的问题,就是提交代码可以成功,代码库也可以看到新代码,但是push events没有更新。其实是因为gitlab的hooks默认是软链,迁移至samba后,被屏蔽掉了,这里推荐gitlab自带的check工具(scripts目录下),可以检查每个仓库的hooks是否正常安装了。如果提示hooks有问题,那么直接ln -s是不行的,需要在挂载参数里添加mfsymlinks,启用软链支持,然后需要在samba server上将原有软链删除掉(如果不删除,则client端既看不到软链,但创建时又提示存在),再使用ln -s重新修复hook即可,此时可以看到,samba server是使用一个特殊文件来存储软链信息的。理论上对于所有的软链,迁移至samba后都要进行这个修复。
修复后,就可以使用了。