Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Switch to Fedora for nettest and use packaged netperf #1766

Merged
merged 1 commit into from
Dec 16, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 11 additions & 23 deletions package/Dockerfile.nettest
Original file line number Diff line number Diff line change
@@ -1,32 +1,20 @@
FROM alpine
ARG FEDORA_VERSION=41

WORKDIR /app
FROM --platform=${BUILDPLATFORM} fedora:${FEDORA_VERSION} AS base
ARG FEDORA_VERSION
ARG TARGETPLATFORM

RUN apk add --update --no-cache gcc libc-dev make git automake autoconf
COPY scripts/shared/dnf_install /

RUN git clone --depth 1 https://github.com/HewlettPackard/netperf \
&& git -C netperf reset --hard 3bc455b23f901dae377ca0a558e1e32aa56b31c4
RUN cd netperf \
&& ./autogen.sh \
&& ./configure CFLAGS=-fcommon \
&& make -C src && make -C src install
RUN /dnf_install -a ${TARGETPLATFORM} -v ${FEDORA_VERSION} -r /output/nettest \
glibc bash glibc-minimal-langpack coreutils-single libcurl-minimal \
bind-utils curl-minimal iperf3 iputils netperf nmap-ncat tcpdump

FROM scratch
ARG TARGETPLATFORM

FROM alpine
COPY --from=base /output/nettest /

WORKDIR /app

ARG VERSION

RUN apk add --no-cache \
bash \
bind-tools \
curl \
iputils \
iperf3 \
tcpdump

COPY --from=0 /usr/local/bin/net* /usr/local/bin/
COPY scripts/nettest/* /app/

RUN echo ${VERSION} >> /app/version
Expand Down
2 changes: 1 addition & 1 deletion scripts/nettest/metricsproxy
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
#!/bin/sh

# Arguments: source-port target-IP target-port
exec /usr/bin/nc -v -lk -p "$1" -e nc "$2" "$3"
exec /usr/bin/ncat -v -lk -p "$1" -c "/usr/bin/ncat $2 $3"
50 changes: 50 additions & 0 deletions scripts/nettest/nc
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
#!/bin/bash

# This wrapper converts Busybox syntax to nmap ncat:
# * -e becomes -c
# * -w and -i need a s suffix on their argument
# * with -l, -p XX and -s YY become YY XX

args=()
listening=
sourceport=
sourceaddress=
while [ -n "$1" ] && [ "$1" != "-e" ]; do
case "$1" in
-w|-i)
args+=("$1" "$2"s)
shift 2;;
-l|-lk)
listening=1
args+=("$1")
shift;;
-p)
sourceport="$2"
shift 2;;
-s)
sourceaddress="$2"
shift 2;;
*)
args+=("$1")
shift;;
esac
done

if [ -n "$listening" ]; then
args+=(-l ${sourceaddress:+"$sourceaddress"} ${sourceport:+"$sourceport"})
else
if [ -n "$sourceaddress" ]; then
args+=(-s "$sourceaddress")
fi
if [ -n "$sourceport" ]; then
args+=(-p "$sourceport")
fi
fi

cmd=""
if [ "$1" = "-e" ]; then
shift
cmd="$*"
fi

exec /usr/bin/ncat "${args[@]}" ${cmd:+"-c $cmd"}
2 changes: 1 addition & 1 deletion scripts/nettest/simpleserver
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,5 @@ set -e

while true
do
echo -e "HTTP/1.1 200 OK\r\n\r\nHello World" | nc -l -p 8080
echo -e "HTTP/1.1 200 OK\r\n\r\nHello World" | /usr/bin/ncat -l 8080
done
68 changes: 68 additions & 0 deletions scripts/shared/dnf_install
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
#!/bin/bash

# Installs packages using dnf to a named root:
# -a arch - use arch instead of the native arch
# -k - keep the package cache
# -r root - install to the named root instead of /output/base
# -v ver - use the given Fedora version (required)
#
# %arch in the package references will be replaced with the chosen arch

set -e

INSTALL_ROOT=/output/base

# Limit the number of files so that dnf doesn't spend ages processing fds
if [[ $(ulimit -n) -gt 1048576 ]]; then
ulimit -n 1048576
fi

while getopts a:kr:v: o
do
case "$o" in
a)
ARCH="$OPTARG"
;;
k)
KEEP_CACHE=true
;;
r)
INSTALL_ROOT="$OPTARG"
;;
v)
FEDORA_VERSION="$OPTARG"
;;
*)
echo "$0 doesn't support $o" >&2
exit 1
;;
esac
done
shift $((OPTIND - 1))

arch_args=()

if [[ -n "${ARCH}" ]]; then
# Convert container arch to Fedora arch
ARCH="${ARCH##*/}"
case "${ARCH}" in
amd64) ARCH=x86_64;;
arm64) ARCH=aarch64;;
esac
arch_args=(--forcearch "${ARCH}")
else
# This will be used later, but we won't force
ARCH="$(rpm -q --qf "%{arch}" rpm)"
fi

[[ -z "${FEDORA_VERSION}" ]] && echo I need to know which version of Fedora to install, specify it with -v >&2 && exit 1

if [[ "${INSTALL_ROOT}" != /output/base ]] && [[ ! -d "${INSTALL_ROOT}" ]] && [[ -d /output/base ]]; then
cp -a /output/base "${INSTALL_ROOT}"
fi

dnf -y --setopt=install_weak_deps=0 --nodocs --use-host-config "${arch_args[@]}" \
--installroot "${INSTALL_ROOT}" --releasever "${FEDORA_VERSION}" \
install "${@//\%arch/${ARCH}}"

[[ "${KEEP_CACHE}" == true ]] || dnf -y "${arch_args[@]}" --installroot "${INSTALL_ROOT}" --releasever "${FEDORA_VERSION}" clean all
Loading