TrueNAS SCALE を CLI から更新する方法

## 概要

TrueNAS SCALE を CLI を使って更新する方法です。

TrueNAS SCALE の更新は WebUI からポチポチすればカンタンにできるので、わざわざ CLI を使ってやる必要もないような気がします。が、何らかの理由で WebUI にアクセスできないようなケースや、 CLI から更新できた方が都合がいいようなケースもあるかと思うので調べてみました。

2024/09/12 追記: この記事はマイナーバージョンアップする場合の記事です。メジャーバージョンアップの場合は[TrueNAS SCALE を CLI からメジャーバージョンアップする方法](https://qiita.com/ktooi/items/820aed1b92a3c07c2f32)を参照してください。

## 環境

- 更新前: TrueNAS-SCALE-23.10.1
- 更新後: TrueNAS-SCALE-23.10.1.3

## やり方

### 1. TrueNAS SCALE のシェルにアクセス

わざわざ TrueNAS SCALE の更新を CLI からやろうとしている人には釈迦に説法な気もしますが、次のいずれかの手段で TrueNAS SCALE のシェルにアクセスします。

- コンソールで `6` を入力して `Open TrueNAS CLI Shell` を実行する。
- コンソールで `7` を入力して `Open Linux Shell` を実行する。
- TrueNAS SCALE の WebUI から `System Settings` -> `Shell` を開く。
- 予め SSH を設定しておいて、 SSH でログインする。

### 2. 更新

まずは更新パッケージをダウンロードしてインストールします。次の例は既に更新パッケージをダウンロード済みなのでログにダウンロードの進捗が表示されていませんが、ダウンロードしていない場合はダウンロードの進捗も表示されます。

#### インタラクティブな方法

1. `cli` ... TrueNAS SCALE の CLI に入る。
※ コンソールからアクセスして、 `Open TrueNAS CLI Shell` でログインした場合は不要。
1. `system version` ... 現在のバージョンを確認する。
1. `system update update` ... 更新パッケージをダウンロードしインストールする。

```shell-session
admin@truenas[~]$ cli
[truenas]> system version
TrueNAS-SCALE-23.10.1
[truenas]> system update update
[0%] ...
[0%] Retrieving update manifest...
[0%] Verifying existing update...
[50%] Reading update file...
[50%] Verifying rootfs.squashfs...
[50%] Verifying truenas_install/__main__.py...
[50%] Verifying truenas_install/__init__.py...
[50%] Running pre-checks...
[50%] Starting installer...
[50%] Creating dataset...
[50%] Extracting...
...snip...
[75%] Extracting...
[75%] Performing post-install tasks...
[77%] Running autotune...
[80%] Preparing initramfs configuration...
[85%] Preparing NVDIMM configuration...
[85%] Preparing GRUB configuration...
[90%] Updating initramfs...
[95%] Updating GRUB...
[97%] Configuring FIPS...
[100%] Configuring FIPS...
true
[truenas]> exit
admin@truenas[~]$ 
```

#### バッチ的な方法

1. `cli -c "system version"` ... 現在のバージョンを確認する。
1. `cli -c "system update update"` ... 更新パッケージをダウンロードしインストールする。

```shell-session
admin@truenas[~]$ cli -c "system version" 
TrueNAS-SCALE-23.10.1
admin@truenas[~]$ cli -c "system update update"    
[0%] ...
[0%] Retrieving update manifest...
[0%] Verifying existing update...
[50%] Reading update file...
[50%] Verifying rootfs.squashfs...
[50%] Verifying truenas_install/__main__.py...
[50%] Verifying truenas_install/__init__.py...
[50%] Running pre-checks...
[50%] Starting installer...
[50%] Creating dataset...
[50%] Extracting...
...snip...
[75%] Extracting...
[75%] Performing post-install tasks...
[77%] Running autotune...
[80%] Preparing initramfs configuration...
[85%] Preparing NVDIMM configuration...
[85%] Preparing GRUB configuration...
[90%] Updating initramfs...
[95%] Updating GRUB...
[97%] Configuring FIPS...
[100%] Configuring FIPS...
true
admin@truenas[~]$ 
```

### 3. 再起動

更新を有効にするために再起動を実施します。

#### インタラクティブな方法

```shell-session
admin@truenas[~]$ cli
[truenas]> system reboot
[0%] ...
[100%] ...

Broadcast message from root@truenas (Tue 2024-01-30 17:58:55 JST):

The system will reboot now!

[truenas]>
```

#### バッチ的な方法

```shell-session
admin@truenas[~]$ cli -c "system reboot"
[0%] ...
[100%] ...

Broadcast message from root@truenas (Tue 2024-01-30 17:51:01 JST):

The system will reboot now!
```

### 4. 更新後のバージョンを確認

再起動によりシェルから追い出されるので、再度シェルにアクセスしてから更新後のバージョンを確認します。

#### インタラクティブな方法

1. `cli` ... TrueNAS SCALE の CLI に入る。
※ コンソールからアクセスして、 `Open TrueNAS CLI Shell` でログインした場合は不要。
1. `system version` ... 現在のバージョンを確認する。

```shell-session
admin@truenas[~]$ cli
[truenas]> system version
TrueNAS-SCALE-23.10.1.3
[truenas]> exit
admin@truenas[~]$ 
```

#### バッチ的な方法

1. `cli -c "system version"` ... 現在のバージョンを確認する。

```shell-session
admin@truenas[~]$ cli -c "system version" 
TrueNAS-SCALE-23.10.1.3
admin@truenas[~]$ 
```
## 余談

更新がない時は次のようなメッセージが表示されます。

```shell-session
admin@truenas[~]$ cli -c "system update update"
[0%] ...
[0%] Retrieving update manifest...
Error: No update available
admin@truenas[~]$ 
```

## FYI

- [How to update SCALE using CLI | TrueNAS Community](https://www.truenas.com/community/threads/how-to-update-scale-using-cli.92893/)

おしまい。