ytooyamaのブログ

サーバ構築とか、仕事で発見したこととか、趣味のこととかを書いています。

【解決?】Debian/UbuntuでUDPパケットの転送ができないよ?

以前環境構築したPXEサーバーですが、なかなかPXEブート出来ないのでステータスを確認したところ、xinetd.serviceがたくさんエラーを吐いておりました。

root@local:~# systemctl status -l xinetd.service
● xinetd.service - LSB: Starts or stops the xinetd daemon.
Loaded: loaded (/etc/init.d/xinetd)
Active: active (running) since 月 2016-01-04 23:42:23 JST; 1 months 0 days ago
CGroup: /system.slice/xinetd.service
└─496 /usr/sbin/xinetd -pidfile /run/xinetd.pid -stayalive -inetd_compat -inetd_ipv6

2月 04 21:20:45 conoha.local.tooyama.org xinetd[496]: service tftp, recvfrom: Resource temporarily unavailable (errno = 11)
2月 04 21:20:50 conoha.local.tooyama.org xinetd[496]: service tftp, recvfrom: Resource temporarily unavailable (errno = 11)
2月 04 21:20:56 conoha.local.tooyama.org xinetd[496]: service tftp, recvfrom: Resource temporarily unavailable (errno = 11)
2月 04 21:21:04 conoha.local.tooyama.org xinetd[496]: service tftp, recvfrom: Resource temporarily unavailable (errno = 11)
2月 04 21:21:12 conoha.local.tooyama.org xinetd[496]: service tftp, recvfrom: Resource temporarily unavailable (errno = 11)
2月 04 21:21:23 conoha.local.tooyama.org xinetd[496]: service tftp, recvfrom: Resource temporarily unavailable (errno = 11)
2月 04 21:21:35 conoha.local.tooyama.org xinetd[496]: service tftp, recvfrom: Resource temporarily unavailable (errno = 11)
2月 04 21:21:49 conoha.local.tooyama.org xinetd[496]: service tftp, recvfrom: Resource temporarily unavailable (errno = 11)
2月 04 21:22:03 conoha.local.tooyama.org xinetd[496]: service tftp, recvfrom: Resource temporarily unavailable (errno = 11)
2月 04 21:22:17 conoha.local.tooyama.org xinetd[496]: service tftp, recvfrom: Resource temporarily unavailable (errno = 11)

検索したらズバリのものがヒット。どうやらDebianカーネルパッチのバグで、同じパッチが当たっているUbuntu Trustyでも同じ問題が発生するようです。

[2/4 21:59 追記]

Ubuntuの場合は直近のカーネルは削除されず保持されているので、この問題を解決するにはひとつ前のカーネルでブートしなおせば解決できるのだとか。

一方、Debianは古いカーネルを新しいカーネルで上書きしてしまうのでそういった芸当ができません。そこで次のようにダウングレード(という名の上書き)をしてしまいました。再起動後何が起こったかはご存じの通り。起動しなくなりました。

とりあえず手持ちのDebianのDVDイメージでレスキューブートして、/bootにあるファイルを下記のようにリネームして再起動したらDebianは復旧しました。

initrd.img → initrd.img.old2

vmlinux → vmlinux.old2

initrd.img.old → initrd.img   #Kernelのダウングレード前のinitrd.img

vmlinux.old → vmlinux        #Kernelのダウングレード前のvmlinux

起動した後、「apt-get upgrade」で元のカーネルバージョンに戻しておきます。

ただ、一向にPXEブートはうまくいきません。 先のバグはIPv6UDPがなんかおかしいとのことだったので、次を参考に

d.hatena.ne.jp

IPv4 flagを立てて「systemctl restart xinetd」を実行したところ、TFTPによるファイルのダウンロードができるようになりました。

$ tftp 192.168.1.6
tftp> get version.info
Received 60 bytes in 0.0 seconds

PXEブートもうまくいって、PXEインストーラー画面が出るようになりました。

http://cdn-ak.f.st-hatena.com/images/fotolife/y/ytooyama/20151128/20151128150315.png

ちなみにserver_argsに指定した-vは、ログを詳細に出すだけなので関係ありません。重要なのはflags = IPv4だと思います。

# vi /etc/xinetd.d/tftp

...

server_args = -v -s /var/lib/tftpboot
flags = IPv4

以前書いた記事は修正しておきたいと思います。

ytooyama.hatenadiary.jp

このブログサイトはJavaScriptを使っていますが、読み込んでいるJavaScriptは全てはてなが提供しているものであり、筆者が設置しているものではありません。