Raspberry Pi 4でUSBブートのubuntu serverを建てよう

## 概要
Raspberry Pi 4でだいたいのことはできる世の中になりそうなので、USBブートでubuntu serverを建てれるようにしましょう！初めは、ubuntu serverをmicro SDでブートして起動していましたが、最大でも30~50MBpsの書き込み速度なので少々物足りなさを感じてしまいます。そこで、最大書き込み400MBpsの有能なUSBをマスストレージとしてブートできるようにしたいと考えました。

## Micro SDからubuntu serverを起動する手順
- OSイメージをデバイスに書き込む専用のimagerをdownload
- micro SDに`ubuntu server 20.10(RPI 3/4/400)`のOSイメージを書き込む
- 起動

簡単！！！

## USBからubuntu serverを起動する手順
- OSイメージをデバイスに書き込む専用のimagerをdownload
- micro SDに`Raspberry Pi OS (32-bit) Lite`のOSイメージを書き込む
- USBに`ubuntu server`のOSイメージを書き込む
- micro SDからRaspberry Pi OSを起動
- 設定をいじってUSBからブートするようにする
- USBから起動

一旦、Micro SDにRaspberry Pi OSを入れて、USBから`ubuntu server 20.10(RPI 3/4/400)`をブートするように設定を行うところが肝です（詰まった箇所です）。

`ubuntu server 20.04`だと起動ファイルが見つからないというエラーがでますが、20.10だとうまくいきます。

## 用意するもの
[Raspberry Pi 4 model B](https://www.raspberrypi.org/products/raspberry-pi-4-model-b/)
micro SD (`Raspberry Pi OS (32-bit) Lite` のイメージ書き込み用)
USB (ubuntu serverブート用/storageとして使用) [おすすめ(Read 420MB/s Write 400MB/s)](https://www.amazon.com/Transcend-128GB-Jetflash-Flash-TS128GJF910/dp/B082LT51T6)


## イメージの書き込み

### imagerをdownload
https://www.raspberrypi.org/software/

micro SDに`Raspberry Pi OS (32-bit) Lite`のimageを作る。
USBに`ubuntu server 20.10`のimageを作る。

## Raspberry Pi OSで起動し設定
micro SDを指した状態で起動し、USBからブートするように設定を行います。
初期のユーザーは、`pi`、パスワードは`raspberry`です。
下記のコマンドを実行後、他のPCからsshして作業するのも良いです。

```shell
sudo systemctl enable ssh
sudo systemctl start ssh
```

まずは、大前提として有線がつながっていることを確認し下記のコマンドを実行します。

```shell
sudo apt update
sudo apt full-upgrade -y
```
### eepromの設定を最新版にする
```
vcgencmd bootloader_version
```

`FIRMWARE_RELEASE_STATUS`の`FIRMWARE_RELEASE_STATUS`の値を`default`から`latest`に書き直す。

```
sudo vi /etc/default/rpi-eeprom-update
FIRMWARE_RELEASE_STATUS="latest"
```

現在のversionと最新のversionの違いを確認する。

```
rpi-eeprom-update
```
![スクリーンショット 2021-01-23 051022.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/264708/0c27998b-e9f9-5d41-65df-cf002ca5bede.png)


最新版の方をダウンロードします。

```
sudo rpi-eeprom-update -d -f /lib/firmware/raspberrypi/bootloader/latest/pieeprom-2021-01-16.bin
sudo reboot
```
`-d`はパラーメータをデフォルト値にします。これにより、`BOOT_ORDER`のフィールドがデフォルト値の`0xf41`になりUSBからブートできるようになります。 

![スクリーンショット 2021-01-23 052223.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/264708/3ca7eb7b-4a48-5b85-76da-3fe05539d367.png)

再起動した後に、きちんと反映されているか確認します。

```
vcgencmd bootloader_version
vcgencmd bootloader_config
```

![スクリーンショット 2021-01-23 052341.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/264708/6365c103-bd1d-2a22-1ec0-2c189606fb69.png)

設定は以上です。Micro SDを抜いてUSBからブートできるようになりました。

## usbから起動
無事起動しました。
初期のユーザーとパスワードは`ubuntu`です。


## おまけ
一度設定したMicro SDから他のraspberry piの設定を行った場合もeepromの設定は引き継がれていたので、一度Micro SDでraspberry piを起動した後は、USBでもブートできました。


## 参考
[Raspberry Pi 4 Model B で USB ブート(1)](https://qiita.com/nowlinuxing/items/3c7f61bca6e5ef0d1c47)
https://www.yukkuriikouze.com/2020/10/24/3945/
https://www.raspberrypi.org/documentation/hardware/raspberrypi/booteeprom.md
https://www.raspberrypi.org/documentation/hardware/raspberrypi/bcm2711_bootloader_config.md
https://www.raspberrypi.org/documentation/remote-access/ssh/


## 追記
usbに焼くイメージを`ubuntu server 20.04.1 lts (RPI 3/4)`にした場合、なぜか認識してくれなかったので、`ubuntu server 20.10(RPI 3/4/400)`でやり直しました。