/var/log/messages

debugging with sixth sense

BNN-PYNQ 動作確認

とりあえず、

を見つつ云々してみます。

とりあえず

結線して電源投入。PC 側の eth0 が 192.168.2.100 になってますが対抗側のポートの IP が分からない。http://pynq.io/ からドキュメントを探して 192.168.2.99 である、という事が判明。ping の返事も戻ってきます。

接続できたのでとっととデモを実行してみます。

その前に

SD のイメージ、バックアップした方が良いのかどうか。

1
$ sudo dd if=/dev/sdb of=./pynq_z1_image_2017_04_07.img

結構な容量のはずなんでしばらく時間がかかるはず。

update?

その後、ssh にて接続して

1
$ ssh xilinx@192.168.2.99

update_pynq.sh というスクリプトを実行なのか。

1
2
3
4
5
6
7
8
$ sudo ./scripts/update_pynq.sh
[sudo] password for xilinx: 
Updating to latest stable release (default action)
Info: This operation will overwrite all the example notebooks
Press any key to continue...
Cloning Pynq repo
Cloning into '/home/xilinx/pynq_git'...
fatal: unable to access 'https://github.com/Xilinx/PYNQ.git/': Could not resolve host: github.com

ありゃ。リゾルバどうなってるんかな。確認してみたところ resolvconf パケジは導入済みみたいなので /etc/network/interfaces.d/static に以下を追加。

1
2
gateway 192.168.2.100
dns-nameservers 192.168.3.1

がしかし、gateway まで疏通は問題ないのですが接続元の PC がルータになってないのかorz 面倒臭いなぁ。

とりあえず /etc/sysctl.conf の以下の部分を有効にして

1
net.ipv4.ip_forward=1

再起動してみます。駄目。dnsmasq パケジ導入してみます。あ、違うや。pynq からルータへの ping の返事が戻ってこないのだからそれ以前か。

以下なナニで ping の返事とか名前解決とかできるようになりました。

1
sudo /sbin/iptables -t nat -A POSTROUTING -s 192.168.2.0/255.255.255.0 -j MASQUERADE

動作確認できたので

以下にて保存。

1
2
3
4
5
6
7
$ sudo su -
# /sbin/iptables-save -c > /etc/iptables.rules
# cat > /etc/network/if-pre-up.d/iptables_start
#!/bin/sh
/bin/iptables-restore < /etc/iptables.rules
exit0
# chmod +x /etc/network/if-pre-up/d/iptables_start

で、あぷでいとします。

1
$ sudo ./scripts/update_pynq.sh

つうかこんな落とし穴があるとはorz

あぷでいと終了

て、失敗してるし。

1
2
3
4
5
6
7
checking out v1.4

Verifying current SDCard image supports this pynq release.

PYNQ Github Release v1.4
This software is not backwards-compatible with a PYNQ SDCard v1.3 image.
Please upgrade SDCard image on www.pynq.io

イメージ再取得してリトライするか。

リトライ

どうなるか。って PYNQ 再起動したら LAN な route への ping な返事が戻ってこなくなってるし。

確認してみるに、親機側の /etc/network/if-pre-up.d/iptables_start が微妙でした。つうかイメージ書き換えたのでその影響なのか。確認してみるに /etc/network/interfaces.d/static が元に戻ってました。

修正してリトライ。どうなるか。って現象変わらない。

と思ったら

v1.3 なソレを使っていたorz リトライします。そして再起動してみたら /etc/network/interfaces.d 配下にファイルが無い。

できた

問題点が二点。

  • 名前解決できない
  • default gw が設定できていない

まず、/etc/network/interfaces.d 配下の設定ですが以下。

1
2
3
4
5
6
7
8
auto eth0:0
iface eth0:0 inet static
  address 192.168.2.99
  network 192.168.2.0
  netmask 255.255.255.0
  broadcast 192.168.2.255
  gateway 192.168.2.100
  up route add default gw 192.168.2.100

で、名前解決は dns-nameservers で設定できなかったので /etc/resolvconf/resolv.conf.d/base に以下を追加。

1
nameserver 192.168.2.100

なのですが、強制リセットかかってる風? routing table が書き換えられてるな。これ、dhcp なのかな。ええと dhclient が云々、てのはわかったのですがどうすりゃいいのかな。

面倒なので

以下を実行。

1
$ sudo apt-get remove isc-dhcp-client isc-dhcp-common

こんな微妙なハメかたして欲しくないなぁ。

結果

どうなったか。再起動で経過観測。何故だか LED が点灯しないのです。eth0 が dhcp で初期化された時に点灯されててこれはこれでわかりやすかったのですがどうなるか。

再現した

routing table が書き換えられます。意味わからんので eth0:0 なエイリアスを使うのを止めます。再起動後、様子見中。そして現象再現。これは dhcp が原因じゃないみたいですね。

ちょっとこれ

意味わからないので v1.3 に戻してみます。とりあえず戻してみた /etc/network/interfaces.d/static の中身が以下でした。

1
2
3
4
5
6
7
8
auto eth0
iface eth0 inet static
  address 192.168.2.99
  network 192.168.2.0
  netmask 255.255.255.0
  broadcast 192.168.2.255
  gateway 192.168.2.100
  up route add default gw 192.168.2.100

起動時の routing table は先と変わらない。

1
2
3
4
$ /sbin/route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.2.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0

resolv.confgateway の IP が設定されてます。

1
2
3
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 192.168.2.100

とりあえずこうなるのは /etc/resolvconf/resolv.conf.d/base にて

1
nameserver 192.168.2.100

という設定が入ってるから、なのか。ただ、この状態だと例えば github.com への ping の返事は戻ってきませんね。なんとなく、現象として同じカンジに見えます。色々な意味で微妙な感触。

現象としては変わっていない

最初に eth0 が有効になった時点では default gateway の設定自体は生きています。その後、何契機かは判明していないのですが LED が点滅した時点で routing table が再度初期化されている模様。

動作微妙

これ、上書きしたからきちんと書き込みできていないのかも。リトライしてみて動作が微妙なようであればイメージ書き込みからリトライ。というか動作微妙なのでリトライします。

で、紆余曲折の末に動作の確認したのですが、default gateway を向こうの i/f な IP addr を指定していたことが判明。再度やり直してみます。

あら?

先程動作確認したものは最新のものでした。とりあえず

  • /etc/resolvconf/resolv.conf.d/base
  • /etc/network/interface.d/static

を云々して再起動。いちおう sync もしてみました。

設定間違い

設定ファイル修正して再起動しても設定としては残っていることを確認。どこで cache されているのだろうか。ちなみに試しに手動で設定してみたら外との通信できたなぁ。

再度再起動してみてるのですがどうなるか。

設定?

再起動したら手動設定したナニは消えてました。つうかこれ、/etc/network/interface.d/static は反映されていなさげ。

grep してみたら /etc/dhcp/dhclient.conf に記載があるのを発見。削除。

1
$ sudo apt-get remove --purge isc-dhcp-client isc-dhcp-common

これで再度再起動してみたのですが IP など変わらず。何が根拠であの IP なのかが一切謎で困っています。

あらら?

以下で反映されたぞ。

1
$ sudo service networking restart

しかも以下なメセジ出力を確認。

1
Warning: networking.service changed on disk. Run 'systemctl daemon-reload' to reload units.

上記実行して再起動してみます。

結果

経路情報は反映されていない。結局、以下な /etc/systemd/network/static.network を作成。

1
2
3
4
5
6
7
[Match]
Name=eth0

[Network]
Address=192.168.2.99/24
Gateway=192.168.2.100
DNS=192.168.2.100

で、以下を実行したら反映されました。

1
$ sudo systemctl restart systemd-networkd.service

再起動してみます。反映されてない。コマンド実行忘れている。以下リトライ。

1
2
$ sudo systemctl restart systemd-networkd.service
$ sudo systemctl daemon-reload

で、再起動。どうか。反映されてない。んんと、こんなことできるんかな。

1
2
3
$ sudo systemctl enable systemd-networkd
Created symlink from /etc/systemd/system/multi-user.target.wants/systemd-networkd.service to /lib/systemd/system/systemd-networkd.service.
Created symlink from /etc/systemd/system/sockets.target.wants/systemd-networkd.socket to /lib/systemd/system/systemd-networkd.socket.

む、これで一旦再起動してみます?

駄目

そして上記で作成されたナニな symlink を /etc/systemd/system 配下に作成してみたりしてるのですが再起動で反映されず。

再度以下を実行して再起動など。

1
2
$ sudo systemctl restart systemd-networkd.service
$ sudo systemctl daemon-reload

駄目だなぁ。ps してみたら systemd-networkd は動いてない。sudo systemctl -a で見てみたら loaded ですが inactive で dead とのこと。

とりあえず enabled であれば自動で起動するはずなんですが何なのこれ。つうか ps で確認してみた分には systemd-networkd は動いてないですね。

逆?

接続元端末側から dhcp 経由で云々、なのかなぁ。とりあえず microSD は初期化します。で、dnsmasq なナニですが

  • dhcp-host=00:18:3e:02:4a:8f,hoge,192.168.2.99,infinite な設定
  • dhcp-option=option:dns-server,192.168.2.100 な設定
  • dhcp-option=option:router,192.168.2.100 な設定

を盛り込む方向。

結果

これも駄目。どうしたものやら、というか最早面倒なので起動する度に

  • dns
  • ルーティング

については設定する事にしてデモの検証します。エントリについては別途で。

備忘

最近のでびあんホストだとルータにするには

  • dnsmasq パケジ入れて dns サーバに見せる
  • /etc/sysctl.conf にて net.ipv4.ip_forward=1 する
  • iptables で MASQUERADE する

という三点で何とかなるのかどうか。ネイムサーバの面倒まで見てくれるとか有り難いすね。

Comments