Skip to content

Commit

Permalink
Merge branch 'release-0.15' into automated-backport-of-#1785-origin-r…
Browse files Browse the repository at this point in the history
…elease-0.15
  • Loading branch information
skitt authored Jan 2, 2025
2 parents 09525bf + 08f94a8 commit 52155e5
Show file tree
Hide file tree
Showing 5 changed files with 137 additions and 22 deletions.
35 changes: 14 additions & 21 deletions package/Dockerfile.nettest
Original file line number Diff line number Diff line change
@@ -1,30 +1,23 @@
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
ENV PATH="/app:$PATH"

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

WORKDIR /app

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

CMD ["/bin/bash","-l"]
4 changes: 4 additions & 0 deletions scripts/nettest/metricsproxy
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
#!/bin/sh

# Arguments: source-port target-IP target-port
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

0 comments on commit 52155e5

Please sign in to comment.