Ubuntu にインストールされている ping(8) の挙動が、バージョンによって微妙に異なることに気づいた。 そこで、あらかじめインストールされているのとは異なるバージョンをビルドして動作を確認することにした。 今回は、その手順についてメモしておく。 なお、タイトルにある iputils というのは ping(8) が含まれるパッケージの名前を示している。
使った環境は次のとおり。
$ cat /etc/lsb-release DISTRIB_ID=Ubuntu DISTRIB_RELEASE=20.04 DISTRIB_CODENAME=focal DISTRIB_DESCRIPTION="Ubuntu 20.04.4 LTS" $ uname -srm Linux 5.4.0-131-generic aarch64
現在 (2022-11-13) の Ubuntu 20.04 LTS にはバージョンが s20190709
の iputils がインストールされている。
$ ping -V
ping from iputils s20190709
下準備
まずはビルドするのに必要なパッケージ群をインストールしておく。
$ sudo apt-get -y install \ build-essential \ meson \ libcap-dev \ xsltproc
GitHub から tarball をダウンロードする
続いて、ビルドしたい iputils を確認して GitHub からダウンロードする。
今回は現時点 (2022-11-13) での最新リリース (20211215
) を選んだ。
ダウンロードして展開する。
$ wget -O - https://github.com/iputils/iputils/archive/refs/tags/20211215.tar.gz | tar zxvf -
あとはビルドするだけ。
$ cd iputils-20211215/
$ ./configure && make
builddir
ディレクトリ以下に、ビルドされたバイナリができる。
$ ls builddir/ arping clockdiff compile_commands.json git-version.h meson-logs ping rdisc@exe tracepath@exe arping@exe clockdiff@exe config.h libcommon.a meson-private po test build.ninja common@sta doc meson-info ninfod rdisc tracepath
試しにビルドされた ping(8) を使ってみよう。
$ ./builddir/ping/ping -V ping from iputils 20211215 $ ./builddir/ping/ping -c 3 8.8.8.8 PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data. 64 bytes from 8.8.8.8: icmp_seq=1 ttl=59 time=14.8 ms 64 bytes from 8.8.8.8: icmp_seq=2 ttl=59 time=12.4 ms 64 bytes from 8.8.8.8: icmp_seq=3 ttl=59 time=18.9 ms --- 8.8.8.8 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2046ms rtt min/avg/max/mdev = 12.395/15.365/18.869/2.669 ms
ちゃんと動いているようだ。
めでたしめでたし。