MinIO on OpenBSD 7.2: インストール
Tags: minio, storage, aws, s3
Published: 2023-01-13 11:02:55

## はじめに

[MinIO](https://min.io/) は、オブジェクト・ストレージのソフトウェア・スイートです。[AWS](https://aws.amazon.com/) の [S3](https://aws.amazon.com/s3/) と互換性があります。
[Go 言語](https://go.dev/) で実装されており、高いパフォーマンスを実現しています。
さらにオープンソースであり、プライベート・クラウド等においてオブジェクト・ストレージ・サービスとして利用することが可能です。

この記事では MinIO を [OpenBSD](https://www.openbsd.org/) にインストールしてサービスとして公開する流れを示します。
難しい手順ではありません。というのも MinIO は [Ports](https://www.openbsd.org/faq/ports/ports.html) パッケージとして提供されているからです :)

### 環境

- OS: OpenBSD [7.2](https://www.openbsd.org/72.html)
- オブジェクト・ストレージ: MinIO 0.20220826

## チュートリアル

### パッケージマネージャでインストール

こちらを実行するだけです:

```console
$ doas pkg_add minio
```

出力は以下の通りでした:

```console
quirks-6.42 signed on 2023-01-08T01:39:04Z
useradd: Warning: home directory `/var/minio' doesn't exist, and -m was not specified
minio-0.20220826: ok
The following new rcscripts were installed: /etc/rc.d/minio
See rcctl(8) for details.
New and changed readme(s):
	/usr/local/share/doc/pkg-readmes/minio
```

### デーモン準備 OK

`/etc/rc.d/minio` が作成されています。このデーモンの制御スクリプトの冒頭は以下の内容です:

```sh
#!/bin/ksh

daemon="/usr/local/bin/minio server"
daemon_flags="/var/minio/export"
daemon_user="_minio"
(...)
```

`daemon_flags` に注目ください。
`/var/minio/export` は、MinIO インストール時に作成されています。
この行が意味するのは、MinIO のデータはこちらに格納されるということです。

さて、MinIO のディレクトリを見てみましょう:

```console
$ doas ls -aR /var/minio
```

出力は以下の通りでした:

```
doas ls -aR /var/minio
/var/minio:
.      ..     export

/var/minio/export:
.  ..
```

稼働前は上記のような状態です。

### 注意: デーモンはデフォルトでは egress をリッスンする

`/usr/local/share/doc/pkg-readmes/minio` を読んでみましょう。

次のように書かれています:

> Its API/web interface is accessible by default on port 9000, listening on all
network interfaces.

つまり MinIO のデーモンはデフォルトでは `egress` をリッスンします。そのためこの外部インタフェースを介するすべてのパケットに対してオープンになっています。

### ファイル制限を拡張する (必要な場合)

readme には次のようにも書かれています:

> Bumping file limits    
> \===================
> 
> Per https://github.com/minio/minio-service it is advised to run minio with more
> file descriptors than what is allowed by the default daemon login class.
> 
> Add this to the login.conf(5) file if you want to bump those limits:
> 
> ```
> minio:\
> 	:openfiles-cur=4096:\
> 	:openfiles-max=8192:\
> 	:tc=daemon:
> ```
> 
> Refer to https://docs.minio.io/ for more details on how to run minio.

ここで言及されている制限を拡張するには、`/etc/login.conf` を編集して以下の行を追加する必要があります:

```diff
+ minio:\
+ 	:openfiles-cur=4096:\
+ 	:openfiles-max=8192:\
+ 	:tc=daemon:
```

その後にデータベースをアップデートします:

```console
$ doas cap_mkdb /etc/login.conf
```

これによって `/etc/login.conf.db` が更新されます。この更新を行うと、特に `/etc/login.conf` が非常に大きい場合において、パフォーマンス改善効果が期待できます。

### デーモンの有効化

デーモンを有効にしましょう:

```console
$ doas rcctl enable minio
minio(ok)
```

そして実行しましょう:

```console
$ doas rcctl start minio
minio(ok)
```

なお、別の方法もあります。`-f` オプションを使えば、デーモンは無効なままの状態でサーバーを実行することが可能です:

```console
$ doas rcctl -f start minio
minio(ok)
```

### MinIO は動き始めたか ?

MinIO のディレクトリをふたたび見てみましょう:

```console
$ doas ls -a /var/minio
```

出力は以下の通りでした:

```console
.      ..     .minio export
```

`.minio` が作成されています !!
さらに `ls -aR /var/minio` で見れば、たくさんのファイルができていることがわかるでしょう ;)

## おわりに

デーモンのネットワーク状況はどのような感じでしょうか ? こちらの実行で確認できます:

```console
$ curl 127.0.0.1:9000
```

出力は以下の通りでした:

```xml
<?xml version="1.0" encoding="UTF-8"?>
<Error><Code>AccessDenied</Code><Message>Access Denied.</Message><Resource>/</Resource><RequestId>(...)</RequestId><HostId>(...)</HostId></Error>
```

実際のところ、"Bad Request" ではありました。こちらで裏を取れます:

```console
$ curl -I 127.0.0.1:9000
```

以下の通り返って来ました:

```
HTTP/1.1 400 Bad Request
Accept-Ranges: bytes
Content-Length: 261
Content-Type: application/xml
Server: MinIO
Vary: Origin
Date: Wed, 11 Jan 2023 14:40:57 GMT
```

これで OK です。MinIO サーバーはインストールされたばかりの状態なのですから。
現時点として、おめでとうございます !!!
次のステップで設定を行うことが必要ではあります。
ここで重要なことは、レスポンスを得られたということです !!!

外部リクエストに対しても動作することを見てみましょう:

```
$ curl <minio-ip>:9000
```

レスポンスは得られましたか ? :)