226 lines
7.3 KiB
Docker
226 lines
7.3 KiB
Docker
# qBittorrent, OpenVPN and WireGuard, qbittorrentvpn
|
|
FROM debian:bullseye-slim
|
|
|
|
WORKDIR /opt
|
|
|
|
RUN usermod -u 99 nobody
|
|
|
|
# Make directories
|
|
RUN mkdir -p /downloads /config/qBittorrent /etc/openvpn /etc/qbittorrent
|
|
|
|
# Install boost
|
|
RUN apt update \
|
|
&& apt upgrade -y \
|
|
&& apt install -y --no-install-recommends \
|
|
curl \
|
|
ca-certificates \
|
|
g++ \
|
|
libxml2-utils \
|
|
&& BOOST_VERSION_DOT=$(curl -sX GET "https://www.boost.org/feed/news.rss" | xmllint --xpath '//rss/channel/item/title/text()' - | awk -F 'Version' '{print $2 FS}' - | sed -e 's/Version//g;s/\ //g' | xargs | awk 'NR==1{print $1}' -) \
|
|
&& BOOST_VERSION=$(echo ${BOOST_VERSION_DOT} | head -n 1 | sed -e 's/\./_/g') \
|
|
&& curl -o /opt/boost_${BOOST_VERSION}.tar.gz -L https://boostorg.jfrog.io/artifactory/main/release/${BOOST_VERSION_DOT}/source/boost_${BOOST_VERSION}.tar.gz \
|
|
&& tar -xzf /opt/boost_${BOOST_VERSION}.tar.gz -C /opt \
|
|
&& cd /opt/boost_${BOOST_VERSION} \
|
|
&& ./bootstrap.sh --prefix=/usr \
|
|
&& ./b2 --prefix=/usr install \
|
|
&& cd /opt \
|
|
&& rm -rf /opt/* \
|
|
&& apt -y purge \
|
|
curl \
|
|
ca-certificates \
|
|
g++ \
|
|
libxml2-utils \
|
|
&& apt-get clean \
|
|
&& apt --purge autoremove -y \
|
|
&& rm -rf \
|
|
/var/lib/apt/lists/* \
|
|
/tmp/* \
|
|
/var/tmp/*
|
|
|
|
# Install Ninja
|
|
RUN apt update \
|
|
&& apt upgrade -y \
|
|
&& apt install -y --no-install-recommends \
|
|
ca-certificates \
|
|
curl \
|
|
jq \
|
|
unzip \
|
|
&& NINJA_ASSETS=$(curl -sX GET "https://api.github.com/repos/ninja-build/ninja/releases" | jq '.[] | select(.prerelease==false) | .assets_url' | head -n 1 | tr -d '"') \
|
|
&& NINJA_DOWNLOAD_URL=$(curl -sX GET ${NINJA_ASSETS} | jq '.[] | select(.name | match("ninja-linux";"i")) .browser_download_url' | tr -d '"') \
|
|
&& curl -o /opt/ninja-linux.zip -L ${NINJA_DOWNLOAD_URL} \
|
|
&& unzip /opt/ninja-linux.zip -d /opt \
|
|
&& mv /opt/ninja /usr/local/bin/ninja \
|
|
&& chmod +x /usr/local/bin/ninja \
|
|
&& rm -rf /opt/* \
|
|
&& apt purge -y \
|
|
ca-certificates \
|
|
curl \
|
|
jq \
|
|
unzip \
|
|
&& apt-get clean \
|
|
&& apt --purge autoremove -y \
|
|
&& rm -rf \
|
|
/var/lib/apt/lists/* \
|
|
/tmp/* \
|
|
/var/tmp/*
|
|
|
|
# Install cmake
|
|
RUN apt update \
|
|
&& apt upgrade -y \
|
|
&& apt install -y --no-install-recommends \
|
|
ca-certificates \
|
|
curl \
|
|
jq \
|
|
&& CMAKE_ASSETS=$(curl -sX GET "https://api.github.com/repos/Kitware/CMake/releases" | jq '.[] | select(.prerelease==false) | .assets_url' | head -n 1 | tr -d '"') \
|
|
&& CMAKE_DOWNLOAD_URL=$(curl -sX GET ${CMAKE_ASSETS} | jq '.[] | select(.name | match("Linux-x86_64.sh";"i")) .browser_download_url' | tr -d '"') \
|
|
&& curl -o /opt/cmake.sh -L ${CMAKE_DOWNLOAD_URL} \
|
|
&& chmod +x /opt/cmake.sh \
|
|
&& /bin/bash /opt/cmake.sh --skip-license --prefix=/usr \
|
|
&& rm -rf /opt/* \
|
|
&& apt purge -y \
|
|
ca-certificates \
|
|
curl \
|
|
jq \
|
|
&& apt-get clean \
|
|
&& apt --purge autoremove -y \
|
|
&& rm -rf \
|
|
/var/lib/apt/lists/* \
|
|
/tmp/* \
|
|
/var/tmp/*
|
|
|
|
# Compile and install libtorrent-rasterbar
|
|
RUN apt update \
|
|
&& apt upgrade -y \
|
|
&& apt install -y --no-install-recommends \
|
|
build-essential \
|
|
ca-certificates \
|
|
curl \
|
|
jq \
|
|
libssl-dev \
|
|
&& LIBTORRENT_ASSETS=$(curl -sX GET "https://api.github.com/repos/arvidn/libtorrent/releases" | jq '.[] | select(.prerelease==false) | select(.target_commitish=="RC_1_2") | .assets_url' | head -n 1 | tr -d '"') \
|
|
&& LIBTORRENT_DOWNLOAD_URL=$(curl -sX GET ${LIBTORRENT_ASSETS} | jq '.[0] .browser_download_url' | tr -d '"') \
|
|
&& LIBTORRENT_NAME=$(curl -sX GET ${LIBTORRENT_ASSETS} | jq '.[0] .name' | tr -d '"') \
|
|
&& curl -o /opt/${LIBTORRENT_NAME} -L ${LIBTORRENT_DOWNLOAD_URL} \
|
|
&& tar -xzf /opt/${LIBTORRENT_NAME} \
|
|
&& rm /opt/${LIBTORRENT_NAME} \
|
|
&& cd /opt/libtorrent-rasterbar* \
|
|
&& cmake -G Ninja -B build -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX:PATH=/usr -DCMAKE_CXX_STANDARD=17 \
|
|
&& cmake --build build --parallel $(nproc) \
|
|
&& cmake --install build \
|
|
&& cd /opt \
|
|
&& rm -rf /opt/* \
|
|
&& apt purge -y \
|
|
build-essential \
|
|
ca-certificates \
|
|
curl \
|
|
jq \
|
|
libssl-dev \
|
|
&& apt-get clean \
|
|
&& apt --purge autoremove -y \
|
|
&& rm -rf \
|
|
/var/lib/apt/lists/* \
|
|
/tmp/* \
|
|
/var/tmp/*
|
|
|
|
# Compile and install qBittorrent
|
|
RUN apt update \
|
|
&& apt upgrade -y \
|
|
&& apt install -y --no-install-recommends \
|
|
build-essential \
|
|
ca-certificates \
|
|
curl \
|
|
git \
|
|
jq \
|
|
libssl-dev \
|
|
pkg-config \
|
|
qtbase5-dev \
|
|
qttools5-dev \
|
|
zlib1g-dev \
|
|
&& QBITTORRENT_RELEASE=$(curl -sX GET "https://api.github.com/repos/qBittorrent/qBittorrent/tags" | jq '.[] | select(.name | index ("alpha") | not) | select(.name | index ("beta") | not) | select(.name | index ("rc") | not) | .name' | head -n 1 | tr -d '"') \
|
|
&& curl -o /opt/qBittorrent-${QBITTORRENT_RELEASE}.tar.gz -L "https://github.com/qbittorrent/qBittorrent/archive/${QBITTORRENT_RELEASE}.tar.gz" \
|
|
&& tar -xzf /opt/qBittorrent-${QBITTORRENT_RELEASE}.tar.gz \
|
|
&& rm /opt/qBittorrent-${QBITTORRENT_RELEASE}.tar.gz \
|
|
&& cd /opt/qBittorrent-${QBITTORRENT_RELEASE} \
|
|
&& cmake -G Ninja -B build -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local -DGUI=OFF -DCMAKE_CXX_STANDARD=17 \
|
|
&& cmake --build build --parallel $(nproc) \
|
|
&& cmake --install build \
|
|
&& cd /opt \
|
|
&& rm -rf /opt/* \
|
|
&& apt purge -y \
|
|
build-essential \
|
|
ca-certificates \
|
|
curl \
|
|
git \
|
|
jq \
|
|
libssl-dev \
|
|
pkg-config \
|
|
qtbase5-dev \
|
|
qttools5-dev \
|
|
zlib1g-dev \
|
|
&& apt-get clean \
|
|
&& apt --purge autoremove -y \
|
|
&& rm -rf \
|
|
/var/lib/apt/lists/* \
|
|
/tmp/* \
|
|
/var/tmp/*
|
|
|
|
# Install WireGuard and some other dependencies some of the scripts in the container rely on.
|
|
RUN echo "deb http://deb.debian.org/debian/ unstable main" > /etc/apt/sources.list.d/unstable-wireguard.list \
|
|
&& printf 'Package: *\nPin: release a=unstable\nPin-Priority: 150\n' > /etc/apt/preferences.d/limit-unstable \
|
|
&& apt update \
|
|
&& apt install -y --no-install-recommends \
|
|
ca-certificates \
|
|
dos2unix \
|
|
inetutils-ping \
|
|
ipcalc \
|
|
iptables \
|
|
kmod \
|
|
libqt5network5 \
|
|
libqt5xml5 \
|
|
libqt5sql5 \
|
|
libssl1.1 \
|
|
moreutils \
|
|
net-tools \
|
|
openresolv \
|
|
openvpn \
|
|
procps \
|
|
wireguard-tools \
|
|
&& apt-get clean \
|
|
&& apt --purge autoremove -y \
|
|
&& rm -rf \
|
|
/var/lib/apt/lists/* \
|
|
/tmp/* \
|
|
/var/tmp/*
|
|
|
|
# Install (un)compressing tools like unrar, 7z, unzip and zip
|
|
RUN echo "deb http://deb.debian.org/debian/ bullseye non-free" > /etc/apt/sources.list.d/non-free-unrar.list \
|
|
&& printf 'Package: *\nPin: release a=non-free\nPin-Priority: 150\n' > /etc/apt/preferences.d/limit-non-free \
|
|
&& apt update \
|
|
&& apt -y upgrade \
|
|
&& apt -y install --no-install-recommends \
|
|
unrar \
|
|
p7zip-full \
|
|
unzip \
|
|
zip \
|
|
&& apt-get clean \
|
|
&& apt --purge autoremove -y \
|
|
&& rm -rf \
|
|
/var/lib/apt/lists/* \
|
|
/tmp/* \
|
|
/var/tmp/*
|
|
|
|
# Remove src_valid_mark from wg-quick
|
|
RUN sed -i /net\.ipv4\.conf\.all\.src_valid_mark/d `which wg-quick`
|
|
|
|
VOLUME /config /downloads
|
|
|
|
ADD openvpn/ /etc/openvpn/
|
|
ADD qbittorrent/ /etc/qbittorrent/
|
|
|
|
RUN chmod +x /etc/qbittorrent/*.sh /etc/qbittorrent/*.init /etc/openvpn/*.sh
|
|
|
|
EXPOSE 8080
|
|
EXPOSE 8999
|
|
EXPOSE 8999/udp
|
|
CMD ["/bin/bash", "/etc/openvpn/start.sh"]
|