CentOS 8 を触ってみた

# 前書き
こんにちわ。ラクスのインフラ開発部に所属しておりますもしにしです。
本日で30歳になり、おっさんズの仲間入りをしました。
弊社では恒例になりつつあるAdventCalendar。
なぜか毎年誕生日に投稿させていただける雰囲気に…去年が悪かった…
いや、嫌な訳ではないんですよ。他にも書きたい人いるかなーと思って。

自分よりも前に書いている人たちを見ると良記事ばかりなので、こんな投稿でごめんなさい。
と思いながらもこれから投稿する後輩のためにも敷居を下げてやんわり投稿できるようにしていこうと思います！

# Centos8 を触ってみた。

夏？ごろにCentos8がリリースされたのでひとまず触ってみることにした。
とりあえずCentos7との違いを見ていく。といってもさわり程度なので期待しないでください。

結論、Centos7とそんなにかわらん。
Centos6から7に上がったときはがっつり変わったので恐る恐る触ってみたが、Centos7から8はそんなに変わっていない印象。
結局ハマるところはMWの部分なんだろうなぁ～という感想です。…( ﾉД`)ﾉ

Centos6からは、がっつり変わっているからまぁ大変。

## CentOS8リリース！
リリース日は`2019年9月24日`
EOLは発表されているところでいうと`2029年05月??日`

## Centos8の新しいところ
- yum が dnf に変更
- firewalld(iptables) から nftablesへ
- いろんなOS標準MWのバージョンがあがった　(そらそーだ)
- etc…


## Centos8で削除された機能　
- ntp がなくなった(代わりにchrony)
- tomcatがなくなった
- etc…

---

### yum が dnf に変更
Centosのパッケージ管理でよく使うのがyum。
それがFedoraなどで採用されている`dnf`に代わるとのこと。
オプションとかは変わりないらしい。
yumはpython2系だけどdnfはpython3系
というか `YUM v4 = dnf`

使った感じ、yumコマンドも叩けるので使用感としてはあまり変わらない。

confファイルは`/etc/yum.conf`が`/etc/dnf/dnf.conf`にリンクが張られている。


```
# ls -l /etc/yum.conf /etc/dnf/dnf.conf 
-rw-r--r--. 1 root root 82  5月 14  2019 /etc/dnf/dnf.conf
lrwxrwxrwx. 1 root root 12  5月 14  2019 /etc/yum.conf -> dnf/dnf.conf
```

リポジトリは、`/etc/yum.repo.d/*.repo`をみるとのこと。
dnfじゃないんや…

### dnfでリポジトリを操作するコマンド
#### リポジトリ一覧
```
# dnf repolist
repo id                           repo の名前                          状態
AppStream                         CentOS-8 - AppStream                      5,089
BaseOS                            CentOS-8 - Base                           2,843
extras                            CentOS-8 - Extras                             3
```


#### リポジトリ一覧の無効化
```
# dnf config-manager --set-disabled BaseOS

# dnf repolist

repo id                                  repo の名前                          状態
AppStream                                CentOS-8 - AppStream                5,089
extras                                   CentOS-8 - Extras                       3
```

#### リポジトリ一覧の有効化
```
# dnf config-manager --set-enabled BaseOS

# dnf repolist
repo id                                  repo の名前                          状態
AppStream                                CentOS-8 - AppStream                5,089
BaseOS                                   CentOS-8 - Base                     2,843　　　# ←復活！
extras                                   CentOS-8 - Extras                       3
```

リポジトリの追加

```
# dnf config-manager --add-repo [リポジトリ名]
```
これで、できるらしいが、いい例が思いつかなかったので省略。
そもそも普通に

```
# dnf -y install epel-release

# dnf config-manager --set-enabled epel

# dnf repolist

repo id                      repo の名前                                          状態
AppStream                    CentOS-8 - AppStream                                5,089
BaseOS                       CentOS-8 - Base                                     2,843
*epel                        Extra Packages for Enterprise Linux 8 - x86_64      3,535     # ←追加！！
extras                       CentOS-8 - Extras                                       3
```
でいい気がしてる。
`dnf config-manager --add-repo [リポジトリ名]` これを使うと一撃でリポジトリが有効になる…？よくわらかん。

---

### firewalld(iptables) から nftablesへ
nftables のことを書き始めるとくそ長くなるので[参考したURL](https://knowledge.sakura.ad.jp/22636/)を見てください。

Centos7からfirewalldが実装されており、Centos8ではnftablesになった。
世間ではiptablesが徐々に移行されつつあるので、iptablesを脱却していかないとなぁ…
とは思いつつ、iptablesが使えるうちは使いたい…
ちなみにCentos8でも`iptables.services`をインストールすればiptablesが使える。そして多分使う。

せっかくなのでざっくりnftablesの使い方について書いてみようかと思ったけど、
この記事がわかりやすいので[こっち](https://knowledge.sakura.ad.jp/22636/)を見たほうがいいと思う。

---

### いろんなOS標準MWのバージョンがあがった
参考程度ですが、メジャーなMWのバージョン情報を上げておきます。

| MW           | CentOS 7 | CentOS 8   |
| ------------ | -------- | ---------- |
| Linux Kernel | 3.1      | 4.18       |
| PHP          | 5.4      | 7.2        |
| Python       | 2.7      | 3.6        |
| Perl         | 5.16     | 5.26       |
| Ruby         | 2        | 2.5        |
| Node.JS      | 6.16     | 10.14      |
| MariaDB      | 5.5      | 10.3       |
| MySQL        | 5.5      | 8          |
| PostgreSQL   | 9.2      | 10         |
| Redis        | 3.2      | 5          |
| git          | 1.8      | 2.18       |
| gcc          | 4.8      | 8.5        |
| nginx        | 1.12     | 1.14       |
| httpd        | 2.4.6    | 2.4.37     |
| bash         | 4.2      | 4.4        |
| tomcat       | 7        | なくなった |
| pacemaker    | 1.1.20   | まだない   |
| corosync     | 2.4.3    | まだない   |
| ansible      | 2.4.2    | 2.8.5     |
| docker       | 1.13.1   | ※※※     |

##### ・PHPが7.2へ
Wordpressがphp5.6以上じゃないと動かなくなったのでCentos7でWordpressを動かそうと思ったらphpをコンパイルして入れなおさないといけなかった。(それかremiリポジトリ使うか野良のリポジトリ使うか…)
OS標準のPHPが7.2になったことでコンパイルする手間が省けたのがうれしい…‼
そのうち7.2でもwordpressが動かなくなるんだろうなぁ…

##### ・pythonが3系に
地味にpython3系を勉強中で、python2系と3系で記述方法が違うらしい。
実機で使おうと思うとpython3系を入れて実行するときのパスに気を付けないといけなかったのが
きっと大丈夫なった。地味にうれしい。(って言ってもpythonまだよくわからん。)
ansibleがpythonで動いているので、2系から3系に上がったことで微妙に挙動が変わる可能性があるので注意。

##### ・pacemakerとcorosyncがOS標準のリポジトリにない…
Centos8ではHAクラスタを組むための定番であるpacemaker/corosyncといったものがOS標準のリポジトリにない。
調べたところ、リリースが間に合っていないらしいとのことでした。
そのうちリリースされるような噂を耳にしたので出るまで待ちか、
今すぐインストールしたい人は自分でコンパイルするか、[この辺](https://koji.mbox.centos.org/koji/packageinfo?packageID=1524)から必要なパッケージをインストールする必要があるっぽい。
動くかどうかは不明。

##### docker
Centos8でdockerをインストールすると

```
# dnf install docker
========================================================================================================
 パッケージ        アーキテクチャー
                              バージョン                                            リポジトリ    サイズ
========================================================================================================
Installing:
 podman-docker     noarch     1.0.5-1.gitf604175.module_el8.0.0+194+ac560166        AppStream      28 k

トランザクションの概要
========================================================================================================
```
ぬぬっ！**podman-docker** ってなんやねん。
dockerと似たようなコンテナエンジンらしいけど、dockerのこともそこまで詳しくないので次の投稿までに調べておきます。(次の投稿は未定。)
podmanエンジンでもdockerイメージが動けば問題ない気がするけど、どうなんだろう。互換性はあるってどっかで見た気がする。
気が向いたら試してみます。

Centos8でモノホンのdocker入れようと思うとちょっと手間がかかりそう。
自分用のメモとしてさらっとインストール方法だけ残しておく

**Dockerリポジトリの追加**

```
# dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
repo の追加: https://download.docker.com/linux/centos/docker-ce.repo
```
いつ使えるかわからんかった`dnf config-manager --add-repo` が早速使えた！！

**リポジトリの確認**

```
# dnf repolist
Docker CE Stable - x86_64                                                19 kB/s |  21 kB     00:01    
repo id                           repo の名前                                                      状態
AppStream                         CentOS-8 - AppStream                                             5,089
BaseOS                            CentOS-8 - Base                                                  2,843
docker-ce-stable                  Docker CE Stable - x86_64                                           57
*epel                             Extra Packages for Enterprise Linux 8 - x86_64                   3,544
extras                            CentOS-8 - Extras                                                    3
```

さてインストール

```
# dnf install docker-ce
エラー: 
 問題: package docker-ce-3:19.03.5-3.el7.x86_64 requires containerd.io >= 1.2.2-3, but none of the providers can be installed
  - cannot install the best candidate for the job
  - package containerd.io-1.2.10-3.2.el7.x86_64 is excluded
  - package containerd.io-1.2.2-3.3.el7.x86_64 is excluded
  - package containerd.io-1.2.2-3.el7.x86_64 is excluded
  - package containerd.io-1.2.4-3.1.el7.x86_64 is excluded
  - package containerd.io-1.2.5-3.1.el7.x86_64 is excluded
  - package containerd.io-1.2.6-3.3.el7.x86_64 is excluded
(try to add '--skip-broken' to skip uninstallable packages or '--nobest' to use not only best candidate packages)
```
見事にエラー。どうしよう。
containerd.ioの1.2.2-3が欲しいと怒られているっぽいのでcontainerd.ioのバージョンを確認

```
# dnf list installd containerd.io
containerd.io.x86_64                            1.2.0-3.el7                             docker-ce-stable
```
おぉ、確かに違う。どうしよう。
`--nobest` このオプションを付ければ行けるっぽいけど、`Set best option to False, so that transactions are not limited to best candidates only.`ベストじゃなくなるでって言われてるなぁ…
まぁいっか。試しに入れてるだけやし。

```
# dnf install --nobest docker-ce
・
・
・
インストール済み:
  docker-ce-18.06.3.ce-3.el7.x86_64                     libcgroup-0.41-19.el8.x86_64                    

Skipped:
  docker-ce-3:19.03.5-3.el7.x86_64                                                                      

完了しました!
```

入った！
ざざざーっと自動起動と起動

```
# docker --version
Docker version 18.06.3-ce, build d7080c1

# systemctl enable docker
Created symlink /etc/systemd/system/multi-user.target.wants/docker.service → /usr/lib/systemd/system/docker.service.

# systemctl start docker 
# systemctl status docker 
● docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled)
   Active: active (running) since Thu 2019-12-05 12:25:57 JST; 6s ago
     Docs: https://docs.docker.com
 Main PID: 12836 (dockerd)
    Tasks: 18 (limit: 4690)
   Memory: 83.5M
   CGroup: /system.slice/docker.service
           ├─12836 /usr/bin/dockerd
           └─12842 docker-containerd --config /var/run/docker/containerd/containerd.toml
```
dockerのインストールはここまで。


## Centos8で削除された機能　
書くのつかれたので今度書きます。

## 結論
- Centso7使っていたら、そこまで苦労しない気がする。
- MWは触ってないからわかんない
- Centos6からは結構しんどい
- EOL長いから好き

リリースされたばっかりだから実際使うのはもうちょい経ったあとで、いろいろ情報出てきてからでもいいと思いました。
新しい物好きの人は触ってぜひ情報共有をお願いします！

---

■参考
[Redhatのリリースノート](https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/8/html/8.0_release_notes/overview)
[dnf のレポジトリ操作](https://qiita.com/summer/items/ac2d35fb10dfae52400e)
[nftables](https://knowledge.sakura.ad.jp/22636/)
[MWのバージョン](https://xn--o9j8h1c9hb5756dt0ua226amc1a.com/?p=3991)
[pacemakerとcorosync](https://densan-hoshigumi.com/server/centos8-pacemaker-corosync-notfound)
[pacemaker](https://koji.mbox.centos.org/koji/packageinfo?packageID=1524)