# Build a container which hosts Android apps through an F-Droid repository. # Base Image # FROM debian:trixie-slim # Static Variables # ENV DOWNLOAD="/root/Downloads" ENV WEBROOT="/var/www/html" ENV FDROID="/root/fdroid" ENV METADATA="$FDROID/metadata" ENV REPO="$FDROID/repo" ENV CONFIG="$FDROID/config.yml" # Create Directory Hierarchies # RUN mkdir -pv "$DOWNLOAD" "$WEBROOT" \ "$FDROID" "$METADATA" "$REPO" # Install Packages# # https://f-droid.org/en/docs/Installing_the_Server_and_Repo_Tools/#debianubuntumintetc RUN apt-get update && apt-get install -y sudo bash curl git vim nginx COPY files/debian-backports.sources /etc/apt/sources.list.d/ RUN apt-get update && apt-get install -y -t trixie-backports fdroidserver # Generate F-Droid Repo # USER root WORKDIR "$FDROID" RUN fdroid init # This is where the image would get published on Docker Hub. # RUN fdroid update # Advanced Variables # ARG FILE00 ENV FILE00="$FILE00" ARG FILE01 ENV FILE01="$FILE01" ARG FILE02 ENV FILE02="$FILE02" ARG FILE03 ENV FILE03="$FILE03" ARG FILE04 ENV FILE04="$FILE04" ARG FILE05 ENV FILE05="$FILE05" ARG FILE06 ENV FILE06="$FILE06" ARG FILE07 ENV FILE07="$FILE07" ARG FILE08 ENV FILE08="$FILE08" ARG FILE09 ENV FILE09="$FILE09" ARG FILE10 ENV FILE10="$FILE10" ARG FILE11 ENV FILE11="$FILE11" ARG FILE12 ENV FILE12="$FILE12" ARG FILE13 ENV FILE13="$FILE13" ARG FILE14 ENV FILE14="$FILE14" ARG FILE15 ENV FILE15="$FILE15" ARG FILE16 ENV FILE16="$FILE16" ARG FILE17 ENV FILE17="$FILE17" ARG FILE18 ENV FILE18="$FILE18" ARG FILE19 ENV FILE19="$FILE19" ARG FILE20 ENV FILE20="$FILE20" ARG FILE21 ENV FILE21="$FILE21" ARG FILE22 ENV FILE22="$FILE22" ARG FILE23 ENV FILE23="$FILE23" ARG FILE24 ENV FILE24="$FILE24" ARG FILE25 ENV FILE25="$FILE25" ARG FILE26 ENV FILE26="$FILE26" ARG FILE27 ENV FILE27="$FILE27" ARG FILE28 ENV FILE28="$FILE28" ARG FILE29 ENV FILE29="$FILE29" ARG FILE30 ENV FILE30="$FILE30" ARG FILE31 ENV FILE31="$FILE31" ARG FILE32 ENV FILE32="$FILE32" ARG FILE33 ENV FILE33="$FILE33" ARG FILE34 ENV FILE34="$FILE34" ARG FILE35 ENV FILE35="$FILE35" ARG FILE36 ENV FILE36="$FILE36" ARG FILE37 ENV FILE37="$FILE37" ARG FILE38 ENV FILE38="$FILE38" ARG FILE39 ENV FILE39="$FILE39" # Download Remote Files # RUN bash -c '[[ -n "$FILE00" ]] && wget -P "$DOWNLOAD" "$FILE00"' RUN bash -c '[[ -n "$FILE01" ]] && wget -P "$DOWNLOAD" "$FILE01"' RUN bash -c '[[ -n "$FILE02" ]] && wget -P "$DOWNLOAD" "$FILE02"' RUN bash -c '[[ -n "$FILE03" ]] && wget -P "$DOWNLOAD" "$FILE03"' RUN bash -c '[[ -n "$FILE04" ]] && wget -P "$DOWNLOAD" "$FILE04"' RUN bash -c '[[ -n "$FILE05" ]] && wget -P "$DOWNLOAD" "$FILE05"' RUN bash -c '[[ -n "$FILE06" ]] && wget -P "$DOWNLOAD" "$FILE06"' RUN bash -c '[[ -n "$FILE08" ]] && wget -P "$DOWNLOAD" "$FILE08"' RUN bash -c '[[ -n "$FILE09" ]] && wget -P "$DOWNLOAD" "$FILE09"' RUN bash -c '[[ -n "$FILE10" ]] && wget -P "$DOWNLOAD" "$FILE10"' RUN bash -c '[[ -n "$FILE11" ]] && wget -P "$DOWNLOAD" "$FILE11"' RUN bash -c '[[ -n "$FILE12" ]] && wget -P "$DOWNLOAD" "$FILE12"' RUN bash -c '[[ -n "$FILE13" ]] && wget -P "$DOWNLOAD" "$FILE13"' RUN bash -c '[[ -n "$FILE14" ]] && wget -P "$DOWNLOAD" "$FILE14"' RUN bash -c '[[ -n "$FILE15" ]] && wget -P "$DOWNLOAD" "$FILE15"' RUN bash -c '[[ -n "$FILE16" ]] && wget -P "$DOWNLOAD" "$FILE16"' RUN bash -c '[[ -n "$FILE17" ]] && wget -P "$DOWNLOAD" "$FILE17"' RUN bash -c '[[ -n "$FILE18" ]] && wget -P "$DOWNLOAD" "$FILE18"' RUN bash -c '[[ -n "$FILE19" ]] && wget -P "$DOWNLOAD" "$FILE19"' RUN bash -c '[[ -n "$FILE20" ]] && wget -P "$DOWNLOAD" "$FILE20"' RUN bash -c '[[ -n "$FILE21" ]] && wget -P "$DOWNLOAD" "$FILE21"' RUN bash -c '[[ -n "$FILE22" ]] && wget -P "$DOWNLOAD" "$FILE22"' RUN bash -c '[[ -n "$FILE23" ]] && wget -P "$DOWNLOAD" "$FILE23"' RUN bash -c '[[ -n "$FILE24" ]] && wget -P "$DOWNLOAD" "$FILE24"' RUN bash -c '[[ -n "$FILE25" ]] && wget -P "$DOWNLOAD" "$FILE25"' RUN bash -c '[[ -n "$FILE26" ]] && wget -P "$DOWNLOAD" "$FILE26"' RUN bash -c '[[ -n "$FILE27" ]] && wget -P "$DOWNLOAD" "$FILE27"' RUN bash -c '[[ -n "$FILE28" ]] && wget -P "$DOWNLOAD" "$FILE28"' RUN bash -c '[[ -n "$FILE29" ]] && wget -P "$DOWNLOAD" "$FILE29"' RUN bash -c '[[ -n "$FILE30" ]] && wget -P "$DOWNLOAD" "$FILE30"' RUN bash -c '[[ -n "$FILE31" ]] && wget -P "$DOWNLOAD" "$FILE31"' RUN bash -c '[[ -n "$FILE32" ]] && wget -P "$DOWNLOAD" "$FILE32"' RUN bash -c '[[ -n "$FILE33" ]] && wget -P "$DOWNLOAD" "$FILE33"' RUN bash -c '[[ -n "$FILE34" ]] && wget -P "$DOWNLOAD" "$FILE34"' RUN bash -c '[[ -n "$FILE35" ]] && wget -P "$DOWNLOAD" "$FILE35"' RUN bash -c '[[ -n "$FILE36" ]] && wget -P "$DOWNLOAD" "$FILE36"' RUN bash -c '[[ -n "$FILE37" ]] && wget -P "$DOWNLOAD" "$FILE37"' RUN bash -c '[[ -n "$FILE38" ]] && wget -P "$DOWNLOAD" "$FILE38"' RUN bash -c '[[ -n "$FILE39" ]] && wget -P "$DOWNLOAD" "$FILE39"' # Move Downloaded Files # # Move any downloaded APK files to the repo folder. RUN mv -v "$DOWNLOAD"/*.apk "$REPO"/ || \ (echo "WARNING! No APK file(s) to copy." && sleep 10) # Move any downloaded metadata files to the metadata folder. RUN mv -v "$DOWNLOAD"/*.yml "$METADATA"/ || \ (echo "WARNING! No YML file(s) to copy." && sleep 10) # Move any downloaded icons to the main folder. RUN mv -v "$DOWNLOAD"/*.png "$FDROID"/ || \ (echo "WARNING! No PNG file(s) to copy." && sleep 10) # Configure F-Droid Repo # ARG REPO_DOMAIN ENV REPO_DOMAIN="$REPO_DOMAIN" ARG REPO_NAME ENV REPO_NAME="$REPO_NAME" ARG REPO_ICON ENV REPO_ICON="$REPO_ICON" RUN sed -i '/repo_url/d' "$CONFIG" RUN sed -i '/repo_name/d' "$CONFIG" RUN sed -i '/repo_icon/d' "$CONFIG" RUN sed -i "$ a repo_url: $REPO_DOMAIN/fdroid/repo" "$CONFIG" RUN sed -i "$ a repo_name: $REPO_NAME" "$CONFIG" # If the icon variable is set, add it to the config file before updating. RUN [ ! -z "$REPO_ICON" ] && \ sed -i "$ a repo_icon: $REPO_ICON" "$FDROID/config.yml" RUN fdroid update -c # Publish Repo Contents to Web Root # RUN cp -rv "$FDROID" "$WEBROOT/" # The index files are in repo. # TODO: Can NGINX be configured to serve REPO as the webroot while still # having the user's URL be fdroid/repo/? How do others handle this? RUN cp -rv "$REPO"/* "$WEBROOT/" # Start Command # CMD tail -F /var/log/nginx/access.log & \ tail -F /var/log/nginx/error.log & \ nginx -g "daemon off;"