Azure VM Linuxを構築する際に最低限やること

# はじめに
Azure上でLinuxVMを立ち上げる時に最低限やっておく設定をまとめてみました。

# 前提条件
OSはCentOS7、Ubuntu18.04とします。

# historyにタイムスタンプを表示（推奨）
いつどんなコマンドを叩いたか追えるように。

```:~/.bashrc
# 以下追記
HISTTIMEFORMAT='%Y-%m-%d %T%z '
```

```:
# 再起動
exec $SHELL -l
```

# スワップファイルを作成（推奨）
```:
# 事前確認
$ free
              total        used        free      shared  buff/cache   available
Mem:        3514412      166960     3174020        8468      173432     3113864
Swap:             0           0           0

# スワップファイル有効化
$ sudo vi /etc/waagent.conf

……省略（修正箇所のみ表示）……
# CentOS
ResourceDisk.EnableSwap=y
ResourceDisk.SwapSizeMB=4096　#メモリの２倍を推奨。仮想サーバのSKUにより値は異なる。

# Ubuntu18.04　上記の二項目の他↓を設定
ResourceDisk.Format=y 
```

# タイムゾーン変更（推奨）
デフォルトのUTCではなく日本時間（JST）で管理したい時に。

```:
# 事前確認
$ timedatectl 
      Local time: 金 2018-02-02 09:52:06 UTC
  Universal time: 金 2018-02-02 09:52:06 UTC
        RTC time: 金 2018-02-02 09:52:46
       Time zone: Etc/UTC (UTC, +0000)
     NTP enabled: yes
NTP synchronized: no
 RTC in local TZ: no
      DST active: n/a

# システムクロックのタイムゾーンを変更
$ sudo timedatectl set-timezone Asia/Tokyo

# ハードウェアクロックのタイムゾーンをUTCへ変更
$ sudo timedatectl set-local-rtc 0

# 変更後確認
$ timedatectl
```

# localとキーボードレイアウトを変更

```:
# 変更前確認
$ localectl status
   System Locale: LANG=en_US.UTF-8
       VC Keymap: us
      X11 Layout: us

# 日本語に変更
$ sudo localectl set-locale LANG=ja_JP.utf8
$ sudo localectl set-keymap jp106
```

# パスワード設定
Azure Potalなどからコンソール接続したいときには必要です。

```:
$ sudo passwd hoge 
$ sudo passwd root 
```

# SELinux無効化
SELinux使えこなせるつよつよエンジニアには不要かもしれません。

```:
# 事前確認
$ getenforce
Enforcing

# configバックアップ
$ sudo cp -piv /etc/selinux/config /etc/selinux/config.`date "+%Y%m%d"`
`/etc/selinux/config' -> `/etc/selinux/config.20180202'

# 編集
$ sudo vi /etc/selinux/config

……省略（修正箇所のみ表示）……
##SELINUX=enforcing
SELINUX=disabled
```

# Log Analytics
syslogやアクセスログ等のログを統合管理したい場合は推奨しておきます。
事前にAzure Potal等でLog Analyticsワークスペースを作成しておく必要があります。

```:
wget https://raw.githubusercontent.com/Microsoft/OMS-Agent-for-Linux/master/installer/scripts/onboard_agent.sh && sh onboard_agent.sh -w <ワークスペース ID> -s <ワークスペース PRIMARY KEY>
```

# Azure CLI（推奨）
何かと使うのでインストールしておくとのちのち便利です。

```
# CentOS
## リポジトリキーのインポート
sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc

## リポジトリ情報の登録
echo -e "[azure-cli]
name=Azure CLI
baseurl=https://packages.microsoft.com/yumrepos/azure-cli
enabled=1
gpgcheck=1
gpgkey=https://packages.microsoft.com/keys/microsoft.asc" | sudo tee /etc/yum.repos.d/azure-cli.repo

## インストール
sudo yum install azure-cli

# Ubuntu18.04
curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash
```

# パッケージアップデート（必須）
これはタイトル通り最低限やっておきたいです。

```:
# CentOS7
$ sudo yum -y update

# Ubuntu18.04
## パッケージ情報の更新
$ sudo apt update
## パッケージ更新
$ sudo apt upgrade
```

# 再起動（必須）

```:
$ sudo shutdown -r now
```
# 諸々確認

```:
# スワップファイル確認
$ free
              total        used        free      shared  buff/cache   available
Mem:        3514412      167820     3198808        8468      147784     3126148
Swap:       4194300           0     4194300

# タイムゾーン確認
$ timedatectl
      Local time: 金 2018-02-02 18:52:44 JST
  Universal time: 金 2018-02-02 09:52:44 UTC
        RTC time: 金 2018-02-02 09:53:25
       Time zone: Asia/Tokyo (JST, +0900)
     NTP enabled: yes
NTP synchronized: no
 RTC in local TZ: no
      DST active: n/a

# 変更後確認
$ localectl status
   System Locale: LANG=ja_JP.utf8
       VC Keymap: jp106
      X11 Layout: jp
       X11 Model: jp106
     X11 Options: terminate:ctrl_alt_bksp

# SELinux確認
$ getenforce
Disabled

# ワークスペース登録状況
$ sudo /opt/microsoft/omsagent/bin/omsadmin.sh -l

Primary Workspace: <workspaceId> Status: Onboarded(OMSAgent Running)

# Azure CLI バージョン確認
$ az --version
azure-cli                          2.5.1

command-modules-nspkg              2.0.3
core                               2.5.1
nspkg                              3.0.4
telemetry                          1.0.4
...
```

# 最後に
他の方がどのようなことをやっているのか知りたいので上記以外にもありましたらコメント頂けると助かります。

# 参考
[Azure VMでLinuxインスタンスを起動したら最初にやっておくべき初期設定](https://www.buildinsider.net/pr/microsoft/azure/dictionary04)
[chrony.conf(5) Manual Page](https://chrony.tuxfamily.org/doc/3.2/chrony.conf.html)