from electron 2 web

インターネットのリソースを無駄遣いして検索におけるUXを下げてごめんなさい

圧倒的文章力のNASAでゴミみたいなチラ裏のようなメモを量産してしまい全ての"Web開発者"にごめんなさい

kaliでdpdkのbuild(igb_uio.koで落ちた時)とhelloworldするまで

結論

kaliでdpdk buildするのくっそ面倒くさいのでubuntuのほうが100倍簡単だよ

build

基本的にはここ見ればおk

DPDK doc

これも良い

DPDK の環境構築 - Packets are too Fast

igb_uio.koで落ちたり/lib/modules/4.6.0-kali1-amd64/build: No such file or directoryみたいなエラーが出たとき

dpdkの必要条件にlinuxカーネルが必要なんですがそれ忘れてるはず。

自分の場合apt-getでそれっぽいlinux-header2~3個持ってきても反応しなかった。

しかたがないのでカーネルビルドしようと思って

    # apt-get install build-essential
    # apt-get install kernel-package

とかその辺引っ張ってきてはbuildしてたんですが落ちまくっていた。

んでその後sudo apt-get -y dist-upgradeしてrebootかけたらbuildできた。dist-upgradeが死ぬほど重かった・・・5時間ぐらいかかったので寝る前にやるとおk。

build後helloworldするまで

大きく分けて3段階ある。

  • hugepagesの段階(再起動するまで)

kaliのGRUB_CMDLINE_LINUXはinitrdとかの設定をもう指定されてしまっていた。

GRUB_CMDLINE_LINUX_DEFAULT="quiet"
GRUB_CMDLINE_LINUX="initrd=/install/initrd.gz"

この場合こんな感じでスペースを開けて継ぎ足せばOKぽい

GRUB_CMDLINE_LINUX_DEFAULT="quiet hugepages=1024"
GRUB_CMDLINE_LINUX="hugepages=1024 initrd=/install/initrd.gz"

etc/fstabのほうは普通にやってくれればいけるはず。再起動も忘れずにね。

hugepagesやらhugetlbfsやらよくわからんかった。このブログ書き終わったら調べてみたい。

  • dpdkをnicにbindするため段階

大変だし長いしハマりやすい。build出来ても第2、第3の罠が待ち構えているという訳です。

そもそもdpdk17.02の場合dpdk-devbind.pyのパスが変わっている

まぁ後でdpdkがdpdk-devbindコマンドにパス通してくれているの分かったのであんま問題じゃないんだけど。

path探すときはfind dpdkのパス -name *dpdk_devbind*とかで。

やりかたはdpdk-devbindコマンド単体で動かせば書いてある。成功すれば何も標準出力にでない。

Error - no supported modules(DPDK driver) are loadedと出た場合

modprobe uio_pci_generic

Routing table indicates that interface eth0 is active. Not modifyingと出た場合

lanケーブル一回抜いてNetworkManagerのアイコンがwlanになるの待ってからbindすればおk。


あとhugepages忘れててもエラー出る。エラーのコメントメモるの忘れたけど。(それはそう)

サンプルアプリをbuildする段階

なんかRTE_SDKとRTE_TARGETの環境変数の指定が必要。

export RTE_SDKとかの設定だと通らなかった。。。

cannot find -lrte_kniみたいなのが大量に出てきた場合

“”“ /usr/bin/ld: -lrte_kni が見つかりません /usr/bin/ld: -lrte_pipeline が見つかりません /usr/bin/ld: -lrte_table が見つかりません ”“”

みたいなのが大量に出てきた場合、dpdk-17.02にcdしてmake -C examples RTE_SDK=$(pwd) RTE_TARGET=build O=$(pwd)/build/examplesでおk。やはり公式のquickstartが最強

dpdk-17.02というのはこの部分ですね

“”“ root@kaliProvisional:~/Downloads/dpdk-17.02# ls GNUmakefile app drivers x86*gcc LICENSE.GPL build examples x86_64-native-linuxapp-clang LICENSE.LGPL buildtools lib x86_64-native-linuxapp-gcc MAINTAINERS config mk Makefile devtools pkg README doc usertools ”“”

これでbuildできるはず。build後の生成物はdpdk-17.02/build/example/helloworld/buildとかにある。

感想

いろいろ引っかかる上にbuildした後も結構ハマったので難易度A+ということで。まだ大枠があんま分かってないが環境はできたので調べていきますかね。