1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Linux From Scratch on RISC-V をインターネットに繋げる

1
Posted at

はじめに

前回の記事で、RISC-V版QEMU上でLinux From Scratch(以下、LFS)を構築しましたが、最低限起動するものを構築しただけなのでネットワーク設定ができていません。

インターネットに繋がっていないとさすがに不便なので、今回はLFS on RISC-Vをインターネットに繋げてみます。

QEMU起動時の設定

QEMUには、ユーザーモードネットワークと呼ばれる、DHCPサーバやDNSサーバを自動的に用意してくれる便利なモードがあります。今回は手っ取り早くユーザーモードネットワークを使用します。
以下のコマンドによりQEMUを起動します。

qemu-system-riscv64 -nographic -machine virt \
-bios opensbi-1.7/build/platform/generic/firmware/fw_jump.bin \
-kernel u-boot-2025.07/u-boot.bin \
-drive file=lfs.img,format=raw,if=virtio -m 16G \
-netdev user,id=net0 -device virtio-net,netdev=net0

ネットワーク設定

LFSの上記ドキュメントに沿ってネットワークを設定していきます。

ネットワークインターフェース名の確認

以下コマンドによりインターフェース名を確認します。

> ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: enp0s1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
    link/ether 52:54:00:12:34:56 brd ff:ff:ff:ff:ff:ff
    altname enx525400123456
3: sit0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN mode DEFAULT group default qlen 1000
    link/sit 0.0.0.0 brd 0.0.0.0

今回はenp0s1がインターフェース名と分かります。

DHCP設定

以下コマンドによりDHCP設定を行います。

cat > /etc/systemd/network/10-eth-dhcp.network << "EOF"
[Match]
Name=enp0s1

[Network]
DHCP=ipv4

[DHCPv4]
UseDomains=true
EOF

ホスト名の設定

以下コマンドによりホスト名を設定します。<lfs>の部分はお好みで変更してください。

echo "<lfs>" > /etc/hostname

/etc/hostsファイルの設定

以下コマンドにより/etc/hostsを設定します。

cat > /etc/hosts << "EOF"
# Begin /etc/hosts

::1       ip6-localhost ip6-loopback
ff02::1   ip6-allnodes
ff02::2   ip6-allrouters

# End /etc/hosts
EOF

接続確認

一度QEMUを再起動して、設定を反映させます。
普通ならpingを使って確認したいところですが、デフォルトではユーザーモードネットワークはICMPを遮断するため、pingは疎通しません。ホストの設定を変えることで疎通するようになるので、試してみます。

pingによる接続確認

ホストにて、以下コマンドにより非特権ユーザに対してもpingが疎通するようにします。

sudo sh -c "echo 100 100 > /proc/sys/net/ipv4/ping_group_range"

QEMUを起動し、LFS上でpingを打ってみます。

ping example.com
PING example.com (104.18.26.120): 56 data bytes
64 bytes from 104.18.26.120: icmp_seq=0 ttl=255 time=16.248 ms
64 bytes from 104.18.26.120: icmp_seq=1 ttl=255 time=19.526 ms
64 bytes from 104.18.26.120: icmp_seq=2 ttl=255 time=13.141 ms
64 bytes from 104.18.26.120: icmp_seq=3 ttl=255 time=13.218 ms
^C--- example.com ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max/stddev = 13.141/15.533/19.526/2.624 ms

無事疎通しました。

telnetによる接続確認

ホスト側の設定を変えなくてもTCPは疎通するので、TCPによる接続確認が可能です。wgetやcurl、lynxを使いたいところですが、LFSのパッケージには含まれません。telnetであれば含まれるので、まずはtelnetで接続確認してみます。

telnet example.com 80

すぐに以下リクエストを入力し送信します(最後の空行も含みます)。

GET / HTTP/1.1
Host: example.com

以下応答が返ってきました。成功です。

HTTP/1.1 200 OK
Date: Tue, 03 Mar 2026 03:57:49 GMT
Content-Type: text/html
Transfer-Encoding: chunked
Connection: keep-alive
CF-RAY: 9d65b8183de4af3c-NRT
Last-Modified: Wed, 25 Feb 2026 07:20:54 GMT
Allow: GET, HEAD
Accept-Ranges: bytes
Age: 13819
cf-cache-status: HIT
Server: cloudflare

210
<!doctype html><html lang="en"><head><title>Example Domain</title><meta name="viewport" content="width=device-width, initial-scale=1"><style>body{background:#eee;width:60vw;margin:15vh auto;font-family:system-ui,sans-serif}h1{font-size:1.5em}div{opacity:0.8}a:link,a:visited{color:#348}</style></head><body><div><h1>Example Domain</h1><p>This domain is for use in documentation examples without needing permission. Avoid use in operations.</p><p><a href="https://iana.org/domains/example">Learn more</a></p></div></body></html>

0

おわりに

実用的なシステムにするためには、やはりインターネットへの接続は必須です。BLFSで追加のソフトウェアをビルドしたい場合もwgetで容易にパッケージをダウンロードできるようになります(wgetそのものは、ホスト側で事前にダウンロードする必要はあります)。
これで世界が広がりますね。

参考

1
1
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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?