今更だけど、Gitlabを3.1から4.0に更新してみました。

Pocket

どうも、スポーツジム通いが板についてきたユニキャストの良心、箕輪(@y_minowa)です。弊社では、プロジェクトに関するソースコードやドキュメントすべてを、基本的にGitで管理しています。GitLabはGithubライクなgitのフロントエンドです。粗もある気がしますが、開発も盛んで、期待しています。

最近GitLabが4.0にバージョンアップしていたことを知り(現在は4.1になっていますね。)、
project-A / src
project-A / doc
のように、プロジェクトをネームスペースで区切れることがわかったので、わさっとアップデートすることにしました。(いづれ名前が衝突するのではないかと心配していたので。。。)

参考
https://github.com/gitlabhq/gitlabhq/wiki/From-3.1-to-4.0

アップグレード時の弊社環境

gitolite v3.2
GitLabの管理ユーザ: gitlab
Gitoliteの管理ユーザ: gitolite
Python 2.7.3

1. 現在のシステムをバックアップ

既存Gitlabのディレクトリごと固めました。あと、忘れてヒヤッとしましたが、DBのバックアップは必須ですね。

tar zcvf gitlab-20130123.tar.gz gitlab

2. ソースコードを取得

リポジトリからpullして、チェックアウト方式をとるようです。

[root@redmine gitlab]# sudo -u gitlab -H git fetch
[root@redmine gitlab]# sudo -u gitlab -H git branch
* stable
[root@redmine gitlab]# sudo -u gitlab -H git branch -a
* stable
remotes/origin/3-1-stable
remotes/origin/4-0-stable
remotes/origin/4-1-stable
remotes/origin/HEAD -> origin/master
remotes/origin/api_branch
remotes/origin/master
remotes/origin/stable

[root@redmine gitlab]# sudo -u gitlab -H git checkout Gemfile.lock
[root@redmine gitlab]# sudo -u gitlab -H git checkout 4-0-stable

3. Gitlabユーザに移動し、セットアップ

[root@redmine gitlab]# su - gitlab
[gitlab@redmine gitlab]$ bundle exec rake db:migrate RAILS_ENV=production
[gitlab@redmine gitlab]$ bundle exec rake gitlab:enable_namespaces RAILS_ENV=production

[root@redmine gitlab]# chmod -R ug+rwXs /home/gitolite/repositories/

[root@redmine gitlab]# cp ./lib/hooks/post-receive /home/gitolite/.gitolite/hooks/common/post-receive
[root@redmine gitlab]# chown gitolite:gitolite /home/gitolite/.gitolite/hooks/common/post-receive

フックスクリプトのリンクを張るスクリプトがありましたが、弊社環境では動きませんでした。ここがダメでもうまく行ったので、とりあえず放置します(笑)

[root@redmine gitlab]# sudo -u gitlab -H vim lib/support/rewrite-hooks.sh
#!/bin/bash

#src="/home/git/repositories"
src="/home/gitolite/repositories"
for dir in `ls "$src/"`
do
if [ -d "$src/$dir" ]; then

if [ "$dir" = "gitolite-admin.git" ]
then
continue
fi

project_hook="$src/$dir/hooks/post-receive"
# gitolite_hook="/home/git/.gitolite/hooks/common/post-receive"
gitolite_hook="/home/gitolite/.gitolite/hooks/common/post-receive"
ln -s -f $gitolite_hook $project_hook
fi
done
[root@redmine gitlab]# sudo -u gitolite -H lib/support/rewrite-hooks.sh

ln: `/home/gitolite/.gitolite/hooks/common/post-receive' へのシンボリックリンク `/home/gitolite/repositories/xxx/hooks/post-receive' を作成します: そのようなファイルやディレクトリはありません
...以下略
※ ここは飛ばす

4. Gitlab設定ファイルの更新

微妙に設定ファイルの項目が変わったようなので、旧ファイルのバックアップを取ってから更新します。

# backup old one
sudo -u gitlab -H cp config/gitlab.yml config/gitlab.yml.old
# copy new one
sudo -u gitlab -H cp config/gitlab.yml.example config/gitlab.yml
# edit it
sudo -u gitlab -H vim config/gitlab.yml

# ==========================

## GitLab settings
gitlab:
## Web server settings
host: gitlab.hogehoge.co.jp
port: 80
https: false

## Email settings
# Email address used in the "From" field in mails sent by GitLab
email_from: gitlab@hogehoge.co.jp

## Project settings
default_projects_limit: 10

## Gravatar
gravatar:
enabled: true # Use user avatar images from Gravatar.com (default: true)
# plain_url: "http://..." # default: http://www.gravatar.com/avatar/%{hash}?s=%{size}&d=mm
# ssl_url: "https://..." # default: https://secure.gravatar.com/avatar/%{hash}?s=%{size}&d=mm

#
# 2. Auth settings
# ==========================

## LDAP settings
ldap:
enabled: false
host: '_your_ldap_server'
base: '_the_base_where_you_search_for_users'
port: 636
uid: 'sAMAccountName'
method: 'ssl' # "ssl" or "plain"
bind_dn: '_the_full_dn_of_the_user_you_will_bind_with'
password: '_the_password_of_the_bind_user'

## Omniauth settings
omniauth:
# Enable ability for users
# Allow logging in via Twitter, Google, etc. using Omniauth providers
enabled: false

# CAUTION!
# This allows users to login without having a user account first (default: false)
# User accounts will be created automatically when authentication was successful.
allow_single_sign_on: false
# Locks down those users until they have been cleared by the admin (default: true)
block_auto_created_users: true

## Auth providers
# Uncomment the lines and fill in the data of the auth provider you want to use
# If your favorite auth provider is not listed you can user others:
# see https://github.com/gitlabhq/gitlabhq/wiki/Using-Custom-Omniauth-Providers
providers:
# - { name: 'google_oauth2', app_id: 'YOUR APP ID',
# app_secret: 'YOUR APP SECRET',
# args: { access_type: 'offline', approval_prompt: '' } }
# - { name: 'twitter', app_id: 'YOUR APP ID',
# app_secret: 'YOUR APP SECRET'}
# - { name: 'github', app_id: 'YOUR APP ID',
# app_secret: 'YOUR APP SECRET' }

#
# 3. Advanced settings
# ==========================

## Backup settings
backup:
path: "tmp/backups" # Relative paths are relative to Rails.root (default: tmp/backups/)
# keep_time: 604800 # default: 0 (forever) (in seconds)

## Gitolite settings
gitolite:
#admin_uri: gitolite@localhost:gitolite-admin
admin_uri: gitolite@hogehoge.co.jp:gitolite-admin
# repos_path must not be a symlink
repos_path: /home/gitolite/repositories/
hooks_path: /home/gitolite/.gitolite/hooks/
admin_key: gitlab
upload_pack: true
receive_pack: true
#ssh_user: git
#ssh_host: localhost
ssh_user: gitolite
ssh_host: hogehoge.co.jp
# ssh_port: 22
# config_file: gitolite.conf

## Git settings
# CAUTION!
# Use the default values unless you really know what you are doing
git:
bin_path: /usr/bin/git
# Max size of git object like commit, in bytes
# This value can be increased if you have a very large commits
max_size: 5242880 # 5.megabytes
# Git timeout to read commit, in seconds
timeout: 10

5. Unicornの再起動

プロセスをkillした後に、以下のコマンドで再起動

[gitlab@redmine gitlab]$ bundle exec unicorn_rails -c config/unicorn.rb -E production -D

以上の手順でうまくいきました。

トラブルシューティング

プロジェクトのリポジトリブラウザが表示されない

ActionView::Template::Error (EPIPE):
9: .file_content.code
10: - unless blob.empty?
11: %div{class: user_color_scheme_class}
12: = raw blob.colorize(formatter: :gitlab)
13: - else
14: %p.nothing_here_message Empty file
app/models/tree.rb:5:in `colorize'
app/views/tree/blob/_text.html.haml:12:in `_app_views_tree_blob__text_html_haml___4144804886988964822_279419060'
app/views/tree/_blob.html.haml:9:in `_app_views_tree__blob_html_haml__2480152744557501861_279113160'
app/views/tree/_tree.html.haml:15:in `_app_views_tree__tree_html_haml__4221569535063967057_278722960'
app/views/tree/show.js.haml:3:in `_app_views_tree_show_js_haml___2542176536991507540_278645060'

[gitlab@redmine gitlab]$ python --version
Python 2.7.

[gitlab@redmine gitlab]$ python2
Python 2.4.3 (#1, Jan 9 2013, 06:47:03)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-54)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>

-rwxr-xr-x 2 root root 8304 1月 9 20:48 python
lrwxrwxrwx 1 root root 6 1月 17 08:10 python2 -> python
-rwxr-xr-x 2 root root 8304 1月 9 20:48 python2.4
lrwxrwxrwx 1 root root 30 12月 10 20:52 python2.7 -> /opt/python2.7.3/bin/python2.7
lrwxrwxrwx 1 root root 37 12月 10 20:52 python2.7-config -> /opt/python2.7.3/bin/python2.7-config
-rwxr-xr-x 1 root root 8304 6月 18 2012 python_bak

ん、pythonがいっぱいある(笑)

[root@redmine gitlab]# rm /usr/bin/python2
rm: remove シンボリックリンク `/usr/bin/python2'? y
[root@redmine gitlab]# ln -s /usr/bin/python2.7 /usr/bin/python2
[root@redmine gitlab]# python2 -version
Unknown option: -e
Unknown option: -r
Unknown option: -o
Unknown option: -n
Unknown option: -e
usage: python2 [option] ... [-c cmd | -m mod | file | -] [arg] ...
Try `python -h' for more information.
[root@redmine gitlab]# python2 --version
Python 2.7.3

んで、直りました。肝は、

$python2 --version

したときに、Versionが2.5+(But not 3.*)であることみたいです。

これで取り敢えず大丈夫そうです。今後の課題は、unicornの起動スクリプトの作成ですね。

Error 500 while trying to see source file ・ Issue #1774 ・ gitlabhq/gitlabhq ・ GitHub

Pygments Error ・ Issue #2214 ・ gitlabhq/gitlabhq ・ GitHub

GitLabから、リポジトリの作成・削除ができない。

Gitlab::Gitolite::AccessDenied (unable to clone gitolite-admin repo):

lib/gitlab/backend/gitolite_config.rb:69:in `rescue in apply'

lib/gitlab/backend/gitolite_config.rb:24:in `apply'

lib/gitlab/backend/gitolite_config.rb:94:in `destroy_project!'

lib/gitlab/backend/gitolite.rb:37:in `remove_repository'

app/roles/repository.rb:112:in `destroy_repository'

app/observers/project_observer.rb:13:in `after_destroy'

app/controllers/projects_controller.rb:105:in `destroy'

Rendered errors/gitolite.html.haml within layouts/errors (0.6ms)

Rendered layouts/_head.html.haml (3.0ms)

Rendered layouts/_flash.html.haml (0.5ms)

Rendered layouts/_search.html.haml (28.3ms)

Rendered layouts/_init_auto_complete.html.haml (14.9ms)

Rendered layouts/_head_panel.html.haml (54.4ms)

Completed 500 Internal Server Error in 747ms (Views: 58.7ms | ActiveRecord: 17.8ms)

Started GET "/assets/favicon-4b751da746de7855d7eb8123072388ed.ico" for 203.143.100.225 at 2013-01-24 18:46:11 +0900

Served asset /favicon-4b751da746de7855d7eb8123072388ed.ico - 200 OK (0ms)

これに関しては、設定ファイルのadmin_uriを修正することで解決しました。

admin_uri: gitolite@localhost:gitolite-admin

投稿者紹介

株式会社ユニキャスト
私たちは、テクノロジに魅せられた個性あふれるメンバーによって構成された茨城県日立市に本社を構えるベンチャー企業です。
”テクノロジを通して「驚き」と「感動」を創造し、人々の「夢」と「笑顔」を支えます。” の経営理念をモットーに明るい未来を描き、ワクワクする企画提案を続けて参ります。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください