インターネット非接続環境のCentOS 8にGitLabをインストール

以前[CentOS 7にGitLabを導入する記事](https://qiita.com/rk05231977/items/791490f5532baf749924)を書き、それをメンテしたついでにCentOS 8.3 + podmanでGitLab導入するのも試したのでメモ。
Jenkinsはまあ、先の記事通りで普通に動き何の問題もない。

何を狙っているかというと、Dockerイメージというのは思ったよりもポータビリティが無いので（[参考](https://qiita.com/rk05231977/items/c84cbe4706548c103f26)）、オンプレでOpenShift 4のクラスターを建てたときにRHEL8+podmanのDevOps環境をそのうち揃える必要が出てきて、やっぱりインターネットにつながっていないとクソ苦労するんだろうなと。

# 環境
インターネット非接続の環境で仮想マシンを用意する。
CPU 2個、メモリ 4GB、HDD 20GB。
OSはCentOS 8.3。最小インストールで。
IPアドレスを設定し、ssh接続できるようになったところからがスタート。

説明中、CentOSサーバーのIPアドレスは「192.168.0.116」で、そのホスト名は「devops.example.com」で行う。

# Podmanをインストールする
１．仮想マシンにISOが接続された状態で、CentOSのインストールDVDをマウント。

```
# mount /dev/cdrom /media
```

２．repoファイルを作る。

```
# rm -f /etc/yum.repos.d/*
# cat > /etc/yum.repos.d/media.repo << 'EOF'
[media-baseos]
name=CentOS Linux 8 - Media - BaseOS
baseurl=file:///media/BaseOS
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial

[media-appstream]
name=CentOS Linux $releasever - Media - AppStream
baseurl=file:///media/AppStream
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
EOF
```

３．podmanをインストールする。

```
# yum install -y podman
```

# GitLabのインストール

１．Docker HubからGitLabのDockerイメージを入手する。
インターネット接続がありDockerがインストールされているPCとかでGitLab-CEのイメージをpullしてsave。
https://hub.docker.com/r/gitlab/gitlab-ce/tags
今回は13.7.3-ce.0。tarファイルはだいたい2.1GB。

```
# docker pull gitlab/gitlab-ce:13.7.3-ce.0
# docker save gitlab/gitlab-ce:13.7.3-ce.0 > gitlab.tar
```

入手したgitlab.tarをCentOS8マシンにコピーしておく。

インターネットに繋がったWindowsはあるけどDockerが無いよって？その場合はウイルスが混入されてもへっちゃらだという前提でgraboidというツールを使う選択肢もある。ほら、導入先はインターネット繋がってないしね！
https://github.com/blacktop/graboid

２．GitLabのDockerイメージをロードする。

```
# podman load -i gitlab.tar
```

３．GitLabを起動する。
dockerと違って、podmanはマウント先のディレクトリを自動では作ってくれない。

```
# mkdir -p /srv/gitlab/{config,logs,data}
# podman run --detach \
  --hostname devops.example.com \
  --env GITLAB_OMNIBUS_CONFIG="external_url 'http://devops.example.com/'" \
  --publish 443:443 --publish 80:80 \
  --name gitlab \
  --restart always \
  --volume /srv/gitlab/config:/etc/gitlab:Z \
  --volume /srv/gitlab/logs:/var/log/gitlab:Z \
  --volume /srv/gitlab/data:/var/opt/gitlab:Z \
  gitlab/gitlab-ce:13.7.3-ce.0
```

４．GitLabコンテナのログを参照し、GitLabが起動するのを待つ。内部的に、コンテナ起動後にChefで自身を再構成しており、初回起動時は数分と結構時間が掛かる。

"Chef Infra Client finished,"というメッセージが表示されたら構成完了っぽいのだが、ログが流れるのが早すぎて認識するのは難しい。緑色の行がしばらく出力されなくなったな、と思ったら出来てると思う。

```
# podman logs -f gitlab
```

# GitLabにアクセスする

１．アクセスするPCの/etc/hostsファイル（または C:\Windows\system32\drivers\etc\hosts ）を修正し、以下の行を追加して保存。

```
192.168.0.116 devops.example.com
```

２．Webブラウザを開き、以下のURLにアクセスする。今回TLSを構成していないので、HTTPSで接続すると逆に繋がらないので注意。
http://devops.example.com

３．初回アクセス時に管理者のパスワード設定を求められるので、パスワードを入力して「Change your password」。

４．サインイン画面で、ユーザー名を「root」、パスワードを先に設定した文字列を指定して「Sign in」。上手くすれば「Welcome to GitLab」と表示される。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146381/6a5c8116-9e92-43a1-ff40-acb2e816cc6f.png)


# おまけ
GitLabのレポジトリにコミットされたソースファイルは、上記で指定した```/srv/gitlab/data```に格納されるため、GitLabが突然起動しなくなったとかの場合はそちらを直接リポジトリとして参照して資材を回収することが出来る。

```
# git clone ssh://root@devops.example.com/srv/gitlab/data/git-data/repositories/\@hashed/d4/73/d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35.git/
# ls d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35.git
hello.txt
```