报错信息
storage_directory[/var/opt/gitlab/.ssh](gitlab::gitlab-shell line 38)had an error:Mixlib::shellout::shellcommandfailed:
ruby_block[directory resource: /var/opt/gitlab/.ssh](/opt/gitlab/embedded/cookbooks/cache/cookbooks/package/resources/storage_directory.rb line 33) had an error:Mixlib::shellout::shellcommandfailed:Expected process to exit with [0] ,but received ‘1’
-------- begin output of stat --printf=’%U’ $(readlink -f /var/opt/gitlab/.ssh)------
stout:
stderr: stat:missing oprand
try stat --help
------- end output of stat --printf =’%U’ $(readlink -f /var/opt/gitlab/.ssh)-----
ran stat --print=’%U’ $(readlink -f /var/opt/gitlab/.ssh) returned 1
报错信息分析
$(readlink -f /data/gitlab/ssh)返回空
原因
与权限有关。git用户需要对包含.ssh目录的文件夹(包含父文件夹)执行权限。
确定是否权限缺失
按照步骤输入命令
1、
/bin/sh
2、
stat --printf=’%U’ $(readlink -f /var/opt/gitlab/.ssh)
若有输出,则执行下面命令
3、
sudo su git
4、
stat --printf=’%U’ $(readlink -f /var/opt/gitlab/.ssh)
5、如果出现如下错误信息,则确定git缺失执行权限
stat: missing operand
Try `stat --help’ for more information.
解决方案
以下是本次问题解决方案
即使/var/opt/gitlab/.ssh的所有者和用户组都是git,由于父权限,它也不能到这级目录执行shell命令。即,给 /var/opt/gitlab/目录执行权限:
chmod +x /var/opt/gitlab/
chmod +x /var/opt/
chmod +x /var/
总结
1、找专业的人解决问题,比自己一人琢磨要省很多时间。
2、外国开源组件,尽量去他们的社区issues去找,没有相似问题,则自己提问题。
附:这是我提的问题
https://gitlab.com/gitlab-org/omnibus-gitlab/issues/3937