Gitlabを5.0にアップグレードしたらRVMとの相性の問題でつまずいた。
GitlabのWikiのホームにあるアップグレードの通りにやるとまぁ一見問題なくアップグレードされたように思えた。
しかし、リモート(自分のデスクトップ)からサーバー(Gitlabが動いているサーバー)のリポジトリのクローンを作成するときにエラーが吐き出された。
/home/git/gitlab-shell/bin/gitlab-shell:8: undefined method `require_relative' for main:Object (NoMethodError)どうやらrvmで設定したruby1.9.3が呼ばれていない模様。ユーザーgit向けにrvmはインストール済みでログインするとちゃんと
which ruby /home/git/.rvm/rubies/ruby-1.9.3-p392/bin/rubyとでる。 実はgit cloneは内部的にはSSHでgitユーザーでgitサーバーに接続して、サーバー側の~git/.ssh/authorized_keysに書かれたコマンドを実行するようになっている。そのコマンドは~git/gitlab-shell/bin/gitlab-shellを呼び出す。それがruby >1.9.2以上であることを想定して書かれている。
同じ問題にぶつかっている人がgithubのgitlabのissueに書き込んでいた。
gitlab-shell + rvm · Issue #12 · gitlabhq/gitlab-shell
zzetとProfのやり取りが面白い。よくわかってない人がわかっている人にアドバイスするという滑稽なやりとり。
実はsshで直接コマンドを実行する場合。どのrcスクリプトも読まれないのです。つまり、.bashrcも.zshrcも.profileもなにも読まれない。もちろん、/etc/profile.dの中にあるスクリプトも読み込まれない。 (その話をしているのに、zzetはそんなはずはない。と見当違いなことを言い続けている。どんなに論拠をProfが見せてもなぜかスルー。 )
そのため、RVMの設定が読まれないでいた。解決策としては2つ挙げられている。
- Gitlabのコードを変更して、最初にRCスクリプトを読み込む方法
- 「[unix] ssh-env - ssh実行時に環境変数を設定/変更したい」 の方法でsshの環境変数を設定する方法
- 環境変数を有効にする危険性 ( サーバー側に悪質なユーザーがいなければ大丈夫なはず? )
- gitlab-shellをコピーしてgitlab-shell.realというファイルを作成
- gitlab-shellを以下のように変更
#! /bin/bash # RVM installed with single-user mode PATH=$PATH:$HOME/.rvm/bin # Add RVM to PATH for scripting [[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm" # Load RVM into a shell session as a function # RVM installed with multi-user mode #RVMSH_PATH="/etc/profile.d/rvm.sh" #[[ -s $RVMSH_PATH ]] && source $RVMSH_PATH # Load RVM into a shell session as a function exec /home/git/gitlab-shell/bin/gitlab-shell.real $@
とりあえず、マルチーユーザーモードでRVMをインストールしている場合は下のマルチユーザー向けの設定を読み込むようにすると良い。(両方読み込んでも問題ないかも。マルチユーザー用RVMの仕組みがよくわかっていない。。)
ソースコードを変更するのでアップグレードをするときに注意が必要。
0 件のコメント:
コメントを投稿