Conoha VPS: OpenBSD 7.3 - インストール・メディアを VM にアタッチ
Tags: openbsd, conoha, vps, vm
Published: 2023-05-07 11:55:08

## はじめに

[Conoha VPS](https://www.conoha.jp/vps/) は [OpenBSD](https://www.openbsd.org/) の公式イメージを提供してくれています 🙂

しかし更新が [7.0](https://www.openbsd.org/70.html) で止まっています 😢

OpenBSD の OS ベース・システムの [サポート・ポリシー (英語)](https://www.openbsd.org/faq/faq5.html#Flavors) は「最新リリースとその一つ前の 2 つをサポートする」というものです。
[7.3](https://www.openbsd.org/73.html) がリリースされた後にサポートされるのは 7.3 と [7.2](https://www.openbsd.org/72.html) だけです。

すなわち 7.3 のリリースに伴い [7.1](https://www.openbsd.org/71.html) が公式から姿を消しました。
このため、仮想マシン (VM、Conoha VPS の「サーバー」) を 7.0 から始めてコツコツと [`sysupgrade`](https://man.openbsd.org/sysupgrade) を実行して最新に追いつく、ということが (「7.1 の URL が見付かりません」エラーが出て) できなくなりました 😭

何か解決策は無いか... 🤔
と探したところ、Conoha VPS 公式でサポートされている機能に「ISOイメージをマウントする」というものがありました。カスタム・メディアをアタッチしてそこから VM をブートする、ということができます ✨🙌✨

### 参考 URL

- [Conoha VPS 公式ドキュメント](https://support.conoha.jp/v/clitools/)
- [ソフトウェア・リポジトリ](https://github.com/hironobu-s/conoha-iso) (GitHub)

## チュートリアル

公式未提供 OS をインストールしてカスタム VM の作成を行います。Conoha VPS の API とツール、ならびに当該 OS のオリジナルのインストール・メディアを使用します。

### `conoha-iso` ツールのインストール

まずはツールを取得します。Linux (amd64) の場合です:

```console
$ curl -sL \
      https://github.com/hironobu-s/conoha-iso/releases/download/current/conoha-iso-linux.amd64.gz | \
      zcat > conoha-iso && \
      chmod +x ./conoha-iso
```

実行パーミッション付きで作成されます。

```
$ ls
conoha-iso*
```

この他 macOS や Windows 版の実行ファイルも提供されています。
さらに [Go 言語](https://go.dev/) のソースをもとに自分でビルドすることもできます。

### API ユーザーの準備

ツールは API 経由でイメージの操作を行います。
Conoha VPS の管理画面で、API ユーザーを有効にしましょう。

![conoha-api-user](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/a7wwq4ykr290enoylhn7.png)

### ツールの使用

#### 認証情報の指定

ツール実行時に、API ユーザーの認証情報と、処理対象の指定が求められます。

##### コマンド実行履歴への配慮

ログその他に機密情報を残さないように注意しましょう。以下は [Fish シェル](https://fishshell.com/) の場合の例です:

```console
$ fish --private
Welcome to fish, the friendly interactive shell
Type help for instructions on how to use fish
fish is running in private mode, history will not be persisted.
```

##### 環境変数で指定する場合

環境変数にパラメーターを記憶させておくことで、実行都度、オプション指定が不要になります。(もちろん内容が環境変数として永続しないように注意しましょう。)

###### Case fish

`set -x` で設定できます:

```console
$ # `set -x a b` in fish is `export a=b` in bash

$ set -x OS_USERNAME (...)
$ set -x OS_PASSWORD  (...)

$ set -x OS_TENANT_ID (...)
$ # alternatively:
$ #set -x OS_TENANT_NAME (...)

$ set -x OS_REGION_NAME tyo2
```

なお tyo2 は東京リージョンです。

###### Case [bash](https://www.gnu.org/software/bash/)

`export` を用います:

```console
$ export VAR_NAME=${value}
```

##### コマンド・オプションで指定する場合

環境変数を使わずに、ツール実行都度、コマンド・オプションとして指定する方法もあります。

```console
$ # Case テナント ID を使用
$ ./conoha-iso (command) -u ${api-username} -p ${api-password} -t ${tenant-id} -r tyo2
$ # Case テナント名 を使用
$ #./conoha-iso (command) -u ${api-username} -p ${api-password} -n ${tenant-name} -r tyo2
```

#### イメージ一覧の表示

さて準備が整いました。
実際にツールを使いましょう。

まずは現状のカスタム・イメージの一覧を表示します:

```console
$ ./conoha-iso list
```

おそらくまだ何も無いはずです:

```console
No ISO images.
```

#### イメージのクラウド・ユーザー一時領域への保存

イメージを配置します。
この操作を行うことで、オリジナルの場所のイメージ・ファイルが、Conoha における API ユーザー (= アカウント) の一時領域に保存されます。(別の言い方をすると、`download` というコマンド名ですが、"ダウンロード" される先はユーザーのクライアント端末ではありません。)

```console
$ ./conoha-iso download -i https://cdn.openbsd.org/pub/OpenBSD/7.3/amd64/cd73.iso
```

今回は OpenBSD の最新版がターゲットなので、OpenBSD の [Downloading OpenBSD](https://www.openbsd.org/faq/faq4.html#Download) ページに記載されている URL を指定しました。

```console
INFO[0001] Download request was accepted.
```

API リクエストが成功しました。
バックグラウンドでイメージのダウンロードが行われるので、少し待つ必要があります。(もっとも今回は `cdXX.iso` を指定したので、小サイズです。時間はほとんど掛かりませんでした。)

イメージ保存の完了をコマンドで確認しましょう:

```
$ ./conoha-iso list
```

以下のように目的のものが出力されれば OK です。(そうなら無かった場合はふたたび待ちましょう。)

```console
[Image1]
Name:  cd73.iso
Url:   https://cdn.openbsd.org/pub/OpenBSD/7.3/amd64/cd73.iso
Path:  /mnt/isos/repos/tenant_iso_data/(...)/cd73.iso
Ctime: Sat Mar 25 16:42:44 2023
Size:  10780672
```

#### メディアの VM へのアタッチ

本手順には前提条件があります。
Conoha VPS の「サーバー」に、作成済、且つ、停止状態の VM があること、です。

準備が良いようでしたら、ツールで `insert` コマンドを実行します。

```console
$ ./conoha-iso insert
```

Conoha VPS 「サーバー」マシンの一覧が表示されます。アタッチ対象を選びましょう。

```console
[1] (...) (255-255-255-255)
Please select VPS [1-N]: 1
```

次にカスタム・イメージをたずねられます。
先ほど保存したものを選びましょう。

```console
[1] cd73.iso
Please select ISO [1]: 1
```

以下のように表示されれば成功です。次回 VM 起動時、アタッチしたメディアからブートされます。

```console
INFO[0004] ISO file was inserted and changed boot device. 
```

#### OS インストール

管理画面のサーバー「詳細情報」では、「ブートディスク」が「SSD 100 GB」のままですが、問題無くメディアから起動されます。

![conoha-vm-with-media-inserted](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/784mco5y0jg15qcrn8tm.png)

なじみのあるインストーラー画面が始まるでしょう。

![conoha-obsd-installer-started-by-media](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gyehvdslk6hcfvyscg8r.png)

#### メディアのデタッチ

インストールが完了すると、メディアをデタッチしましょう。そのために、VM をシャットダウンします。

シャットダウン後、ツールのコマンドでデタッチが行えます。

```console
$ ./conoha-iso eject
```

対象の VM をたずねられるので、回答します。

```console
[1] (...) (255-255-255-255)
Please select VPS [1-N]: 1
```

以下のように表示されれば成功です。

```console
INFO[0003] ISO file was ejected.
```

##### トラブル・シューティング

`eject` が失敗する場合があります。

以下のエラーメッセージは、VM が実行中であることを表します。VM をシャットダウンしましょう。

```console
ERRO[0003] Return 409 status code from the server. (Instance (...) in vm_state is active. Cannot mount|unmount iso image while the instance is in this state.) 
```

以下のエラーの場合、VM のシャットダウンが行われていますが、未完了の状態です。マシンが完全に停止するまで、もうしばらく待つ必要があります。

```console
ERRO[0004] Return 409 status code from the server. (Instance (...) in task_state is powering-off. Cannot mount|unmount iso image while the instance is in this state.) 
```

## おわりに

Conoha VPS 公式ツールとわかりやすいサポート・ページのおかげで、OpenBSD の最新版 VM を直接作成できるようになりました 👏

さらに [Alpine Linux](https://www.alpinelinux.org/) のような、公式イメージとして提供されていない OS もインストールできるようになりました 😊

![conoha-vps-os-images](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zq57k2nnzqkf5smnrs6j.png)

### (参考) `conoha-iso` ヘルプ情報

```console
./conoha-iso help
```

```console
NAME:
   conoha-iso - This app allow you to manage the ISO images on ConoHa.

USAGE:
   conoha-iso [global options] command [command options] [arguments...]

VERSION:
   0.5

COMMANDS:
   list      List ISO Images.
   download  Download ISO file from the FTP/HTTP server.
   insert    Insert an ISO images to the VPS.
   eject     Eject an ISO image from the VPS.
   server    Run the server.
   help, h   Shows a list of commands or help for one command

GLOBAL OPTIONS:
   --help, -h     show help
   --version, -v  print the version
```

ツール作成者の方々とプロジェクトに謝意を込めつつ。