CentOS 8 の最小インストール (VirtualBox)

## CentOS 8
2019年5月7日に [Red Hat Enterprise Linux 8](https://www.redhat.com/ja/enterprise-linux-8) が一般に提供開始 [^rhel8] され、2019年9月24日に [CentOS 8.0](https://wiki.centos.org/Manuals/ReleaseNotes/CentOSLinux8) が公開された。 [^centos8]

[^rhel8]: "オープンソース・ソリューションのプロバイダーとして世界をリードするRed Hat, Inc.（NYSE：RHT、以下Red Hat）は本日、エンタープライズIT全体にわたる広範なデプロイメント向けに設計されたオペレーティングシステムであるRed Hat Enterprise Linux 8の提供開始を発表しました。" - [Red Hat、すべての企業、すべてのクラウド、すべてのワークロードに Linux体験を解放する Red Hat Enterprise Linux 8を発表](https://www.redhat.com/ja/about/press-releases/red-hat-opens-linux-experience-every-enterprise-every-cloud-and-every-workload-red-hat-enterprise-linux-8)

[^centos8]: https://wiki.centos.org/About/Building_8

## CentOS 7 との比較
### パッケージのバージョン
|  | CentOS 7 | CentOS 8 | 最新安定版 |
|:-:|:-:|:-:|:-:|
| Kernel | 3.10 | 4.18 | [5.3.8](https://www.kernel.org/) |
| GCC | 4.8 | 8.2 | [9.2](https://gcc.gnu.org/releases.html) |
| OpenSSL | 1.0.2k | 1.1.1 | [1.1.1d](https://github.com/openssl/openssl/releases) |
| OpenSSH | 7.4p1 | 7.8p1 | [8.1p1](https://github.com/openssh/openssh-portable/releases) |
| Docker | 1.13 | - | [19.03.4](https://github.com/docker/docker-ce/releases) |
| Podman | 1.4 | 1.0 | [1.6.2](https://github.com/containers/libpod/releases) |
| NTP | 4.2.6 | - | [4.2.8p13](http://www.ntp.org/downloads.html) |
| Chrony | 3.4 | 3.3 | [3.5](https://chrony.tuxfamily.org/download.html) |
| Cockpit | 195 | 185 | [205.1](https://github.com/cockpit-project/cockpit/releases) |
| Postfix | 2.10 | 3.3 | [3.4.7](http://www.postfix.org/announcements.html) |
| Dovecot | 2.2.36 | 2.2.36 | [2.3.8](https://www.dovecot.org/download) |
| BIND | 9.11 | 9.11 | [9.14.7](https://www.isc.org/download/) |
| Git | 1.8 | 2.18 | [2.23.0](https://github.com/git/git/releases) |
| PHP | 5.6 | 7.2 | [7.3.11](https://github.com/php/php-src/releases) |
| Ruby | 2.0 | 2.5 | [2.6.5](https://github.com/ruby/ruby/releases) |
| Perl | 5.16 | 5.24 / 5.26 | [5.31.5](https://github.com/Perl/perl5/releases) |
| Python | 2.7 | 3.6 | [3.8.0](https://www.python.org/downloads/) |
| Node.js | 6 | 10 | [12.13.0](https://github.com/nodejs/node/releases) |
| Nginx | 1.16 (EPEL) | 1.14 | [1.17.5](https://github.com/nginx/nginx/releases) |
| MariaDB | 5.5 | 10.3 | [10.4.8](https://github.com/MariaDB/server/releases) |
| MySQL | - | 8.0 | [8.0.18](https://github.com/mysql/mysql-server/releases) |
| PostgreSQL | 9.2 | 9.6 / 10.6 | [12.0](https://github.com/postgres/postgres/releases) |
| Redis | 3.2 (EPEL) | 5.0.3 | [5.0.6](https://github.com/antirez/redis/releases) |
| Squid | 3.5 | 4.4 | [4.8](https://github.com/squid-cache/squid/releases) |
| Varnish | 4.0 | 6.0 | [6.3.1](https://github.com/varnishcache/varnish-cache/releases) |
| VIM | 7.4 | 8.0 | [8.1](https://github.com/vim/vim/releases) |
| Netfilter | iptables | nftables |

## インストールメディアの入手
インストールメディアの ISO イメージは以下の2つがある。
CentOS 7 にあった minimal は廃止された模様。

minimal ISO を作成したい場合は Bash スクリプトが以下で公開されている。
https://github.com/uboreas/centos-8-minimal

### CentOS Stream x86_64 ISO イメージ
```bash
curl \
 --location \
 --output /Users/$(whoami)/Downloads/CentOS-Stream-x86_64-boot.iso \
 http://isoredirect.centos.org/centos/8-stream/isos/x86_64/CentOS-Stream-x86_64-boot.iso
```
```bash
axel \
 --alternate \
 --num-connections=10 \
 --output=/Users/$(whoami)/Downloads/ \
 http://isoredirect.centos.org/centos/8-stream/isos/x86_64/CentOS-Stream-x86_64-boot.iso
```
http://isoredirect.centos.org/centos/8-stream/isos/x86_64/

|ファイル名|更新日時|容量|
|:--|:-:|--:|
|`CentOS-Stream-x86_64-boot.iso`|2019-09-20 23:44|533M|

CentOS Stream は開発者やアーリーアダプタ向けのディストリビューションで、最新機能の導入を行う Fedora プロジェクトと企業向けの RHEL の間に位置するもの。 [^stream]

[^stream]: "CentOS Streamは開発者やアーリーアダプタ向けのディストリビューションで、最新機能の導入を行うFedoraプロジェクトと、企業向けのRHELの間に位置するものと説明されています。" - [CentOS 8がリリース - ローリングリリース対応のCentOS Streamも発表 | ソフトアンテナブログ](https://www.softantenna.com/wp/software/centos-8-released/)

### CentOS 8 x86_64 ISO イメージ
```bash
curl \
 --location \
 --output /Users/$(whoami)/Downloads/CentOS-8-x86_64-1905-boot.iso \
 http://isoredirect.centos.org/centos/8/isos/x86_64/CentOS-8-x86_64-1905-boot.iso
```
```bash
axel \
 --alternate \
 --num-connections=10 \
 --output=/Users/$(whoami)/Downloads/ \
 http://isoredirect.centos.org/centos/8/isos/x86_64/CentOS-8-x86_64-1905-boot.iso
```
http://isoredirect.centos.org/centos/8/isos/x86_64/

|ファイル名|更新日時|容量|
|:--|:-:|--:|
|`CentOS-8-x86_64-1905-boot.iso`|2019-08-16 06:22|534M|

## Virtual Machine の作成
macOS 10.14.5 の [VirtualBox](https://www.virtualbox.org/) 6.0.14 にて作業。

### VirtualBox 設定 (GUI)
* `システム`＞`マザーボード`＞`起動順序`＞`フロッピー`のチェックを外す
* `システム`＞`マザーボード`＞`チップセット`＞`PIIX3` を `ICH9` に変更
* `ディスプレイ`＞`スクリーン`＞`表示倍率`＞`100%` を `200%` に変更
* `ディスプレイ`＞`スクリーン`＞`グラフィックスコントローラー`＞`VMSVGA` を `VBoxSVGA` に変更
* `ネットワーク`＞`アダプター 2`＞`ネットワークアダプターを有効化`＞チェックして有効化
* `ネットワーク`＞`アダプター 2`＞`割り当て`＞`未割り当て`を`ホストオンリーアダプター`に変更
* `ポート`＞`USB`＞`USB コントローラーを有効化`＞チェックを外して無効化

グラフィックスコントローラーがデフォルトの VMSVGA だと VMWare 用のため画面が途切れるので VBoxSVGA に変更する。 [^VBoxSVGA]
[^VBoxSVGA]: [vga - What are differences between VBoxVGA, VMSVGA and VBoxSVGA in VirtualBox? - Super User](https://superuser.com/questions/1403123/what-are-differences-between-vboxvga-vmsvga-and-vboxsvga-in-virtualbox)

### VirtualBox 設定 (CUI)
コマンドラインからも [VBoxManage](https://www.virtualbox.org/manual/ch08.html) コマンドで VM を作成することができる。

#### VM の作成
```bash
VMNAME='CentOS 8.0' && \
VBoxManage createvm \
 --name "${VMNAME}" \
 --groups '/CentOS' \
 --ostype 'RedHat_64' \
 --register
```
[VBoxManage createvm](https://www.virtualbox.org/manual/ch08.html#vboxmanage-createvm) コマンドで新しい XML 仮想マシン定義ファイルを作成する。
指定可能な `ostype` は `VBoxManage list ostypes` コマンドを実行すると確認できる。

#### VM の変更
```bash
VBoxManage modifyvm "${VMNAME}" \
 --description 'CentOS 8.0 minimal installation' \
 --memory 1024 \
 --rtcuseutc on \
 --graphicscontroller vboxsvga \
 --chipset ich9 \
 --boot1 dvd \
 --boot2 disk \
 --boot3 none \
 --boot4 none \
 --nic2 hostonly \
 --hostonlyadapter2=vboxnet0 \
 --audio none
```
```bash
VBoxManage setextradata "${VMNAME}" GUI/ScaleFactor 2
```
[VBoxManage modifyvm](https://www.virtualbox.org/manual/ch08.html#vboxmanage-modifyvm) コマンドで仮想マシンのプロパティを変更する。

デフォルトの100%表示では画面が小さすぎるため、表示倍率を変更するために [VBoxManage setextradata](https://www.virtualbox.org/manual/ch08.html#vboxmanage-extradata) コマンドで `GUI/ScaleFactor` に値を設定する。 [^ScaleFactor]

[^ScaleFactor]: [virtualbox.org • View topic - [Solved] Setting "Scale Factor" to 250%](https://forums.virtualbox.org/viewtopic.php?f=6&t=87826)

#### IDE コントローラーの追加
```bash
VBoxManage storagectl "${VMNAME}" \
 --name IDE \
 --add ide \
 --controller PIIX4 \
 --portcount 2 \
 --bootable on
```
ISO イメージをマウントするために [VBoxManage storagectl](https://www.virtualbox.org/manual/ch08.html#vboxmanage-storagectl) コマンドで IDE コントローラーを追加する。

#### ISO イメージの割り当て
```bash
VBoxManage storageattach "${VMNAME}" \
 --storagectl IDE \
 --port 1 \
 --device 0 \
 --type dvddrive \
 --medium /Users/$(whoami)/Downloads/CentOS-Stream-x86_64-boot.iso
```
[VBoxManage storageattach](https://www.virtualbox.org/manual/ch08.html#vboxmanage-storageattach) コマンドで ISO イメージをマウントする。

#### VDI (HDD) の作成
```bash
VBoxManage createmedium disk \
 --filename "/Users/$(whoami)/VirtualBox VMs/CentOS/${VMNAME}/${VMNAME}.vdi" \
 --size 65536
```
[VBoxManage createmedium](https://www.virtualbox.org/manual/ch08.html#vboxmanage-createmedium) コマンドで新しいメディアを作成する。
`--size` オプションで指定している `65536` は 64GB の意。

#### SATA コントローラーの追加
```bash
VBoxManage storagectl "${VMNAME}" \
 --name SATA \
 --add sata \
 --controller IntelAhci \
 --portcount 1 \
 --bootable on
```
VBoxManage storagectl コマンドで SATA コントローラーを追加する。

#### VDI (HDD) の割り当て
```bash
VBoxManage storageattach "${VMNAME}" \
 --storagectl SATA \
 --port 0 \
 --device 0 \
 --type hdd \
 --medium "/Users/$(whoami)/VirtualBox VMs/CentOS/${VMNAME}/${VMNAME}.vdi"
```
VBoxManage storageattach コマンドで HDD イメージをマウントする。

##### VM の起動
```bash
VBoxManage startvm 'CentOS 8.0' --type gui
```
[VBoxManage startvm](https://www.virtualbox.org/manual/ch08.html#vboxmanage-startvm) コマンドで仮想マシンを起動する。

## CentOS 8.0 のインストール

### インストール操作（グラフィックモード）
* `Install CentOS Stream 8.0.1905` をカーソルで選択してエンターキーを押下
* インストール時に使用する言語に「日本語(Japanese)」「日本語(日本)」を選択して「続行(C)」
* インストール概要＞システム＞ネットワークとホスト名(N) をマウスカーソルで押下
* ネットワークとホスト名＞Ethernet(enp0s3)＞設定(C) をマウスカーソルで押下
* enp0s3 の編集＞全般＞この接続が利用可能になったときに自動的に接続する(A) にチェックを入れて「保存(S)」ボタンを押下
* ネットワークとホスト名＞Ethernet(enp0s8)＞設定(C) をマウスカーソルで押下
* enp0s8 の編集＞全般＞この接続が利用可能になったときに自動的に接続する(A) にチェックを入れて「保存(S)」ボタンを押下
* ネットワークとホスト名 「完了(D)」ボタンを押下
* ソフトウェア＞インストールソース(I)
* インストールソース＞ネットワーク上(O) `最寄りのミラー` を `http://` に変更、 URL 欄に `mirror.centos.org/centos/8/BaseOS/x86_64/os` を入力、「完了(D)」ボタンを押下
* `最小パッケージ` を選択

389 RPM パッケージの合計 282.83 MiB がダウンロードされ、インストールされる。

### インストール操作（テキストモード）
テキストユーザーインターフェースでは、パーティションレイアウトの変更や LVM の設定ができない制限がある。 [^inst.text]

* <kbd>ESC</kbd> キーを押下して `boot:` プロンプトを表示し `linux text` と入力する。<br>または <kbd>Tab</kbd> キーを押下して ` inst.text` を追記してエンターを押下する。

[^inst.text]: "テキストユーザーインターフェースの場合、パーティションレイアウトの変更ができなかったり、LVM を設定できないなどの制限があります。" - **inst.text** - [コンソール、環境、ディスプレイの各オプション | 22.1. ブートメニューによるインストールシステムの設定 | 第22章 起動オプション Red Hat Enterprise Linux 7 | Red Hat Customer Portal](https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/7/html/installation_guide/chap-anaconda-boot-options#list-boot-options-display)