package/iputils: add config options to select which binaries to build/install

By default, the iputils build script might build binaries which are
useless for certain applications, like tftpd or ninfod. Those binaries
will add to the target filesystem size unless a post-build script removes
them manually, which is cumbersome and doesn't shorten build times.

In particular, in a certain aarch64 Buildroot project with musl selected
as a C library, this patch allowed to shrink the full iputils package from
219 KiB (if every option is selected) to 63 KiB (with only the ping
binary selected) - a 71.2% relative size decrease.

Moreover, upstream recently introduced a commit that disabled tftpd from
building by default, like rarpd. In the current state of things, this change
will introduce inconveniences for Buildroot users which prefer to use the
tftpd implementation provided by this package. With this patch, however, that
decision and similar future ones won't be a concern, because they will
have complete control of what binaries are built.

These changes add Kconfig options which let the user select what
binaries are built with ease.

Signed-off-by: Alejandro González <alejandro.gonzalez.correo@gmail.com>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
This commit is contained in:
Alejandro González 2019-09-15 12:05:46 +02:00 committed by Thomas Petazzoni
parent 616b093428
commit 95b0078cc0
2 changed files with 152 additions and 41 deletions

View file

@ -7,3 +7,70 @@ config BR2_PACKAGE_IPUTILS
etc.
https://github.com/iputils/iputils
if BR2_PACKAGE_IPUTILS
config BR2_PACKAGE_IPUTILS_ARPING
bool "arping"
default y
help
Installs arping.
config BR2_PACKAGE_IPUTILS_CLOCKDIFF
bool "clockdiff"
default y
help
Installs clockdiff.
config BR2_PACKAGE_IPUTILS_PING
bool "ping"
default y
help
Installs ping.
config BR2_PACKAGE_IPUTILS_RARPD
bool "rarpd"
help
Installs rarpd.
config BR2_PACKAGE_IPUTILS_RDISC
bool "rdisc"
default y
help
Installs rdisc.
config BR2_PACKAGE_IPUTILS_RDISC_SERVER
bool "rdisc (server code)"
default y
depends on BR2_PACKAGE_IPUTILS_RDISC
help
Builds rdisc with server code.
config BR2_PACKAGE_IPUTILS_TFTPD
bool "tftpd"
help
Installs tftpd.
config BR2_PACKAGE_IPUTILS_TRACEPATH
bool "tracepath"
default y
help
Installs tracepath.
config BR2_PACKAGE_IPUTILS_TRACEROUTE6
bool "traceroute6"
default y
help
Installs traceroute6.
config BR2_PACKAGE_IPUTILS_NINFOD
bool "ninfod"
default y
depends on BR2_TOOLCHAIN_HAS_THREADS # ninfod requires <pthread.h>
help
Installs ninfod.
comment "ninfod needs a toolchain w/ threads"
depends on !BR2_TOOLCHAIN_HAS_THREADS
endif

View file

@ -17,8 +17,74 @@ IPUTILS_LICENSE = GPL-2.0+, BSD-3-Clause
IPUTILS_LICENSE_FILES = LICENSE Documentation/LICENSE.BSD3 Documentation/LICENSE.GPL2
IPUTILS_DEPENDENCIES = $(TARGET_NLS_DEPENDENCIES)
# Selectively build binaries
IPUTILS_CONF_OPTS += \
-DBUILD_CLOCKDIFF=$(if $(BR2_PACKAGE_IPUTILS_CLOCKDIFF),true,false) \
-DBUILD_RARPD=$(if $(BR2_PACKAGE_IPUTILS_RARPD),true,false) \
-DBUILD_RDISC=$(if $(BR2_PACKAGE_IPUTILS_RDISC),true,false) \
-DBUILD_RDISC_SERVER=$(if $(BR2_PACKAGE_IPUTILS_RDISC_SERVER),true,false) \
-DBUILD_TRACEPATH=$(if $(BR2_PACKAGE_IPUTILS_TRACEPATH),true,false) \
-DBUILD_TRACEROUTE6=$(if $(BR2_PACKAGE_IPUTILS_TRACEROUTE6),true,false) \
-DBUILD_NINFOD=$(if $(BR2_PACKAGE_IPUTILS_NINFOD),true,false)
#
# arping
#
ifeq ($(BR2_PACKAGE_IPUTILS_ARPING),y)
IPUTILS_CONF_OPTS += -DBUILD_ARPING=true
# move some binaries to the same location as where Busybox installs
# the corresponding applets, so that we have a single version of the
# tools (from iputils)
define IPUTILS_MOVE_ARPING_BINARY
mv $(TARGET_DIR)/usr/bin/arping $(TARGET_DIR)/usr/sbin/arping
endef
IPUTILS_POST_INSTALL_TARGET_HOOKS += IPUTILS_MOVE_ARPING_BINARY
else
IPUTILS_CONF_OPTS += -DBUILD_ARPING=false
endif
#
# ping
#
ifeq ($(BR2_PACKAGE_IPUTILS_PING),y)
IPUTILS_CONF_OPTS += -DBUILD_PING=true
# same reason to move the ping binary as for arping
ifeq ($(BR2_ROOTFS_MERGED_USR),)
define IPUTILS_MOVE_PING_BINARY
mv $(TARGET_DIR)/usr/bin/ping $(TARGET_DIR)/bin/ping
endef
IPUTILS_POST_INSTALL_TARGET_HOOKS += IPUTILS_MOVE_PING_BINARY
endif
# upstream requires distros to create symlink
define IPUTILS_CREATE_PING6_SYMLINK
ln -sf $(TARGET_DIR)/bin/ping $(TARGET_DIR)/bin/ping6
endef
IPUTILS_POST_INSTALL_TARGET_HOOKS += IPUTILS_CREATE_PING6_SYMLINK
else
IPUTILS_CONF_OPTS += -DBUILD_PING=false
endif
#
# tftpd
#
ifeq ($(BR2_PACKAGE_IPUTILS_TFTPD),y)
IPUTILS_CONF_OPTS += -DBUILD_TFTPD=true
define IPUTILS_MOVE_TFTPD_BINARY
mv $(TARGET_DIR)/usr/bin/tftpd $(TARGET_DIR)/usr/sbin/tftpd
endef
IPUTILS_POST_INSTALL_TARGET_HOOKS += IPUTILS_MOVE_TFTPD_BINARY
else
IPUTILS_CONF_OPTS += -DBUILD_TFTPD=false
endif
# Handle libraries
ifeq ($(BR2_PACKAGE_LIBCAP),y)
IPUTILS_CONF_OPTS += -DUSE_CAP=true
IPUTILS_DEPENDENCIES += libcap
@ -37,63 +103,41 @@ ifeq ($(BR2_PACKAGE_SYSTEMD),y)
IPUTILS_DEPENDENCIES += systemd
endif
# ninfod requires <pthread.h>
ifneq ($(BR2_TOOLCHAIN_HAS_THREADS),y)
IPUTILS_NINFOD = n
endif
ifeq ($(IPUTILS_NINFOD),n)
IPUTILS_CONF_OPTS += -DBUILD_NINFOD=false
else
IPUTILS_CONF_OPTS += -DBUILD_NINFOD=true
endif
ifeq ($(BR2_SYSTEM_ENABLE_NLS),y)
IPUTILS_CONF_OPTS += -DUSE_GETTEXT=true
else
IPUTILS_CONF_OPTS += -DUSE_GETTEXT=false
endif
IPUTILS_CONF_OPTS += -DBUILD_TRACEROUTE6=true
# XSL Stylesheets for DocBook 5 not packaged for buildroot
IPUTILS_CONF_OPTS += -DBUILD_MANS=false -DBUILD_HTML_MANS=false
# move iputils binaries to the same location as where Busybox installs
# the corresponding applets, so that we have a single version of the
# tools (from iputils)
define IPUTILS_MOVE_BINARIES
mv $(TARGET_DIR)/usr/bin/arping $(TARGET_DIR)/usr/sbin/arping
$(if $(BR2_ROOTFS_MERGED_USR),,\
mv $(TARGET_DIR)/usr/bin/ping $(TARGET_DIR)/bin/ping)
mv $(TARGET_DIR)/usr/bin/tftpd $(TARGET_DIR)/usr/sbin/tftpd
endef
IPUTILS_POST_INSTALL_TARGET_HOOKS += IPUTILS_MOVE_BINARIES
# upstream requires distros to create symlink
define IPUTILS_CREATE_PING6_SYMLINK
ln -sf ping $(TARGET_DIR)/bin/ping6
endef
IPUTILS_POST_INSTALL_TARGET_HOOKS += IPUTILS_CREATE_PING6_SYMLINK
# handle permissions ourselves
IPUTILS_CONF_OPTS += -DNO_SETCAP_OR_SUID=true
ifeq ($(BR2_ROOTFS_DEVICE_TABLE_SUPPORTS_EXTENDED_ATTRIBUTES),y)
define IPUTILS_PERMISSIONS
/usr/sbin/arping f 755 0 0 - - - - -
/usr/bin/clockdiff f 755 0 0 - - - - -
|xattr cap_net_raw+p
/bin/ping f 755 0 0 - - - - -
|xattr cap_net_raw+p
/usr/bin/traceroute6 f 755 0 0 - - - - -
|xattr cap_net_raw+p
$(if $(BR2_PACKAGE_IPUTILS_ARPING),\
/usr/sbin/arping f 755 0 0 - - - - -,)
$(if $(BR2_PACKAGE_IPUTILS_CLOCKDIFF),\
/usr/bin/clockdiff f 755 0 0 - - - - -
|xattr cap_net_raw+p,)
$(if $(BR2_PACKAGE_IPUTILS_PING),\
/bin/ping f 755 0 0 - - - - -
|xattr cap_net_raw+p,)
$(if $(BR2_PACKAGE_IPUTILS_TRACEROUTE6),\
/usr/bin/traceroute6 f 755 0 0 - - - - -
|xattr cap_net_raw+p,)
endef
else
define IPUTILS_PERMISSIONS
/usr/sbin/arping f 755 0 0 - - - - -
/usr/bin/clockdiff f 4755 0 0 - - - - -
/bin/ping f 4755 0 0 - - - - -
/usr/bin/traceroute6 f 4755 0 0 - - - - -
$(if $(BR2_PACKAGE_IPUTILS_ARPING),\
/usr/sbin/arping f 755 0 0 - - - - -,)
$(if $(BR2_PACKAGE_IPUTILS_CLOCKDIFF),\
/usr/bin/clockdiff f 4755 0 0 - - - - -,)
$(if $(BR2_PACKAGE_IPUTILS_PING),\
/bin/ping f 4755 0 0 - - - - -,)
$(if $(BR2_PACKAGE_IPUTILS_TRACEROUTE6),\
/usr/bin/traceroute6 f 4755 0 0 - - - - -,)
endef
endif