Ubuntu初期設定

Ubuntu (20.04LTS) のインストール直後に行う初期設定について説明する。

UbuntuはWSL2上にインストールされたものを使用している。
インストール方法は[こちら](https://qiita.com/ichidai/items/f9b1bb22c639e3bc30d9)を参照のこと。

# sudo使用時のパスワード省略
sudoコマンドを使用時のパスワード入力が煩雑なので省略させる。

```bash
$ sudo bash -c 'echo "$USER ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/$USER'
```

# DNS設定
WSL2上にインストールされたUbuntuではDNSが解決されない場合がある。

```bash
$ ping www.google.com
ping: google.com: Temporary failure in name resolution
```

この症状はresolv.confを修正して解決する。

### resolv.conf自動生成の停止
resolv.confはWSLからUbuntuを起動させた際に自動生成されるため、それを停止させる。

```bash
$ sudo vi /etc/wsl.conf
```
```bash:wsl.conf
[network]
generateResolvConf = false
```

### Ubuntuの再起動

設定を反映させるためUbuntuを再起動させる。
WSLの仕様でUbuntu側のrebootコマンド等では再起動できないため、下記手順で行う。

- PowerShell側からUbuntuをシャットダウン
- 改めてUbuntuを起動（スタートメニューからUbuntuを起動）

PowerShellからUbuntuのシャットダウン

```powershell:PowerShell
> wsl -t Ubuntu-20.04
```

状態確認

```powershell:PowerShell
> wsl -l -v
  NAME            STATE           VERSION
* Ubuntu-20.04    Stopped         2
```
※「STATE=Stopped」になっていればシャットダウン完了。

シャットダウン後はスタートメニューからUbuntuを選択すると起動する。

### resolv.confの作成
まず/etc/resolv.conf の（既に切れている）シンボリックリンクを削除する。

```bash
$ sudo unlink /etc/resolv.conf
```

resolv.confを改めて作成する。

```bash
$ sudo vi /etc/resolv.conf
```
```bash:resolv.conf
nameserver 8.8.8.8
```
※8.8.8.8 = Google Public DNS

作業はこれで終了、pingを打って確認する。

```bash
$ ping www.google.com
PING www.google.com (172.217.27.68) 56(84) bytes of data.
64 bytes from nrt12s15-in-f4.1e100.net (172.217.27.68): icmp_seq=1 ttl=113 time=7.52 ms
64 bytes from nrt12s15-in-f4.1e100.net (172.217.27.68): icmp_seq=2 ttl=113 time=6.96 ms
64 bytes from nrt12s15-in-f4.1e100.net (172.217.27.68): icmp_seq=3 ttl=113 time=6.91 ms
```

# .bash_profile作成
初期状態では.bash_profileが無い場合があるので作成する。

```bash:.bash_profile
# .bashrcの呼び出し
if [ -f ~/.bashrc ]; then
  . ~/.bashrc
fi
```

反映

```bash
$ source ~/.bash_profile
```

# パッケージの最新化
apt管理のインストールパッケージを最新に保つ。

```bash
$ sudo apt update
$ sudo apt upgrade
```
※今後もaptでインストールする際には行うこと。

# systemctlの設定
WSL2上にUbuntuをインストールした場合、初期状態ではsystemctlが使用できない。

```bash
$ systemctl
System has not been booted with systemd as init system (PID 1). Can't operate.
Failed to connect to bus: Host is down
```

理由はsystemdがプロセスID=1で動作していないため。

```bash
$ ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.0    892   584 ?        Sl   13:59   0:00 /init
```
※PID=1は/initとなっていてsystemdではない。

このままでは色々と不都合が出てくるので解消する。

### 各種インストール
daemonizeインストール

```bash
$ sudo apt install daemonize
```

dotnet-sdk-5.0インストール

```bash
$ sudo apt install -y gpg
wget -O - https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor -o microsoft.asc.gpg
sudo mv microsoft.asc.gpg /etc/apt/trusted.gpg.d/
wget https://packages.microsoft.com/config/ubuntu/20.04/prod.list
sudo mv prod.list /etc/apt/sources.list.d/microsoft-prod.list
sudo chown root:root /etc/apt/trusted.gpg.d/microsoft.asc.gpg
sudo chown root:root /etc/apt/sources.list.d/microsoft-prod.list
sudo apt-get update; \
  sudo apt-get install -y apt-transport-https && \
  sudo apt-get update && \
  sudo apt-get install -y dotnet-sdk-5.0
```
※一行ずつではなくまとめて実行すること。

wsl-translinuxインストール

```bash
$ sudo -s
# apt install apt-transport-https
# wget -O /etc/apt/trusted.gpg.d/wsl-transdebian.gpg https://arkane-systems.github.io/wsl-transdebian/apt/wsl-transdebian.gpg
# chmod a+r /etc/apt/trusted.gpg.d/wsl-transdebian.gpg
# cat << EOF > /etc/apt/sources.list.d/wsl-transdebian.list
deb https://arkane-systems.github.io/wsl-transdebian/apt/ $(lsb_release -cs) main
deb-src https://arkane-systems.github.io/wsl-transdebian/apt/ $(lsb_release -cs) main
EOF
```

genieインストール

```bash
$ sudo apt install systemd-genie
```

設定変更

```bash
$ sudo vi /etc/genie.ini
```
```bash:genie.ini
systemd-timeout=180
↓
systemd-timeout=10
```

genieの実行

```bash
$ genie -s
Waiting for systemd....!!!!　　← 10秒程度待つとタイムアウトで止まる。
```

systemdの動作を確認する。

```bash
$ ps aux
USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root           1  0.1  0.0 109432 12504 ?        Ss   15:24   0:00 systemd
```

genieの自動起動

```bash:~/.bashrc
# genie 自動起動
if [ "`ps -eo pid,lstart,cmd | grep systemd | grep -v -e grep -e systemd- | sort -n -k2 | awk 'NR==1 { print $1 }'`" != "1" ]; then
   genie -s
fi
```

# 時刻の自動同期
chronyインストール

```bash
$ sudo apt install chrony
```

設定変更

```bash
$ sudo vi /etc/chrony/chrony.conf
```
```bash:chrony.conf
# 17行目：デフォルト設定はコメントにして自身のタイムゾーンの NTP サーバーを追記
 
#pool ntp.ubuntu.com        iburst maxsources 4　　← コメントアウト
#pool 0.ubuntu.pool.ntp.org iburst maxsources 1　　← コメントアウト
#pool 1.ubuntu.pool.ntp.org iburst maxsources 1　　← コメントアウト
#pool 2.ubuntu.pool.ntp.org iburst maxsources 2　　← コメントアウト
pool ntp.nict.jp iburst　　← 追記
 
↓以下を追記
 
# Ignore stratum in source selection.
stratumweight 0
```

chrony再起動

```bash
$ sudo systemctl restart chrony
```

# 日本語化
パッケージインストール

```bash
$ sudo apt -y install language-pack-ja-base language-pack-ja ibus-kkc
$ sudo localectl set-locale LANG=ja_JP.UTF-8 LANGUAGE="ja_JP:ja"
$ source /etc/default/locale
```

変更の確認

```bash
$ echo $LANG
ja_JP.UTF-8
 
$ date
2021年  7月  7日 水曜日 17:39:06 JST　　← 日本語表示されている。
```

# SSH
鍵の作成

```bash
$ ssh-keygen -t rsa -b 4096
```
※鍵長は最低でも2048、できれば4096を指定すること。

# gcc / make
ビルドツール（gcc / make）のインストール

```bash
$ sudo apt install build-essential
```

バージョン確認

```bash
$ gcc --version
gcc (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0

$ make --version
GNU Make 4.2.1
```

# Git
git のユーザー名や色、使用するエディタ等を設定。

```bash
$ git config --global user.name "username"　　　　　← ユーザー名を指定
$ git config --global user.email <email-address>　　← メールアドレスを指定
$ git config --global color.ui auto
$ git config --global core.editor 'vi -c "set fenc=utf-8"'
```

---
以上