CentOS7へのConCourse導入メモ



とあるインターンでConCourseCIを使った際にデプロイ以外にバッチ処理とかいろいろ出来て便利そうだしとりあえずは触ってみようって事で物理サーバーへ入れてみます。

地味に面倒だったので通しの手順をメモです。

**この記事は2018年9月現在のものです。**

# 導入
## 事前準備
### カーネルアップデート
[公式Docs](https://concourse-ci.org/install.html)によるとv3.19以上のカーネルが必要とのこと。

カーネルのバージョンをチェック

```bash
    $ uname -r
    3.10.0-862.9.1.el7.x86_64
    $ rpm -qa | grep "^kernel" | sort
    kernel-3.10.0-514.26.2.el7.x86_64
    kernel-3.10.0-693.5.2.el7.x86_64
    kernel-3.10.0-862.11.6.el7.x86_64
    kernel-3.10.0-862.3.3.el7.x86_64
    kernel-3.10.0-862.9.1.el7.x86_64
    kernel-devel-3.10.0-514.26.2.el7.x86_64
    kernel-devel-3.10.0-693.5.2.el7.x86_64
    kernel-devel-3.10.0-862.11.6.el7.x86_64
    kernel-devel-3.10.0-862.3.3.el7.x86_64
    kernel-devel-3.10.0-862.9.1.el7.x86_64
    kernel-headers-3.10.0-862.11.6.el7.x86_64
    kernel-tools-3.10.0-862.11.6.el7.x86_64
    kernel-tools-libs-3.10.0-862.11.6.el7.x86_64
```

今回は3.10で要求を満たしていないのでカーネルをアップデートします。

ELRepoと呼ばれるRPMリポジトリを使ってカーネルをアップデートしていくのでELRepoを追加します。
ELRepoにもバージョンがあるので[公式ページ](http://elrepo.org/tiki/tiki-index.php)を参考にしながらコマンドを実行していきます。

```bash
    $ rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
    $ rpm -Uvh https://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
    $ cat /etc/yum.repos.d/elrepo.repo
```
    
ELRepoが追加出来たら

```bash
    $ yum --enablerepo=elrepo-kernel -y install kernel-ml
    $ rpm -qa | grep "^kernel" | sort
    kernel-3.10.0-514.26.2.el7.x86_64
    kernel-3.10.0-693.5.2.el7.x86_64
    kernel-3.10.0-862.11.6.el7.x86_64
    kernel-3.10.0-862.3.3.el7.x86_64
    kernel-3.10.0-862.9.1.el7.x86_64
    kernel-devel-3.10.0-514.26.2.el7.x86_64
    kernel-devel-3.10.0-693.5.2.el7.x86_64
    kernel-devel-3.10.0-862.11.6.el7.x86_64
    kernel-devel-3.10.0-862.3.3.el7.x86_64
    kernel-devel-3.10.0-862.9.1.el7.x86_64
    kernel-headers-3.10.0-862.11.6.el7.x86_64
    kernel-ml-4.18.8-1.el7.elrepo.x86_64
    kernel-tools-3.10.0-862.11.6.el7.x86_64
    kernel-tools-libs-3.10.0-862.11.6.el7.x86_64
```    

kernel-mlが更新されていればOKです。
再起動して更新したカーネルを用いて起動しなおすのですが、これ、SSHじゃできないような気がします。
（物理サーバーなので直接キーボード繋いで解決しましたが、すぐ下でやってるgrub設定を行えば回避できそう?)


```bash
    $ shutdown -r now
```    

このままだと次回の再起動時は元の古いカーネルで起動されてしまうため起動設定を変えます。

```bash
    $ grub2-editenv list
    saved_entry=CentOS Linux (3.10.0-862.11.6.el7.x86_64) 7 (Core)
    
    $ awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg
    
    0 : CentOS Linux (4.18.8-1.el7.elrepo.x86_64) 7 (Core)
    1 : CentOS Linux (3.10.0-862.11.6.el7.x86_64) 7 (Core)
    2 : CentOS Linux (3.10.0-862.9.1.el7.x86_64) 7 (Core)
    3 : CentOS Linux (3.10.0-862.3.3.el7.x86_64) 7 (Core)
    4 : CentOS Linux (3.10.0-693.5.2.el7.x86_64) 7 (Core)
    5 : CentOS Linux (3.10.0-514.26.2.el7.x86_64) 7 (Core)
    6 : CentOS Linux (0-rescue-1541a00cf91a4aaeb25e852e48718ce6) 7 (Core)
    
    # 今回更新した4.18で起動したいので0をsetします。
    $ grub2-set-default 0
    
    # カーネルヘッダやツールを一つずつ入れ替えていきます
    $ yum --enablerepo=elrepo-kernel -y swap kernel-headers -- kernel-ml-headers
    $ yum --enablerepo=elrepo-kernel -y swap kernel-tools-libs -- kernel-ml-tools-libs
    $ yum --enablerepo=elrepo-kernel -y install kernel-ml-tools
    $ yum --enablerepo=elrepo-kernel -y swap kernel-devel -- kernel-ml-devel
    
    # 最後に古いカーネルを削除します。
    $ yum -y remove kernel
    $ ls -l /lib/modules
    
    # 自動起動が新しいカーネルになっていることを確認して再起動。
    $ grub2-editenv list
    $ shutdown -r now
```

### Docker

Dockerの環境構築ですが、Docker-composeのバージョンが古いとDockerを用いてのConcourse構築ができないので注意。

```bash
    $ vi /etc/yum.repos.d/docker-main.repo
    [docker-main-repo]
    name=Docker main Repository
    baseurl=https://yum.dockerproject.org/repo/main/centos/7/
    enabled=1
    gpgcheck=1
    gpgkey=https://yum.dockerproject.org/gpg
    
    $ sudo yum -y install docker-engine
    
    # この時いDockerを別の方法？(dockerやdocker-cli)をインストール済みだとconflictするので今回は両方とも一度消してdocker-engineをインストールしなおしました。
    $ (必要であれば) sudo yum -y remove docker
    $ (必要であれば) sudo yum -y remove docker-io
    
    # docker-compose のupdate
    # docker-composeが未インストールの場合
    $ curl -L "https://github.com/docker/compose/releases/download/1.11.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
    # docker-composeをインストール済みの場合(update)
    $ curl -L "https://github.com/docker/compose/releases/download/1.11.1/docker-compose-$(uname -s)-$(uname -m)" -o $(which docker-compose)
```
    
## 本構築

公式がdocker用のgitリポジトリを用意してくれているのでめっちゃ簡単です。

```bash
    $ git clone https://github.com/concourse/concourse-docker.git
    $ cd concourse-docker

    # worker, web用の秘密鍵生成
    ./generate-keys.sh
    
    # docker-compose.ymlを編集
    # concourse-webのportsを["8080:8080"]から["8080:8080", "2222:2222"]へ変更
    # concourse-webのCONCOURSE_EXTERNAL_URL(ブラウザでアクセスする際のURL)を記述
    # concourse-webにCONCOURSE_BASIC_AUTH_USERNAME=concourseを追加（初期
    # concourse-webにCONCOURSE_BASIC_AUTH_PASSWORD=concourseを追加
    $ vi docker-compose.yml
    
    $ docker-compose up -d
```
    
    
 # おわり
 
 以上で構築は完了です。
 
 どちらかというとカーネルの勉強してた感が強いけど、とりあえずパイプライン作ってみたりして遊びたいと思います。
 
 

    
    

# 参考
[Concourse CIの環境構築手順](https://qiita.com/Esfahan/items/0bb62b76d999c30b87e3)
[Enterprise Linux (ELRepo) リポジトリ追加](https://server.etutsplus.com/elrepo-repository-install/)
[CentOS 7 最新安定版カーネルインストール、及び切り替え](https://server.etutsplus.com/centos-7-how-to-update-kernel-to-the-latest-mainline-stable/)
[Concourse CI環境を5分で構築する](https://qiita.com/cacarrot/items/a16e1ad9becfb9210303)
[Docker/Docker Compose自身のバージョン更新](https://qiita.com/n11sh1/items/e11bb30adf276a9fa774)