# 3proxy.busybox is fully functional 3proxy build based on busybox:musl
# built against wolfSSL and PCRE2.
#
# Examples are for podman, for docker change 'podman' to 'docker'
#
#to build:
# podman build -f Dockerfile.busybox -t 3proxy.busybox .
#to run:
#
# echo nserver 8.8.8.8 >/path/to/local/config/directory/3proxy.cfg
# echo proxy -p3129 >>/path/to/local/config/directory/3proxy.cfg
# podman run --read-only -p 3129:3129 -v /path/to/local/config/directory:/etc/3proxy --name 3proxy.busybox 3proxy.busybox
#
# use "log" without pathname in config to log to stdout.
# plugins are located in /usr/local/3proxy/libexec (/libexec for chroot config)
# symlinked as /lib and /lib64 in both root and chroot configurations, so no need
# to specify full path to plugin.
#
# Since 0.9.6 image is distroless, no reason to use chroot, chroot
# configuration is supported for compatibility only.


FROM docker.io/alpine:latest AS wolfssl
RUN apk add --no-cache build-base curl autoconf automake libtool linux-headers
RUN TAG=$(curl -s https://api.github.com/repos/wolfSSL/wolfssl/releases/latest \
          | sed -n 's/.*"tag_name": *"\([^"]*\)".*/\1/p') && \
    echo "wolfssl tag: $TAG" && \
    curl -sL https://api.github.com/repos/wolfSSL/wolfssl/tarball/$TAG -o /tmp/w.tar.gz && \
    mkdir /src && tar -xzf /tmp/w.tar.gz -C /src --strip-components=1 && \
    cd /src && \
    autoreconf -i && \
    ./configure --enable-opensslextra --enable-certgen \
                --enable-tls13 --enable-sni --enable-session-ticket \
                --enable-static --disable-shared --prefix=/usr/local && \
    make -j$(nproc) && make install

FROM docker.io/alpine:latest AS buildenv
RUN apk add --no-cache gcc make musl-dev pcre2-dev
COPY --from=wolfssl /usr/local /usr/local
COPY . 3proxy
RUN cd 3proxy && mkdir -p bin &&\
 make -f Makefile.Linux LIBSTATIC=true PAM_CHECK=false WOLFSSL_CHECK=true \
      EXTRA_LDFLAGS="-L/usr/local/lib" &&\
 strip bin/3proxy &&\
 strip bin/*so &&\
 mkdir /dist &&\
 mkdir /dist/etc &&\
 mkdir /dist/etc/3proxy &&\
 mkdir /dist/bin &&\
 mkdir /dist/usr &&\
 mkdir /dist/usr/local &&\
 mkdir /dist/usr/local/3proxy &&\
 mkdir /dist/usr/local/3proxy/conf &&\
 mkdir /dist/usr/local/3proxy/libexec &&\
 cp bin/3proxy /dist/bin &&\
 cp bin/*.so /dist/usr/local/3proxy/libexec &&\
 cp scripts/3proxy.cfg.inchroot /dist/etc/3proxy/3proxy.cfg
RUN cd /dist &&\
 ln -s /lib lib64 &&\
 ln -s /lib usr/lib &&\
 ln -s /lib usr/lib64
RUN cp /lib/ld-musl-*.so.* /dist/usr/local/3proxy/libexec || true

FROM docker.io/busybox:musl
COPY --from=buildenv /dist /
RUN mkdir -p /lib /lib64 && ln -sf /usr/local/3proxy/libexec/* /lib/ && cd /usr/local/3proxy/ && ln -s libexec lib && ln -s libexec lib64 && mkdir usr && ln -s libexec usr/lib && ln -s libexec usr/lib64
CMD ["/bin/3proxy", "/etc/3proxy/3proxy.cfg"]
