CentOS5.10でGitBucket2.4.1のrpmを作成しインストールする方法

## 概説
ここでは、CentOS5.10の環境で、GitBucket2.4.1のrpmファイルを作成、インストールし、ログイン画面が表示されるまでを示します。

## 前提
- 作業はrootユーザーで行うこととします。
- 「rpm-build.x86_64」などビルドに必要そうなコマンドは一通りインストール済みであることとします。
- GitBucketの実行にjavaコマンドが必要になるため、事前に「java-1.7.0-openjdk」等をインストールし、javaコマンドが実行可能な状態にしておきます。

```コマンド:コマンド
# yum groupinstall "Development Tools"
# yum install rpm-build.x86_64
# yum install java-1.7.0-openjdk.x86_64
```

## 事前準備
まず、ビルドに必要な関連ファイルを所定のディレクトリにコピーします。
GitBucketのバージョン番号については、最新のモノに適宜読み替えてください。

```コマンド:コマンド
# cd ~
# git clone https://github.com/takezoe/gitbucket.git
# cp gitbucket/contrib/linux/redhat/gitbucket.spec /usr/src/redhat/SPECS/
# cp gitbucket/contrib/gitbucket.conf /usr/src/redhat/SOURCES/
# cp gitbucket/contrib/gitbucket.init /usr/src/redhat/SOURCES/
# wget https://github.com/takezoe/gitbucket/releases/download/2.4.1/gitbucket.war -O /usr/src/redhat/SOURCES/gitbucket.war
# wget https://github.com/takezoe/gitbucket/archive/2.4.1.tar.gz -O /usr/src/redhat/SOURCES/gitbucket-2.4.1.tar.gz
# rm -fr gitbucket
```

## specファイルの修正
specファイル内のバージョンの記述を最新版のモノに書き換える。

```コマンド:コマンド
事前にバックアップを取っておく
# cp /usr/src/redhat/SPECS/gitbucket.spec /usr/src/redhat/SPECS/gitbucket.spec.orig

修正箇所確認
# diff /usr/src/redhat/SPECS/gitbucket.spec /usr/src/redhat/SPECS/gitbucket.spec.orig
3c3
< Version:      2.4
---
> Version:      1.7
```

## rpmファイルの作成
下準備が揃ったので、rpmbuildコマンドでrpmファイルを作成します。

```コマンド:コマンド
# rpmbuild -ba /usr/src/redhat/SPECS/gitbucket.spec
Executing(%install): /bin/sh -e /var/tmp/rpm-tmp.57692
+ umask 022
+ cd /usr/src/redhat/BUILD
+ LANG=C
+ export LANG
+ unset DISPLAY
+ '[' /var/tmp/gitbucket-2.4-1-root '!=' / ']'
+ /bin/rm -rf /var/tmp/gitbucket-2.4-1-root
+ /bin/mkdir -p /var/tmp/gitbucket-2.4-1-root/etc/init.d /var/tmp/gitbucket-2.4-1-root/etc/sysconfig '/var/tmp/gitbucket-2.4-1-root%{_datarootdir}/gitbucket/lib' /var/tmp/gitbucket-2.4-1-root/usr/com/gitbucket /var/tmp/gitbucket-2.4-1-root/var/log/gitbucket
+ /usr/bin/install -m 0644 /usr/src/redhat/SOURCES/gitbucket.war '/var/tmp/gitbucket-2.4-1-root%{_datarootdir}/gitbucket/lib'
+ /usr/bin/install -m 0755 /usr/src/redhat/SOURCES/gitbucket.init /var/tmp/gitbucket-2.4-1-root/etc/init.d/gitbucket
+ /usr/bin/install -m 0644 /usr/src/redhat/SOURCES/gitbucket.conf /var/tmp/gitbucket-2.4-1-root/etc/sysconfig/gitbucket
+ touch /var/tmp/gitbucket-2.4-1-root/var/log/gitbucket/run.log
+ /usr/lib/rpm/redhat/brp-compress
+ /usr/lib/rpm/redhat/brp-strip /usr/bin/strip
+ /usr/lib/rpm/redhat/brp-strip-static-archive /usr/bin/strip
+ /usr/lib/rpm/redhat/brp-strip-comment-note /usr/bin/strip /usr/bin/objdump
+ /usr/lib/rpm/brp-python-bytecompile
+ /usr/lib/rpm/redhat/brp-java-repack-jars
Processing files: gitbucket-2.4-1
error: File must begin with "/": %{_datarootdir}/gitbucket/lib/gitbucket.war
Checking for unpackaged file(s): /usr/lib/rpm/check-files /var/tmp/gitbucket-2.4-1-root


RPM build errors:
    File must begin with "/": %{_datarootdir}/gitbucket/lib/gitbucket.war
```

残念ながら「File must begin with "/": %{_datarootdir}/gitbucket/lib/gitbucket.war」というエラーが発生しました。
どうやら、「%{_datarootdir}」の部分が正しい文字列に置き換わっていないため、パスが不正となっているようです。
では、「%{_datarootdir}」を何に書き換えればよいかということで、手がかりになりそうな「gitbucket.conf」を開きます。

```コマンド:コマンド
# vim /usr/src/redhat/SOURCES/gitbucket.conf

・
・
省略
・
・
# Directory where GitBucket is installed
# Configuration is stored here:
GITBUCKET_DIR=/usr/share/gitbucket <=== それっぽい
GITBUCKET_WAR_DIR=$GITBUCKET_DIR/lib
```

「GITBUCKET_DIR」として定義されている「/usr/share/gitbucket」がすごくそれっぽいので、これに置き換えます。

```コマンド:コマンド
# vim /usr/src/redhat/SPECS/gitbucket.spec

実行
:%s/%{_datarootdir}/\/usr\/share/g

修正箇所確認
# diff /usr/src/redhat/SPECS/gitbucket.spec /usr/src/redhat/SPECS/gitbucket.spec.orig
3c3
< Version:      2.4
---
> Version:      1.7
23,24c23,24
< %{__mkdir_p} %{buildroot}{%{_sysconfdir}/{init.d,sysconfig},/usr/share/%{name}/lib,%{_sharedstatedir}/%{name},%{_localstatedir}/log/%{name}}
< %{__install} -m 0644 %{SOURCE0} %{buildroot}/usr/share/%{name}/lib
---
> %{__mkdir_p} %{buildroot}{%{_sysconfdir}/{init.d,sysconfig},%{_datarootdir}/%{name}/lib,%{_sharedstatedir}/%{name},%{_localstatedir}/log/%{name}}
> %{__install} -m 0644 %{SOURCE0} %{buildroot}%{_datarootdir}/%{name}/lib
36c36
< /usr/share/%{name}/lib/%{name}.war
---
> %{_datarootdir}/%{name}/lib/%{name}.war
```

rpmbuildコマンドでビルドの再実行を行います。

```コマンド:コマンド
# rpmbuild -ba /usr/src/redhat/SPECS/gitbucket.spec
Executing(%install): /bin/sh -e /var/tmp/rpm-tmp.4672
+ umask 022
+ cd /usr/src/redhat/BUILD
+ LANG=C
+ export LANG
+ unset DISPLAY
+ '[' /var/tmp/gitbucket-2.4-1-root '!=' / ']'
+ /bin/rm -rf /var/tmp/gitbucket-2.4-1-root
+ /bin/mkdir -p /var/tmp/gitbucket-2.4-1-root/etc/init.d /var/tmp/gitbucket-2.4-1-root/etc/sysconfig /var/tmp/gitbucket-2.4-1-root/usr/share/gitbucket/lib /var/tmp/gitbucket-2.4-1-root/usr/com/gitbucket /var/tmp/gitbucket-2.4-1-root/var/log/gitbucket
+ /usr/bin/install -m 0644 /usr/src/redhat/SOURCES/gitbucket.war /var/tmp/gitbucket-2.4-1-root/usr/share/gitbucket/lib
+ /usr/bin/install -m 0755 /usr/src/redhat/SOURCES/gitbucket.init /var/tmp/gitbucket-2.4-1-root/etc/init.d/gitbucket
+ /usr/bin/install -m 0644 /usr/src/redhat/SOURCES/gitbucket.conf /var/tmp/gitbucket-2.4-1-root/etc/sysconfig/gitbucket
+ touch /var/tmp/gitbucket-2.4-1-root/var/log/gitbucket/run.log
+ /usr/lib/rpm/redhat/brp-compress
+ /usr/lib/rpm/redhat/brp-strip /usr/bin/strip
+ /usr/lib/rpm/redhat/brp-strip-static-archive /usr/bin/strip
+ /usr/lib/rpm/redhat/brp-strip-comment-note /usr/bin/strip /usr/bin/objdump
+ /usr/lib/rpm/brp-python-bytecompile
+ /usr/lib/rpm/redhat/brp-java-repack-jars
Processing files: gitbucket-2.4-1
Provides: config(gitbucket) = 2.4-1
Requires(rpmlib): rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1
Requires: /bin/bash config(gitbucket) = 2.4-1 java >= 1.7
Checking for unpackaged file(s): /usr/lib/rpm/check-files /var/tmp/gitbucket-2.4-1-root
Wrote: /usr/src/redhat/SRPMS/gitbucket-2.4-1.src.rpm
Wrote: /usr/src/redhat/RPMS/noarch/gitbucket-2.4-1.noarch.rpm <=== rpmファイルが作成されました
Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.7258
+ umask 022
+ cd /usr/src/redhat/BUILD
+ '[' /var/tmp/gitbucket-2.4-1-root '!=' / ']'
+ /bin/rm -rf /var/tmp/gitbucket-2.4-1-root
+ exit 0
```

今度は正しく処理が終了し、rpmファイルが作成されました。

```コマンド:コマンド
# ls -l /usr/src/redhat/RPMS/noarch/gitbucket-2.4-1.noarch.rpm
-rw-r--r-- 1 root root 50521338 Oct 10 18:12 /usr/src/redhat/RPMS/noarch/gitbucket-2.4-1.noarch.rpm
# ls -l /usr/src/redhat/SRPMS/gitbucket-2.4-1.src.rpm
-rw-r--r-- 1 root root 50521018 Oct 10 18:12 /usr/src/redhat/SRPMS/gitbucket-2.4-1.src.rpm
```

## 作成したGitBucket2.4.1のrpmをインストールする

```コマンド:コマンド
# rpm -Uvh /usr/src/redhat/RPMS/noarch/gitbucket-2.4-1.noarch.rpm
error: Failed dependencies:
        java >= 1.7 is needed by gitbucket-2.4-1.noarch
```

javaのバージョンが古いと怒られ、インストールに失敗しましたので、javaのバージョンを確認します。

```コマンド:コマンド
# java -version
java version "1.7.0_65"
OpenJDK Runtime Environment (rhel-2.5.1.2.el5_10-x86_64 u65-b17)
OpenJDK 64-Bit Server VM (build 24.65-b04, mixed mode)
```

確かに、バージョン1.7以上のjavaがインストールされているようなので、「--nodeps」で無視して入れちゃいます。

```コマンド:コマンド
# rpm -Uvh --nodeps /usr/src/redhat/RPMS/noarch/gitbucket-2.4-1.noarch.rpm
Preparing...                ########################################### [100%]
   1:gitbucket              ########################################### [100%]
```

「%{_datarootdir}」を「/usr/share」に書き換えた部分が気になるので、「GITBUCKET_WAR_DIR」として定義されていた、「/usr/share/gitbucket/lib」配下にwarファイルが作成されているか確認します。

```コマンド:コマンド
# ls -l /usr/share/gitbucket/lib/gitbucket.war
-rw-r--r-- 1 root root 51074315 Oct 10 18:12 /usr/share/gitbucket/lib/gitbucket.war
```

起動スクリプトの「/etc/rc.d/init.d/gitbucket」がそのままではCentOS5で動作しないため、一部書き換えます。


```コマンド:コマンド
事前にバックアップを取っておく
# cp /etc/rc.d/init.d/gitbucket /etc/rc.d/init.d/gitbucket.orig

修正箇所確認
# diff /etc/rc.d/init.d/gitbucket /etc/rc.d/init.d/gitbucket.orig
13c13
< #set -e
---
> set -e
16c16
< #[ -f /etc/rc.common ] && source /etc/rc.common # Mac OS/X
---
> [ -f /etc/rc.common ] && source /etc/rc.common # Mac OS/X
24c24
< #[ -f gitbucket.conf ] && source gitbucket.conf  # For all systems
---
> [ -f gitbucket.conf ] && source gitbucket.conf  # For all systems
34c34
< #if [ -z "$(which success)" ]; then
---
> if [ -z "$(which success)" ]; then
38,39c38,39
< #fi
< #if [ -z "$(which failure)" ]; then
---
> fi
> if [ -z "$(which failure)" ]; then
43c43
< #fi
---
> fi
```

GitBucketのサービスを起動します。

```コマンド:コマンド
# service gitbucket start
Starting GitBucket server:  Success
```

http://path_to_domain:8080 にアクセスすると、ログイン画面が表示されます。
初期状態では、「Username:root / Password:root」でログイン可能です。

![gitbucket_login.PNG](https://qiita-image-store.s3.amazonaws.com/0/23093/25c01bc1-936a-d841-6d5f-2df1993d9626.png)

## 参考URL

[GitBucket-CentOS](https://gist.github.com/kheiakiyama/1373a152ebd34d87d111)
[GitBucket 2.1のRPMを作成する](http://www.torutk.com/issues/14)
[GitLabとGitBucketとお試しインストール](http://d.hatena.ne.jp/torutk/20140622/p1)