CentOS8チャレンジメモ（開発環境を整える編：Nginxインストール）

## CentOS8がリリースされる

気がついたらリリースされていました。CentOS8の固定版と、CentOS Stream（Windows10のInsider Programみたいなもんでしょうか）という2つのデストリビューションとしてリリースされています。CentOS8の固定版が今まで通りの利用方法で、CentOS Streamは開発者向けという感じのようです。
なお、以前のCentOS7ように、Minimal版が用意されておらず、最大限のパッケージをダウンロードして落とさないと行けないので大変煩わしいです。

## yum が使えなくなったと言うけれども...

alias が通っているのか、今まで通りyumコマンドでなんとかなります。パラメタも多少増えていたりするので、問題が起こることもありそうですが。
今問題なのは、remi.repoが使えなくなってます。自分が把握しているremi.repoの使い方がダメなのか、ちょっと確認する必要があります。また、AppStreamというリポジトリが優先されているらしく、Nginxを公式サイトよりyumでインストールしようとすると結構面倒な罠にはまります（今までは、外部が優先されてたのに？）。

## とりあえず、Nginxの公式リポジトリ（mainline）を入れてみた

CentOS Streamを選択（開発用なので）し、とりあえず、Nginxのmainlineを入れてみることにしました。あとで、TLS3の対応や拡張機能を入れるので独自でコンパイルするのですが、ちょっとyum変更仕様等を把握してみます。

```bash
vi /etc/yum.repos.d/nginx.repo

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
```

リポジトリ作成は以上。で、ここで ``` yum install nginx ``` をしても、AppStreamの基本リポジトリが優先されてしまうようです。なので、``` yum --disablerepo=AppStream install nginx ``` と指定してあげれば、AppStreamは優先されず、nginx.repo の記述が優先されるようです。

## CentOS8のGCCのバージョンは8になったよ！

CentOS7のGCCバージョンは、途轍もなく古かった。CentOS8では、GCCのバージョンが 8.2.1 まで上がってる（2019. 10/3現在)。最近9シリーズが出たようですが、そこは致し方ないですね。
サーバー運用等では、まだメインはCentOS7を使っており、GCCのバージョンが古かったので、``` centos-release-scl ``` を入れてコンパイルをしていたのですが、これ、CentOS8 では見つからないだけならばまだよかったのですが、CentOS7でも見つからなくなっていました。何故なのかしら...

## トラブル発生

続いて Nginx を独自の拡張を加えてコンパイルしようと思ったのですが、yumで必要なパッケージを追加しようとしたところ

```bash
> yum update
Traceback (most recent call last):
  File "/usr/lib64/python3.6/site-packages/libdnf/conf.py", line 14, in swig_import_helper
    return importlib.import_module(mname)
  File "/usr/lib64/python3.6/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 994, in _gcd_import
  File "<frozen importlib._bootstrap>", line 971, in _find_and_load
  File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 658, in _load_unlocked
  File "<frozen importlib._bootstrap>", line 571, in module_from_spec
  File "<frozen importlib._bootstrap_external>", line 922, in create_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
ImportError: /lib64/librpmio.so.8: symbol EVP_md2 version OPENSSL_1_1_0 not defined in file libcrypto.so.1.1 with link time reference

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/bin/yum", line 57, in <module>
    from dnf.cli import main
  File "/usr/lib/python3.6/site-packages/dnf/__init__.py", line 30, in <module>
    import dnf.base
  File "/usr/lib/python3.6/site-packages/dnf/base.py", line 29, in <module>
    import libdnf.transaction
  File "/usr/lib64/python3.6/site-packages/libdnf/__init__.py", line 3, in <module>
    from . import conf
  File "/usr/lib64/python3.6/site-packages/libdnf/conf.py", line 17, in <module>
    _conf = swig_import_helper()
  File "/usr/lib64/python3.6/site-packages/libdnf/conf.py", line 16, in swig_import_helper
    return importlib.import_module('_conf')
  File "/usr/lib64/python3.6/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
ModuleNotFoundError: No module named '_conf'
```

というエラーがでて終了です。
さてはて、調べて直すのが早いか、とりあえず再インストールするか...。
Hyper-Vで動かしているので、ちゃんと仮想のチェックポイントを生成しておけば良かったと後悔中（チェックポイントまで戻せば、再インストールの作業はする必要ないですからね）

## 新しいことを学習するのは時間もかかります

やはり新しい環境は、WindowsもMacもLinuxもOS問わず苦戦しますが、特にLinuxに関しては資料が乏しい（特に英語が読めないと致命的）のが一番欠点です。また、新しい環境はトラブルが起きると、ほとんど対処法が見つかりません。ましてや、Linuxは玄人向けなので、素人には対処法が書かれていてもほとんど手を出せず、再インストールしか手立てはなくなりそうです。
そういう面で捉えていくと、一番扱いやすいOSは、Windowsだけなのかもしれないと思いました。

## (追記)yumが動かなくなった原因判明...

nginx のTLS1.3対応のためにopenssl1.1.1x をインストールしていることが原因のようですね。

```
ImportError: /lib64/librpmio.so.8: symbol EVP_md2 version OPENSSL_1_1_0 not defined in file libcrypto.so.1.1 with link time reference
```

さて、あまりLinuxに詳しくないので、このあたりの対処法がわからないぞっと...