CentOS7(研究室内新設サーバー)の設定メモ

## 構築環境の構造

| 構成マシン       |    IP (local)  |    役割・コメント    |
|:-----------------|:--------------:|:------------------|
| Router           |   192.168.x.1  | ルーター専用機 DHCPサーバーも兼ねる  |
| hoge001          |   192.168.x.2  | hoge00nを束ねるマスターサーバー |
| hoge002          |   192.168.x.3  | スレーヴサーバー1   |
| hoge003          |   192.168.x.4  | スレーヴサーバー2   |
| ...              |   ...          | ...   |

マスターサーバーにルーター機能を担わせようとすると、関連する設定が面倒なので専用機を使って、ローカルネットワークを構築。
ルーターにはグローバル側のIPも振ってあり、ルーターのIPを特定のポートでたたくことでマスターサーバーのあるポートにつながる設定になっている。
**注意** この環境自体がローカルネットワークに置いてあるのでセキュリティに関してはかなり甘め。

マスターサーバーがNFSサーバーを担っていて、マスターサーバーの`master:/home`がスレーヴサーバーの`slave:/home`にNFSでマウントされている。
マスターサーバーはNISサーバーも担っていて、アカウントはこちらで管理されている。

## IPアドレスの固定

CentOS7では、設定ファイルを直接編集することは非推奨になったらしいので、`nmtui`を使って設定する。root権限要。

`nmtui`でグラフィカルなアプリが立ち上がるので、カーソルで選んでEnterで対象個所の編集。
例えばeth0の設定を選ぶ場合は<接続の編集>→< eth0 >→<編集...>にすることで、設定の編集ができる。
IPを固定したい場合はIPv4 設定を<DHCP>から<手作業>にし、適宜下記の項目の<追加...>を選ぶ。

設定項目はアドレス、ゲートウェイ、DNS サーバー、検索ドメインの四つ。
アドレスに所望のIPアドレスを記載し、`/`の後に数字でネットマスクの値を記入。
ゲートウェイ、DNS サーバー、検索ドメインは属しているネットワークの値を記入。
(大学の研究室等のローカルネットワークであれば、IPアドレス以外は、ゲートウェイとなっているルーターが分かっていればそのアドレスを記載すれば動くはず。)
**ネットマスクは独立した項目はなく、IPアドレスの最後部、`/`の後に数字で追記。**
例えば255.255.255.0であれば、24なので、`192.168.x.y/24`みたいな感じで。(~~もしかすると、`192.168.x.y/255.255.255.0`でも良いのかも。~~この書き方はnmtuiでは機能しなかった。)

上記の<接続の編集>のみでは設定内容は反映されない。
例えば`# service network restart`でネットワークデーモンを再起動する事で設定が反映される。
リモートでアクセスしている際は、この設定反映させたときに切断されてしまうので注意。
設定が不十分な場合、リモートからは入れず、本体に直接ログインしないといけないかも。

## NISとNFSをつかったマスターノードのアカウントと`/home`データの共有に向けた準備

NFSを使ってマスターノードの`master:/home`をスレーヴノードの`slave:/home`にマウントすることを考える。マウント先のディレクトリは空である必要がある。
一方、スレーヴノードにもルート以外に管理用の一般ユーザーアカウントは置いておきたい。(いつでもルートでログイン という状況を避けたい。)

そこで、スレーヴノードでは、管理用一般ユーザーアカウントを作り、そのユーザーのホームディレクトリを`/home`以外の場所にする必要がある。まだ管理用ユーザーを作成していない場合は、`adduser`コマンドに適切なオプションをつけてこの目的を達成することができる。
既にアカウントを作ってある場合は、既にあるhomeディレクトリを`/home`以下以外に移す必要がある。

このホームディレクトリの以降に関連して具体的な手続きに関して参考にしたページ: [ホームディレクトリの移行。 - Linuxの缶詰](http://linlinrh.hatenadiary.jp/entry/2018/01/10/220000)
まだ存在しないディレクトリに移行しようとしたさいでも、コマンドは通ってしまうので注意。

```bash
# 各ユーザーのhomeディレクトリの確認
less /etc/passwd
# user_nameの新たなホームディレクトリの指定
usermod -d /directory/for/new/home user_name
```

### 手元の実環境特有の設定メモ1
手元の環境では`/home`を空ける為に、`/home_hostname`を作って、全てそこに移行した。
`/home`用にディスクがマウントされていたので、
1. `/home_hostname`の作成
2. `/etc/fstab`を編集してマウント先を`/home_hostname`に変更
3. `umount /home`でアンマウントしてから`mount /home_hostname`でマウント
4. `usermod`コマンドでホームディレクトリの移動
という手続きを取った。
このとき、一般ユーザーでログインしてから`su -`でルートになっていると、`/home`以下がビジーになってしまって、`umount`も`usermod`もできないので、ルートで直接入る必要がある。

### 手元の実環境特有の設定メモ2
上の設定メモ1では、`/home`が特定のディスク(なりパーティション)にマウントされていた状況が念頭にあった。一方で、`/`がディスクにマウントされていて、`/home`は単にそこにぶら下がっている一ディレクトリのこともある。その際は
1. `/home_hostname`の作成
2. `/home/user_name`を`/home_hostname/user_name`に`mv`コマンドで移動
3. `usermod`コマンドでホームディレクトリの移動
となる。ディスクのマウント先を変える時と異なって、ファイルの移動は明示的に行わなければいけないことが、先の設定メモ1の状況との大きな差になる。

## NFSの設定

### NFSサーバー側の設定
```bash
# nfs-utilsのインストール
yum install nfs-utils
# NFSサービスの起動と有効化(自動起動設定)
systemctl start nfs-server
systemctl enable nfs-server
```
設定ファイルは'/etc/exports'にある。
ここに

```
/home  192.168.x.0/255.255.255.0(rw,async) #読み書き許可、非同期
/backup 192.168.x.0/255.255.255.0(ro)      #read-only
```
を記述。(一先ずオプションは適当)
`systemctl resatrt nfs-server`でNFSサービスを再起動して、設定を反映。
`exportfs`コマンドで、正しく反映されているかどうかを確認できる。

### NFSクライアント側の設定
設定ファイルは`/etc/fstab`にある。
ここに

```
192.168.x.2:/home  /home  nfs defaults 0 0
192.168.x.2:/home  /home  nfs defaults,ro 0 0 #read-only(ro)でマウントしたい場合
```
を記述。(一先ずオプションは適当)
`mount /home`で、`master:/home`が`slave:/home`にマウントされるはず。
(手元の計算機では、足りないアプリは無かったが、NFS関係のアプリケーションが入っていない感じのエラーが出たら、`nfs-utils`を入れる必要があるかも)
`df -h`などでマウントされているかどうか確認できる。

## NISの設定
LDAPの方がNISよりも現代的とのことだけれども、ひとまずLDAPは見送ってNISを使う。
移行とLDAPの概要を紹介している参考ページ: [NISの環境からLDAPへの移行 | scwirq&#039;s logs](https://www.scwirq.com/index.php/2018/01/20/nis%E3%81%AE%E7%92%B0%E5%A2%83%E3%81%8B%E3%82%89ldap%E3%81%B8%E3%81%AE%E7%A7%BB%E8%A1%8C/)

### NISサーバー側の設定

参考にしたウェブページ: [CentOS 7 NISでユーザ管理 &#8211; NISサーバの設定 &larr; RootLinks Co., Ltd.](https://www.rootlinks.net/2016/03/23/centos-7-nis%E3%81%A7%E3%83%A6%E3%83%BC%E3%82%B6%E7%AE%A1%E7%90%86-nis%E3%82%B5%E3%83%BC%E3%83%90%E3%81%AE%E8%A8%AD%E5%AE%9A/)

```bash
# インストール
yum install ypserv
# NISドメイン名を hoge に設定
ypdomainname hoge
```

NISドメイン名を再起動後も hoge として設定するために`/etc/sysconfig/network`に

```
NISDOMAIN=hoge
```
を記載。
NISクライアントとして許可する範囲を`/var/yp/securenets`に

```
255.255.255.255 127.0.0.1    #ローカルホスト
255.255.255.0   192.168.x.0  #ローカルネットワークの内側
```
と記載。

```bash
# NISサービスの起動と有効化(自動起動設定)
systemctl start ypserv yppasswdd
systemctl enable ypserv yppasswdd
```
`systemtl status ypserv yppasswdd`で状態を確認できる。

```bash
# NISデータベースの更新
/usr/lib64/yp/ypinit -m
```
対話的に進む。
ホストを追加しないので、ctrl+Dで止め、正しいホスト名が表れていれば y で進む。

NISサーバーにユーザーを追加した場合は、

```bash
cd /var/yp
make
systemctl restart ypserv yppasswdd
```
で新ユーザーが反映される。

### NISクライアント側の設定

参考にしたウェブページ: [CentOS 7 NISでユーザ管理 &#8211; NISクライアントの設定 &larr; RootLinks Co., Ltd.](https://www.rootlinks.net/2016/03/24/centos-7-nis%E3%81%A7%E3%83%A6%E3%83%BC%E3%82%B6%E7%AE%A1%E7%90%86-nis%E3%82%AF%E3%83%A9%E3%82%A4%E3%82%A2%E3%83%B3%E3%83%88%E3%81%AE%E8%A8%AD%E5%AE%9A/)

```bash
# インストール
yum install ypbind yp-tools
# NISドメイン名を hoge に設定
ypdomainname hoge
```

NISドメイン名を再起動後も hoge として設定するために`/etc/sysconfig/network`に

```
NISDOMAIN=hoge
```
を記載。
NISサーバーを名前から探索できるように`/etc/hosts`に

```
192.168.x.2   hoge001
```
と記載。

```bash
#NIS認証の設定(よく理解していない)
authconfig --enablenis --nisdomain=hoge --nisserver=hoge001 --enablemkhomedir --update
```

```bash
# NISサービスの起動と有効化(自動起動設定)
systemctl start ypbind
systemctl enable ypbind
```
`systemctl status ypbind`で状態を確認できる。

うまくいっていれば、`ypcat passwd`で、紐づいている様子が確認でき、 `ypwhich`でNISサーバーの場所が帰ってくるはず。

## トラブルシューティング
### スレーヴサーバー(NISクライアント)にログインした時のユーザー名/グループ名がおかしい

原因の一つはNISのサーバーとクライアントのユーザー間でUID/GIDが重なっていること。これを解消する事で、期待する挙動を示すようになった。
具体的には`usermod -u`と`groupmod -g`でUID/GIDを変える。CentOS7では、UID/GID共に1000から順に番号が増えていく。これを1000→2000, 1001→2001等としてシフトさせた。
これに対応して、クライアントのローカルアカウントのホームディレクトリのオーナーも変えるべきなので、忘れに`chown`コマンドで対応するものに変える。

(正確なソースで確認したわけではないがUID/GIDが両計算機でかぶっていると、どうも後述するような挙動となるよう。ログインした際、UID(と多分GIDも)をNISサーバーからとってくる。そして、そこからUSER環境変数を代入するときには、どうもNISクライアント内の`/etc/passwd`を使っているようだった。UID/GIDが重ならないようにすると、USERにはNISサーバーにあるものを使うようになった。)

### 全ユーザー共通環境設定`/etc/profile`がスレーヴサーバーへ反映されない
上記の設定ではマスターサーバーのホームディレクトリをNFSで共有しているので、どこかのサーバーから`.bashrc`/`.bash_profile`を編集する事で、ログインした計算機に依らず共通の環境設定がなされる。
しかし、`/etc`以下はNFSで共有していない(ここには色々込み入ったファイルがあるので共有は難しそう)ので、全ユーザー共通環境設定`/etc/profile`は個々のサーバーにあるものが呼ばれる。
つまり、このファイルで設定する環境を共通の何かにしたい場合は、全てのサーバーの`/etc/profile`に同じ内容を追記する必要がある。

こうした需要は例えば、アプリを自前で`/opt`に入れて、そこへのPATHを通したいときに発生する。各ユーザーが`.bashrc`等に追記してもいいかもしれないが、ルートが`/etc/profile`にしかるべき書き方で記載したほうが単純。マスターサーバーの`/opt`をスレーヴ―サーバーがNFSでマウントすれば、個々の計算機でビルドする必要がなくなる。

### `authconfig`のところでこける
NISサーバー側の`/etc/hosts`にクライアントから`authconfig`をすると、こける。
`/etc/hosts`にIPとホスト名を追加。


## 参考

[3]連載「分子シミュレーション研究者のためのPCクラスタ入門」](https://www.jstage.jst.go.jp/article/mssj/17/4/17_209/_pdf) （pdf注意)

# chronyの設定

```:/etc/chrony.conf(抜粋)
server 0.jp.pool.ntp.org iburst
server 1.jp.pool.ntp.org iburst
server 2.jp.pool.ntp.org iburst
server 3.jp.pool.ntp.org iburst
#
minsources 2
```

で、`systemctl restart chronyd`で再起動。

### 設定の確認

```terminal
chronyc tracking
chronyc sources
```

参考: [5分でできる！NTP（chrony）の設定方法【CentOS7】 &#8211; Hacker&#039;s High](https://hackers-high.com/linux/easy-chrony-settings/)