とりあえず、
を見つつ云々してみます。
とりあえず
結線して電源投入。PC 側の eth0 が 192.168.2.100
になってますが対抗側のポートの IP が分からない。http://pynq.io/ からドキュメントを探して 192.168.2.99
である、という事が判明。ping の返事も戻ってきます。
接続できたのでとっととデモを実行してみます。
その前に
SD のイメージ、バックアップした方が良いのかどうか。
$ sudo dd if=/dev/sdb of=./pynq_z1_image_2017_04_07.img
結構な容量のはずなんでしばらく時間がかかるはず。
update?
その後、ssh
にて接続して
$ ssh xilinx@192.168.2.99
update_pynq.sh
というスクリプトを実行なのか。
$ 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
に以下を追加。
gateway 192.168.2.100
dns-nameservers 192.168.3.1
がしかし、gateway まで疏通は問題ないのですが接続元の PC がルータになってないのかorz 面倒臭いなぁ。
とりあえず /etc/sysctl.conf
の以下の部分を有効にして
net.ipv4.ip_forward=1
再起動してみます。駄目。dnsmasq
パケジ導入してみます。あ、違うや。pynq からルータへの ping の返事が戻ってこないのだからそれ以前か。
以下なナニで ping の返事とか名前解決とかできるようになりました。
sudo /sbin/iptables -t nat -A POSTROUTING -s 192.168.2.0/255.255.255.0 -j MASQUERADE
動作確認できたので
以下にて保存。
$ 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
で、あぷでいとします。
$ sudo ./scripts/update_pynq.sh
つうかこんな落とし穴があるとはorz
あぷでいと終了
て、失敗してるし。
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
配下の設定ですが以下。
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
に以下を追加。
nameserver 192.168.2.100
なのですが、強制リセットかかってる風? routing table
が書き換えられてるな。これ、dhcp なのかな。ええと dhclient
が云々、てのはわかったのですがどうすりゃいいのかな。
面倒なので
以下を実行。
$ 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
の中身が以下でした。
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 は先と変わらない。
$ /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.conf
は gateway
の IP が設定されてます。
# 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
にて
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
に記載があるのを発見。削除。
$ sudo apt-get remove --purge isc-dhcp-client isc-dhcp-common
これで再度再起動してみたのですが IP など変わらず。何が根拠であの IP なのかが一切謎で困っています。
あらら?
以下で反映されたぞ。
$ sudo service networking restart
しかも以下なメセジ出力を確認。
Warning: networking.service changed on disk. Run 'systemctl daemon-reload' to reload units.
上記実行して再起動してみます。
結果
経路情報は反映されていない。結局、以下な /etc/systemd/network/static.network
を作成。
[Match]
Name=eth0
[Network]
Address=192.168.2.99/24
Gateway=192.168.2.100
DNS=192.168.2.100
で、以下を実行したら反映されました。
$ sudo systemctl restart systemd-networkd.service
再起動してみます。反映されてない。コマンド実行忘れている。以下リトライ。
$ sudo systemctl restart systemd-networkd.service
$ sudo systemctl daemon-reload
で、再起動。どうか。反映されてない。んんと、こんなことできるんかな。
$ 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 配下に作成してみたりしてるのですが再起動で反映されず。
再度以下を実行して再起動など。
$ 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 する
という三点で何とかなるのかどうか。ネイムサーバの面倒まで見てくれるとか有り難いすね。