最小構成のCentOS7にRPMコマンドでGitLabをインストールしてみた

# CentOS7の最小構成にGitLabをインストールしてみた
僕はプログラマではないので、Gitを使ったことがない。だが、会社でサーバを管理していると、Configファイルの追加・修正は頻繁に行っている。Configを変更する際にはバックアップを取っているのだが、なんでその変更を行ったのかの管理はエクセルで実施していた。このエクセルでの修正がかなり面倒で、非生産的な仕事になっている。
Gitの使い方を雑誌などで読むと、プログラムのソースコード管理しかできないわけではなく、configファイルのバージョン管理にも十分使えそうだということがわかってきた。
ということで、会社にGitサーバを建てる前にGitとはどういうものなのか、どう使えば良いのかを試すためにGitLabサーバを自分の家に建ててみた。

## yumを使わずにrpmだけでGitLabをインストールする
会社のサーバが置かれているセグメントはInternetに対する接続性がない。ここにGitLabのサーバを作ることを考えるとGitLabはリポジトリを追加して、yumコマンドでインストール一発！というわけには行かない。そこで、rpmを取ってきてrpmコマンドでインストールしてみた。

## CentOS7の最小構成インストール
VirtualBoxにCentOS7を最小構成でインストールする。この辺の手順は割愛。

VirtualPCを作るときに、[公式ページ](https://about.gitlab.com/installation/#centos-7)に、"We also strongly recommend at least 4GB of free memory to run GitLab." なんてことが書いてあるので、メモリは4G以上にしておく。

## 公式の手順を確認する
GitLab公式の手順ではyumを使ったり、curlをつかったりしてインストールすることになっているが、yumを使わないでインストールするためにGitLabの [GitLab公式](https://about.gitlab.com/installation/#centos-7)に書いてある必要なものを確認し、インストールする。

まず、公式では

```
sudo yum install -y curl policycoreutils-python openssh-server
```
をやれと書いてある。
CentOS7のインストールを最小構成で行うと、`curl`と`openssh-server`は初めからインストールされている。しかし`policycoreutils-python`はインストールされていない。

また、

```
sudo systemctl enable sshd
sudo systemctl start sshd
```
でsshサーバを起動するように書いてあるが、これもインストールするとsshサーバは自動で起動するようになっている。
自動でsshdが起動するようになっているが、rootでもリモートからsshログインできてしまうので、/etc/ssh/sshd_configを編集してこれをできないようにしておく。

```
$ sudo /etc/ssh/sshd_config
PermitRootLogin No

$ sudo systemctl restart sshd.service
```
firewalldでhttpの穴が空いていないのでポリシーを追加する。
ちなみに、一般的なサービスは[以前書いた](https://qiita.com/dolcano/items/fc676d57942dba2c6b4a)ように穴を開けるのではなく、多くの場合以下のように開けるのが普通らしい。

```
$ sudo firewall-cmd --permanent --add-service=http
$ sudo systemctl reload firewalld
```
次にpostfixをインストールするように書かれているが、これも初めからインストールされていて、自動起動するようになっているので以下は、特にやる必要はない。

``` 
sudo yum install postfix
sudo systemctl enable postfix
sudo systemctl start postfix
```

## rpmファイルを取ってくる
`policycoreutils-python`がインストールされていないので、RPMファイルをどこかのCentOS7のミラーサーバから取ってくる。僕がよく使うのは、理研さんのところで[os](http://ftp.riken.go.jp/Linux/centos/7/os/x86_64/Packages/)と[updates](http://ftp.riken.go.jp/Linux/centos/7/updates/x86_64/Packages/)からダウンロードする。

## RPMファイルをインストールする
さて、取ってきた`policycoreutils-python-2.5-22.el7.x86_64.rpm`をrpmコマンドでインストールしようとすると、依存関係が満たされていないといって怒られてしまう。
依存関係を満たすまで、rpmを取ってきては入れ、取ってきては入れ、とやればよいのだが、いつ依存関係が解消されるのかわからない。そこでチートだが、rpmの依存関係がどうなっているのかを一発で調べるため、internetに接続環境があるところで、yumコマンドをつかって必要なrpmファイルを調べてみる。（ここでインストールしたらつまらないので、インストールはしない）

すると、`policycoreutils-python-2.5-22.el7.x86_64.rpm`をインストールするには、以下のものが必要であることがわかった。

```
audit-libs-2.8.1-3.el7_5.1.x86_64.rpm
audit-libs-python-2.8.1-3.el7_5.1.x86_64.rpm
checkpolicy-2.5-6.el7.x86_64.rpm
libcgroup-0.41-15.el7.x86_64.rpm
libsemanage-python-2.5-11.el7.x86_64.rpm
policycoreutils-python-2.5-22.el7.x86_64.rpm
python-IPy-0.75-6.el7.noarch.rpm
setools-libs-3.3.8-2.el7.x86_64.rpm
```
これらも、個別にダウンロードしておく。

また、[GitLabのRPM](https://packages.gitlab.com/gitlab/gitlab-ce)をダウンロードしてくる。

## 一気にインストール！
取ってきたrpmファイルを一気にインストールする。普通は一つ一つ指定してインストールする。

```
$ sudo rpm -ivh audit-libs-2.8.1-3.el7_5.1.x86_64.rpm audit-libs-python-2.8.1-3.el7_5.1.x86_64.rpm checkpolicy-2.5-6.el7.x86_64.rpm libcgroup-0.41-15.el7.x86_64.rpm libsemanage-python-2.5-11.el7.x86_64.rpm policycoreutils-python-2.5-22.el7.x86_64.rpm python-IPy-0.75-6.el7.noarch.rpm setools-libs-3.3.8-2.el7.x86_64.rpm gitlab-ce-11.2.5-ce.0.el7.x86_64.rpm
```

こんなやり方でインストールする方法もある。数が多くて面倒なとき。

```
$ pwd
/home/hoge/git
$ ls 
audit-libs-2.8.1-3.el7_5.1.x86_64.rpm         gitlab-ce-11.2.5-ce.0.el7.x86_64.rpm      policycoreutils-python-2.5-22.el7.x86_64.rpm
audit-libs-python-2.8.1-3.el7_5.1.x86_64.rpm  libcgroup-0.41-15.el7.x86_64.rpm          python-IPy-0.75-6.el7.noarch.rpm
checkpolicy-2.5-6.el7.x86_64.rpm              libsemanage-python-2.5-11.el7.x86_64.rpm  setools-libs-3.3.8-2.el7.x86_64.rpm
$ sudo rpm -Uvh *.rpm
```
ただし下の方法だと、必要ないRPMファイルがあるとそれも一緒にインストールされてしまうので、必要なものだけを抽出しておく必要がある。

## インストール後の設定
external_url の行をhost名に。（host名がgit.example.comの場合）

```/etc/gitlab/gitlab.rb
external_url 'http://git.example.com/'
```
gitlab-ctl コマンドを使って、設定ファイルでreconfig。

```
$ sudo gitlab-ctl reconfigure
```

これでとりあえず動いて、Webでアクセスできるようになった。
さて、これから使い方を勉強しよう。