Help us understand the problem. What is going on with this article?

Anitaで各アーキテクチャ向けのNetBSDを自動インストールする

NetBSD Advent Calendar 2020 10日目の記事です。
今日は8日目の記事で紹介したAnitaのさらなる応用例を紹介しようと思います。

背景

8日目の記事ではAnitaを利用したNetBSDの自動インストールの手順を紹介しました。
Anitaは内部的にqemuGXemulを使用しています。NetBSDが対応している各アーキテクチャ向けの自動インストールを試してみたので、今日の記事にて紹介してみようと思います。

AnitaでインストールできるNetBSD

Anitaのソースコードを見ると、 arch_props に各アーキテクチャと使用する仮想マシンモニタ(VMM)の情報が記載されています。

  57 arch_props = {
  58     'i386': {
  59         'qemu': {
  60             'executable': 'qemu-system-i386',
  61         },
  62         'scratch_disk': 'wd1d',
  63         'boot_from_default': 'floppy',
  64     },
  65     'amd64': {
  66         'qemu': {
  67             'executable': 'qemu-system-x86_64',
  68         },
  69         'scratch_disk': 'wd1d',
  70         'memory_size': '192M',
  71     },
  72     'sparc': {
  73         'qemu': {
  74             'executable': 'qemu-system-sparc',
  75         },
  76         'scratch_disk': 'sd1c',
  77     },

ちょっとだけ見やすく整理してみます。 qemushimhqemushimhGXemulが利用できるようです。

$ grep "': {" anita.py | sed -e "s/': {//" -e "s/^ *'//" | paste - -
i386    qemu
amd64   qemu
sparc   qemu
sparc64 qemu
evbarm-earmv7hf qemu
evbarm-aarch64  qemu
pmax    gxemul
hpcmips gxemul
landisk gxemul
vax     simh
hppa    qemu
macppc  qemu
alpha   qemu

準備

qemuのインストール

まずはqemuをインストールします。7日目の記事にもありますが、パッケージからインストールしたqemuがうまく動作しないため、今回は自前でビルドします。

$ sudo -i pkg_add -v pkg-config gmake python37
$ 
$ curl -sLO https://download.qemu.org/qemu-5.0.1.tar.xz
$ tar Jxf qemu-5.0.1.tar.xz
$ cd qemu-5.0.1

対象となるアーキテクチャ指定してビルドするには、 --target-list を指定するようです。

$ ./configure --help
...中略...
  --target-list=LIST       set target list (default: build everything)
                           Available targets: aarch64-softmmu alpha-softmmu
                           arm-softmmu cris-softmmu hppa-softmmu i386-softmmu
                           lm32-softmmu m68k-softmmu microblaze-softmmu
                           microblazeel-softmmu mips-softmmu mips64-softmmu
                           mips64el-softmmu mipsel-softmmu moxie-softmmu
                           nios2-softmmu or1k-softmmu ppc-softmmu ppc64-softmmu
                           riscv32-softmmu riscv64-softmmu rx-softmmu
                           s390x-softmmu sh4-softmmu sh4eb-softmmu
                           sparc-softmmu sparc64-softmmu tricore-softmmu
                           unicore32-softmmu x86_64-softmmu xtensa-softmmu
                           xtensaeb-softmmu i386-bsd-user sparc-bsd-user
                           sparc64-bsd-user x86_64-bsd-user

以下のような指定で ./configure を実行してビルドします。この例では qemu-system-aarch64 がビルドされます。

$ ./configure \
        --prefix=/opt/qemu-5.0.1 \
        --python=/usr/pkg/bin/python3.7 \
        --target-list=aarch64-softmmu
$ gmake
$ sudo gmake install

7日目の記事でも解説していますが、paxctl(8)PaXまわりの属性を変更しておきます。

$ sudo paxctl +m /opt/qemu-5.0.1/bin/qemu-system-aarch64
$ sudo paxctl /opt/qemu-5.0.1/bin/qemu-system-aarch64
PaX flags:
  m: mprotect(2) restrictions, explicit disable

gxemulのインストール

GXemulはそのままパッケージからインストールします。

$ sudo -i pkg_add -v gxemul

これで準備は完了です。

各アーキテクチャ向けのNetBSDをインストールしてみる

準備が整ったので各アーキテクチャ向けのNetBSDインストールを試してみます。
Anitaには対象アーキテクチャを指定するオプションは存在せず、CDイメージの取得URLから自動で対象アーキテクチャと使用すべきVMMを判別してくれます。

NetBSD/aarch64

NetBSD/evbarmのインストール例です。

$ 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/evbarm-aarch64/

自動インストール完了後、 qemu-system-aarch64 でNetBSDが起動してきます。

NetBSD/evbarm (arm64) (constty)

login: root
Dec 11 00:19:44 arm64 login: ROOT LOGIN (root) on tty constty
Last login: Fri Dec 11 00:15:49 2020 on constty
Copyright (c) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
    2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017,
    2018, 2019, 2020 The NetBSD Foundation, Inc.  All rights reserved.
Copyright (c) 1982, 1986, 1989, 1991, 1993
    The Regents of the University of California.  All rights reserved.

NetBSD 9.1 (GENERIC64) #0: Sun Oct 18 19:24:30 UTC 2020

Welcome to NetBSD!

We recommend that you create a non-root account and use su(1) for root access.
arm64# 

(当たり前ですが) uname -a を実行すると evbarm が返ってきます。

arm64# uname -a
NetBSD arm64 9.1 NetBSD 9.1 (GENERIC64) #0: Sun Oct 18 19:24:30 UTC 2020  mkrepo@mkrepro.NetBSD.org:/usr/src/sys/arch/evbarm/compile/GENERIC64 evbarm

NetBSD/macppc

NetBSD/macppcのインストール例です。

$ 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/macppc/
NetBSD/macppc (Amnesiac) (ttyZ0)

login: root
Dec 10 16:55:53  login: ROOT LOGIN (root) on tty ttyZ0
Copyright (c) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
    2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017,
    2018, 2019, 2020 The NetBSD Foundation, Inc.  All rights reserved.
Copyright (c) 1982, 1986, 1989, 1991, 1993
    The Regents of the University of California.  All rights reserved.

NetBSD 9.1 (GENERIC) #0: Sun Oct 18 19:24:30 UTC 2020

Welcome to NetBSD!

We recommend that you create a non-root account and use su(1) for root access.
# 
# uname -a 
NetBSD  9.1 NetBSD 9.1 (GENERIC) #0: Sun Oct 18 19:24:30 UTC 2020  mkrepro@mkrepro.NetBSD.org:/usr/src/sys/arch/macppc/compile/GENERIC macppc

NetBSD/hpcmips

NetBSD/hpcmipsのインストール例です。NetBSD/evbarmNetBSD/macppcqemuを利用していますが、こちらはGXemulの上で動作しています。

$ 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/hpcmips/
NetBSD/hpcmips (Amnesiac) (constty)

login: root
Dec 10 17:33:09  login: ROOT LOGIN (root) on tty constty
Copyright (c) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
    2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017,
    2018, 2019, 2020 The NetBSD Foundation, Inc.  All rights reserved.
Copyright (c) 1982, 1986, 1989, 1991, 1993
    The Regents of the University of California.  All rights reserved.

NetBSD 9.1 (GENERIC) #0: Sun Oct 18 19:24:30 UTC 2020

Welcome to NetBSD!

We recommend that you create a non-root account and use su(1) for root access.
# uname -a 
NetBSD  9.1 NetBSD 9.1 (GENERIC) #0: Sun Oct 18 19:24:30 UTC 2020  mkrepro@mkrepro.NetBSD.org:/usr/src/sys/arch/hpcmips/compile/GENERIC hpcmips

まとめ

Anitaを使用してNetBSDの各アーキテクチャの自動インストールを行う方法を紹介しました。複数のアーキテクチャへのNetBSDインストールが思っていたよりもお手軽に実施できるため、開発やテストに活用できそうです。

参考URL

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away