Jan 27, 2021

Fedora CoreOSをインストールして、PodmanでgitLabコンテナを立上げてみた。

もう一台、サーバを Fedora Server から Fedora CoreOS に変えたいと思います。CoreOS をインストールしたらこちらは開発サーバ用に Podman で gitLab コンテナを入れていきたいと思います。

Fedora CoreOS のインストール

前回と同じ手順ですので、さっと作ってみたいと思います。前回作成した USB と ignition ファイルも前回と同じものを使います。前回の手順はこちらを参考にしてください。 USB をセットしてサーバをリブートします。コンソールの入力画面が出たら前回と同様に fdisk を使って Fedora Server のパーティションを削除します。削除したら CoreOS をインストールします。

sudo coreos-installer install /dev/sda --ignition-url https://www.xxxx.xxxx/default.ign
Installing Fedora CoreOS 33.20201214.3.1 x86_64 (512-byte sectors)
Read disk 2.8 GiB/2.8 Gib (100%)
Writing Ignition config
Install complete.
_

数分でインストール完了すると思います。あとはリブートすれば CoreOS のインストール完了です。

gitlab コンテナを構築します。

rootless コンテナで構築したいと思いますので、ignition ファイルに追加していたユーザで ssh 接続します。今回の構成は pod dev-server に gitlab と gitlab-runner、そして registry コンテナも入れたいと思います。

$ podman pod create --name dev-server -p 50000:5000 -p 50001:22 -p 50002:80

次に registry サーバを立ち上げたいと思います。データは、バックアップできるようにホスト側のディレクトリを作成しておきます。

$ mkdir -p ~/data/registry
$ podman run -dt --pod dev-server --restart=always --name registry -v ~/data/registry:/var/lib/registry:Z -e RESISTRY_HTTP_ADDR=0.0.0.0:5000 registry:2

次に gitlab を入れたいと思います。

$ ~/data/gitlab/logs ~/data/gitlab/data ~/data/gitlab/config
$ podman run -dt --pod dev-server --name gitlab -v ~/data/gitlab/logs:/var/log/gitlab:Z -v ~/data/gitlab/data:/var/opt/gitlab:Z -v ~/data/gitlab/config:/etc/gitlab:Z gitlab/gitlab-ce:latest

セットアップまで少し時間がかかるので、ログをみながら進捗を待ちましょう。

Tip podmanのログを監視する方法 ログはpodman logs コンテナ名でみれますが、—fllow=trueとやるとtail -f ファイル名と同じような効果でログの進捗をみることができます。なお—tailオプションは単に行末の数行を出すのみです。

$ podman logs --follow=true gitlab

インストールが完了したら gitlab サーバにアクセスして接続できることを確認します。 最後に gitlab-runner コンテナもインストールしていきす。

$ mkdir -p ~/data/gitlab-runner/config
$ podman run -dt --pod dev-server --restart=always --name gitlab-runner -v ~/data/gitlab-runner/config:/etc/gitlab-runner:Z gitlab/gitlab-runner:latest

コンテナが立ち上がったら runner を登録してみます。gitlab の CI/CD の設定から token をコピーしておきます。次に gitlab-runner のコンテナに入って runner を登録します。

$ podman exec -it gitlab-runner sh
 
--- gitlab-runnerのコンテナ内 ---
gitlab-runner register
Runtime platform arch=amd64 os=linux pid=19 revision=775dd39d version=13.8.0
Running in system-mode.
 
Enter the GitLab instance URL (for example, https://gitlab.com/):
http://gitlab 同じpodにgitlabのコンテナが動作しているのでlocalhostでもgitlabでも良さそうです。
Enter the registration token:
xxxxxxxxxx コピーしたtokenを入力します。
Enter a description for the runner:
[dev-server]:
Enter tags for the runner (comma-separated):
 
Registering runner... succeeded   runner=xxxxxxxx
Enter an executor: custom, docker, shell, ssh, virtualbox, kubernetes, docker-ssh, parallels, docker+machine, docker-ssh+machine:
shell ←今回はshellを使うことにしてます。
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!

Tip podのhostファイルにはコンテナ名が登録されています。 # cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 # used by slirp4netns 10.0.2.100 dev-server 21ad874c4552-infra 127.0.1.1 dev-server registry 127.0.1.1 dev-server gitlab 127.0.1.1 dev-server gitlab-runner

gitlab の CI/CD の設定画面で runnner がグリーンランプになっていれば OK です。 その後テストしてみると、mkdir: cannot create directory ‘/home/gitlab-runner/builds’: Permission denied とエラーとなってしまいました。gitlab-runner は、gitlab-runner ユーザ で処理されるようですが、/home/gitlab-runner の owner が root になっていたので、owner を gitlab-runner に変えておきました。

rootless で自動起動

サーバが立ち上がったら自動起動するように設定したいと思います。ユーザモードでの systemd を作成していきたいと思います。最初に service ファイルを登録するフォルダを作成しそこに podman generate コマンドを使って service ファイルを作成していきます。pod 名を指定するだけで pod とコンテナの service ファイルが作成されます。今回は、container-gitlab-runner.service、pod-dev-server.service、container-gitlab.service、container-registry.service の 4 つのファイルが作成されました。

$ mkdir -p ~/.config/systemd/user
$ cd ~/.config/systemd/user
$ podman generate systemd --files --name dev-server
$ ls
$ container-gitlab-runner.service container-gitlab.service pod-dev-server.service container-registry.service

自動起動とログアウトしてもサービスが使えるように設定します。指定は pod のみで OK です。

$ systemctl --user enable pod-dev-server.service
$ Created symlink /var/home/yuzu/.config/systemd/user/multi-user.target.wants/pod-dev-server.service /var/home/yuzu/.config/systemd/user/pod-dev-server.service.
Created symlink /var/home/yuzu/.config/systemd/user/default.target.wants/pod-dev-server.service /var/home/yuzu/.config/systemd/user/pod-dev-server.service.
$ loginctl enable-linger yuzu

以上で自動起動の設定完了です。リブートして自動起動されていれば OK です。

systemctl statusの情報!

systemctl status の結果です。

Fedora CoreOS+Gitlab インストール ダイジェスト

USB、ignition ファイルは前回のものを流用。

  • USB を挿入しリブートする。

  • fdisk で/dev/sda のパーティションを削除する。(Fedora Server を消す)

  • Fedora CoreOS をインストールする。 sudo coreos-installer install /dev/sda —ignition-url https ://www.xxxx.xxxx/default.ign

  • クライアント PC から ssh で接続する。 ssh yuzu@xxxx

  • registry、gitlab、gitlab-runner コンテナを作成する。 $ podman pod create —name dev-server -p 50000:5000 -p 50001:22 -p 50002:80 $ mkdir -p ~/data/registry $ podman run -dt —pod dev-server —restart=always —name registry -v ~/data/registry:/var/lib/registry:Z -e RESISTRY_HTTP_ADDR=0.0.0.0:5000 registry:2 $ ~/data/gitlab/logs ~/data/gitlab/data ~/data/gitlab/config $ podman run -dt —pod dev-server —name gitlab -v ~/data/gitlab/logs:/var/log/gitlab:Z -v ~/data/gitlab/data:/var/opt/gitlab:Z -v ~/data/gitlab/config:/etc/gitlab:Z gitlab/gitlab-ce:latest $ podman logs —follow=true gitlab ←進捗状況のログ監視 $ mkdir -p ~/data/gitlab-runner/config $ podman run -dt —pod dev-server —restart=always —name gitlab-runner -v ~/data/gitlab-runner/config:/etc/gitlab-runner gitlab/gitlab-runner:latest

  • gitlab-runner を登録する。 $ pdoman exec -it gitlab-runner sh --- コンテナ内 --- gitlab-runner register GitLab instance URL に http://localhost、token などを入力して runner を登録する。

  • 自動起動の設定 $ mkdir -p ~/.config/systemd/user $ cd ~/.config/systemd/user $ podman generate systemd —files —name dev-server $ ls $ container-gitlab-runner.service container-gitlab.service pod-dev-server.service container-registry.service

    $ systemctl —user enable pod-dev-server.service $ Created symlink /var/home/yuzu/.config/systemd/user/multi-user.target.wants/pod-dev-server.service → /var/home/yuzu/.config/systemd/user/pod-dev-server.service. Created symlink /var/home/yuzu/.config/systemd/user/default.target.wants/pod-dev-server.service → /var/home/yuzu/.config/systemd/user/pod-dev-server.service.

  • リブートしてコンテナが起動していることを確認。 $ sudo reboot $ systemctl status

以上で終了です。