CentOS8 サーバー構築（インストール）

[CentOS8_1]:https://qiita.com/sigenyan/items/f47e460e154d604b2a33
[CentOS8_2]:https://qiita.com/sigenyan/items/de9d60b86e5fdddf712a

[MyContent1]:https://qiita.com/sigenyan/items/7aeceb8338bbecd87bb5
[MyContent2]:https://qiita.com/sigenyan/items/4b86f694cc3c6171d0d0
[MyContent3]:https://qiita.com/sigenyan/items/1e52b99fca0320951159
[MyContent4]:https://qiita.com/sigenyan/items/f975ae49941c64af4173

[OnamaeVPS]:https://www.onamae.com/server/vps/
[CentOS]:https://www.centos.org

## はじめに

以前、`お名前.com VPS` に `CentOS7` をインストールするなどサーバー構築に関する記事を書きましたが、2019年9月に `CentOS8(1905)` がリリースされましたので、改めて `CentOS8` でサーバー構築したいと思います。
`CentOS7` でサーバー構築を行った際の記事は下記をご覧ください。

<font color="DeepPink">(2020.5&nbsp;追記)
2020年1月に CentOS8.1(1911) がリリース済です。
すでに CentOS8(1905) をインストール済の場合、dnf update コマンドでアップグレードできます。
インストールされたOSバージョンの確認は 'cat /etc/system-release' でできます。
インストールされたカーネルバージョンの確認は 'cat /proc/version' でできます。
CentOS8.1 のカーネルバージョン Linux 4.18 です。 
</font>


### 過去の記事

+ [CentOS 7 でサーバー構築（インストール編）][MyContent1]
+ [CentOS 7 でサーバー構築（論理ボリュームマウント編）][MyContent2]
+ [CentOS 7 でサーバー構築（ユーザー作成～SSH開通編）][MyContent3]
+ [CentOS 7 でサーバー構築（パッケージ管理編）][MyContent4]

## CentOS7との違い

ネット記事などから違いを拾い上げたところ、大きな変化点は少ない印象です。
ざっと下記のような変化点があるようです。

+ パフォーマンスが向上した。
+ パッケージ管理が `yum` から `dnf` に変更された。
+ ファイヤーウォール機能が `iptables` から `nftables` に変更された。
+ 時刻同期ソフトウェアが `chrony` に一本化された。

ファイヤーウォール機能は `CentOS7` で `firewalld` を利用していたので、引き続きこれを利用するでOKです。
パッケージ管理は折角なので、これを機に `dnf` を利用していきたいと思います。


## CentOS8 ダウンロード

下記URLからダウンロードできます。
https://www.centos.org/download/
`CentOS Linux DVD ISO` からダウンロードしてください。
`CentOS Stream DVD ISO` は開発者向けのようですので、単純にサーバー構築したい用途には向かないと判断します。

## インストールするサーバー

今回も [お名前.com VPS][OnamaeVPS] にインストールします。
VPSプランは２ギガメモリプランです。
お試しであれば `HyperV` や `Virtual Box` などの仮想マシンソフトウェアを利用するのも良いかと思います。


## インストール

ダウンロードした `CentOS8 ISOイメージ` をサーバーに挿入し、サーバーを起動します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224137/34f8e316-920e-58be-947f-55a540ba4a22.png)

`Install CentOS Linux 8.0.1905` を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224137/c1e0300e-443c-f570-e6cb-8c549104c2ae.png)

言語選択画面が表示されますので、`日本語` を選択します。
`続行` ボタンを押下して次に進みます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224137/47b78218-7732-43fb-9f23-478dd9bb385f.png)

インストール概要画面が表示されます。`インストール先` 項目に `!` マークがついていますので、設定を行う必要があります。`インストール先` を押下します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224137/ec1548aa-38db-53ca-6a06-d1e4ed6ed446.png)

インストール先画面が表示されます。例では200GiBのストレージに対して、すでに20GiBの別パーティションが作成されていますので、この20GiBの領域を一度潰して200GiBの領域をすべて利用できるように設定します。
画面下側に `ストレージの設定` という項目があります。その少し下の `利用可能な町域を追加する` チェックボックスをONにし、画面左上の `完了` ボタンを押下します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224137/abbb1929-e92f-a67d-cc9a-721d77192c5f.png)

ディスク領域の再利用ダイアログが表示されます。右下の `すべて削除` ボタンを押下します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224137/d6c41fda-8b23-36e3-ef81-b82f95a3303a.png)

一覧部分のアクション項目がすべて `削除` となっていることを確認し、右下の `再利用` ボタンを押下します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224137/d31c2913-96ed-00f3-da20-b6015a7a223b.png)

インストール概要画面に戻ってきました。
このままインストールを開始しても良いですが、サーバー用途で利用したいため、`ソフトウェアの選択` を押下してベース環境を変更します。デフォルトは `サーバー (GUI 使用)` となっていますので、GUIを使用しないように変更します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224137/5a68338a-590b-50e4-f021-c00790760716.png)

`サーバー (GUI 使用)` から、`サーバー` に変更し、`完了` を押下します。
`選択した環境のアドオン` 欄は変更無しでOKです。（必要なものはあとからインストールします。）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224137/7ec4523a-4fd0-74f7-2d4d-7b71d33463e4.png)

インストール先の設定はこれで完了しました。
これで問題は解決しましたので、右下の `インストールの開始` ボタンを押下します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224137/282c02a6-8a68-1a76-a348-cb1ad36aa830.png)

設定画面が表示されていますが、バックグラウンドではインストール処理が進行しています。
ユーザーの設定として、`root パスワード` の設定を行う必要があります。`root パスワード` を押下します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224137/53baed08-71c9-f071-dec1-bc415a9ba175.png)

root パスワード画面が表示されます。`root パスワード` を入力します。パスワード強度が表示されますので、なるべく強力と判定されるような文字列の組み合わせで決定します。
確認入力をし、エラー表示がされなければOKです。`完了` ボタンを押下します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224137/0eeae0f5-116b-4080-c6be-73eea1dcbf69.png)

設定画面に戻ってきました。ここでは一般ユーザーの作成は行いません。このままバックグラウンドのインストール処理が完了するのを待ちます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224137/88d5d3e2-bf31-fade-9155-198a5f8207e9.png)

インストール処理が完了しました。右下に `再起動` ボタンが表示されますので、押下します。
再起動時にはサーバーに挿入した `CentOS8 ISOイメージ` を抜いておく必要がありますが、今回の作業を行っている [お名前.com VPS][OnamaeVPS] では先にイメージを取り出してから再起動を行うと、そこで画面が固まってしまいました。（恐らく HyperV など仮想マシン環境では似たような現象になるかと想像しています。）手動で再起動すると回復しましたので、インストール作業自体は大丈夫だと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224137/291aa6aa-1099-8db4-151e-f01434e46f6e.png)

コンソール画面で起動し、ログインコマンドプロンプトが表示されていればインストール完了です。
インストール作業自体は、`CentOS7` のころと比べて大きな差異はありませんので特につまづくことはないでしょう。

以降は細かい設定等を行っていきたいと思います。

## シリアルコンソールの設定

今回の作業を行っている [お名前.com VPS][OnamaeVPS] は、ブラウザー越しにサーバーをメンテナンスできるようにコンソール画面がコントロールパネルに備わっています。
しかし、ブラウザーのコンソール画面では文字列のコピー＆ペースト等ができず、このまま作業を続けていくには若干不便です。
このような状態を回避するために `お名前.com VPS` にはシリアルコンソール接続を行うための機能が備わっています。
ただし、`お名前.com VPS` が標準で提供しているOS以外をインストールした場合、そのままではシリアルコンソール接続ができません。
よって、まず最初にシリアルコンソール接続するための設定を行います。

早速ですが、`root` ユーザーでログインします。
`/etc/default/grub` を変更します。下記のとおりバックアップを取ってから作業を行います。

```
[root@localhost ~]# cp /etc/default/grub /etc/default/grub.org
[root@localhost ~]# vi /etc/default/grub
```

```config:/etc/default/grub（変更前）
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet"
GRUB_DISABLE_RECOVERY="true"
GRUB_ENABLE_BLSCFG=true
```
```config:/etc/default/grub（変更後）
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet console=tty0 console=ttyS0,115200"
GRUB_DISABLE_RECOVERY="true"
GRUB_ENABLE_BLSCFG=true
GRUB_TERMINAL="console serial"
GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1"
```

<font color="DeepPink">(2020.5&nbsp;追記)
冒頭で CentOS8.1(1911) の件について触れましたが、私が dnf update した後、シリアルコンソールで接続しようとすると、read-only という表示がされるだけでシリアルコンソール接続ができなくなってしまいました。
その際に上記設定を見直して、「GRUB_TERMINAL_OUTPUT="serial console"」という定義を削除しました。
「GRUB_TERMINAL="console serial"」でそもそも設定値が上書きされてしまうので、不要との判断です。
一応この対応で状況は回復したのですが、これが本当の原因だったかは定かではありません。。。
</font>

下記のコマンドで設定を反映します。

```
[root@localhost ~]# /usr/sbin/grub2-mkconfig -o /boot/grub2/grub.cfg
```

特にエラーがでなければOKです。
シリアルコンソールの設定自体はこれでOKで、`reboot` してしまえば反映されますが、画面サイズがデフォルトの `24 x 80` となりますので、先に設定を変更しておきます。
シリアルコンソール接続するのは `root` のみで行い想定として、`root` の `.bash_profile` を変更します。

```
[root@localhost ~]# vi /root/.bash_profile
```

最後の行に下記の１行を追加してください。
行数(rows)と文字数(columns)を設定するのみですので、適宜変更すれば良いと思います。

```config:/root/.bash_profile
stty rows 40 columns 130
```

これで設定完了です。
`reboot` します。

再起動が完了した後、シリアルコンソール接続できるようになります。
`お名前.com VPS` の場合、SSHクライアントを利用してSSH越しにシリアルコンソール接続が可能となります。
ネットワークの設定ミスなどでサーバーに直接SSH接続ができないようになったケースにおいては、シリアルコンソール接続がサーバーに接続可能な手段となります。
一般ユーザーの設定と、SSH接続の設定が完了するまでは、シリアルコンソール接続で作業を進めます。

## SELinux の無効化

`SELinux` は無効化してしまいます。賛否はあるかもしれませんが、個人的に面倒な設定に巻き込まれるより割り切って無効化してしまったほうが良いと考えています。

下記のコマンドで今の状態を確認します。

```
[root@localhost ~]# getenforce
Enforcing
```

`Enforcing` と出ていますので、`SELinux` は有効です。

`SELinux` の設定ファイル `/etc/selinux/config` を変更します。

```
[root@localhost ~]# vi /etc/selinux/config
```

```config:/etc/selinux/config（変更前）
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=enforcing
# SELINUXTYPE= can take one of these three values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected.
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted
```

```config:/etc/selinux/config（変更後）
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of these three values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected.
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted
```

変更が完了したら、`reboot` します。
`reboot` 後にログインし、`getenforce` コマンドで確認すると、下記のとおり `Disabled` となっています。

```
[root@localhost ~]# getenforce
Disabled
```

## 一旦ここまで

`CentOS8` のインストール作業としてはここで一旦完了としたいと思います。
次はネットワークを開通させたいと思います。

## 関連記事
+ CentOS8 サーバー構築（インストール）　**←今回の記事**
+ [CentOS8 サーバー構築（ネットワーク開通とパッケージ更新）][CentOS8_2]
+ CentOS8 サーバー構築（Open LDAP インストール）　**←予定**