ubuntu22.04のセットアップ

## やること
- ubuntu22.04インストール
- user設定
- IPの固定
- ssh接続設定

## ubuntu22.04インストール
### 種類

- desktop image
    - GUIが入ったもの。ウェブブラウジングなどするときはこちら
- live server image
    - サーバー構築用。GUIがないため軽量

[ここからダウンロード](https://releases.ubuntu.com/22.04/?_gl=1*19ip6hm*_gcl_au*MTE4NTIyOTI0MS4xNzA3MTMxMDQx&_ga=2.149898549.2084151835.1707729318-1126754318.1683186906)

USBに別のPCからubuntuをインストールして、起動したいPCにUSBを取り付けてセットアップする方法もあります。

### 注記
今回は基本的にCLIで設定していきます。
commandを実行しても`hoge_hoge not found`などでた場合は焦らず、`apt-get update && apt-get install hoge_hoge`と足りないcommandやpackageをubuntuにinstallします。

## user設定
初めに設定したuserのまま使用したい場合はこの項目を飛ばしてください。
権限を分けたり、共有用userを作りたいときに使用します。

### user追加/削除 
#### 追加: adduser command
`sudo adduser {追加したいuser名}`
passwordも聞かれるので任意に設定する

#### 削除: deluser command
`sudo deluser {削除したいuser名}`

ubuntuでは user を作成すると home directory が作成されるため home direcotry も一緒に削除したい場合は `--remove-home` オプションを追加

### 権限付与: usermod command
`sudo usermod -aG sudo {権限つけたいuser名}`

- -aG sudo について
  userはgroupに属しているため現在のgroupを保持したいため`a`を追加。userをどのgroupに属したいか指定する`G`オプション。上記のcommandは指定したuserにsudo権限（group)を付与している
  
## IPの固定
ubuntu22.04では netplan を使用してip設定を行っている。記述方法はYAMLです。

設定fileは `/etc/netplan` 配下に置かれています。
ここに`01-network-manager-all.yaml`などがあると思われます。

#### 仕様
netplanは/etc/netplan/配下に複数fileがある場合、file名にある数値の少ないものから大きいものの順に読み込みます。

ex:
1. 01-network ....yaml
1. 10-network ....yaml
1. 99-network ....yaml (これが最終的に反映される）

### 固定設定
#### ip addressとinterfaceを調べる
`ip addr show` commandで確認します。`nmcli`でも可能

`lo`: ループバックインターフェース
`en...`: 有線イーサネットインターフェース
`wl...`: 無線LANインターフェース

ex:
```sh
1: lo: <LOOPBACK,UP,LOWER_UP> ...
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.X.X.X/X scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::X/XX scope host 
       valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> ....
    link/ether XX:XX:XX:XX:XX:XX brd ff:ff:ff:ff:ff:ff
    inet 192.X.X.X/XX brd 192.X.X.X/XX scope global noprefixroute enp0s3
       valid_lft forever preferred_lft forever
    inet6 192.X.X.X/X scope link noprefixroute 
       valid_lft forever preferred_lft forever
3: wlp0s: <NO-CARRIER,BROADCAST,MULTICAST,UP> ...
    link/ether XX:XX:XX:XX:XX:XX brd ff:ff:ff:ff:ff:ff
```
今回は有線接続の場合を想定します。
今回の場合は enp0s3 です。（ここは自身の機器によって変わります）

### デフォルトゲートウェイアドレスを調べる
`ip route` commandで確認する

ex:
```sh
default via 192.X.X.X dev enp0s3 proto static 
default via 192.X.X.X dev enp0s3 proto static metric 100 
```

viaの後の 192.X.X.X になります。

### 設定YAMLの作成
[netplan公式reference](https://netplan.readthedocs.io/en/stable/reference/)
- /etc/netplan にfileを作成
```sh
touch 99-{任意の名前}.yaml
```
- 作成fileの編集
vi, vim, nanoなどを使用する。

```yaml
network:
    version: 2
    renderer: networkd
    ethernets: <- 有線接続
        enp0s3: <- 前項で調べた値
            addresses: [192.YY.YY.YY/YY] <- 設定したいIPアドレス
            nameservers: <- DNSの設定
                addresses: [8.8.8.8]
            routes:
                - to: default
                  via: 192.X.X.X <- ゲートウェイアドレス
    wifis: <- 無線（設定したい人）
```
- fileの保存

### 設定の反映
- 設定できるか確認し反映する
```sh
sudo netplan try
```
- 反映する
```sh
sudo netplan apply
```
上記どちらかを行う

### 固定できたか確認
`ip addr show`で調べて先ほど設定したenp0s3のipが設定したものと同じになっているか確認する

## ssh接続設定
### openssh-serverが起動しているもしくはそもそもあるのか確認
```sh
sudo systemctl status ssh
```
ssh.service could not be found.とでたら
```sh
sudo apt-get update && apt-get install openssh-server -y
```

Active: active (running)...になっていることを確認


### 鍵作成
ubuntuをインストールしたPC（リモート）ではない他のPC（クライアント）で行う。
`ssh-keygen` commandで作成する。

オプション
- t: 暗号化形式を指定する 
    rsa(default), ecdsa, ed25519 から設定
- f: 任意のfile名を指定する（保存先）

上記オプションは無しでもcommand実行は可能

ex:
```sh
ssh-keygen -t ed25519 -f id_ed25519_hoge
```
実行後にpassphraseを聞かれるので設定したい場合は設定する。無しでも可能。

完了すると秘密鍵と公開鍵が`~/.ssh/`配下に作成される。
file名を指定した場合上記の例だと下記のようになる。
- `id_ed25519_hoge`: 秘密鍵
- `id_ed25519_hoge.pub`: 公開鍵

### 公開鍵をubuntuをインストールしたPCに送る

`ssh-copy-id` commandを使用する。

```sh
ssh-copy-id -i ~/.ssh/id_ed25519_hoge.pub {ubuntuPCで設定したuser名}@{ubuntuPCで設定した固定ip}
```
-i オプションで先ほど作成した公開鍵を指定

### 接続確認
`ssh` command でアクセス

```sh
ssh -i id_ed25519_hoge {ubuntuPcで設定したuser名}@{ubuntuPCで設定した固定ip}
```
-i オプションに先ほど作成した秘密鍵を指定