そうだ、Ubuntuを覚えよう(インストール手順メモ)

# 状況

以前現場に居たときはオンプレミスでRHEL4, CentOS6を使っており、現場からは離れた気でいたけれども諸事情でUbuntu使わないといけなくなったのでチャレンジしていくお話。私のスペック感

- `NetworkManager`ちょっとだけ触ったことあるけど基本的に`ip`コマンドだった
- `systemctl`もあんまり。`/etc/init.d`とか`service`だったし
- `journal`ってなんぞ

自分の学習Outputなので何か結論をまとめたものではありません。ただ、こういう考え方してんだな、という脳内トレースにはなる、のかな。

今回はHPノートPCのWindows10上でVirtualBoxを使ってサーバ構築を目指す。

# Ubuntuインストールする

## imgファイルの入手

### 日本語Remix か 純正か

「Ubuntu インストール」で検索して見つかるのがこちら：[Ubuntuの入手 - Ubuntu Japanese Team](https://www.ubuntulinux.jp/download)

この時点で日本語Remix版というものが存在することを知る。だいたい機械語の次元において日本語は悪さをしてくれるけれども、以下の2つの観点から日本語Remixを受け入れる方針とした。

- 各種システムメッセージをある程度日本語化してくれている可能性
    - 初学であるため、解析はかどるほうが良い(※)
- この先、自分だけではなくどのレベル層のエンジニアか触るかわからない
    - 90%ぐらいの確率で日本語を母国とする方が触るためハードルを下げておく

>※「解析がはかどる」という観点でいうと、英文メッセージのほうが検索するとより多くの情報にHitする。ここでは「その場で自分が問題箇所のあたりをつけられるかどうか」の意味

### バージョンはどれにするか

2023年08月12日現在、バージョンは`Ubuntu 22.04 LTS`らしい。で、これは安定版なのか？と気になって調べる：[Ubuntu LTS について](https://tech.uzabase.com/entry/2022/10/05/163458)

LTS = Long Term Support。じゃあOK

## ざっくりと方針決めておく

- 現場に居たときは当たり前に`root`使っていた。今回は無し。`sudo`使っていく。
- 現場に居たときは当たり前に`firewalld`, `iptables`は無効化していた。今回はちゃんと見る。
- ただし`SELinux`、てめぇは駄目だ。`Ubuntu`にあるのか知らないけど。

## 素のUbuntuインストール(インストーラ利用範囲まで)

### 皮の作成

`Oracle VirtualBox`を使っていく

|仮想マシンパラメータ|値|
|---|---|
|メインメモリ|4GB|
|EFIを有効化|Disable|
|Processors|2|
|ビデオメモリ|128MB|
|ストレージ|HDDに80GB(VDI)|
|ネットワーク1|NAT|
|ネットワーク2|ホストオンリー|

### インストール

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/259373/40ab1f4a-75cd-1351-318f-4b0d52fcb32e.png)
「Try or Install Ubuntu」を選択

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/259373/b8fa3e98-13af-4905-67e4-7ce0546b35d2.png)
パッケージは最小インストールで開始


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/259373/b8db3c9a-befb-11a7-1e9a-1a6ffe33eca5.png)
パーティション構成。お試しなので基本的に全部`/`にぶっこみ。このあとDockerなど試す予定があったので`/data`として作業領域を残しておく。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/259373/1658c70d-1fff-8f55-ad2f-72d0ce5ce7f6.png)
ここは一般ユーザではなく管理者アカウントの話らしい。もはや管理者 = `root`ということではないのか。衝撃を受けた。かといって`admin`という名前にしようとしたら既にシステムで使用していると言われた。なんでや。しかたないので適当な名前でインストールを完了させておく。

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

## 初期セットアップ

インストール時に作成したアカウントでログインして状態をチェック。最小インストールなのにデスクトップ入ってるんだ。へぇ～

### SSO(シングルサインオン)

どれとも連携しない。スキップ

### Livepatch

>Canonical Livepatch helps keep your comuter secure, by applying some up dates that would normally require restarting.
Would you like to set up Livepatch now?
>>Canonical Livepatchは、通常再起動が必要なアップデートを適用することで、お客様のコンピュータを安全に保つのに役立ちます。
今すぐLivepatchを設定しますか？

再起動なしでKernelをアップデートできるとかそんなのらしい。商用利用のサーバで勝手に更新とかされるとこまるので今回はパス

### ソフトウェアの更新

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/259373/ecb3a432-8dde-e5fb-3806-5011be402499.png)

ありがたいのだがこれをそのまま受けると検証時と商用構築時で各種パッケージのバージョンに差分が出てしまう。今回は後回しにして手動で取り込んでいく。

### アカウント設定

[初期設定 : root ユーザーを有効にする](https://www.server-world.info/query?os=Ubuntu_22.04&p=initial_conf&f=2)

へぇ～。つまり最初に作ったアカウントは全操作`sudo`できるけれども`root`では無いらしい。今回は検証なのでインストール時に作成したアカウント(`udon`)のみで作業を進めていく。

### ネットワーク設定

[初期設定 : ネットワークの設定](https://www.server-world.info/query?os=Ubuntu_22.04&p=initial_conf&f=3)

ネットワーク設定に`yaml`を使っていますけど！？既に衝撃。`/etc/netplan`配下に置く`yaml`ファイルの命名規則があるのかと考えて調べてみる。

[Netplanの使い方](https://www.komee.org/entry/2018/06/12/181400)

- `/etc/netplan`に置いたファイルが名前順に読み込まれる
- `sudo netplan apply`もしくはサーバ再起動で反映
- TAB使用禁止。半角スペースで対応すること。まじか。
- 私がインストールしたときはデフォルトで`NetworkManager`へrendererされていた。

[Ubuntu の Network設定](https://qiita.com/Shakapon/items/0eea9f7492d0868c5cb1)

>Ubuntu Server だと networkd になる

え!?`Ubuntu Server`なんてものがあるのか。もしかして私がインストールしているものはサーバ用途ではなくパーソナルコンピューティング用？？調べたところ日本語RemixはDesktop版しか提供していなさそう。やり直しだ。がーん。

# Ubuntu Serverのインストール

細かいところは端折っていく。
ダウンロード：[Ubuntu 22.04.3 LTS (Jammy Jellyfish)](https://cdimage.ubuntu.com/releases/22.04/release/)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/259373/9a83b0a9-da35-4293-d702-2c59b8274b83.png)
と思ったらなにか出た。

>The Virtual machine failed to boot. That might be caused by a missing operating system or misconfigured boot order. Mounting an operating system install DVD might solve this problem.Selecting an ISO file will attempt to mount it after th dialog is closed.
>>仮想マシンの起動に失敗しました。オペレーティングシステムが見つからないか、ブート順序が正しく設定されていないことが原因かもしれません。オペレーティングシステムのインストールDVDをマウントすると、この問題が解決する可能性があります。ISOファイルを選択すると、ダイアログが閉じた後にマウントしようとします。

なんじゃい。DVDのプルダウンにISOファイルを選択してみる。むぅ。変わらんぞ。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/259373/d1bcf98c-1189-8ec4-144d-abfa1027fffb.png)
これかな。起動順序でIDEプライマリマスターにすりゃいいのかな。うーん駄目だな。そういうわけじゃないらしい。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/259373/f8b39992-c0e6-2672-6a99-e38557b96d88.png)
じゃあこっちか？うーん、これでもない。ググるか。

[Virtual Machine failed to boot](https://forums.virtualbox.org/viewtopic.php?t=108849)
く、、、読むの面倒だな。

もしかしてBIOSでHyper-Vが有効になってないのか？というわけで確認する。むぅ、BIOSではVTxは有効になっていた。

[Windows 10 上に Hyper-V をインストールする](https://learn.microsoft.com/ja-jp/virtualization/hyper-v-on-windows/quick-start/enable-hyper-v)
と思ったらOSにもなにかやらんといかんのか。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/259373/4bb146ad-f250-944e-2e7c-1481d7da6fa8.png)
これかな。うーん、変わらないな。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/259373/2bf2e578-9162-d7f4-77ad-f4519f61f7b1.png)
であれば`EFIを有効化`かな。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/259373/120ab9d8-a417-f3b8-72d9-6f8d31468871.png)
お、進んだ、ぽい？いや違うな。これ仮想マシンのBIOS開いているだけだ。試しにISOをホストOS(Windows)でマウントし、そのディスクドライブを選択したらどうなるのだろう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/259373/7d38809a-be6b-d112-8390-f98d210fa8a6.png)
Fドライブにマウント

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/259373/8d674d02-9e78-1288-0f8e-193b1bf44b5c.png)
Fドライブを指定・・・あれーだめだな。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/259373/eeb71527-2b30-3e27-3d65-4a512585f7db.png)
再び機能の有効化。「Windowsハイパーバイザープラットフォーム」と「仮想マシンプラットフォーム」をEnableにする。うーん、変わらない。

VBox.logを漁ってみる。

```
00:00:08.864689 VirtualBox VM 7.0.8 r156879 win.amd64 (Apr 17 2023 16:42:53) release log
00:00:08.864691 Log opened 2023-08-12T05:42:21.584273700Z
00:00:08.864692 Build Type: release
00:00:08.864695 OS Product: Windows 10
00:00:08.864696 OS Release: 10.0.19045
00:00:08.864696 OS Service Pack: 
:
00:00:09.177228 Guest OS type: 'Ubuntu'
00:00:09.177666 fHMForced=true - No raw-mode support in this build!
00:00:09.183096 File system of 'C:/Users/xxxx/Downloads/ubuntu-22.04.3-live-server-arm64.iso' (DVD) is ntfs
00:00:09.187246 File system of 'D:\VM\Ubuntu\Ubuntu.vdi' is ntfs
:
```

うん、isoを見つけてはいる。

```
00:00:30.201347 File system of 'C:/Users/alpha/Downloads/ubuntu-22.04.3-live-server-arm64.iso' (DVD) is ntfs
00:00:30.202801 DrvVD: Flushes will be ignored
00:00:30.202821 DrvVD: Async flushes will be passed to the disk
```

これはどういう意味だろう。

```
00:00:47.232056 VMMDev: Guest Log: BIOS: CDROM boot failure code : 0009
00:00:47.232283 VMMDev: Guest Log: BIOS: Boot from CD-ROM failed
```

ふむ。わからん。このエラーコードで調べたがかなり昔の情報にしか行き当たらなかった。また改めてDesktop版を指定すると普通にインストールを進めることができた。

マイナーバージョンアップ前の`ubuntu-22.04-live-server-amd64.iso`であればいけるだろうか。探してみよう。って探してたら以下に行き着いた

[Ubuntu 22.04.3 LTS (Jammy Jellyfish) via ftp.riken.jp](https://ftp.riken.jp/Linux/ubuntu-releases/22.04/)
よく見るとファイル名が違う。駄目だったやつは`arm64`で、今回は`amd64`。なんかこっちのほうが聞き慣れている。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/259373/b995327a-6846-b0aa-d583-26dc3b31a66a.png)
動いたぁ～～～えーーーなんでーーー？？うん、じゃあまぁスマホとかサーバ用途てきには良いんだね。うーん、己の知識不足よ。

[CPUアーキテクチャの種類(x86, x64, arm)](https://www.wakuwakubank.com/posts/809-it-cpu-x86-x64-arm/)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/259373/57cff81d-8322-19c4-974f-97a3df1eb00e.png)
が、今度はここからカーソルがチカチカするだけで進まんな。。Windowsの機能を色々いじったからなのか？一度もとに戻してやりなおしてみよう。

うーん駄目だな。また別の事象か。EFIモードで起動してみるか。。。いや違うな。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/259373/3dff3f93-cd51-f3ab-7dde-4290ae3c0399.png)
結局、バージョン部分が32-bitになっていたことが原因だった。これただのアイコン画像差し替えるためのものじゃなかったのか。。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/259373/12210b1d-af36-bf9a-3cf5-bd6688ced30a.png)
言語は英語、キーボードはJapanese。このあたりは[Server World](https://www.server-world.info/query?os=Ubuntu_22.04&p=install)さんに沿う。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/259373/6851953f-1dd3-4914-85d1-a1dd9ac9d358.png)
パーティション構成の記録

ここに行き着くのに半日かかっちゃったよ…

# 初期設定

[Server World](https://www.server-world.info/query?os=Ubuntu_22.04&p=initial_conf&f=1)さんのお品書きに沿って実施。

## (01)ユーザーを追加する

必須ではないっぽいのでパス

## (02)rootユーザーを有効にする

```
udon@localhost:~$ sudo -s
[sudo] password for udon:
root@localhost:/homeudon# 
```

イメージ的に`sudo su -`だったのだが、オプションとして存在するらしい。へぇ。ちなみに`sudo su -`でも昇格できた。そのときは`root`のホームディレクトリに移動したのでログインシェルを実行しているのだろう。あくまで`sudo -s`は「root権限だけど実行者はudonですよ」というところだろうか。

## (03)ネットワークの設定

ようやっと戻ってきたぞぉ。で`netplan`の`yaml`を編集しようとしたら

```
root@localhost:/etc/netplan# vi 01-netcfg.yaml
bash: vi: command not found
```

うそやろｗ インストールメディアを挿入してインストールを試みる。あぁ～`rpm`コマンドしか知らないぞ私…。というか最小限パッケージでここまで最小限にするかねｗ

```
root@localhost:/etc/netplan# mount /dev/cdrom -r /mnt
root@localhost:/etc/netplan# ls -l /mnt
```

ちゃんとマウントできている。良かったぁ～`mount`コマンドは生きてて。。

```
root@localhost:/mnt# find . -type f -name *.rpm | head -n 5
root@localhost:/mnt#
```

いや何もないですやん。あれ、マジで？

```
root@localhost:/mnt# cd /
root@localhost:/# umount /mnt
```

仕方ないね、`apt`とやらを使いましょうか。いま家のネットワークだからいいけど、職場の場合はインストール時の`proxy`の設定がちゃんと生きてくれることを信じるしか無い。そんでこのあたりのパッケージ追加は怖い。常に最新がインストールされてしまう。検証環境構築時と商用構築時でパッケージのバージョン変わってました～は大変なことになるので、「ローカルにダウンロード→ダウンロードしたものをインストール」としておきたい。

[[apt] パッケージの事前ダウンロードを行う](https://qiita.com/koara-local/items/054d78cfb20592e67042)

```
root@localhost:/# mkdir /home/pkgs
root@localhost:/home/pkgs# cd !$
root@localhost:/home/pkgs# apt-get -d install vim
～ごにゃごにゃ～
Do you want to continue? [Y/n] (Enter)
～ごにゃごにゃ～
Download complete and in download only mode
root@localhost:/home/pkgs# ls -tlr /var/cache/apt/archives/
たくさんファイルある
```

で、これを指定してインストールはどうやるんだろう。ふむふむ。
[apt-get installでローカルのdebをインストール出来た](https://diary.masasuzu.net/entry/2018/08/09/143934)


```
root@localhost:/home/pkgs# cp -p /var/cache/apt/archives/*deb .
root@localhost:/home/pkgs# apt-get -y install *.deb
:
E: Unable to locate package libgpm2_1.20.7-10build1_amd64.deb
E: Couldn't find any package by glob 'libgpm2_1.20.7-10build1_amd64.deb'
:
```

いや駄目ですやん。なんだろう。`cache`のところにあったファイル群も必要なのだろうか。

[オフライン環境のUbuntuでapt install](https://qiita.com/tetrar124/items/40fd9b1ff5f0b015a6da)

こっちは通常の`apt`で入れられると書いてある。

```
~# cd /var/cache/apt/archives
~# apt install -y *.deb
:
E: Unable to locate pakcage ....deb
```

うーん駄目だな。

[UbuntuでUnable to locate packageのエラー解決法](https://qiita.com/hatorijobs/items/c503840c13672e12d188)

あぁ、なるほどね。リポジトリを更新してないからなのか。って`apt update`しても状況かわらず。うーん、嫌だけど直接インストール試してみるか。

```
~# apt install -y vim
~# which vim
/usr/bin/vim
```

うわーいやだなぁ。なんでだろう。まぁいいこれでネットワークの設定に戻れる。デバイス一覧を確認しておく。

```
~# ip addr show | grep mtu
1: lo: ....
2: enp0s3: ...
3: enp0s8: ...
```

ということで`netplan`の生成

```:/etc/netplan/01-netcfg.yaml
network:
  ethernets:
  # network IF name
  enp0s3:
    dhcp4: true
    dhcp6: false
  enp0s8:
    dhcp4: false
    addresses: [192.168.56.102/24]
    dhcp6: false
  version: 2
```

```
~# netplan apply
```

IPv6も手順通り閉じておく。

## (04)サービスの管理

特にやることなし

## (05)システムを最新化する

さて困ったぞ。さっきと同じようにやると商用・ローカルで差が出てしまうかもしれない。その時はまた考えよう。

```
apt update
apt -y upgrade
```

ひとまずこのあたりまでやればごく普通のLinuxサーバとしては使えそう。`firewall`とかの設定見当たらんけど。