VirtualBoxにUbuntu Server 22.04.3をインストール

[この記事](https://qiita.com/Ki2neudon/items/ddb04b9647a45d1ab562)のまとめ

# ISOイメージの入手

ホストOSのCPUに依存する。以下の2種類のどちらかが正解

- [ARM64版](https://cdimage.ubuntu.com/releases/22.04/release/)
    - 64-bit ARM(ARMv8/AArch64)server install image
- [AMD64版](https://ftp.riken.jp/Linux/ubuntu-releases/22.04/)
    - 64-bit PC(AMD64)server install image

私の場合は後者だった

# VirtualBoxで箱を作成

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/259373/d528c9dc-54a8-69c4-ffe3-cfd40343cbf9.png)

|パラメータ|値|
|---|---|
|名前|お好きな名前をどうぞ|
|Folder|お好きな場所をどうぞ|
|ISO Image|ダウンロードしたiso|
|Skip Unattended Installation|Enable|
|||
|メインメモリ|2048 MB|
|Processors|2|
|Enable EFI|Disable|
|Virtual Hard disk|Create Virtual Had Disk Now|
|Disk Size|お好きなサイズでどうぞ|
|Pre-allocate Full Size|Disable|

# VirtualBoxの箱をカスタマイズ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/259373/9f65fcfa-4b98-ebb8-32a5-4f27447d20de.png)
起動中の画面なので色々グレーアウトされています。停止中であれば修正できます。

|カテゴリ|パラメータ|値|
|---|---|---|
|一般/基本|バージョン|Ubuntu(64-bit)|
|ストレージ/コントローラIDE:|Live CD/DVD|Disable|
|ネットワーク|各アダプタ|お好きにどうぞ|

## ネットワークについて

だいたいは以下の設定で良いと思います。
- アダプター1
    - NAT
- アダプター2
    - ホストオンリーネットワーク

# Ubuntuのインストール

ほとんど[Server World](https://www.server-world.info/query?os=Ubuntu_22.04&p=download)さんを確認すると良い

## 言語選択

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/259373/fcede60b-9f6c-08e4-932a-ba6044c247e6.png)
インストーラで使用する言語の選択。`English`を選んでEnterキー

## キーボードレイアウト

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/259373/ab02d66d-c8db-789d-7863-073bc2cd8ba7.png)
`Japananese`を選んで「Done」

## パッケージレイアウト

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/259373/de38aa7e-33e3-ff0d-09b5-3d945168affb.png)
`Ubuntu Server`に`X`がついてる状態で「Done」

### 最小構成でインストールした感じ

- `vi`が無い
- `openssh-server`, `openssh-client`は入ってる
- `ufw`(Ubuntu FireWall)も無い

格好つけずに推奨パッケージ含まれているやつで構築したほうが良いと思う。マジで。

## ネットワーク設定

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/259373/c8ffcf02-aad1-08be-651e-fb3f96b24b5c.png)
環境に合わせて。基本そのままでOK

## プロキシ設定

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/259373/195e08e2-9a12-0627-7c34-7ca5c8301a65.png)
企業内で行う場合はここで設定しないと後で後悔すると思う。ご家庭で楽しまれている方は入力せず「Done」。

## パッケージリポジトリ取得

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/259373/11d50e69-cac3-843e-da0b-f2ba40ec5377.png)
放っておけば色々検索されて画像のような表示になる。なったら「Done」。

## パーティション設計タイプ選択

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/259373/09e51c98-bdbb-7a1f-5ace-7989240e4a77.png)
お試しなら基本全部`/`にぶっこみたいのでカスタマイズする。`Custom storage layout`に`X`をつけて「Done」。

## パーティション設計

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/259373/25694aa1-cdfe-4ef2-beab-9a6683b9f69d.png)
ここでは以下の通りにしていますが、初めてなら`/`に全部つっこんでいいと思います。

|作成順|サイズ|Format|Mount|
|---|---|---|---|
|1|20G|ext4|/data ※|
|2|残り全部|ext4|/|

※一度「Other」を選んでから手入力で指定

1. `free space`を選んでEnter
1. 表示されるメニューで`Add GPT Partition`
1. 上記の表の作成順「1」のパラメータを指定
1. 再度`free space`を選んでEnter
1. 表示されるメニューで`Add GPT Partition`
1. 上記の表の作成順「2」のパラメータを指定
1. 全部入力したら「Done」

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/259373/441f15de-cf00-87a6-8479-6c8012616286.png)
データ全部消えるけどいいですか？が出るので「Continue」

## 管理者ユーザの作成

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/259373/fa5a41a2-3dcc-aa08-985b-107830c1fa1f.png)
`admin`とか`root`ではない、管理者アカウントのパラメータを入力。大事なアカウントなので使いやすい名前/パスワードにしておくこと。

## Pro版への昇格

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/259373/6cdc20b3-f936-e9e6-5ae9-f542a5cf6a9c.png)
`skip for now`に`X`がついていることを確認して「Continue」

## OpenSSH Serverのインストール

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/259373/1a388fcb-a3ca-5589-7c7e-d451d813513d.png)
ここでは一旦なにもしない。そのまま「Done」。

## 追加パッケージ選択

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/259373/bdbe12ae-0446-f22e-5514-b81bc0f81f14.png)
ここでは一旦なにもしない。そのまま「Done」。

## インストール開始

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/259373/7bcf6c1c-e4ec-a94d-d211-e4eb7238f75f.png)
割りとすぐ終わる。オレンジ色の帯が`Install complete!`となれば完了。「Reboot Now」。

## メディア取り出してくださいメッセージ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/259373/8c687f9c-ab3b-f21d-0279-d6bd42217e8f.png)
`FAILED`とか出てびっくりするかもしれないけど大丈夫。VirtualBoxの枠下、CD/DVDのアイコンが比活性になっていることを確認してEnterキーを押す

本当のサーバの場合、このタイミングでCD/DVDドライブが開いてメディアが排出されている。

## インストール完了

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/259373/9041b08c-1d9e-ce3a-0247-28e031acdbd2.png)
なんかゴチャゴチャっと出てびっくりするかもしれないけど、Enterを押せばログインプロンプトが表示される。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/259373/2d42f5fd-00f8-0ee5-8408-f33b299af619.png)
こんな感じ

# インストール後初期設定

以降は各自己の流儀があると思いますが私なりの汎用設定を記載します。まだ`Ubuntu`は触りたてなので色々増えていくかもしれません。

## SSH接続する

コンソールでいじり続けるのはしんどいので手元のTeratermでホストオンリーアダプターのIFへSSH接続します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/259373/c9330341-31eb-049f-b354-c57fb23b0b9e.png)
インストール中に`openssh-server`を拒否ったのに入ってくる。なんなのか。

接続後は以下のコマンドで`root`に昇格しておく(インストール作業中のみ)。

```bash
udon@node1:/etc/netplan$ sudo -s
```

## ネットワーク設定

```bash
root@node1:~# cd /etc/netplan
root@node1:/etc/netplan# mv 00-installer-config.yaml 00-installer-config.yaml.org
root@node1:/etc/netplan# vi 01-netcfg.yaml
```

```:01-netcfg.yaml
network:
  ethernets:
    enp0s3:
      dhcp4: true
      dhcp6: false
    enp0s8:
      dhcp4: false
      addresses: [192.168.56.103/24]
      dhcp6: false
  version: 2
```

TABは使ってはいけないらしい。スペースでインデントを合わせる。以下のコマンドで反映。

```bash
root@node1:/etc/netplan# netplan apply
```

以下のコマンドでIPv6の息を止めておく

```bash
root@node1:/etc/netplan# echo "net.ipv6.conf.all.disable_ipv6 = 1" >> /etc/sysctl.conf
root@node1:/etc/netplan# sysctl -p
net.ipv6.conf.all.disable_ipv6 = 1
```

まだ`sysctl`が残ってるんだなぁ～と嬉しくなっちゃう。

## パッケージ最新化

一度ダウンロードしてから適用する。ダウンロードしたパッケージを退避しておくことで同じサーバを作りやすくする(毎回最新パッケージでインストールすると環境差分が出るので検証/商用で構成が違う！ということにもなり得る。

```bash
root@node1:~# apt update
Hit:1 http://jp.archive.ubuntu.com/ubuntu jammy InRelease
Hit:2 http://jp.archive.ubuntu.com/ubuntu jammy-updates InRelease
Hit:3 http://jp.archive.ubuntu.com/ubuntu jammy-backports InRelease
Hit:4 http://jp.archive.ubuntu.com/ubuntu jammy-security InRelease
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
3 packages can be upgraded. Run 'apt list --upgradable' to see them.
```

```bash
root@node1:~# apt -d upgrade
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Calculating upgrade... Done
The following packages have been kept back:
  cloud-init
The following packages will be upgraded:
  libldap-2.5-0 libldap-common
2 upgraded, 0 newly installed, 0 to remove and 1 not upgraded.
Need to get 199 kB of archives.
After this operation, 0 B of additional disk space will be used.
Do you want to continue? [Y/n] Y
Get:1 http://jp.archive.ubuntu.com/ubuntu jammy-updates/main amd64 libldap-2.5-0 amd64 2.5.16+dfsg-0ubuntu0.22.04.1 [183 kB]
Get:2 http://jp.archive.ubuntu.com/ubuntu jammy-updates/main amd64 libldap-common all 2.5.16+dfsg-0ubuntu0.22.04.1 [15.8 kB]
Fetched 199 kB in 2s (120 kB/s)
Download complete and in download only mode
```

ダウンロードしたファイルを退避しておいてローカルからインストールする。

```bash
root@node1:~# mkdir -p /home/udon/pkgs
root@node1:~# cp -p /var/cache/apt/archives/*deb /home/udon/pkgs/.
root@node1:~# cd !$
cd /home/udon/pkgs/.
root@node1:/home/udon/pkgs# apt -y install ./*deb
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/259373/cf918d91-385d-eabf-c959-6ba755b7bfa8.png)
サービス再起動していい？って聞かれたのでOKを選択

## Ubuntu Firewall(UFW)設定

[UFW : 基本操作](https://www.server-world.info/query?os=Ubuntu_22.04&p=ufw&f=1)

### 状態確認 + 有効化

```bash
(serviceレベルでの確認)
root@node1:~# systemctl status ufw
● ufw.service - Uncomplicated firewall
     Loaded: loaded (/lib/systemd/system/ufw.service; enabled; vendor preset: enabled)
     Active: active (exited) since Sat 2023-08-12 10:54:58 UTC; 23min ago
       Docs: man:ufw(8)
   Main PID: 573 (code=exited, status=0/SUCCESS)
        CPU: 2ms

Aug 12 10:54:57 node1 systemd[1]: Starting Uncomplicated firewall...
Aug 12 10:54:58 node1 systemd[1]: Finished Uncomplicated firewall.

(ufwとしての確認: inactive = 無効)
root@node1:~# ufw status
Status: inactive

(ufwを有効化)
root@node1:~# ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup

(ufwとしての確認: active = 有効)
root@node1:~# ufw status
Status: active
```

### SSHを許可

```bash
root@node1:~# ufw allow ssh
Rule added
Rule added (v6)
```

### その他受信を全拒否

```bash
root@node1:~# ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW IN    Anywhere
22/tcp (v6)                ALLOW IN    Anywhere (v6)

root@node1:~#
```

### 設定反映

```bash
root@node1:~# ufw reload
Firewall reloaded
root@node1:~#
root@node1:~#
root@node1:~# ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
````

ここで必要最低限のインストール作業は缶完了