TrueNAS SCALE を CLI からメジャーバージョンアップする方法

## 概要

[TrueNAS SCALE を CLI から更新する方法](https://qiita.com/ktooi/items/5883cfb5f98ee7e59f41)で更新手順を記載しましたが、メジャーバージョンアップにはもうひと手間必要だったので、今度はTrueNAS SCALE を CLI を使ってメジャーバージョンアップする方法です。

## 環境

- 更新前: TrueNAS-SCALE-23.10.2
- 更新後: TrueNAS-SCALE-24.04.2.1

## やり方

### 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. 利用可能な Train を確認

利用可能な Train を確認します。

https://update.ixsystems.com/scale/trains.json を `wget` して表示します。(これだけは TrueNAS SCALE の CLI から取得する方法が分かりませんでした。)

```shell-session
admin@truenas[~]$ wget https://update.ixsystems.com/scale/trains.json -O -
--2024-09-12 18:03:07--  https://update.ixsystems.com/scale/trains.json
Resolving update.ixsystems.com (update.ixsystems.com)... 45.43.153.2
Connecting to update.ixsystems.com (update.ixsystems.com)|45.43.153.2|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 845 [application/json]
Saving to: ‘STDOUT’                   

-                                                             0%[                                                                                                                                         ]       0  --.-KB/s               {
  "trains": {
    "TrueNAS-SCALE-Angelfish": {
      "description": "TrueNAS SCALE Angelfish 22.02 Legacy [release], now end of life"
    },
    "TrueNAS-SCALE-Bluefin": {
      "description": "TrueNAS SCALE Bluefin 22.12 Legacy [release], now end of life"
    },
    "TrueNAS-SCALE-Cobia": {
      "description": "TrueNAS SCALE Cobia 23.10 [release]"
    },
    "TrueNAS-SCALE-Dragonfish": {
      "description": "TrueNAS SCALE Dragonfish 24.04 [release]"
    },
    "TrueNAS-SCALE-ElectricEel-BETA": {                                                     "description": "TrueNAS SCALE ElectricEel 24.10 BETA"
    }
  },
  "trains_redirection": {
    "TrueNAS-SCALE-Cobia-BETA": "TrueNAS-SCALE-Cobia",
    "TrueNAS-SCALE-Cobia-RC": "TrueNAS-SCALE-Cobia",
    "TrueNAS-SCALE-Dragonfish-BETA": "TrueNAS-SCALE-Dragonfish",
    "TrueNAS-SCALE-Dragonfish-RC": "TrueNAS-SCALE-Dragonfish"                                                                                                                                                                                
  }
}
-                                                           100%[========================================================================================================================================>]     845  --.-KB/s    in 0s
2024-09-12 18:03:08 (95.3 MB/s) - written to stdout [845/845]
admin@truenas[~]$
```

### 3. TrueNAS SCALE の CLI を起動

TrueNAS SCALE の CLI を実行します。

```shell-session
admin@truenas[~]$ cli
[truenas]>
```

以降はこの CLI 上でコマンド操作します。もしシェルスクリプト等で CLI のコマンドを実行したい場合は、 `cli -c "<実行コマンド>"` とすることで実行することができます。
i.e.: `cli -c "system update get_trains"`

### 4. 現在の Train を確認

現在動作している TrueNAS SCALE の Train を確認します。

```shell-session
[truenas]> system update get_trains
+----------+-----------------------+
|   trains | <dict>                |
|  current | TrueNAS-SCALE-Bluefin |
| selected | TrueNAS-SCALE-Bluefin |
+----------+-----------------------+
[truenas]>
```

### 5. Train を変更

`system update set_train "<TRAIN_NAME>"` を実行して Train を変更します。

```shell-session
[truenas]> system update set_train "TrueNAS-SCALE-Dragonfish"
true
[truenas]>
```

`system update get_trains` を実行して `selected` の Train が変更されたことを確認します。

```shell-session
[truenas]> system update get_trains
+----------+--------------------------+
|   trains | <dict>                   |
|  current | TrueNAS-SCALE-Bluefin    |
| selected | TrueNAS-SCALE-Dragonfish |
+----------+--------------------------+
[truenas]>
```

### 6. 適用可能な更新を確認

`system update check_available` を実行して適用可能な更新情報を確認します。

```shell-session
[truenas]> system update check_available
+-------------------+------------------------------------------------------------------+
|            status | AVAILABLE                                                        |
|           changes | <list>                                                           |
|            notice | <null>                                                           |
|             notes | <null>                                                           |
| release_notes_url | https://www.truenas.com/docs/scale/24.04/gettingstarted/scale... |
|         changelog |                                                                  |
|           version | 24.04.2.1                                                        |
|          filename | TrueNAS-SCALE-24.04.2.1.update                                   |
|          filesize | 1320685568                                                       |
|          checksum | 9770b19c76ce358f7ef38b6ad19fa67f8602a17caab7cfead0cec9c9634fed9b |
+-------------------+------------------------------------------------------------------+
[truenas]>
```

### 7. 更新

更新操作自体は[TrueNAS SCALE を CLI から更新する方法](https://qiita.com/ktooi/items/5883cfb5f98ee7e59f41)と大きく変わりません。

更新を実行して再起動します。

```shell-session
[truenas]> system version
TrueNAS-SCALE-23.10.2
[truenas]> system update update
[0%] ...
[0%] Retrieving update manifest...
[0%] Verifying existing update...
[0%] Downloading update: 1.23 GiB at 0.0 bytes/s...
[0%] Downloading update: 1.23 GiB at 1.66 MiB/s...
...snip...
[49%] Downloading update: 1.23 GiB at 9.53 MiB/s...
[50%] Reading update file...
[50%] Verifying rootfs.squashfs...
[50%] Verifying truenas_install/__main__.py...
[50%] Verifying truenas_install/fhs.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]> system version
TrueNAS-SCALE-23.10.2  # まだバージョンは変わっていない
[truenas]> system reboot
[0%] ...
[100%] ...

Broadcast message from root@truenas (Thu 2024-09-12 18:22:47 JST):

The system will reboot now!

[truenas]>
```

### 8. 更新後確認

更新後、再起動が完了したらバージョン確認を行います。

`system version` で新しいバージョンになっている事、 `system update get_trains` で `current` も指定した Train になっていることを確認します。

```shell-session
admin@truenas[~]$ cli
[truenas]> system version
TrueNAS-SCALE-24.04.2.1
[truenas]> system update get_trains
+----------+--------------------------+
|   trains | <dict>                   |
|  current | TrueNAS-SCALE-Dragonfish |
| selected | TrueNAS-SCALE-Dragonfish |
+----------+--------------------------+
[truenas]>
```

## 余談

メジャーバージョンアップの後、何故か TrueNAS SCALE の IP が変わっていた。 Static に指定してあったのに・・・

おしまい。