【めもめも】CentOS7環境のセットアップ 

## これは何？

ちょっとした実験環境(使い捨て環境)として、VM([Oracle VM VirtualBox](https://www.virtualbox.org/))で[CentOS7](https://www.centos.org/)環境をセットアップする時の自分用メモ。
イメージを使いまわせば簡単なんだけど、最低限手を動かさないと忘れちゃうので、定期的にやっている儀式の補助記憶装置として、残しておく(最近忘れっぽくなってきたので...)

### 前提条件など

* システムリソースについては、CPUの数、メモリ割り当ては用途次第で決める
* ネットワークはアダプター1(NAT)、アダプター2(ホストオンリーアダプター)を準備する
  * インターネット接続用と、内部ネットワーク接続用の２つの口

以下の公式サイトから **Minimal ISO** のイメージをダウンロードしてOSインストールする。

* [Download CentOS - 公式サイト](https://www.centos.org/download/)

## 共通でやっておくこと（ネットワークまわり）

自身が気持ちよく使える環境のために、設定しておきたい環境設定。

### NICの起動設定

デフォルトでNICは起動時に有効化されていないので、ONBOOTを有効化し、IPV6設定はおもちゃ環境では事態をややこしくするので落としておく。

**NAT側** の設定。

```/etc/sysconfig/network-scripts/ifcfg-enp0s3
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=dhcp
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=no
IPV6_AUTOCONF=no
IPV6_DEFROUTE=no
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=enp0s3
UUID=dcf41d2a-9b40-4982-a83e-ac7b67f6eee0
DEVICE=enp0s3
ONBOOT=yes
```

**仮想LAN側** の設定。
プライベートIPは192.168.56.0/24の範囲内で十分だと思うので、その範囲で用途に応じて割り振る。

```/etc/sysconfig/network-scripts/ifcfg-enp0s8
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=no
IPADDR=192.168.56.123
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=no
IPV6_AUTOCONF=no
IPV6_DEFROUTE=no
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=enp0s8
UUID=cc2f5178-0bea-44df-b1ad-16d79ecb9b6e
DEVICE=enp0s8
ONBOOT=yes
```

ちなみに下記のサイトによると、RHEL 7, CentOS 7では、NetworkManager の利用が推奨されていて、nmtui コマンドを実行すると、対話的にネットワークの設定を行うことが可能とのこと。
実験環境なので、ちょろちょろっと編集しちゃうけど。

* [ CentOS7 ネットワークの設定変更 - UnixPower on Networking](http://www.unix-power.net/centos7/network.html)

なおNICの種類を見るには以下のコマンドを実行すると確認できる。

```
# nmcli c
```

### ホスト名の変更

目的に応じて、なんとなく区別ができるような(気持ちが高揚する感じの)ホスト名をつける。

以下のコマンドを実行し、ホスト名を設定する。

```
# hostnamectl set-hostname ホスト名
```

### SELinuxの無効化

デフォルトだと有効。おもちゃの環境では事態をややこしくするので、SELinuxは無効化しておく。
無効にする場合は /etc/sysconfig/selinux のSELINUXを編集

```/etc/sysconfig/selinux
# 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 three two values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected.
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted

```

ちなみにgetenforceコマンドを実行すると、SELinuxの状態確認ができる。

### FWの無効化

デフォルトだと有効。おもちゃの環境では(…のくだりは以下省略)。
ステータスを確認し、起動していたら停止。ついでにOS起動時に動かないようにしておく。

```
# systemctl status firewalld
# systemctl stop firewalld
# systemctl disabled firewalld
```

#### ちょっと脱線

おっさん世代(CentOS6以前の旧人類)だと、iptables(さすがにipchainsとは言わない)のほうが耳慣れているので、「時代だなぁ～」といってみたくなる。

おっさんネタついでに、最近だとサービス起動については/etc/init.d/ はすっからかん。
**service** コマンドから **systemctl** コマンドへ。いや大体がそっち系へ。いろいろな新出イディオムに対応しないと、ニュータイプと会話できなくなってしまうので、備忘のためにめもめもしておく。

`# service named start/stop/status`　→ `# systemctl start/stop/status named`

`# chkconfig named on/off` →　`# systemctl enable/disable named`

`# chkconfig --list` →　`# systemctl list-unit-files --type=service`

あとはレガシーな **net-tools** が標準インストールからなくなったので、**ip ~** を覚える。さよなら、net-tools…

`# ifconfig`　→　`# ip addr show`

`# ifconfig eth0 192.168.0.100 netmask 255.255.255.0`　→　`# ip addr add 192.168.0.100/255.255.255.0 dev eth0`

`# route`　→　`# ip route`

`# netstat -ntpa`　→　`# ss -ntpa`

`# arp`　→　`# ip neighbor`


## 共通でやっておくこと（パッケージまわり）

自身が気持ちよく使える環境のために、やっておくこと。
CentOS7のパッケージ管理はまだDNFではないので、yumで必要なものを入れておけばよい。
(yumを使っているイコールpythonのデフォルトは2系を意味するという、うれしくない感じでもある)

### yum リポジトリの追加

[EPEL](https://fedoraproject.org/wiki/EPEL/ja)リポジトリはよく使うので忘れずに入れる。

```
# yum install epel-release
```

### よく使うパッケージの追加

エディタなどのツールから開発ツール、python環境構築のために必要なパッケージは後でイライラしないように、入れておくのが一番。

```
# yum install vim wget unzip gcc gcc-c++ cmake git zlib-devel bzip2-devel readline-devel openssl-devel sqlite-devel
```

## 作業・実行ユーザーの環境

### python3実行環境の構築

大体の場合、python3系は自由に使える必要があるので、事前に用意しておく。

* https://github.com/pyenv/pyenv


## 参考

* [CentOS7サーバ構築 - LINUXの勉強ブログ](https://www.jdbc.tokyo/centos7-server/)
* [CentOS7初期設定 - CentOSで自宅サーバー構築](https://centossrv.com/centos7-init.shtml)