OCI Compute払い出し直後にやること

# はじめに
Computeインスタンス作成すると、初期状態ではタイムゾーンやロケールが日本向けに設定されていない。そのため設定を変更しなければならない。さまざまなところで使い古されているネタだけれど、防備録として書くことにする。

また手動で設定するのではなく、cloud-initでインスタンス作成と同時に設定する方法は下記の記事で紹介している。

* [cloud-initでOCI Computeの初期設定を済ませる](https://qiita.com/yamada-hakase/items/ec141a6d40f1027582ac)

### 対象環境
6系と7/8/9系ではまったく操作が違うので、それぞれについて説明する。

* Red Hat Enterprise Linux 7/8/9などのRHEL系Linux
* Red Hat Enterprise Linux 6やCentOS 6、Oracle Linux 6、Amazon Linuxなどの6系Linux

※本文ではOracle Cloud Infrastructureを使用しているが、Amazon EC2やAzure VMでもほとんどの操作は同じだ。ただしAmazon Linux 2は7系の説明を参照してほしい。

### ローカルログインのロケールとsshログインのロケールの違い

Computeインスタンス作成直後にsshログインしたときでも、ロケールは日本（LANG=ja_JP.utf8）になっている。それはログイン方法によって、設定されるロケールが違うからである。

ローカルログインでは、システムワイドのロケールが使用される。その値は次のファイルに設定されている。

**6系**　/etc/sysconfig/i18n
**7/8/9系**　/etc/locale.conf

それに対してsshログインではsshクライアントのロケールが使用される。そのため日本語環境のWindows/Linuxからsshログインすると、日本のロケールが設定される。ただしsshログイン後```sudo su -```などを実行するとローカルログインなので、ロケールは```LANG=en_US.UTF-8```になる。

ローカルログインで、個別のユーザーだけのロケールを変更するには以下のように設定する。

**6系**　$HOME/.bashrcなどで```LANG=ロケール```をexportする
**7/8/9系**　$HOME/.i18nで指定する


# 7/8/9系OSで変更する

### タイムゾーンを変更する

現在のタイムゾーンを確認するとGMTになっている。

```
# timedatectl
      Local time: Tue 2019-05-14 09:49:46 GMT
  Universal time: Tue 2019-05-14 09:49:46 UTC
        RTC time: Tue 2019-05-14 09:49:47
       Time zone: GMT (GMT, +0000)
     NTP enabled: yes
NTP synchronized: yes
 RTC in local TZ: no
      DST active: n/a
```

タイムゾーンを日本に変更する。これで日本時刻が表示される。

```
# timedatectl set-timezone Asia/Tokyo
# timedatectl
      Local time: Tue 2019-05-14 19:56:35 JST ★
  Universal time: Tue 2019-05-14 10:56:35 UTC
        RTC time: Tue 2019-05-14 10:56:36
       Time zone: Asia/Tokyo (JST, +0900)
     NTP enabled: yes
NTP synchronized: yes
 RTC in local TZ: no
      DST active: n/a
```

タイムゾーンを変更したときにはsyslogを再起動する。

```
# systemctl restart rsyslog
```

### ロケールを変更する

現在のロケールを確認するとアメリカになっている。

```
# localectl
   System Locale: LANG=en_US.utf8
       VC Keymap: us
       us
```

そこでロケールを日本に変更する。合わせてキーマップも日本語に変更する。

```
# localectl set-locale LANG=ja_JP.utf8
# localectl set-keymap jp106
```

同じコマンドを実行するとロケールが変更されていることがわかる。

```
# localectl
   System Locale: LANG=ja_JP.utf8
       VC Keymap: jp106
      X11 Layout: jp
       X11 Model: jp106
     X11 Options: terminate:ctrl_alt_bksp
```

設定値は次のファイルに書かれている。

```shell-session

# cat /etc/locale.conf
LANG=ja_JP.utf8
```

### キーマップを変更する

キーマップを変更しなくても日本語キーボードを使えることがほとんどだ。しかし、VNCやXmingなどのGUIクライアントを使用するときには変更しなければならないこともある。

1. 次のコマンドでキーマップを変更する。

```shell-session
localectl set-keymap jp106
```

2.変更すると次のように出力される。

```shell-session
# localectl
   System Locale: LANG=en_US.UTF-8
       VC Keymap: jp106
      X11 Layout: jp
       X11 Model: jp106
     X11 Options: terminate:ctrl_alt_bksp
```


### RPMパッケージをインストール／アップデートする

パッケージを最新化する。

```
# yum update -y
```

続いて便利なパッケージをインストールする。

```
# yum install nmap nc tree tmux multitail man-pages-ja -y
```

nmapにはncなどが含まれ、ポートの疎通確認などに使える。tmuxはターミナル多重化ソフトウェアで、1つのターミナルの中で複数のセッションを起動できるだけでなく、セッションが切れても、リモートデスクトップのようにサーバー上のセッションは保持されている。multitailはログファイルを参照するのに便利なツールである。


### まとめバージョン（7/8/9系）

```
# タイムゾーン変更
timedatectl set-timezone Asia/Tokyo

# ロケール変更
localectl set-locale LANG=ja_JP.utf8
localectl set-keymap jp106

# パッケージアップデート
yum update -y

# 便利パッケージインストール
yum install nmap nc tree tmux multitail man-pages-ja -y
```

# Oracle Linux 6/CentOS 6などの6系OSで変更する

### タイムゾーンを変更する

現在のタイムゾーンを確認するとGMTになっている。

```
# strings /etc/localtime
TZif2
TZif2
GMT0

# ls -l /etc/localtime
-rw-r--r--. 1 root root 118  4月 19 02:12 2019 /etc/localtime
```

システムクロックのタイムゾーンを日本に変更する。

```
# ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime

# ls -l /etc/localtime
lrwxrwxrwx. 1 root root 30  5月 14 20:12 2019 /etc/localtime -> /usr/share/zoneinfo/Asia/Tokyo

# strings /etc/localtime
TZif2
TZif2
JST-9
```

ハードウェアクロックの設定も日本にする。

```
# cp -p /etc/sysconfig/clock /etc/sysconfig/clock-`date +%Y%m%d`
# cat <<_EOL_ >/etc/sysconfig/clock
ZONE="Asia/Tokyo"
UTC=false
_EOL_
```

### ロケールを変更する

現在のロケールを確認するとアメリカになっている。

```
# locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8
```

設定値は/etc/sysconfig/i18nファイルに書かれている。

```
# cat /etc/sysconfig/i18n
LANG=en_US.UTF-8
SYSFONT=latarcyrheb-sun16
```

そこでロケールを日本に変更する。

```shell-session
# sed -i -e "s/en_US/ja_JP/" /etc/sysconfig/i18n 
```

設定を有効にするために再起動する。

```
# reboot
```


同じコマンドを実行するとロケールが変更されていることがわかる。

```
$ cat /etc/sysconfig/i18n
LANG=ja_JP.utf8
SYSFONT=latarcyrheb-sun16
```

sshログインしたユーザーだとクライアントのロケールが反映されるので、suしてから実行する。

```
$ sudo su -
# locale
LANG=ja_JP.utf8
LC_CTYPE="ja_JP.utf8"
LC_NUMERIC="ja_JP.utf8"
LC_TIME="ja_JP.utf8"
LC_COLLATE="ja_JP.utf8"
LC_MONETARY="ja_JP.utf8"
LC_MESSAGES="ja_JP.utf8"
LC_PAPER="ja_JP.utf8"
LC_NAME="ja_JP.utf8"
LC_ADDRESS="ja_JP.utf8"
LC_TELEPHONE="ja_JP.utf8"
LC_MEASUREMENT="ja_JP.utf8"
LC_IDENTIFICATION="ja_JP.utf8"
LC_ALL=
```

### キーマップを変更する

キーマップの設定はオプションだが、VNCやXmingなどのGUIクライアントを使用するときには変更する。

```:/etc/sysconfig/keyboard（修正前）
KEYTABLE="us"
MODEL="pc105+inet"
LAYOUT="us"
KEYBOARDTYPE="pc"
```

```:/etc/sysconfig/keyboard（修正後）
KEYTABLE="jp106"
MODEL="jp106"
LAYOUT="jp"
KEYBOARDTYPE="pc"
```

### RPMパッケージをインストール／アップデートする

パッケージを最新化する。

```
# yum update -y
```

続いて便利なパッケージをインストールする。

```
# yum install nmap nc tree tmux multitail man-pages-ja -y
```

### まとめバージョン（6系）

```
# システムクロックのタイムゾーン変更
ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime

# ハードウェアクロックのタイムゾーン変更
cp -p /etc/sysconfig/clock /etc/sysconfig/clock-`date +%Y%m%d`
cat <<_EOL_ >/etc/sysconfig/clock
ZONE="Asia/Tokyo"
UTC=false
_EOL_

# ロケール変更
sed -i -e "s/en_US/ja_JP/" /etc/sysconfig/i18n 

# パッケージアップデート
yum update -y

# 便利パッケージインストール
yum install nmap nc tree tmux multitail man-pages-ja -y
```

# おわりに

今回は手動で設定する方法を説明した。やはり、cloud-initのほうが便利だなあ。