# 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 # ADD "$FILE00" "$DOWNLOAD"/ ADD "$FILE01" "$DOWNLOAD"/ ADD "$FILE02" "$DOWNLOAD"/ ADD "$FILE03" "$DOWNLOAD"/ ADD "$FILE04" "$DOWNLOAD"/ ADD "$FILE05" "$DOWNLOAD"/ ADD "$FILE06" "$DOWNLOAD"/ ADD "$FILE08" "$DOWNLOAD"/ ADD "$FILE09" "$DOWNLOAD"/ ADD "$FILE10" "$DOWNLOAD"/ ADD "$FILE11" "$DOWNLOAD"/ ADD "$FILE12" "$DOWNLOAD"/ ADD "$FILE13" "$DOWNLOAD"/ ADD "$FILE14" "$DOWNLOAD"/ ADD "$FILE15" "$DOWNLOAD"/ ADD "$FILE16" "$DOWNLOAD"/ ADD "$FILE17" "$DOWNLOAD"/ ADD "$FILE18" "$DOWNLOAD"/ ADD "$FILE19" "$DOWNLOAD"/ ADD "$FILE20" "$DOWNLOAD"/ ADD "$FILE21" "$DOWNLOAD"/ ADD "$FILE22" "$DOWNLOAD"/ ADD "$FILE23" "$DOWNLOAD"/ ADD "$FILE24" "$DOWNLOAD"/ ADD "$FILE25" "$DOWNLOAD"/ ADD "$FILE26" "$DOWNLOAD"/ ADD "$FILE27" "$DOWNLOAD"/ ADD "$FILE28" "$DOWNLOAD"/ ADD "$FILE29" "$DOWNLOAD"/ ADD "$FILE30" "$DOWNLOAD"/ ADD "$FILE31" "$DOWNLOAD"/ ADD "$FILE32" "$DOWNLOAD"/ ADD "$FILE33" "$DOWNLOAD"/ ADD "$FILE34" "$DOWNLOAD"/ ADD "$FILE35" "$DOWNLOAD"/ ADD "$FILE36" "$DOWNLOAD"/ ADD "$FILE37" "$DOWNLOAD"/ ADD "$FILE38" "$DOWNLOAD"/ ADD "$FILE39" "$DOWNLOAD"/ # Move Downloaded Files # RUN rm -v "$DOWNLOAD"/docker-compose*yml # 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;"