コンパイルしたい理由
udp_xmit failed to *.*.*.*:* with err=-1:No such device
このようなエラーが表示されており、VPNがうまく稼働しなかった。
GitHubを見ると、Kernel 4.15で動かないよという情報があった。
l2tp does not work with 4.15 mainline kernels
また、Raspberry PIでも似た問題が出ているよと書かれていた。
For the record, xl2tpd-1.3.8 broke also when upgrading my RPi here from Kernel 4.9.51 to 4.14.30.. is it recommended to already upgrade to xl2tpd-1.3.12dev ?
そのコメントのした人曰く、githubから最新コードを取得してコンパイルし直したらいいよとのことであった。自分もこれを試す。
問題が生じた環境
$ uname -a
Linux rp2mb-usbhdd 4.14.37-v7+ #1111 SMP Thu Apr 26 13:56:59 BST 2018 armv7l GNU/Linux
4.15では無いのに問題が生じているのはどういう加減だろうか?
コンパイルする
クロスコンパイラの入手
Raspberry PIの容量が小さいのでmacOSでコンパイルをする。クロスコンパイルのツールがインターネットで見つかったのでそれを利用する。
https://www.jaredwolff.com/toolchains/
Crosstool-NG GNU Linux EABI Toolchain for RPi3
をダウンロードして、dmgをマウントする。
ソースコードの入手
macOSのターミナルでgitのソースコードを取得する。
$ git -b 1.3.12 git@github.com:vyos/xl2tpd.git
関連するライブラリとソースコードの入手
- libpcap0.8-dev_1.6.2-2_armhf.deb
- libpcap0.8_1.6.2-2_armhf.deb
2つのdebファイルが必要だった。
これはRaspberry PI側にて
apt-get download libpcap-dev
とapt-get download libpcap0.8-dev
により得られた。
これらをscpなどによりRaspberryPIからmacOSにコピーして、ar x ファイル名.deb
として展開、また、tar xf data.tar.xf
としてusr以下を取得する。
makeの実行
上記の操作により作られたフォルダ構造が次のようであるとする。
-
/Volumes/xtools
... クロスコンパイルのdmgをマウントした場所 -
~/xl2tpd_b/xl2tpd
... gitにより得られたxl2tpdのソースコードの場所 -
~/xl2tpd_b/deb/usr
... debを展開して得られたincludeファイルとlibファイルなどの場所
その時、~/xl2tpd_b/xl2tpd
で次のようにコマンドを実行するとRaspberry PI用の最新のxl2tpdがコンパイルされる。
$ CC=/Volumes/xtools/armv8-rpi3-linux-gnueabihf/bin/armv8-rpi3-linux-gnueabihf-gcc \
LDFLAGS="-L/Volumes/xtools/armv8-rpi3-linux-gnueabihf/lib/ -L../deb/usr/lib/arm-linux-gnueabihf" \
CFLAGS="-I/Volumes/xtools/armv8-rpi3-linux-gnueabihf/include/ -I../deb/usr/include/" \
make
Raspberry PIに配置する
/usr/sbin/xl2tpd
が問題を起こしているファイルであるようなので、コンパイルされたもので置き換える。
コンパイルした結果をscpなどによりRaspberry PIへコピーした後、次のように上書き(!)する。
$ sudo /etc/init.d/xl2tpd stop
$ cp xl2tpd /usr/sbin/xl2tpd
$ sudo /etc/init.d/xl2tpd start
これにより問題となっていたエラーメッセージが表示されなくなる。