GitLabを別サーバに移行させていたのですが、移行後の環境で起動時にパーミッションエラーで起動できない問題に陥りました。

環境


  • Ubuntu 16.04
  • GitLab CE 10.1(Docker使用)

GitLabは公式のDockerを若干カスタマイズして構築しています。データは丸ごと旧サーバからrsyncで送り込んだものです。たぶん。移行自体は私が作業してたわけではないのでたぶんです。

エラーの内容


抜粋するとこんな感じです。下記のログには載っていないのですが、パーミッションがどうたらでてました。/var/opt/gitlab/git-data/repositoriesの権限がおかしいんですね。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
gitlab  | Compiled Resource:
gitlab | ------------------
gitlab | # Declared in /opt/gitlab/embedded/cookbooks/cache/cookbooks/package/definitions/storage_directory.rb:26:in `block in from_file'
gitlab |
gitlab | ruby_block("directory resource: /var/opt/gitlab/git-data/repositories") do
gitlab | params {:path=>"/var/opt/gitlab/git-data/repositories", :owner=>"git", :group=>nil, :mode=>"2770", :name=>"/var/opt/gitlab/git-data/repositories"}
gitlab | action [:run]
gitlab | retries 0
gitlab | retry_delay 2
gitlab | default_guard_interpreter :default
gitlab | block_name "directory resource: /var/opt/gitlab/git-data/repositories"
gitlab | declared_type :ruby_block
gitlab | cookbook_name "gitlab"
gitlab | recipe_name "gitlab-shell"
gitlab | block #<Proc:0x00000000054ceeb0@/opt/gitlab/embedded/cookbooks/cache/cookbooks/package/definitions/storage_directory.rb:27>
gitlab | not_if { #code block }
gitlab | end

原因


このDockerのリポジトリのドキュメントに手掛かりとなるものが書かれていました。dockerのグループにフルアクセス権が必要みたいです。で、ドキュメントのとおり問題となっているrepositoriesディレクトリのACLをgetfaclで確認すると以下のようになっていました。

1
2
3
4
5
6
7
8
user::rwx
group::r-x
other::r-x
default:user::rwx
default:group::r-x
default:group:docker:rwx
default:mask::rwx
default:other::r-x

ドキュメントを見た感じではおそらくgroupdefault:groupのところがrwxになっていないといけない臭いのですが、なってませんでした。

対応


まず初めに前述のドキュメントのPermission problemsの項目に従って下記を実行しました。

1
2
sudo docker exec gitlabのコンテナ名 update-permissions
sudo docker restart gitlabのコンテナ名

実行できるので一見うまくいったように見えるのですが、改めて確認すると権限は変わってません。また、このコマンドはわざわざ実行しなくてもコンテナ起動時に実行されるようです。それっぽいログが出てました。

次にドキュメントに従って下記のコマンドを実行しました。

1
sudo setfacl -mR default:group:docker:rwx 対象のディレクトリ

ところがsetfacl: Option -m: Invalid argument near character 1というエラーがでます。dockerというグループは存在したんですけどね。なんででしょうか…。

仕方がないので、ドキュメントに記載されていない方法で旧環境のパーミッションに合わせるようにしました。旧環境のrepositoriesディレクトリはdrwxrws---だったため、下記のコマンドでパーミッションを変更しました。

1
chmod -R g+s repositories/

パーミッション変更後に無事起動できました。