NetBSD Advent Calendar 2020 10日目の記事です。
今日は8日目の記事で紹介したAnitaのさらなる応用例を紹介しようと思います。
背景
8日目の記事ではAnitaを利用したNetBSDの自動インストールの手順を紹介しました。
Anitaは内部的にqemuやGXemulを使用しています。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 },
ちょっとだけ見やすく整理してみます。 qemu
や shimh
、qemuやshimh、GXemulが利用できるようです。
$ 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/evbarmとNetBSD/macppcはqemuを利用していますが、こちらは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インストールが思っていたよりもお手軽に実施できるため、開発やテストに活用できそうです。