CUBE SUGAR CONTAINER

技術系のこと書きます。

Ubuntu で iputils をビルドして異なるバージョンの ping(8) を使う

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) を選んだ。

github.com

ダウンロードして展開する。

$ 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

ちゃんと動いているようだ。

めでたしめでたし。