自動テストツールAnitaを利用してNetBSDの自動インストールを試してみる

[NetBSD Advent Calendar 2020](https://qiita.com/advent-calendar/2020/netbsd) 8日目の記事です。
今日は[Anita](http://www.gson.org/netbsd/anita/)というツールを使用してNetBSDを自動インストールする方法を紹介しようと思います。

## 背景

NetBSDを使って何かちょっと実験してみたり、アプリケーションのビルドを行いたい場合に、まっさらな環境のNetBSDを用意したいということがあります。FreeBSDやLinuxでは[Jail(8](https://www.freebsd.org/cgi/man.cgi?query=jail&apropos=0&sektion=0&manpath=FreeBSD+13.0-current&arch=default&format=html)や[Docker](https://github.com/docker/docker-ce)や[Podman](https://github.com/containers/podman)といったコンテナ環境が利用できますが、NetBSD同様のコンテナみたいな環境を利用する場合は[chroot](https://man.netbsd.org/chroot.8)を使う形になるかと思います。
NetBSDのインストールは仮想マシン上でも数分程度で完了するため、個人的には[VirtualBox](https://www.virtualbox.org/)や[qemu](https://www.qemu.org/)に手動でインストールして環境を作るという使い方が主ですが、インストールを自動的できるならそれに越したことはありません。
今日紹介する[Anita](http://www.gson.org/netbsd/anita/)というツールはテストツールという位置づけではありますが、機能のひとつとしてNetBSDの自動インストールが行えるため、今日はその方法を紹介してみます。

## Anitaのインストール

### 必要なパッケージのインストール

まずは必要なパッケージをインストールします。[Anita](http://www.gson.org/netbsd/anita/)はpip経由でインストールツールとなっており、事前にPythonをインストールしておきます。また、[Anita](http://www.gson.org/netbsd/anita/)はGitHubで公開されているため、gitコマンドと(内部的に利用するようなので) `cdrtools` もインストールしておきます。

```sh
$ sudo -i pkg_add -v ca-certificates python37 py37-pexpect py37-pip curl git-base cdrtools qemu
$
$ curl -O https://bootstrap.pypa.io/get-pip.py
$ sudo python3.7 get-pip.py
$ sudo pip3.7 install -U pip
```

[Anita](http://www.gson.org/netbsd/anita/)のソースコードを取得します。

```sh
$ git clone https://github.com/gson1703/anita.git
$ cd anita
```

### NetBSDのCDイメージ取得先の設定

[Anita](http://www.gson.org/netbsd/anita/)ではNetBSDの自動インストール時にCDイメージをダウンロードするという挙動になっています。その時のURLがデフォルトでは `ftp://ftp.netbsd.org/pub/NetBSD/` になっているため、国内のミラーサーバに変更しておきます。今回の場合は `ftp://ftp.jaist.ac.jp/pub/NetBSD/` に変更します。

```sh
$ git diff
diff --git a/anita.py b/anita.py
index 09da90a..4cb50fc 100755
--- a/anita.py
+++ b/anita.py
@@ -43,7 +43,7 @@ __version__='2.8'
 # by number, not by the recommended method of getting them by URL.
 # See http://www.netbsd.org/mirrors/#ftp for the complete list.

-netbsd_mirror_url = "ftp://ftp.netbsd.org/pub/NetBSD/"
+netbsd_mirror_url = "ftp://ftp.jaist.ac.jp/pub/NetBSD/"
 #netbsd_mirror_url = "ftp://ftp.fi.NetBSD.org/pub/NetBSD/"

 # The supported architectures, and their properties.
```

### Anitaのインストール

上記の設定を行ったのち、 `setup.py` で[Anita](http://www.gson.org/netbsd/anita/)をインストールします。

```sh
$ sudo python3.7 setup.py install
$ which anita
/usr/pkg/bin/anita
```

これで準備が整いました。

## Anitaを利用したNetBSDの自動インストール

さっそくAnitaを利用してNetBSDをインストールしてみましょう。以下のようなコマンドを走らせると、NetBSDのISOイメージ取得から始まり、OSインストールと再起動後の `login:` プロンプトの表示まで自動的に行われます。

```sh
$ mkdir anita_sample
$
$ cd anita_sample/
$ anita \
    --workdir work \
    --disk-size 2G \
    --memory-size 512M \
    --sets kern-GENERIC,modules,base,etc,comp \
    interact http://ftp.netbsd.org/pub/NetBSD/NetBSD-9.1/amd64/
```

また、 `--sets` オプションでインストールしたい配布物を指定できます。これはインストーラーにおける"Custom installation"の画面で指定する項目と同じですね。

![img.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61137/1aa2d061-7b9a-1b7f-f66e-a3988cdcf9ea.png)

## まとめ

[Anita](http://www.gson.org/netbsd/anita/)の紹介と簡単な使用方法の例を示してみました。公式Webサイトの説明によると、位置付け的には自動テストツールとのことですがNetBSDの自動インストールにも応用できそうです。加えて仮想マシンとして[qemu](https://www.qemu.org/)や[GXemul](http://gavare.se/gxemul/)を利用できるため、NetBSDの特徴のひとつである、様々なアーキテクチャ上での動作確認にも威力を発揮しそうです。

## 参考URL

 * [Anita](http://www.gson.org/netbsd/anita/)
 * FreeBSDマニュアル
   * [Jail(8](https://www.freebsd.org/cgi/man.cgi?query=jail&apropos=0&sektion=0&manpath=FreeBSD+13.0-current&arch=default&format=html)
 * [Docker](https://github.com/docker/docker-ce)
 * [Podman](https://github.com/containers/podman)
 * [VirtualBox](https://www.virtualbox.org/)
 * [qemu](https://www.qemu.org/)
 * [GXemul](http://gavare.se/gxemul/)