yocto(jethro)でsystemd-networkdを有効化する
systemdを組み込んだだけだと、ネットワークインターフェイスが有効化されない。 systemdにはネットワークインターフェイスの設定を行うsystemd-networkdが存在するが、 yoctoのsystemdのレシピではデフォルトでは組み込まれない。
connmanを追加する方法もあるが、こちらはjethroではNFSやCIFSをブート時にマウントする際に問題があるため、systemd-networkdを有効化する方法を調査した。
systemd-networkdの有効化
local.confに下記を追加する。
PACKAGECONFIG_pn-systemd += " networkd"
ネットワークインターフェイスの設定
connmanと異なり、自動的にDHCPが有効になったりはしないので、設定ファイルを作成する必要がある。
DHCP
DHCPにより動的にIPアドレスを割り当てるには「/etc/systemd/network/wired.network」を下記の内容で作成する。
[Match] Name=eth0 [Network] DHCP=ipv4
スタティックIPアドレス
IPアドレスを静的に割り当てるには「/etc/systemd/network/wired.network」を下記の内容で作成する。
[Match] Name=eth0 [Network] Address=192.168.1.10/24
動作確認
$ systemctl status systemd-networkd.service
● systemd-networkd.service - Network Service
Loaded: loaded (/lib/systemd/system/systemd-networkd.service; enabled; vendor preset: enabled)
Active: inactive (dead) since Tue 2016-03-15 13:22:52 UTC; 7min ago
Docs: man:systemd-networkd.service(8)
Process: 142 ExecStart=/lib/systemd/systemd-networkd (code=exited, status=0/SUCCESS)
Main PID: 142 (code=exited, status=0/SUCCESS)
Status: "Shutting down..."
Mar 15 13:22:52 raspberrypi2 systemd[1]: systemd-networkd.service changed ru...m
Mar 15 13:22:52 raspberrypi2 systemd-networkd[142]: Got message type=signal s...
Mar 15 13:22:52 raspberrypi2 systemd-networkd[142]: Got message type=signal s...
Mar 15 13:22:52 raspberrypi2 systemd[1]: Got notification message for unit s...e
Mar 15 13:22:52 raspberrypi2 systemd[1]: systemd-networkd.service: Got notif...)
Mar 15 13:22:52 raspberrypi2 systemd[1]: systemd-networkd.service: got STOPP...1
Mar 15 13:22:52 raspberrypi2 systemd[1]: Child 142 belongs to systemd-networ...e
Mar 15 13:22:52 raspberrypi2 systemd[1]: systemd-networkd.service: main proc...S
Mar 15 13:22:52 raspberrypi2 systemd[1]: systemd-networkd.service changed st...d
Mar 15 13:22:52 raspberrypi2 systemd[1]: systemd-networkd.service: cgroup is...y
Hint: Some lines were ellipsized, use -l to show in full.
ネットワークインターフェイスの設定を行ったあとstatus=0/SUCCESSで終了している。
systemd-networkd.serviceを確認すると、下記のようになっているため正しい動作といえる。
[Service] ... Restart=on-failure ...
ifconfigで確認すると、wired.networkの通りに設定されている。
$ ifconfig
eth0 Link encap:Ethernet HWaddr B8:27:EB:A2:C7:F2
inet addr:192.168.21.100 Bcast:192.168.21.255 Mask:255.255.255.0
inet6 addr: fe80::ba27:ebff:fea2:c7f2/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1183 errors:0 dropped:0 overruns:0 frame:0
TX packets:191 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:67116 (65.5 KiB) TX bytes:32256 (31.5 KiB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:6240 errors:0 dropped:0 overruns:0 frame:0
TX packets:6240 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:474240 (463.1 KiB) TX bytes:474240 (463.1 KiB)