GitLabをSlackwareへインストールする

提供: Akionux-wiki
Share/Save/Bookmark
移動: 案内検索

概要

GitLabはオープンソースなGitHubクローンの一つである。 ここでは、GitLabをSlackware Linuxへインストールする手順を私のSlackware環境へのインストール作業経験に基づいて説明する。

手順は[1]および[2]を参考にした。

必要なもの

公式のrequirementsを参考のこと。

GitLab v7.1.1時点の主な依存ソフトウェア:

ruby 2.0+

Slackware 14.1にインストールされていたのは1.9だったので新しいバージョンを後述の通りインストールした。

git 1.7.10+

この記事ではインストール作業の説明は割愛する。

redis 2.0+

インストール手順を後述する。

データベース

この記事ではMySQLがインストールされている前提で説明する。

redisのインストール

SlackBuildsの

  • system/redis

をインストールすれば良い。

起動時に実行するように

sudo vim /etc/rc.d/rc.local

で次のような行を加える:

# Start redis-server
if [ -x /etc/rc.d/rc.redis ]; then
  /etc/rc.d/rc.redis start
fi

rubyのインストール

rubyをソースコードから自分でビルドしてもよいが、slackware64-14.1のソースコードにあるSlackBuildを使ってビルドするとslackware向けの各種設定をしてくれるのでより良いだろう。 適当な場所にslackware64-14.1のrubyのSlackBuildのソースコードをダウンロードする:

mkdir -p ~/Downloads/slackware/slackware64-14.1_mod/source/d/ruby
cd ~/Downloads/slackware/slackware64-14.1_mod/source/d/ruby
wget http://ftp.slackware.com/pub/slackware/slackware64-14.1/source/d/ruby/ruby.SlackBuild http://ftp.slackware.com/pub/slackware/slackware64-14.1/source/d/ruby/slack-desc
wget https://cache.ruby-lang.org/pub/ruby/2.1/ruby-2.1.8.tar.gz

ruby.SlackBuildのtar.gzファイルの名前からバージョンを切り出している部分を変更する必要がある。

vim ruby.SlackBuild

25行目のバージョンの切り出し方を次のように変更して保存する:

VERSION=$(echo $PKGNAM-*.tar.?z* | rev | cut -f 3- -d . | cut -f 1,3 -d - | rev)

実行権限を与えて実行:

chmod +x ruby.SlackBuild
sudo ./ruby.SlackBuild

できたパッケージをインストールする:

sudo /sbin/upgradepkg --install-new /tmp/ruby-2.1.8-x86_64-1.txz
which ruby
ruby -v

で新しいバージョンがインストールされているか確認する。 bundlerをインストールしておく。

sudo gem install bundler --no-ri --no-rdoc

ソースコードからインストールしたrubyのアンインストール

以前にソースコードからインストールしたものをアンインストールするには、ソースコードのあるディレクトリで

cat .installed.list | sudo xargs rm -f

とする[3]

MySQLの準備

次のコマンドでrootユーザーでmysqlに入る:

mysql -u root -p

次のコマンドで必要なユーザーとデータベースを作成する:

CREATE USER 'gitlab'@'localhost' IDENTIFIED BY 'supersecret';
CREATE DATABASE IF NOT EXISTS `gitlabhq_production` DEFAULT CHARACTER SET `utf8` COLLATE `utf8_unicode_ci`;
GRANT SELECT, LOCK TABLES, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER ON `gitlabhq_production`.* TO 'gitlab'@'localhost';
flush privileges;
\q

Git-Shellのインストール

最新安定版をGitHubで確認。2014年8月1日時点ではv1.9.6。

su git
git clone https://github.com/gitlabhq/gitlab-shell.git
cd gitlab-shell
git checkout v1.9.6
cp config.yml.example config.yml

config.ymlには自分のgitlabサーバーのURLやredis-cliのパスを指定するところがあるので環境に合わせて設定を行う。

(4行目あたり)
# Url to gitlab instance. Used for api calls. Should end with a slash.
# Default: http://localhost:8080/
# You only have to change the default if you have configured Unicorn
# to listen on a custom port, or if you have configured Unicorn to
# only listen on a Unix domain socket.
gitlab_url: "http://gitlab.akionux.net/"
(27行目あたり)
# Redis settings used for pushing commit notices to gitlab
redis:
  bin: /usr/local/bin/redis-cli
  host: 127.0.0.1
  port: 6379
  # socket: /tmp/redis.socket # Only define this if you want to use sockets
  namespace: resque:gitlab

config.ymlを編集後、

./bin/install

を実行。

GitLab

最新安定版をGitHubで確認。2014年8月1日時点ではv7.1.1。

git checkout v7.1.1

gitlab-satellitesフォルダを作る:

mkdir /home/git/gitlab-satellites
chmod u+rwx,g=rx,o-rwx /home/git/gitlab-satellites

細々した設定

cd /home/git/gitlab
cp config/gitlab.yml.example config/gitlab.yml
chown -R git log/
chown -R git tmp/
chmod -R u+rwX  log/
chmod -R u+rwX  tmp/
chmod -R u+rwX  tmp/pids/
chmod -R u+rwX  tmp/sockets/
chmod -R u+rwX  public/uploads

cp config/unicorn.rb.example config/unicorn.rb

sudo -u git -H git config --global user.name "GitLab"
sudo -u git -H git config --global user.email "gitlab@your_domain_name"
sudo -u git -H git config --global core.autocrlf input

cp database.yml.mysql database.yml
chmod o-rwx config/database.yml
gem install charlock_holmes --version '0.6.9.4'

インストール:

bundle install --deployment --without=development test postgres
bundle exec rake gitlab:setup RAILS_ENV=production

config/gitlab.ymlがGitLab全体の設定となるので、自分の環境に合わせて設定する。 とりあえずは自分のサーバーのホスト名を設定しておく必要があるだろう。 config/gitlab.ymlの10行目あたりの設定例:

production: &base
  #
  # 1. GitLab app settings
  # ==========================

  ## GitLab settings
  gitlab:
    ## Web server settings (note: host is the FQDN, do not include http://)
    host: your_hostname.net
    port: 80
    https: false

起動スクリプトのインストール

GitLabは起動スクリプトを用意してくれているので、起動スクリプトフォルダへコピーする:

sudo cp lib/support/init.d/gitlab /etc/rc.d/rc.gitlab

/etc/rc.d/rc.localに追記:

# Start gitlab
if [ -x /etc/rc.d/rc.gitlab ]; then
  /etc/rc.d/rc.gitlab start
fi

チェック

インストールができているかチェックするには次のコマンドを入力:

bundle exec rake gitlab:check RAILS_ENV=production

問題箇所があれば修正を施し、再びチェックする…というのを繰り返す。

Slackwareの場合はおそらくチェック項目のInit script exists?に関してはnoで良い。

Webサーバーの設定

nginxを使う場合

GitLabはnginxを公式サポートされているWebサーバーとしている。 私の環境では後述のapacheをWebサーバーとして用いたが、一応GitLab公式サイトの説明[2]からnginxの設定方法を引用しておく。 インストール

sudo apt-get install -y nginx

サイト設定例をコピーする:

sudo cp lib/support/nginx/gitlab /etc/nginx/sites-available/gitlab
sudo ln -s /etc/nginx/sites-available/gitlab /etc/nginx/sites-enabled/gitlab

自分の環境に合うように設定ファイルを書き換える:

# Change YOUR_SERVER_FQDN to the fully-qualified
# domain name of your host serving GitLab.
sudo editor /etc/nginx/sites-available/gitlab

httpsを使う場合はgitlab-sslの方の設定ファイルを用いる。

再起動する:

sudo service nginx restart

Apache2を使う場合

PassengerというRailsアプリケーションをapache上で動かすためのモジュールを用いることでApache2でもGitLabを稼働させることができる[4]

gemからpassengerをインストール:

# gem install passenger --no-rdoc --no-ri

次のコマンドでApacheモジュールをインストールする:

# passenger-install-apache2-module

インストールがうまく行ったらApacheの設定ファイル(httpd.conf)に追記すべき設定が表示される。次の内容を/etc/httpd/httpd.confに追記する:

LoadModule passenger_module /usr/local/lib/ruby/gems/2.0.0/gems/passenger-4.0.48/buildout/apache2/mod_passenger.so
<IfModule mod_passenger.c>
PassengerRoot /usr/local/lib/ruby/gems/2.0.0/gems/passenger-4.0.48
PassengerDefaultRuby /usr/local/bin/ruby
</IfModule>

/etc/httpd/httpd.confに追記しなくとも、別に/etc/httpd/conf.d/passenger.confのような設定ファイルを作成してhttpd.confないでIncludeしても良い。

Include /etc/httpd/conf.d/passenger.conf

apacheの設定

apacheユーザーをgitグループに加える:

# usermod -G git apache

gitグループに/home/gitの読み取り権限を与える:

# chmod g+rX /home/gitlabhq

GitLab用のバーチャルホストの設定を行う:

# vim /etc/httpd/extra/httpd-vhosts.conf

https://gitlab.com/gitlab-org/gitlab-recipes/tree/master/web-server/apache にある最新のapacheの設定を参考にapacheの設定をする。 変更したのは、

  • SSLCertificate*の値を変更。
  • YOUR_SERVER_FQDNを自分のドメイン名に置換。
  • ErrorLogおよびCustomLogの場所を変更。

apacheを再起動する:

# /etc/rc.d/rc.httpd restart

gitlab-recipes

gitlab-recipesというリポジトリにレシピ集があるので必要に応じて参考にする。

# su git
% cd
% git clone https://gitlab.com/gitlab-org/gitlab-recipes.git

完了

これでGitLabのインストール作業は終了である。 バーチャルホストへアクセスしてみると、最初は少しアクセスに時間がかかるが、Sign Inのページが表示される。

初回ログインはユーザー名root、パスワード5iveL!feで入ることができ、改めてrootユーザーのパスワード設定が求められる。

rootユーザーでログインし、"Admin area"からNew Userで利用者アカウントを作成する。

なお、GitLabのインターフェースがうまく表示されていて、プロジェクトの追加やSSH公開鍵の追加などの操作ができているように見えるが実際はうまく機能していないことがある。 そんなときは、サーバー上でsidekiqというプロセスが動いているか確認してみる:

 $ ps ax |grep side
 17386 ?        Sl     0:10 sidekiq 2.17.0 gitlab [0 of 25 busy]

または、gitlabのチェックスクリプトの結果を今一度確認してみる。

cd /home/git/gitlab
bundle exec rake gitlab:check RAILS_ENV=production

HTTPSを使う場合

[5][6]を参考にした。

  • Webサーバーの設定でHTTPSでのアクセスを可能にする。apache2(httpd.conf)の例:
<VirtualHost *:443>
        DocumentRoot /home/git/gitlab/public
        ServerName gitlab.yourdomain.net
        ErrorLog /var/log/httpd/gitlab.yourdomain.net-error_log
        CustomLog /var/log/httpd/gitlab.yourdomain.net-access_log common
        <Directory /home/git/gitlab/public>
                Options +FollowSymLinks
                AllowOverride All
                Require all granted
                # MultiViews must be turned off.
                Options -MultiViews
        </Directory>    
        #SSL Engine Switch:
        #Enable/Disable SSL for this virtual host.
        SSLEngine on
        SSLCertificateFile "/path/to/ssl/cert.pem"
        SSLCertificateKeyFile "/path/to/ssl/privkey.pem"
        SSLCertificateChainFile "/path/to/ssl/chain.pem" 
</VirtualHost>
gitlab_url: "https://gitlab.yourdomain.net/"

https_settings:
#  user: someone
#  password: somepass
#  ca_file: /etc/ssl/cert.pem
#  ca_path: /etc/pki/tls/certs
  ca_file: /path/to/ssl/cert.pem
  ca_path: /path/to/ssl
  self_signed_cert: false

自己署名証明書を使う場合はself_signed_cert: trueにする。

  • gitlab/config/gitlab.ymlの最初のあたりを編集:
production: &base
  #
  # 1. GitLab app settings
  # ==========================

  ## GitLab settings
  gitlab:
    ## Web server settings (note: host is the FQDN, do not include http://)
    host: gitlab.yourdomain.net
    port: 443
    https: true

v7.1.1からv8.4.0へのアップデートにおけるメモ

GitLab v7.1.1からv8.4.0.preまで一気にアップグレードしたが今のところ問題は出ていない(たぶん推奨されている方法ではない)。

8.0から8.1へのアップデートで大きな変更があった(gitlab-workhorseの導入)ようなので、そのアップグレードでの変更点に注意した。 基本的にはソースコードからのインストール方法Universal update guide for patch versionsから必要な部分だけ手順に従った。

バックアップを取る

8.0から8.1へのアップデートの手順通り:

cd /home/git/gitlab
sudo -u git -H bundle exec rake gitlab:backup:create RAILS_ENV=production

rubyのアップデート

rubyを2.1系にアップデートしたが、後にbundleするところで2.2以上じゃないとだめなパッケージがあったので、結局2.2.4p230にアップグレードした。

Goのインストール

Goが必要になったらしいのでソースコードからのインストール方法の手順コピペでインストール。

curl -O --progress https://storage.googleapis.com/golang/go1.5.3.linux-amd64.tar.gz
echo '43afe0c5017e502630b1aea4d44b8a7f059bf60d7f29dfd58db454d4e4e0ae53  go1.5.3.linux-amd64.tar.gz' | shasum -c - && \
  sudo tar -C /usr/local -xzf go1.5.3.linux-amd64.tar.gz
sudo ln -sf /usr/local/go/bin/{go,godoc,gofmt} /usr/local/bin/
rm go1.5.3.linux-amd64.tar.gz

gitlab-shellのアップデート

ここは8.3から8.4へのアップデートの手順に従った:

cd /home/git/gitlab-shell
sudo -u git -H git fetch --all
sudo -u git -H git checkout v2.6.10

gitlab-workhorseのインストール

8.1から導入されたとのことなので、新たにインストールする:

cd /home/git
sudo -u git -H git clone https://gitlab.com/gitlab-org/gitlab-workhorse.git
cd gitlab-workhorse
sudo -u git -H git checkout 0.5.4
sudo -u git -H make

/etc/default/gitlabを次のように作成[7]

gitlab_workhorse_options="-listenUmask 0 -listenNetwork tcp -listenAddr 127.0.0.1:8181 -authBackend http://127.0.0.1:8080"

Install libs, migrations, etc.

Universal update guide for patch versionsの手順5以降(mysqlの場合):

# MySQL installations (note: the line below states '--without postgres')
sudo -u git -H bundle install --without postgres development test --deployment

この時点でtimfel-krb5-authのインストール中にkrb5が見つからないと怒られたので、SlackBuildから

  • network/krb5

をインストールし、gem installでインストールできるか試してみた。 gem installでのtimfel-krb5-authのインストールには、次のように--with-opt-include=/usr/kerberos/include --with-opt-lib=/usr/kerberos/libを付け加える必要があった:

sudo gem install timfel-krb5-auth -v '0.8.3' -- --with-opt-include=/usr/kerberos/include --with-opt-lib=/usr/kerberos/lib

でgemでインストールはできたのだが、bundle経由でオプションインクルードパスおよびライブラリパスを渡す方法を知らないので、とりあえずはtimfel-krb5-authが含まれているkerberosグループ抜きにしてbundleを実行することにした:

sudo -u git -H bundle install --without postgres development test kerberos --deployment

そして次の

sudo -u git -H bundle exec rake db:migrate RAILS_ENV=production

でまた問題発生

rake aborted!
Bundler::GemRequireError: There was an error while trying to load the gem 'coffee-rails'.
/home/git/gitlab/config/application.rb:6:in `<top (required)>'
/home/git/gitlab/Rakefile:5:in `require'
/home/git/gitlab/Rakefile:5:in `<top (required)>'
ExecJS::RuntimeUnavailable: Could not find a JavaScript runtime. See https://github.com/rails/execjs for a list of available runtimes.
...

JavaScriptランタイムが無いとのこと。

Gemfileにtherubyracerを追加:

gem "therubyracer"

また

sudo -u git -H bundle install --without=postgres timfel-krb5-auth development test kerberos --no-deployment
sudo -u git -H bundle install --without=postgres timfel-krb5-auth development test kerberos --deployment

で、Universal update guide for patch versionsの手順をやり直し:

sudo -u git -H bundle exec rake db:migrate RAILS_ENV=production
sudo -u git -H bundle exec rake assets:clean assets:precompile cache:clear RAILS_ENV=production

public/uploads

public/uploadsが必要とのことなので作成。

# su git
% cd ~/gitlab
% mkdir -m 750 /home/git/gitlab/public/uploads

設定ファイルの更新

次は設定ファイルのバックアップと更新。だいぶんバージョンを上げるので、元の設定ファイルを移動して、最新の設定例をコピーし編集しなおした:

mv config/gitlab.yml config/gitlab.yml.7.1.1
cp config/gitlab.yml.example config/gitlab.yml
vim config/gitlab.yml

initスクリプトの更新

initスクリプトを更新

sudo cp lib/support/init.d/gitlab /etc/rc.d/rc.gitlab

Signupの設定

GitLab v7.1.1時点ではあった新しいアカウントを誰でも作れないようにするためのconfig/gitlab.yml内の設定

signup_enabled: false

が少なくともGitLab v8.4.0.preでは効かなくなっていて[8]、かつデフォルトの設定ではSignupが有効つまり誰でもGitlabのページからアカウントを作れるようになっている。 admin権限のあるユーザーのページからAdmin Area->左下のほうにあるSettings->Sign-in Restrictions->Sign-up enabledのチェックを外してSaveすればSignupが無効になる。

apacheの設定

https://gitlab.com/gitlab-org/gitlab-recipes/tree/master/web-server/apache にある最新のapacheの設定をする。

v8.4.0からv8.17へのアップデートにおけるメモ

ここを読んだ。

gitlab

v8.17のチェックアウト

sudo su git
cd ~/gitlab
git checkout -- db/schema.rb # local changes will be restored automatically
git checkout 8-17-stable

Slackwareを14.0から14.2にアップグレードしたために、共有ライブラリのバージョンが変わったので、ruby関連をインストールしなおすためvendor/bundleを移動した:

mv vendor/bundle vendor/bundle.bak

インストール

bundle install --deployment --without=development test postgres
bundle exec rake db:migrate RAILS_ENV=production
npm install --production

gitlab-workhorse

bundle exec rake "gitlab:workhorse:install[/home/git/gitlab-workhorse]" RAILS_ENV=production

gitlab-shell

cd ../gitlab-shell
git fetch --all --tags
git checkout v4.1.1

設定ファイルの更新

設定ファイルの更新部分を確認

git diff origin/8-4-stable:config/gitlab.yml.example origin/8-17-stable:config/gitlab.yml.example

GitLab使用上の注意

リポジトリ名が小文字になる

GitLabは少なくともv7.1.1時点では、リポジトリ名はプロジェクト名を小文字にした名前になる[9][10]。 プロジェクトによってはリポジトリ名に大文字が必要な場合があるだろう。

対策として、プロジェクト作成時に、"Customize repository name?"の欄に改めてリポジトリ名を入力する。

また、プロジェクトを作成してから、Settings->Dangerous settings->Rename repositoryでリネームしようとしたら、v7.1.1の私の環境ではリネームをすると500番のエラーが出てしまう上、プロジェクトが空になってしまった。 これは結局、サーバー上のリポジトリ名を直接変えてやると直った。

cd /home/git/repositories/hoge
mv project.git Project.git

トラブルシューティング

SSH公開鍵の問題

GitLabとは関係なくすでに.ssh/authorized_keysに登録されている公開鍵をGitLabで登録すると、おかしなことになる[11]

そのため、すでにサーバーへ公開鍵を登録してある場合でもGitLab専用にSSH公開鍵・秘密鍵ペアを作成する必要がある。

ブラウザ上で編集してコミットしようとしてもうまくできない

ブラウザからGitLabの編集画面でファイルを変更し、コミットしても"Your changes could not be committed, because file has been changed"と言われてコミットできないことがあった。 この症状が出たときgitlab/log/githost.logには

remote: error: hook declined to update refs/heads/master
To /home/git/repositories/akionux/wavanalyzer.git
 ! [remote rejected] master -> master (hook declined)
error: failed to push some refs to '/home/git/repositories/akionux/wavanalyzer.git'

というエラーが記録されていた。

これはgit-shell/hooks/updateに起因していて、一行目の

#!/usr/bin/env ruby

#!/usr/bin/local/ruby

に書き換えたら解決した[12][13]

References

  1. Chern Sung Yoon, Gitlab Install, Slackware 13.37 or 14.1 - KotelTech
  2. 2.0 2.1 gitlabhq/installation.md at master · gitlabhq/gitlabhq
  3. ソースからコンパイルインストールしたRubyをアンインストールする手順 | WEB ARCH LABO http://weblabo.oscasierra.net/uninstall-ruby-1/
  4. GitLab を Apache2 + Passenger で動かしてみる - akishin999の日記
  5. 何かの会長のブログ: gitlabの設定でハマった点 http://mudanakaigi.blogspot.jp/2013/10/gitlab.html
  6. GitLab に HTTPS でアクセスできるようにする https://ez-net.jp/article/C2/b2FeQWpO/waL2e8toVhnu/
  7. web-server/apache · master · GitLab.org / GitLab recipes · GitLab https://gitlab.com/gitlab-org/gitlab-recipes/tree/master/web-server/apache
  8. signup_enabled: false in gitlab.yml doesn't work (#982) · Issues · GitLab.org / GitLab Community Edition · GitLab https://gitlab.com/gitlab-org/gitlab-ce/issues/982
  9. Allow camelCase / PascalCase repo names – Feature request forum for GitLab http://feedback.gitlab.com/forums/176466-general/suggestions/4023462-allow-camelcase-pascalcase-repo-names
  10. Gitlab forcing lowercase repo names · Issue #2687 · gitlabhq/gitlabhq https://github.com/gitlabhq/gitlabhq/issues/2687
  11. volanja, gitlabへのpush時に「does not appear to be a git repository」と表示されるときの対策 - Qiita
  12. Your changes could not be committed, because file has been changed · Issue #4064 · gitlabhq/gitlabhq
  13. GitLab.org / GitLab Community Edition - GitLab