OpenBSD の snapshots で current 環境を構築する

# はじめに
これまで OpenBSD の release のみを使ってきましたが、最新の ports を試したいという理由から current を追っかけてみようかと考えました。ただ毎回ソースコードからシステム全体をコンパイルするのは手間も時間も掛かるのでまずは snapshots を導入してみます。

参照：[Following -current and using snapshots](https://www.openbsd.org/faq/current.html)

# snapshots について
https://www.openbsd.org/faq/faq5.html によると、OpenBSD には3つのフレーバーがあって、**-release** が6か月毎に出される公式版、**-stable** が -release ブランチに errata パッチを加えた版、そして **-current** が6か月毎に次の -release としてタグ付けされる開発ブランチであるとのことです。
snapshots は -current のブランチをビルドしたものです。
ソースコードからシステム全体をコンパイルしたい場合でも最新の snapshots の導入から開始すべきとのことです。
snapshots の環境を作っておけば、ソースコードからシステム全体をビルドしたくなった場合でもすぐに取り掛かることができて便利だと考えました。

# snapshots の導入手順
今回行った snapshots の導入手順を以下に説明します。

## (1) ダウンロード
snapshots のインストールイメージをダウンロードします。今回は以下からダウンロードしました。
http://www.ftp.ne.jp/pub/OpenBSD/snapshots/amd64/install67.iso 

## (2) インストール
リリース版と同様にインストールを行います。
インストール手順の例はこちら：[OpenBSD 6.5 のインストール](https://qiita.com/kinichiro/items/a2ed08d14d2d46e28fca)

今回、ports に多くの容量が必要かなと考え、ディスクの割り当ては以下のようにしてみました。

```shell-session
/			   200M
/tmp		   200M
/var		   200M
/usr		   2G
/usr/X11R6	   500M
/usr/local	   6G
/home		   2G
/usr/src       2G
/usr/ports     2G
/usr/www       1G
/usr/xenocara  2G
/usr/obj	   6G
```

インストール完了後、ログインすると以下のように `-current` と表示されていることを確認できました。

```shell-session
OpenBSD 6.7-current (GENERIC) #327: Fri Jul 10 13:39:05 MDT 2020
```

## (3) インストール後の設定
`/etc/installurl` には国内の[ミラーサイト](https://www.openbsd.org/ftp.html)を設定しました。

```bash:/etc/installurl
https://ftp.riken.jp/pub/OpenBSD
```

pkg_add する時に snapshots から探してくれるように root の環境変数として .profile に PKG_PATH を設定しました。

```shell-session
export PKG_PATH=https://cloudflare.cdn.openbsd.org/pub/OpenBSD/snapshots/packages/amd64
```

以上で snapshots による current の環境ができました。

# snapshots の定期的な更新
インストールした snapshots による -current 環境を最新に維持するためには、定期的に更新処理を行います。
root で `sysupgrade -s` を実行して snapshots 環境を最新化することができます。
`/home/_sysupgrade/` にファイルがダウンロードされた後、自動的にリブートされてダウンロードされた最新の snapshots がインストールされます。

以下は実行例です。

```shell-session
# sysupgrade -s
Fetching from https://ftp.riken.jp/pub/OpenBSD/snapshots/amd64/
SHA256.sig   100% |*************************************|  2144       00:00
Signature Verified
INSTALL.amd64 100% |************************************| 43523       00:00
base67.tgz   100% |*************************************|   279 MB    00:50
bsd          100% |*************************************| 20378 KB    00:12
bsd.mp       100% |*************************************| 20475 KB    00:18
bsd.rd       100% |*************************************| 10134 KB    00:06
comp67.tgz   100% |*************************************| 71259 KB    00:39
game67.tgz   100% |*************************************|  2745 KB    00:02
man67.tgz    100% |*************************************|  7474 KB    00:06
xbase67.tgz  100% |*************************************| 22913 KB    00:14
xfont67.tgz  100% |*************************************| 39342 KB    00:35
xserv67.tgz  100% |*************************************| 16767 KB    00:15
xshare67.tgz 100% |*************************************|  4499 KB    00:03
Verifying sets.
...
```

[syspatch(8)](https://man.openbsd.org/syspatch) は -release のためのものなので snapshots では使いません。

# current のソースコードの入手
current の環境ができたので current のソースコードを入手します。

参照：[Anonymous CVS](https://www.openbsd.org/anoncvs.html)

## (1) ユーザーを wsrc グループへの追加
cvs などのコマンドを一般ユーザーで行えるよう、作業ユーザーを wsrc グループに追加します。root で実行します。

```shell-session
# user mod -G wsrc exampleuser
```

## (2) ソースコードのディレクトリのグループを wsrc に変更
/usr/src と同様に ports のグループを wsrc に変更し、グループに w を付与します。root で実行します。

```shell-session
# cd /usr
# chgrp wsrc ports
# chmod 775 ports
```

## (3) current のシステムのソースコード (/usr/src) の準備
いきなり cvs コマンドで取得するのではなく、ミラーサイトに置かれているソースコードをダウンロードし展開してから、cvs でアップデートをするという手順を行います。

今回は、現時点での最新となる 6.7 のソースコードを持ってきました。
日本のミラーサイトから src.tar.gz と sys.tar.gz を、作業ユーザーのホームディレクトリにダウンロードしました。

```shell-session
$ cd
$ curl http://www.ftp.ne.jp/pub/OpenBSD/6.7/src.tar.gz -O
$ curl http://www.ftp.ne.jp/pub/OpenBSD/6.7/sys.tar.gz -O
```

作業ユーザーでダウンロードしたファイルを /usr/src 配下に展開します。

```shell-session
$ cd /usr/src
$ tar xzf $HOME/src.tar.gz
$ tar xzf $HOME/sys.tar.gz
```

最後に作業ユーザーにより cvs でアップデートします。

```shell-session
$ cd /usr/src
$ cvs -qd anoncvs@anoncvs.jp.openbsd.org:/cvs update -Pd
```
以上で完了です。
以後は、作業ユーザーで最後に行った  cvs update コマンドを実行することで最新のソースコードを得ることができます。

## (4) current の ports のソースコード (/usr/ports) の準備
ports のソースコードも /usr/src と同様の手順になります。

snapshots のディレクトリからソースコードを取得します。

```shell-session
$ cd
$ curl http://www.ftp.ne.jp/pub/OpenBSD/snapshots/ports.tar.gz -O
```

作業ユーザーでダウンロードしたファイルを /usr/ports 配下に展開します。

```shell-session
$ cd /usr
$ tar xzf $HOME/ports.tar.gz
```

最後に作業ユーザーにより cvs でアップデートします。

```shell-session
$ cd /usr/ports
$ cvs -qd anoncvs@anoncvs.jp.openbsd.org:/cvs update -Pd
```
以上で完了です。
以後は、作業ユーザーで最後に行った  cvs update コマンドを実行することで最新のソースコードを得ることができます。

# まとめ
OpenBSD の snapshots を使って current を導入してみました。
またシステムや ports の current のソースコードを入手しました。
機会があればこの環境を使ったシステムのビルドや ports 利用についても書きたいと思います。

OpenBSD プロジェクトは寄付を募ってます。
メールアドレス指定で日本からでもPayPalでの寄付ができます。
詳しくはこちら： https://www.openbsd.org/donations.html