9
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

NetBSDAdvent Calendar 2015

Day 2

NetBSD+Raspberry PiでPCルータを作る(カーネルビルド編)

Last updated at Posted at 2015-12-01

幅広いアーキテクチャに対応しているのが特徴のひとつであるNetBSD、当然(?)のことながらARMアーキテクチャを採用したシングルボードコンピュータのRaspberry Piでも動作します。

昨年のNetBSD Advent Calendar 2014で、@ebijunさんによるRaspberry PiへのNetBSDインストール手順についての記事がありました。

最近はあまり聞かなくなってしまいましたが、NetBSD等のいわゆるPC-UNIX系OSを用いてネットワークルータを構築する、というPCの活用方法もあります。今回はNetBSDが動作するRaspberry PiをPCルータにしてみる手順を解説してみたいと思います。
(そもそもRaspberry PiはPCなの?という疑問はさておき……)

ご注意

現時点(2015/12/2)でのNetBSD最新版はNetBSD-7.0です。今回解説するNetBSDのバージョンはNetBSD-7.0_RC1での手順となっており、最新版ではうまく行かない可能性もありますのでご注意ください。
(つまりこの記事はNetBSD-7.0_RC1でPCルータを構築した時の記録をもとに執筆しているわけです)

Raspberry PiへのNetBSDインストール

こちらは先述のとおり、昨年のNetBSD Advent Calendar 2014の記事をご参照ください。

さっそくPCルータとして活用……の前にカーネルビルド

NetBSDがインストールできたのでさっそくPCルータとして稼働させよう! ……と言いたいところですが、私の環境で利用するにあたっては何点か要件があり、それを満たすためにカーネルビルドが必要でした。

例えば以下のような要件です。

  • なにはともあれ、PCルータとして利用したい
    • "options GATEWAY"抜きでカーネルが構築されてゐる……
  • パケットフィルタを利用できるようにしたい
  • PPPoEを利用したい
  • OpenVPNでVPNを構築できるようにしたい

NetBSD-7.0_RC1の時点では上記の機能はRaspberry Pi向けNetBSDカーネルコンフィグには含まれていなかっため、カーネルを再構築することで対応しました。

カーネルソースコードの取得

カーネルソースコードを取得し、/usr/src以下に展開します。

# curl -O http://ftp.jaist.ac.jp/pub/NetBSD/NetBSD-7.0_RC1/source/sets/syssrc.tgz
# tar zxvf syssrc.tgz -C /

sys/arch/evbarm/conf/RPIがRaspberry Pi向けのカーネルコンフィグです。

# cd /usr/src/sys/arch/evbarm/conf/

カーネルコンフィグの修正

カーネルコンフィグの修正箇所は以下の通りです。先述した機能を有効にするためのコンフィグを追加・有効化しているだけです。

$ diff -u RPI CIRLARKO
--- RPI 2015-03-16 07:52:18.000000000 +0900
+++ CIRLARKO    2015-06-26 10:24:06.000000000 +0900
@@ -6,6 +6,8 @@

 include        "arch/evbarm/conf/std.rpi"

+ident  "CIRLARKO"
+
 # estimated number of users

 maxusers       32
@@ -59,7 +61,7 @@

 # Networking options

-#options       GATEWAY         # packet forwarding
+options        GATEWAY         # packet forwarding
 options        INET            # IP + ICMP + TCP + UDP
 options        INET6           # IPV6
 #options       IPSEC           # IP security
@@ -72,6 +74,9 @@
 #options       PPP_FILTER      # Active filter support for PPP (requires bpf)
 #options       TCP_DEBUG       # Record last TCP_NDEBUG packets with SO_DEBUG

+options                IPFILTER_LOG    # ipmon(8) log support
+options                IPFILTER_LOOKUP # ippool(8) support
+
 options        NFS_BOOT_BOOTP
 options        NFS_BOOT_DHCP
 #options               NFS_BOOT_BOOTSTATIC
@@ -296,17 +301,17 @@
 # network pseudo-devices
 pseudo-device  bpfilter                # Berkeley packet filter
 #pseudo-device carp                    # Common Address Redundancy Protocol
-#pseudo-device ipfilter                # IP filter (firewall) and NAT
+pseudo-device  ipfilter                # IP filter (firewall) and NAT
 pseudo-device  loop                    # network loopback
 #pseudo-device kttcp                   # network loopback
-#pseudo-device ppp                     # Point-to-Point Protocol
-#pseudo-device pppoe                   # PPP over Ethernet (RFC 2516)
+pseudo-device  ppp                     # Point-to-Point Protocol
+pseudo-device  pppoe                   # PPP over Ethernet (RFC 2516)
 #options       PPPOE_SERVER            # Enable PPPoE server via link0
 #pseudo-device sl                      # Serial Line IP
 #pseudo-device strip                   # Starmode Radio IP (Metricom)
 #pseudo-device irframetty              # IrDA frame line discipline
-#pseudo-device tap                     # virtual Ethernet
-#pseudo-device tun                     # network tunneling over tty
+pseudo-device  tap                     # virtual Ethernet
+pseudo-device  tun                     # network tunneling over tty
 #pseudo-device gre                     # generic L3 over IP tunnel
 #pseudo-device gif                     # IPv[46] over IPv[46] tunnel (RFC 1933)
 #pseudo-device faith                   # IPv[46] TCP relay translation i/f

カーネルのビルド

あとはいつもの通り、カーネルをビルドするだけです。カーネルビルドの手順は、NetBSDカーネルをビルドしてみるで紹介した手順でOKです。

ちなみにビルド時間は3時間ほどで、makeを実行したらあとは完了するまで放置で良いので、ビルド時間が長くて困るというようなことは無いかと思います。

# config CIRLARKO
# cd ../compile/CIRLARKO/
# make depend
# make

Raspberry Pi向けのカーネルは、netbsd.binという名前で生成されます。これをSDカードの/bootにkernel.imgという名前でコピーします。

# cp netbsd.bin /boot/kernel.img

そしてRaspberry Piを再起動すればビルドしたカーネルでNetBSDが起動してきます。

まとめ

Raspberry PiでPCルータを構築するにあたり、必要となったカーネル再構築の手順を紹介しました。明日の記事ではネットワークルータとして動作させるためのユーザランド側の設定について紹介する予定です。

9
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?