【前提】CentOS検証環境初期設定

## この記事について
[pgpool-IIの使い方を考える](https://qiita.com/sankaku/items/94f2b6421f100e5f48f7)のサブページです。

## 概要
検証向けに使用するCentOS全般の設定値について記載します。

## 環境情報
- 仮想環境：VirtualBox 5.2.18
- OS：CentOS 7.5

## VirtualBox特記事項
### ネットワーク設定
- アダプター1：ホストオンリーアダプター

（VM間通信用。）

- アダプター2：ホストオンリーアダプター

（VM間通信用。アダプター1と2でbondingとします。）

- アダプター3：NATネットワーク

（インターネット接続用。別途VirtualBox環境設定からNATネットワークを設定しておく必要があります。※NATでも問題ありません。）


- アダプター4：無効

### その他
- 起動インスタンスでホストOSのディレクトリを参照する共有フォルダ―を作成しておきます。
- 起動インスタンスでクリップボードの共有を双方向で設定しておきます。

## OSインストール特記事項
- ソフトウェアの選択

ベース環境：サーバー（GUI使用）
追加アドオン：開発ツール

- ネットワークインターフェース

ホストオンリーアダプターのインターフェースはデフォルトのまま「オフ」とします（bonding設定向け）。

- VirtualBoxのGuestAdditionsインストール

- 初回GUIログイン時のキーボード設定で「日本語」ではなく「日本語（かな漢字）」を選択する。


## bonding設定
bonding設定します。

bondingは物理デバイスの冗長化を目的としているものです。私は近年、仮想環境やクラウドで構築することが多くなっておりまして、あまり使用する機会がありませんが、オンプレミスでシステム構築することもまだあるような気がするので、検証環境はbonding設定としておきます。

### 事前状況確認
```:command
# nmcli connection show
# ip addr show
```

### bond0作成（DHCP）
```:command
# nmcli connection add type bond autoconnect yes con-name bond0 ifname bond0 mode active-backup
```

### bond0にslave追加
```:command
# nmcli connection add type bond-slave autoconnect yes con-name slave0_1 ifname enp0s3 master bond0
# nmcli connection add type bond-slave autoconnect yes con-name slave0_2 ifname enp0s8 master bond0
```

### bond0に固定ipアドレス、firewalldポリシーを設定
bond0に固定IPアドレスを設定します。

CentOS7のネットワーク設定方法は色々ありますが、ここでは出来るだけnmcliの対話モードを使用します。

```:command
# nmcli connection edit bond0
nmcli> print
nmcli> set ipv4.method manual
nmcli> set ipv4.addresses 192.168.56.101/24
```
（事前にmanual変更しなくてもこのコマンドで変更を促されます。）

```:command
nmcli> set connection.zone internal
```
（firewalldのzoneをデフォルトのpublicからinternalに変更します。）

```:command
nmcli> print
nmcli> save
nmcli> quit
```

NWを再起動する。 

```:command
# systemctl restart network
```
インターフェースのdown/upのみだとping疎通で失敗します。
（エラーメッセージ：「転送中に TTL が期限切れになりました。」）
NW再起動必須です。他、どうにもうまくいかないときは一旦OSごと再起動してみるのもありかと思います。

### bond0の状態を確認

```:command
# cat /proc/net/bonding/bond0
# nmcli connection show
# ip addr show
```

### その他NW操作備忘
- IP設定削除

```:command
nmcli> remove ipv4.addresses
```
（IP削除と共に、ipv4.methodはautoに変更されます。）


- bondコネクションダウン 

```:command
# nmcli connection down bond0 
```
（自動でslaveもdownします。 ）

- コネクション削除

 (削除はコネクションダウンしなくても実行可能です。) 

```:command
# nmcli connection delete bond0
# nmcli connection delete slave0_1
# nmcli connection delete slave0_2 
```

- コネクション手動up 

```:command
# nmcli connection up bond0
# nmcli connection up slave0_1
# nmcli connection up slave0_2 
```

- 設定ファイル実態 

以下パス配下に格納されています。CentOS6までと特に変わりません。

/etc/sysconfig/network-scripts/ 


## OS起動状況詳細表示（プログレスバーを消す。）
OS起動時のプログレスバーを消して、プロセスの起動状況を表示させます。

- 設定値を確認する。（このファイルは直接編集しない。）

```:command
# less /boot/grub2/grub.cfg
```
- 設定値を変更する。

grub設定ファイルの変数GRUB_CMDLINE_LINUXの値からrhgbを削除します。

```:command
# cp -p /etc/default/grub /etc/default/grub_org
# vi /etc/default/grub
# diff /etc/default/grub /etc/default/grub_org
```

```:result
6,7c6
< #GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet"
< GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap quiet"
---
> GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet"
```

- 設定値を反映する。

```:command
# grub2-mkconfig -o /boot/grub2/grub.cfg
```

- 反映された設定値を確認

```:command
# less /boot/grub2/grub.cfg
```

- OSを再起動して、プログレスバーが表示されない代わりにプロセス起動状況が表示されることを確認する。

## SELinux無効化

SELinuxについては私は今後も当面使用する予定がなさそうなのでOFFにしておきます。

- 設定状況を事前確認する。

```:command
# getenforce
```

```:result
Enforcing
```

```:command
# sestatus
```

```:result
SELinux status:                 enabled
SELinuxfs mount:                /sys/fs/selinux
SELinux root directory:         /etc/selinux
Loaded policy name:             targeted
Current mode:                   enforcing
Mode from config file:          disabled
Policy MLS status:              enabled
Policy deny_unknown status:     allowed
Max kernel policy version:      31
```

- 設定値を変更する。

```:command
# cp -p /etc/selinux/config /etc/selinux/config_org
# vi /etc/selinux/config
# diff /etc/selinux/config /etc/selinux/config_org
```

```:result
7,8c7
< #SELINUX=enforcing
< SELINUX=disabled
---
> SELINUX=enforcing
```

- 設定値を反映するためOSを再起動する。

- 設定値が反映されていることを確認する。

```:command
# getenforce
```

```:result
Disabled
```

```:command
# sestatus
```

```:result
SELinux status:                 disabled
```

## firewalld設定

- デフォルトゾーンをinternalに変更する。

```:command
# firewall-cmd --set-default-zone=internal
```

- パケット拒否を全てログ出力する設定とする。

```:command
# firewall-cmd --set-log-denied=all
```

- 再起動して反映する。

```:command
# firewall-cmd --reload
```

## bashプロンプト表示変更

- /etc/bashrcに以下を追記する。

```:config
PS1='[\u@\h \t \W]\$ '
```

「\t：時刻」を追加。他はデフォルト。


- 再ログインして確認する。

※コンソール起動の度に反映するものなので、profileではなくbashrcに設定します。exportする必要のある変数はprofileに記載します。

## history設定変更

- /etc/profile.d/history.shを以下のように作成する。

```:command
# cat /etc/profile.d/history.sh
```

```:result
HISTSIZE=99999
```

/etc/profileを編集しても良いのですが、せっかくカスタマイズ用のディレクトリが用意されているので利用します。


- 再ログインして確認する。

## chronydの自動起動

- vender presetがenabledのはずだが、なぜか無効化されていたので、有効化しておく。

```:command
# systemctl status chronyd
# systemctl enable chronyd
# systemctl status chronyd
```

- OSを再起動して自動起動することを確認する。

## ssh鍵交換

ssh鍵を作成してrootユーザで自サーバにパスワード無しでログインできるようにしておき、以降、当該ホストのクローンを作成した場合にクローン間で相互にパスワード無しログインできるようにしておきます。

また、検証環境においては設定を簡略化するため、1つのssh鍵を他ユーザ及び他サーバで共有します。


- 秘密鍵と公開鍵を作成します。

```:command
# cd
# mkdir .ssh
# cd .ssh/
# ssh-keygen -t rsa
```

```
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:+iPbMkEC6xsGC/oJuvvzFCFnGaABief6BFefPGDKHiM root@localhost.localdomain
The key's randomart image is:
+---[RSA 2048]----+
|=....            |
|ooo +o           |
|.+.*=+ .         |
|E O+..*          |
|oX o.o .S        |
|= *  ...         |
|.* +. ..         |
|. *.  +o.        |
|o+.o. .=o.       |
+----[SHA256]-----+
```

- 作成されるファイルはそれぞれ次の通りです。

秘密鍵：id_rsa（接続元用。）
公開鍵：id_rsa.pub（接続先用。authorized_keysに追記して使用する。）


- 公開鍵を配備する。

```:command
# cat id_rsa.pub >> authorized_keys
# chmod 600 authorized_keys
# rm id_rsa.pub
```

- 自サーバにパスワード無しでログインできることを確認する。

初回ログイン時は接続確認プロンプトが出力されます。
初回ログイン後にはknown_hostsに記録が残るので、2回目以降は確認プロンプトが表示されません。初回ログイン前に記載しておくことでプロンプト表示は回避できます。
※スクリプト等で自動ログインさせたい場合は接続対象ホストがknown_hostsに記載されていることを確認しておく必要があります。

## CUI/GUIのデフォルト変更

インストール直後はGUIで起動するようになっています。特に変更しませんが、備忘のため操作方法を残しておきます。

- CUIに変更する。

```:command
# systemctl set-default multi-user.target
```

- GUIに変更する。

```:command
# systemctl set-default graphical.target
```

※上記コマンドは/etc/systemd/system/default.target のシンボリックリンク先を変更しています。
※CUIに変更してstartxでGUIを使用する運用にする場合は日本語対応の為startxの文字コード設定を変更する必要があります。