Ubuntu 18.04の初期設定をしてみた

# 用途

サーバを構築した後の初期設定時の自分なりのTipsを纏めました。

新しいことが分かり次第追記していきます :tools:

# 構築メモ

VirtualBox を使って、Ubuntu Server を作る記事を下記にて公開しています。

+ Windows 7にVirtualBox 5.2.12を入れてUbuntu 18.04を入れる(2018/07) 前篇
    + http://iganari.hatenablog.com/entry/2018/07/04/112222
+ Windows 7にVirtualBox 5.2.12を入れてUbuntu 18.04を入れる(2018/07) 後編
    + http://iganari.hatenablog.com/entry/2018/07/04/163332

# 初期設定

### 作業時

:warning: rootになって行います。誤作業に注意してください。 :warning:

```
sudo su -
```


### アップデート

まずは最新のパッケージを入手しましょう

+ パッケージ情報の更新

```
apt update
```

+ パッケージの更新

```
apt upgrade -y
```

### 時刻設定

デフォルトだと `UTC` になっているかと思うので、 `JST` に変更しましょう

+ デフォルトを確認

```
# date
Wed Jul  4 08:37:58 UTC 2018
```

+ `zoneinfo` のリンクを入れ替えることで、 時刻設定を修正

```
rm -rfv /etc/localtime &&\
ln -s /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
```

+ 修正を確認

```
# date
Wed Jul  4 17:41:36 JST 2018
```

### locate を日本語に設定

```
echo 'LANG="en_US.UTF-8"' > /etc/default/locale
```

+ 参考資料

https://jyn.jp/ubuntu-localip-static/

### デフォルトのエディターの設定をVimに変更する ①

昔からの習わしなのか、デフォルトのエディターが未だに `nano` なので、これを `Vim` に変更します。

まずはインタラクティブに変更するやり方です

+ 現在のデフォルトのエディタの設定の確認

```
# ls -la /usr/bin/editor 
lrwxrwxrwx 1 root root 24 Apr 27 04:08 /usr/bin/editor -> /etc/alternatives/editor
# ls -la /etc/alternatives/editor
lrwxrwxrwx 1 root root 9 Apr 27 04:09 /etc/alternatives/editor -> /bin/nano
```

+ `Vim` がインストールされているか確認

```
# apt list --installed | grep vim

WARNING: apt does not have a stable CLI interface. Use with caution in scripts.

vim/bionic,now 2:8.0.1453-1ubuntu1 amd64 [installed]
vim-common/bionic,now 2:8.0.1453-1ubuntu1 all [installed]
vim-runtime/bionic,now 2:8.0.1453-1ubuntu1 all [installed]
vim-tiny/bionic,now 2:8.0.1453-1ubuntu1 amd64 [installed]
```

+ デフォルトのエディターを変更する( `nano` ---> `Vim` )
    + 3の `vim.basic` を選択する

```
# update-alternatives --config editor
There are 4 choices for the alternative editor (providing /usr/bin/editor).

  Selection    Path                Priority   Status
------------------------------------------------------------
* 0            /bin/nano            40        auto mode
  1            /bin/ed             -100       manual mode
  2            /bin/nano            40        manual mode
  3            /usr/bin/vim.basic   30        manual mode
  4            /usr/bin/vim.tiny    15        manual mode

Press <enter> to keep the current choice[*], or type selection number: 3
update-alternatives: using /usr/bin/vim.basic to provide /usr/bin/editor (editor) in manual mode
```

+ 現在のデフォルトのエディタの設定の再確認

```
# ls -la /usr/bin/editor
lrwxrwxrwx 1 root root 24 Apr 27 04:08 /usr/bin/editor -> /etc/alternatives/editor
# ls -la /etc/alternatives/editor
lrwxrwxrwx 1 root root 18 Jul 24 09:13 /etc/alternatives/editor -> /usr/bin/vim.basic
```

+ 参考記事
    + https://blog.amedama.jp/entry/2017/03/08/205711
    + https://qiita.com/methane/items/68093d6bc3f7c0e326e2

### デフォルトのエディターの設定をVimに変更する ②

+ シンボリックリンクを変更する方法

```
unlink /etc/alternatives/editor
ln -s /usr/bin/vim.basic /etc/alternatives/editor
```
```
apt remove --purge nano
```

# ネットワークの設定

### OpenSSH のインストール

初期設定だと OpenSSH がインストールしてない(もしくは起動していない)可能性があります。
リモートからログイン出来るよう、設定していきます

+ openssh-server のパッケージをインストール

```
apt install openssh-server
```

+ SSH の Service が起動しているか確認

```
systemctl status ssh
```
```
### Ex.

# systemctl status ssh
● ssh.service - OpenBSD Secure Shell server
     Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
     Active: active (running) since Thu 2021-01-14 01:50:42 UTC; 3min 42s ago
       Docs: man:sshd(8)
             man:sshd_config(5)
   Main PID: 21510 (sshd)
      Tasks: 1 (limit: 1074)
     Memory: 4.1M
     CGroup: /system.slice/ssh.service
             └─21510 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups

Jan 14 01:50:42 hejda-ingraf systemd[1]: Starting OpenBSD Secure Shell server...
Jan 14 01:50:42 hejda-ingraf sshd[21510]: Server listening on 0.0.0.0 port 22.
Jan 14 01:50:42 hejda-ingraf sshd[21510]: Server listening on :: port 22.
Jan 14 01:50:42 hejda-ingraf systemd[1]: Started OpenBSD Secure Shell server.
Jan 14 01:54:05 hejda-ingraf sshd[21713]: Accepted password for iganari from 192.168.202.104 port 62099 ssh2
Jan 14 01:54:05 hejda-ingraf sshd[21713]: pam_unix(sshd:session): session opened for user iganari by (uid=0)
```

+ ssh.service をサーバの起動時に自動で起動するように設定
    + 上記の出力では既に自動起動の設定になっているので、この作業は不要

```
systemctl enable ssh
```

### IP アドレスの設定について

18.04から設定ファイルが変更したようです。

+ 16.04 まで
    + `/etc/network/interfaces`
+ 18.04 以降
    + `/etc/netplan/50-cloud-init.yaml` や `/etc/netplan/00-installer-config.yaml` などの YAML ファイルが存在
    + 今記事は `50-cloud-init.yaml` で統一していきます

```text:/etc/netplan/00-installer-config.yaml
network:
  ethernets:
    enp0s3:
      dhcp4: true
  version: 2
```

```text:/etc/netplan/50-cloud-init.yaml
network:
    ethernets:
        enp0s3:
            addresses: []
            dhcp4: true
            optional: true
        enp0s8:
            addresses: []
            dhcp4: true
            optional: true
    version: 2
```

### 設定例①

設定内容: ホストマシンからのみ SSH 接続できる仮想マシンなどの場合の設定

ethernets | 設定項目
:--- | :---
enp0s3 | DHCP
enp0s8 | 固定IPアドレス(Ex. 192.168.50.22)

```text:/etc/netplan/50-cloud-init.yaml
network:
    version: 2
    ethernets:
        enp0s3:
            addresses: []
            dhcp4: true
            optional: true
        enp0s8:
            dhcp4: no
            # IP address / Subnet mask
            addresses:
            - 192.168.50.22/24
            # Default gateway
            # gateway4: 192.168.50.1
            nameservers:
                addresses:
                - 192.168.50.1
            dhcp6: no
```

### 設定例②

設定内容: ホストマシン以外からも SSH 接続できる仮想マシンなどの場合の設定

ethernets | 設定項目
:--- | :---
enp0s3 | 固定IPアドレス(Ex. 192.168.100.22)

```text:/etc/netplan/50-cloud-init.yaml
network:
    version: 2
    ethernets:
        enp0s3:
            dhcp4: no
            # IP address / Subnet mask
            addresses:
            - 192.168.100.22/24
            # Default gateway
            gateway4: 192.168.100.1
            nameservers:
                addresses:
                - 192.168.100.1
            dhcp6: no
```


### 設定の反映・確認

意図した設定ファイルが作成できたのでその設定を反映し確認します

+ 設定の反映コマンド

```
sudo netplan apply
```

+ IP アドレスの確認

```
ip addr
```
```
### Ex.

ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 08:00:27:3e:c7:01 brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.40/24 brd 192.168.100.255 scope global enp0s3
       valid_lft forever preferred_lft forever
    inet6 2400:2410:b123:ed00:a00:27ff:fe3e:c701/64 scope global dynamic mngtmpaddr noprefixroute
       valid_lft 2591906sec preferred_lft 604706sec
    inet6 fe80::a00:27ff:fe3e:c701/64 scope link
       valid_lft forever preferred_lft forever
```


+ ルーティングの確認

```
route -n
```

+ DNS設定の確認

```
systemd-resolve --status
```

+ 外部への疎通が出来るか確認

```
ping 8.8.8.8 -c 5
```



### 参考資料

https://jyn.jp/ubuntu-localip-static/



# [WIP] カーネルチューニング

### ネットワークのスループットを向上させる

以下を追記する

```text:/etc/sysctl.conf
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216 

net.ipv4.tcp_wmem = 4096 87380 16777216
net.ipv4.tcp_rmem = 4096 87380 16777216 

net.ipv4.tcp_no_metrics_save = 1

net.ipv4.tcp_moderate_rcvbuf = 1

net.core.netdev_max_backlog = 5000
```

### システムリソースの上限の設定

以下のファイルを作成


```text:/etc/security/limits.d/20-nproc.conf
#<domain>      <type>  <item>         <value>
*                hard   nproc            8192
*                soft   nproc            8192
root             hard   nproc            8192
root             soft   nproc            8192
```

```text:/etc/security/limits.d/30-nofile.conf
#<domain>      <type>  <item>         <value>
*                hard   nofile           65536
*                soft   nofile           65536
root             hard   nofile           65536
root             soft   nofile           65536
```

設定反映

```
shutdown -r now
```


確認

```text:root
# ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 3708
max locked memory       (kbytes, -l) 16384
max memory size         (kbytes, -m) unlimited
open files                      (-n) 65536
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 8192
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited
```
```text:root以外
$ ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 3708
max locked memory       (kbytes, -l) 16384
max memory size         (kbytes, -m) unlimited
open files                      (-n) 65536
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 8192
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited
```

### 参考記事

http://netbuffalo.doorblog.jp/archives/4048147.html