├── arm64 ├── sevenzipjbinding1602.jar └── sevenzipjbinding1602LinuxArm64.jar ├── rootfs ├── defaults │ └── cfg │ │ ├── org.jdownloader.gui.views.linkgrabber.addlinksdialog.LinkgrabberSettings.downloaddestinationhistory.json │ │ ├── org.jdownloader.gui.jdtrayicon.TrayExtension.json │ │ ├── org.jdownloader.gui.views.linkgrabber.addlinksdialog.LinkgrabberSettings.json │ │ ├── org.jdownloader.gui.notify.gui.BubbleNotifyConfig.json │ │ └── org.jdownloader.settings.GeneralSettings.json ├── startapp.sh └── etc │ └── cont-init.d │ └── jdownloader2.sh ├── .travis.yml ├── README.md ├── .github └── FUNDING.yml ├── hooks ├── pre_build └── post_push ├── .drone.yml ├── Dockerfile ├── DOCKERHUB.md └── appdefs.xml /arm64/sevenzipjbinding1602.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daniel0076/docker-jdownloader-2/HEAD/arm64/sevenzipjbinding1602.jar -------------------------------------------------------------------------------- /arm64/sevenzipjbinding1602LinuxArm64.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daniel0076/docker-jdownloader-2/HEAD/arm64/sevenzipjbinding1602LinuxArm64.jar -------------------------------------------------------------------------------- /rootfs/defaults/cfg/org.jdownloader.gui.views.linkgrabber.addlinksdialog.LinkgrabberSettings.downloaddestinationhistory.json: -------------------------------------------------------------------------------- 1 | [ { 2 | "name" : "/output", 3 | "time" : 1499250059364 4 | } ] -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | # 2 | # Travis CI recipe to build docker image. 3 | # 4 | 5 | sudo: required 6 | 7 | language: generic 8 | 9 | services: 10 | - docker 11 | 12 | script: 13 | - echo "Starting build of Docker image..." 14 | - docker build --no-cache --pull -t $TRAVIS_REPO_SLUG:$TRAVIS_JOB_ID . 15 | -------------------------------------------------------------------------------- /rootfs/defaults/cfg/org.jdownloader.gui.jdtrayicon.TrayExtension.json: -------------------------------------------------------------------------------- 1 | { 2 | "freshinstall" : false, 3 | "onminimizeaction" : "TO_TASKBAR", 4 | "tooltipenabled" : true, 5 | "oncloseaction" : "ASK", 6 | "tooglewindowstatuswithsingleclickenabled" : false, 7 | "enabled" : false, 8 | "startminimizedenabled" : false, 9 | "trayonlyvisibleifwindowishiddenenabled" : false 10 | } 11 | -------------------------------------------------------------------------------- /rootfs/defaults/cfg/org.jdownloader.gui.views.linkgrabber.addlinksdialog.LinkgrabberSettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "autoextractionenabled" : true, 3 | "variantscolumnalwaysvisible" : false, 4 | "linkgrabberautostartenabled" : true, 5 | "variouspackageenabled" : true, 6 | "latestdownloaddestinationfolder" : "/output", 7 | "linkgrabberaddattop" : false, 8 | "linkgrabberautoconfirmenabled" : false, 9 | "autoconfirmdelay" : 15000 10 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Docker container for JDownlaoder2 on aarch64 2 | 3 | This is a fork based on [jlesage/jdownloader-2](https://hub.docker.com/r/jlesage/jdownloader-2), and modified to run on aarch64 machines. 4 | 5 | Refer to [jlesage/jdownloader-2](https://github.com/jlesage/docker-jdownloader-2) for usage and setup, the packages are equivalent. 6 | 7 | Tested on Raspberry Pi 4 4GB running Ubuntu 20.04 (64bit) 8 | 9 | ## Changes 10 | 11 | + baseimage: use Ubuntu 20.04, for better support on aarch64 packages 12 | + openjdk-8-jre: From Ubuntu focal repository 13 | + 7-Zip-Bindings V16.02 built for Linux-aarch64 14 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: jlesage 4 | patreon: # Replace with a single Patreon username 5 | open_collective: # Replace with a single Open Collective username 6 | ko_fi: # Replace with a single Ko-fi username 7 | tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel 8 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry 9 | liberapay: # Replace with a single Liberapay username 10 | issuehunt: # Replace with a single IssueHunt username 11 | otechie: # Replace with a single Otechie username 12 | custom: https://paypal.me/JocelynLeSage/0usd 13 | -------------------------------------------------------------------------------- /rootfs/defaults/cfg/org.jdownloader.gui.notify.gui.BubbleNotifyConfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "bubblenotifyenabledstate" : "NEVER", 3 | "bubblenotifyonnewlinkgrabberlinksenabled" : true, 4 | "defaulttimeout" : 15000, 5 | "screenid" : "\\Display9999", 6 | "bubblenotifyonnewlinkgrabberlinkson" : "LINK", 7 | "bubblenotifyonupdateavailableenabled" : true, 8 | "bubblenotifyenabledduringsilentmode" : false, 9 | "fadeanimationduration" : 900, 10 | "bubblenotifystartpausestopenabled" : true, 11 | "bubblenotifyonreconnectstartenabled" : true, 12 | "animationstartpositionanchor" : "SYSTEM_DEFAULT", 13 | "animationendpositionanchor" : "SYSTEM_DEFAULT", 14 | "bubblenotifystartstopdownloadsenabled" : false, 15 | "finalpositionanchor" : "SYSTEM_DEFAULT", 16 | "bubblenotifyoncaptchainbackgroundenabled" : true 17 | } -------------------------------------------------------------------------------- /hooks/pre_build: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # 3 | # Pre build hook for Docker Automated Build. 4 | # 5 | # This hooks modifies the Dockerfile by inserting the image version in the 6 | # related label. 7 | # 8 | 9 | set -e # Exit immediately if a command exits with a non-zero status. 10 | set -u # Treat unset variables as an error. 11 | 12 | # Make sure the DOCKER_TAG has a supported format like: 13 | # v1.0.0 14 | # v0.1.0-beta1 15 | # v2.0.0-rc2 16 | if [[ ! "$DOCKER_TAG" =~ ^v[0-9\.]+(-(alpha|beta|rc)[0-9]+)?$ ]]; then 17 | echo "Unsupported DOCKER_TAG: $DOCKER_TAG" 18 | exit 1 19 | fi 20 | 21 | # The version to use is the same has the DOCKER_TAG, minus the initial 'v'. 22 | IMAGE_VERSION="${DOCKER_TAG:1}" 23 | 24 | # Export our custom variables. 25 | echo "IMAGE_VERSION=\"$IMAGE_VERSION\"" >> custom_hook_env 26 | 27 | echo "Environment variables: 28 | IMAGE_NAME=$IMAGE_NAME 29 | DOCKER_REPO=$DOCKER_REPO 30 | DOCKER_TAG=$DOCKER_TAG 31 | SOURCE_BRANCH=$SOURCE_BRANCH 32 | IMAGE_VERSION=$IMAGE_VERSION 33 | " 34 | 35 | echo "Inserting image version in Dockerfile..." 36 | sed -i "s/org.label-schema.version=\"unknown\"/org.label-schema.version=\"$IMAGE_VERSION\"/" Dockerfile 37 | 38 | echo "pre_build hook terminated successfully." 39 | -------------------------------------------------------------------------------- /rootfs/defaults/cfg/org.jdownloader.settings.GeneralSettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "maxsimultanedownloadsperhost" : 1, 3 | "delaywritemode" : "AUTO", 4 | "iffileexistsaction" : "ASK_FOR_EACH_FILE", 5 | "dupemanagerenabled" : true, 6 | "forcemirrordetectioncaseinsensitive" : true, 7 | "autoopencontainerafterdownload" : true, 8 | "autostartdownloadoption" : "ONLY_IF_EXIT_WITH_RUNNING_DOWNLOADS", 9 | "maxsimultanedownloads" : 3, 10 | "pausespeed" : 10240, 11 | "defaultdownloadfolder" : "/output", 12 | "downloadspeedlimitrememberedenabled" : true, 13 | "closedwithrunningdownloads" : false, 14 | "autostartcountdownseconds" : 10, 15 | "maxdownloadsperhostenabled" : false, 16 | "maxchunksperfile" : 1, 17 | "sambaprefetchenabled" : true, 18 | "showcountdownonautostartdownloads" : true, 19 | "savelinkgrabberlistenabled" : true, 20 | "onskipduetoalreadyexistsaction" : "SKIP_FILE", 21 | "myjdownloadercaptchasolverenabled" : false, 22 | "hashretryenabled" : false, 23 | "convertrelativepathsjdroot" : true, 24 | "keepxoldlists" : 5, 25 | "downloaddestinationhistorylength" : 25, 26 | "useavailableaccounts" : true, 27 | "cleanupafterdownloadaction" : "NEVER", 28 | "hashcheckenabled" : true, 29 | "downloadspeedlimitenabled" : false, 30 | "downloadspeedlimit" : 51200 31 | } -------------------------------------------------------------------------------- /hooks/post_push: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # 3 | # Post push hook for Docker Automated Build. 4 | # 5 | # This hook adds the 'latest' tag to the image. 6 | # 7 | 8 | set -e # Exit immediately if a command exits with a non-zero status. 9 | set -u # Treat unset variables as an error. 10 | 11 | source custom_hook_env 12 | 13 | echo "Environment variables: 14 | IMAGE_NAME=$IMAGE_NAME 15 | DOCKER_REPO=$DOCKER_REPO 16 | DOCKER_TAG=$DOCKER_TAG 17 | SOURCE_BRANCH=$SOURCE_BRANCH 18 | IMAGE_VERSION=$IMAGE_VERSION 19 | " 20 | 21 | if [[ "$DOCKER_TAG" =~ v[0-9]+\.[0-9]+\.[0-9]+-alpha[0-9]+$ ]]; then 22 | DOCKER_NEWTAG="$(echo "$DOCKER_TAG" | sed 's/-alpha[0-9]\+$/-alpha/')" 23 | elif [[ "$DOCKER_TAG" =~ v[0-9]+\.[0-9]+\.[0-9]+-beta[0-9]+$ ]]; then 24 | DOCKER_NEWTAG="$(echo "$DOCKER_TAG" | sed 's/-beta[0-9]\+$/-beta/')" 25 | elif [[ "$DOCKER_TAG" =~ v[0-9]+\.[0-9]+\.[0-9]+-rc[0-9]+$ ]]; then 26 | DOCKER_NEWTAG="$(echo "$DOCKER_TAG" | sed 's/-rc[0-9]\+$/-rc/')" 27 | elif [[ "$DOCKER_TAG" =~ v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then 28 | DOCKER_NEWTAG="latest" 29 | else 30 | echo "ERROR: Invalid docker tag." 31 | exit 1 32 | fi 33 | 34 | echo "Adding tag '$DOCKER_NEWTAG' to image..." 35 | docker tag $IMAGE_NAME ${DOCKER_REPO}:$DOCKER_NEWTAG 36 | echo "Pushing image..." 37 | docker push ${DOCKER_REPO}:$DOCKER_NEWTAG 38 | 39 | echo "post_push hook terminated successfully." 40 | -------------------------------------------------------------------------------- /rootfs/startapp.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/with-contenv sh 2 | 3 | set -u # Treat unset variables as an error. 4 | 5 | trap "exit" TERM QUIT INT 6 | trap "kill_jd" EXIT 7 | 8 | log() { 9 | echo "[jdsupervisor] $*" 10 | } 11 | 12 | getpid_jd() { 13 | PID=UNSET 14 | if [ -f /config/JDownloader.pid ]; then 15 | PID="$(cat /config/JDownloader.pid)" 16 | # Make sure the saved PID is still running and is associated to 17 | # JDownloader. 18 | if [ ! -f /proc/$PID/cmdline ] || ! cat /proc/$PID/cmdline | grep -qw "JDownloader.jar"; then 19 | PID=UNSET 20 | fi 21 | fi 22 | if [ "$PID" = "UNSET" ]; then 23 | PID="$(ps -o pid,args | grep -w "JDownloader.jar" | grep -vw grep | tr -s ' ' | cut -d' ' -f2)" 24 | fi 25 | echo "${PID:-UNSET}" 26 | } 27 | 28 | is_jd_running() { 29 | [ "$(getpid_jd)" != "UNSET" ] 30 | } 31 | 32 | start_jd() { 33 | java \ 34 | -Dawt.useSystemAAFontSettings=gasp \ 35 | -Djava.awt.headless=false \ 36 | -jar /config/JDownloader.jar >/config/logs/output.log 2>&1 & 37 | } 38 | 39 | kill_jd() { 40 | PID="$(getpid_jd)" 41 | if [ "$PID" != "UNSET" ]; then 42 | log "Terminating JDownloader2..." 43 | kill $PID 44 | wait $PID 45 | fi 46 | } 47 | 48 | if ! is_jd_running; then 49 | log "JDownloader2 not started yet. Proceeding..." 50 | start_jd 51 | fi 52 | 53 | JD_NOT_RUNNING=0 54 | while [ "$JD_NOT_RUNNING" -lt 5 ] 55 | do 56 | if is_jd_running; then 57 | JD_NOT_RUNNING=0 58 | else 59 | JD_NOT_RUNNING="$(expr $JD_NOT_RUNNING + 1)" 60 | fi 61 | sleep 1 62 | done 63 | 64 | log "JDownloader2 no longer running. Exiting..." 65 | -------------------------------------------------------------------------------- /.drone.yml: -------------------------------------------------------------------------------- 1 | # 2 | # Drone pipeline to build Docker image. 3 | # 4 | 5 | kind: pipeline 6 | type: docker 7 | name: default 8 | 9 | steps: 10 | 11 | - name: build-only 12 | image: plugins/docker 13 | settings: 14 | repo: ${DRONE_REPO_NAMESPACE}/${DRONE_REPO_NAME##docker-} 15 | build_args: 16 | - DOCKER_IMAGE_VERSION=drone-ci 17 | dry_run: true 18 | when: 19 | ref: 20 | exclude: 21 | - refs/tags/v* 22 | 23 | - name: set-docker-tags 24 | image: alpine 25 | commands: 26 | # Always tag the Docker image with the Git tag (i.e. vX.Y.Z). 27 | - printf "${DRONE_TAG}" >> .tags 28 | # Tag the Docker image with with 'latest' only if not a prerelease. 29 | - printf "${DRONE_TAG}" | grep -q '-' || printf ",latest" >> .tags 30 | when: 31 | ref: 32 | - refs/tags/v* 33 | 34 | - name: build-and-push 35 | image: plugins/docker 36 | settings: 37 | repo: ${DRONE_REPO_NAMESPACE}/${DRONE_REPO_NAME##docker-} 38 | username: 39 | from_secret: dockerhub_username 40 | password: 41 | from_secret: dockerhub_password 42 | build_args: 43 | - DOCKER_IMAGE_VERSION=${DRONE_TAG:1} 44 | when: 45 | ref: 46 | - refs/tags/v* 47 | 48 | - name: push-dockerhub-readme 49 | image: jlesage/drone-push-readme 50 | settings: 51 | repo: ${DRONE_REPO_NAMESPACE}/${DRONE_REPO_NAME##docker-} 52 | username: 53 | from_secret: dockerhub_username 54 | password: 55 | from_secret: dockerhub_password 56 | readme: DOCKERHUB.md 57 | when: 58 | ref: 59 | - refs/tags/v* 60 | 61 | - name: microbadger 62 | image: plugins/webhook 63 | settings: 64 | urls: 65 | from_secret: microbadger_webhook 66 | failure: ignore 67 | when: 68 | ref: 69 | - refs/tags/v* 70 | 71 | - name: notification 72 | image: plugins/pushover 73 | settings: 74 | message: "{{ repo.owner }}/{{ repo.name }}#{{ truncate build.commit 8 }} ({{ build.branch }}) by {{ build.author }} - {{ build.message }}" 75 | token: 76 | from_secret: pushover_token 77 | user: 78 | from_secret: pushover_user 79 | failure: ignore 80 | when: 81 | event: 82 | exclude: 83 | - pull_request 84 | status: 85 | - success 86 | - failure 87 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | # 2 | # jdownloader-2 Dockerfile 3 | # 4 | # https://github.com/daniel0076/docker-jdownloader-2 5 | # Forked from https://github.com/jlesage/docker-jdownloader-2 6 | # Supports aarch64 and tested on Raspberry Pi 4 7 | 8 | # Pull base image. 9 | # NOTE: ubuntu has glibc for 7-Zip-JBinding, and better aarch64 package support. 10 | FROM daniel0076/baseimage-gui:ubuntu-20.04-aarch64-v0.1 11 | 12 | # Docker image version is provided via build arg. 13 | ARG DOCKER_IMAGE_VERSION=unknown 14 | 15 | # Define software download URLs. 16 | ARG JDOWNLOADER_URL=http://installer.jdownloader.org/JDownloader.jar 17 | 18 | # Define working directory. 19 | WORKDIR /tmp 20 | 21 | # Add 7-Zip-JBinding for aarch64 22 | COPY ./arm64/*.jar /defaults/lib/ 23 | 24 | # Download JDownloader 2. 25 | RUN \ 26 | add-pkg --virtual build-dependencies wget && \ 27 | mkdir -p /defaults && \ 28 | wget ${JDOWNLOADER_URL} -O /defaults/JDownloader.jar && \ 29 | del-pkg build-dependencies 30 | 31 | # Install dependencies. 32 | RUN \ 33 | add-pkg \ 34 | openjdk-8-jre \ 35 | ttf-dejavu \ 36 | # For ffmpeg and ffprobe tools. 37 | ffmpeg \ 38 | # For rtmpdump tool. 39 | rtmpdump \ 40 | libasound2 41 | 42 | # Maximize only the main/initial window. 43 | RUN \ 44 | sed-patch 's///' \ 45 | /etc/xdg/openbox/rc.xml 46 | 47 | # Generate and install favicons. 48 | RUN \ 49 | APP_ICON_URL=https://raw.githubusercontent.com/jlesage/docker-templates/master/jlesage/images/jdownloader-2-icon.png && \ 50 | install_app_icon.sh "$APP_ICON_URL" 51 | 52 | # Add files. 53 | COPY rootfs/ / 54 | 55 | # Set environment variables. 56 | ENV APP_NAME="JDownloader 2" \ 57 | S6_KILL_GRACETIME=8000 58 | 59 | # Define mountable directories. 60 | VOLUME ["/config"] 61 | VOLUME ["/output"] 62 | 63 | # Expose ports. 64 | # - 3129: For MyJDownloader in Direct Connection mode. 65 | EXPOSE 3129 66 | 67 | # Metadata. 68 | LABEL \ 69 | org.label-schema.name="jdownloader-2" \ 70 | org.label-schema.description="Docker container for JDownloader 2" \ 71 | org.label-schema.version="$DOCKER_IMAGE_VERSION" \ 72 | org.label-schema.vcs-url="https://github.com/daniel0076/docker-jdownloader-2" \ 73 | org.label-schema.schema-version="1.0" 74 | -------------------------------------------------------------------------------- /rootfs/etc/cont-init.d/jdownloader2.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/with-contenv sh 2 | 3 | set -e # Exit immediately if a command exits with a non-zero status. 4 | set -u # Treat unset variables as an error. 5 | 6 | run() { 7 | j=1 8 | while eval "\${pipestatus_$j+:} false"; do 9 | unset pipestatus_$j 10 | j=$(($j+1)) 11 | done 12 | j=1 com= k=1 l= 13 | for a; do 14 | if [ "x$a" = 'x|' ]; then 15 | com="$com { $l "'3>&- 16 | echo "pipestatus_'$j'=$?" >&3 17 | } 4>&- |' 18 | j=$(($j+1)) l= 19 | else 20 | l="$l \"\$$k\"" 21 | fi 22 | k=$(($k+1)) 23 | done 24 | com="$com $l"' 3>&- >&4 4>&- 25 | echo "pipestatus_'$j'=$?"' 26 | exec 4>&1 27 | eval "$(exec 3>&1; eval "$com")" 28 | exec 4>&- 29 | j=1 30 | while eval "\${pipestatus_$j+:} false"; do 31 | eval "[ \$pipestatus_$j -eq 0 ]" || return 1 32 | j=$(($j+1)) 33 | done 34 | return 0 35 | } 36 | 37 | log() { 38 | if [ -n "${1-}" ]; then 39 | echo "[cont-init.d] $(basename $0): $*" 40 | else 41 | while read OUTPUT; do 42 | echo "[cont-init.d] $(basename $0): $OUTPUT" 43 | done 44 | fi 45 | } 46 | 47 | # Install requested packages. 48 | if [ "${INSTALL_EXTRA_PKGS:-UNSET}" != "UNSET" ]; then 49 | log "installing requested package(s)..." 50 | for PKG in $INSTALL_EXTRA_PKGS; do 51 | if cat /etc/apk/world | grep -wq "$PKG"; then 52 | log "package '$PKG' already installed" 53 | else 54 | log "installing '$PKG'..." 55 | run add-pkg "$PKG" 2>&1 \| log 56 | fi 57 | done 58 | fi 59 | 60 | # Make sure mandatory directories exist. 61 | mkdir -p /config/logs 62 | 63 | if [ ! -f /config/JDownloader.jar ]; then 64 | cp /defaults/JDownloader.jar /config 65 | cp -r /defaults/cfg /config/ 66 | fi 67 | 68 | # Take ownership of the config directory content. 69 | find /config -mindepth 1 -exec chown $USER_ID:$GROUP_ID {} \; 70 | 71 | # Take ownership of the output directory. 72 | if ! chown $USER_ID:$GROUP_ID /output; then 73 | # Failed to take ownership of /output. This could happen when, 74 | # for example, the folder is mapped to a network share. 75 | # Continue if we have write permission, else fail. 76 | if s6-setuidgid $USER_ID:$GROUP_ID [ ! -w /output ]; then 77 | log "ERROR: Failed to take ownership and no write permission on /output." 78 | exit 1 79 | fi 80 | fi 81 | 82 | # vim: set ft=sh : 83 | -------------------------------------------------------------------------------- /DOCKERHUB.md: -------------------------------------------------------------------------------- 1 | # Docker container for JDownloader 2 2 | [![Docker Image Size](https://img.shields.io/microbadger/image-size/jlesage/jdownloader-2)](http://microbadger.com/#/images/jlesage/jdownloader-2) [![Build Status](https://drone.le-sage.com/api/badges/jlesage/docker-jdownloader-2/status.svg)](https://drone.le-sage.com/jlesage/docker-jdownloader-2) [![GitHub Release](https://img.shields.io/github/release/jlesage/docker-jdownloader-2.svg)](https://github.com/jlesage/docker-jdownloader-2/releases/latest) [![Donate](https://img.shields.io/badge/Donate-PayPal-green.svg)](https://paypal.me/JocelynLeSage/0usd) 3 | 4 | This is a Docker container for [JDownloader 2](http://jdownloader.org/). 5 | 6 | The GUI of the application is accessed through a modern web browser (no installation or configuration needed on the client side) or via any VNC client. 7 | 8 | --- 9 | 10 | [![JDownloader 2 logo](https://images.weserv.nl/?url=raw.githubusercontent.com/jlesage/docker-templates/master/jlesage/images/jdownloader-2-icon.png&w=200)](http://jdownloader.org/)[![JDownloader 2](https://dummyimage.com/400x110/ffffff/575757&text=JDownloader+2)](http://jdownloader.org/) 11 | 12 | JDownloader 2 is a free, open-source download management tool with a huge 13 | community of developers that makes downloading as easy and fast as it should be. 14 | Users can start, stop or pause downloads, set bandwith limitations, auto-extract 15 | archives and much more. It's an easy-to-extend framework that can save hours of 16 | your valuable time every day! 17 | 18 | --- 19 | 20 | ## Quick Start 21 | 22 | **NOTE**: The Docker command provided in this quick start is given as an example 23 | and parameters should be adjusted to your need. 24 | 25 | Launch the JDownloader 2 docker container with the following command: 26 | ``` 27 | docker run -d \ 28 | --name=jdownloader-2 \ 29 | -p 5800:5800 \ 30 | -v /docker/appdata/jdownloader-2:/config:rw \ 31 | -v $HOME/Downloads:/output:rw \ 32 | jlesage/jdownloader-2 33 | ``` 34 | 35 | Where: 36 | - `/docker/appdata/jdownloader-2`: This is where the application stores its configuration, log and any files needing persistency. 37 | - `$HOME/Downloads`: This is where downloaded files are stored. 38 | 39 | Browse to `http://your-host-ip:5800` to access the JDownloader 2 GUI. 40 | 41 | ## Documentation 42 | 43 | Full documentation is available at https://github.com/jlesage/docker-jdownloader-2. 44 | 45 | ## Support or Contact 46 | 47 | Having troubles with the container or have questions? Please 48 | [create a new issue]. 49 | 50 | For other great Dockerized applications, see https://jlesage.github.io/docker-apps. 51 | 52 | [create a new issue]: https://github.com/jlesage/docker-jdownloader-2/issues 53 | -------------------------------------------------------------------------------- /appdefs.xml: -------------------------------------------------------------------------------- 1 | 7 | 8 | 9 | 7 10 | x11 11 | JDownloader 2 12 | {{ defs.app.friendly_name|lower|replace(' ', '-') }} 13 | 14 | 15 | JDownloader 2 is a free, open-source download management tool with a huge 16 | community of developers that makes downloading as easy and fast as it should be. 17 | Users can start, stop or pause downloads, set bandwith limitations, auto-extract 18 | archives and much more. It's an easy-to-extend framework that can save hours of 19 | your valuable time every day! 20 | 21 | http://jdownloader.org/ 22 | 23 | 24 | https://forums.unraid.net/topic/58552-support-jdownloader-2/ 25 | Downloaders: 26 | 27 | 28 | 100MB 29 | /storage 30 | 31 | 32 | 33 |
34 | MyJDownloader 35 | 36 | [MyJDownloader](https://my.jdownloader.org) is an online service providing 37 | remote access to your JDownloader with Web Interface, Android App, iPhone App, 38 | Windows Phone App and Browser Extensions. It allows to check download status, 39 | add links and solve captchas from everywhere. 40 | 41 | To activate, open the JDownloader UI and click the *My.JDownloader* tab. 42 | 43 |
44 |
45 | Direct Connection 46 | 47 | When using MyJDownloader from a device on the same local network as the 48 | JDownloader Docker container instance, *Direct Connection* mode can be enabled 49 | to reduce the latency and increase the bandwidth. With this mode, instead of 50 | going through the cloud, the communication is done through a direct connection 51 | between the device and JDownloader. 52 | 53 | The default container's network being in *bridge* mode, the *Direct Connection* 54 | mode is not automatically detected/activated and the following steps are required: 55 | 56 | * Make sure the container's port `3129` is mapped to the host port `3129`. 57 | This is done by adding the parameter `-p 3129:3129` to the `docker run` 58 | command. 59 | * Open the JDownloader UI. 60 | * Go to *Settings*->*Advanced Settings*. 61 | * Search for `MyJDownloaderSettings`. 62 | * Set `Custom Device IPs` to the IP address of the host running the container, 63 | between double quotes (e.g. `"192.168.1.1"`). 64 | * Change the `Direct Connection Mode` to `Allow lan/wan connections with 65 | manual port forwarding`. 66 | * Restart JDownloader (*File*->*Restart*). 67 | 68 |
69 |
70 | Click'n'Load 71 | 72 | The easiest way to use the [Click'n'Load] feature is by installing the 73 | [MyJDownloader browser extension]. With this method, the browser extension 74 | handles POST requests to `http://127.0.0.1:9666` and forward the links to 75 | JDownloader via the *MyJDownloader* service. 76 | 77 | [Click'n'Load]: http://jdownloader.org/knowledge/wiki/glossary/cnl2 78 | [MyJDownloader browser extension]: https://my.jdownloader.org/apps/ 79 | 80 |
81 |
82 | 83 | 84 | 85 | 1.6.0 86 | 2020-04-25 87 | Added the ability to install extra packages to the container image. 88 | 89 | 90 | 1.5.2 91 | 2019-04-27 92 | Now using Java JRE from Amazon instead of Oracle. 93 | Now using baseimage v3.5.2, which brings the following changes: 94 | Updated installed packages to get latest security fixes. 95 | Fixed issue where the container could have a zombie process. 96 | Fixed issue where the password would not be submitted when pressing the enter key in the password modal. 97 | Use relative path for favicon ressources to be more friendly with reverse proxy senarios. 98 | 99 | 100 | 1.5.1 101 | 2018-09-25 102 | Fixed issue where opening/processing captcha would crash JDownloader. 103 | 104 | 105 | 1.5.0 106 | 2018-09-21 107 | Now using baseimage v3.5.1, which brings the following changes (since last used version): 108 | Image based on Alpine Linux 3.8. 109 | Upgraded s6-overlay to version 1.21.4.0. 110 | Wait for a limited time when terminating a service. 111 | Set and create the XDG_RUNTIME_DIR directory. 112 | Updated installed packages to get latest security fixes. 113 | Upgraded Java JRE to version 8u181. 114 | Install `ffmpeg`, `ffprobe` and `rtmpdump` to allow JDownloader to use them. 115 | Fixed an issue where JDownloader would not work on a filesystem without execution permission. 116 | 117 | 118 | 1.4.3 119 | 2018-03-02 120 | Now using baseimage v3.3.4, which brings the following changes (since last used version): 121 | Make sure the log monitor is started after the X server. 122 | Fixed an issue where the log monitor `yad` target would use XDG folders of the application. 123 | Fixed issue where log monitor states were not cleared during container startup. 124 | 125 | 126 | 1.4.2 127 | 2018-02-03 128 | Now using baseimage v3.3.2, which brings the following changes: 129 | Restored timezone support in Alpine Linux images with glibc. 130 | Fixed issue in `add-pkg` helper where a package could be incorrectly detected as installed. 131 | 132 | 133 | 1.4.1 134 | 2018-01-30 135 | Now using baseimage v3.3.1, which brings the following changes: 136 | Adjusted the way some ressources are accessed to better support reverse proxy to the container. 137 | 138 | 139 | 1.4.0 140 | 2018-01-22 141 | Now using baseimage v3.3.0, which brings the following changes (since last used version): 142 | For Alpine Linux images with glibc, automatically update dynamic linker's cache after new libraries are installed. 143 | Fixed the LANG environment variable not being set properly. 144 | Added the ability to automatically install a CJK (Chinese/Japanese/Korean) font. 145 | 146 | 147 | 1.3.5 148 | 2018-01-11 149 | Fixed issue where libraries were not found. 150 | 151 | 152 | 1.3.4 153 | 2018-01-11 154 | Now using baseimage v3.2.2, which brings the following changes (since last used version): 155 | Upgraded S6 overlay to version 1.21.2.2. 156 | Upgraded glibc to version 2.26 (Alpine Linux glibc images). 157 | Adjusted the way ownership of /config is taken to better support cases where the folder is mapped to a network share. 158 | Small adjustment to the way ownership of files are taken. 159 | 160 | 161 | 1.3.3 162 | 2017-12-12 163 | Now using baseimage v3.1.4, which brings the following changes: 164 | Set 2 worker processes for nginx. 165 | 166 | 167 | 1.3.2 168 | 2017-11-20 169 | Now using baseimage v3.1.3, which brings the following changes: 170 | Upgraded S6 overlay to version 1.21.2.1. 171 | 172 | 173 | 1.3.1 174 | 2017-11-07 175 | Now using baseimage v3.1.2, which brings the following changes (from last used version): 176 | Fixed an issue where a self-disabled service could be restarted. 177 | Upgraded S6 overlay to version 1.21.2.0. 178 | Use a more efficient way to monitor status files. 179 | Fixed and issue where container would not start when log directory is missing. 180 | 181 | 182 | 1.3.0 183 | 2017-10-29 184 | Now using baseimage v3.1.0, which brings the following changes: 185 | Upgraded S6 overlay to version 1.21.1.1. 186 | Enhanced integration of service dependencies functionality. 187 | Added a simple log monitor. 188 | Fixed race condition where container's exit code would not be the expected one. 189 | Fixed issue where application's GUI fails to displayed when accessing it through the web interface via standard ports 80/443. 190 | 191 | 192 | 1.2.0 193 | 2017-10-10 194 | Now using baseimage v3.0.2, which brings the following changes: 195 | Better support for service dependencies. 196 | Added support for secure access to the application's GUI. 197 | 198 | 199 | 1.1.8 200 | 2017-09-08 201 | Now using baseimage v2.0.8, which brings the following changes (from last used version): 202 | Fixed timezone support on alpine-glibc images. 203 | Fixed duplicated entries in /etc/passwd and /etc/group that were created after a restart of the container. 204 | 205 | 206 | 1.1.7 207 | 2017-09-01 208 | Fixed issue where the first-run indication had the wrong ownership. 209 | Fixedissue where increase of the time before forcefully killing processes was not respected. 210 | 211 | 212 | 1.1.6 213 | 2017-08-14 214 | Now using baseimage v2.0.6, which brings the following changes: 215 | Upgraded S6 overlay to version 1.20.0.0. 216 | 217 | 218 | 1.1.5 219 | 2017-07-31 220 | Properly remove the first run indication. 221 | 222 | 223 | 1.1.4 224 | 2017-07-31 225 | Now using baseimage v2.0.5, which brings the following changes (from last used version): 226 | Clear the environment of the container during startup. 227 | Clear the /tmp folder during startup. 228 | Cleanly terminate the X server when container is restarted/stopped. 229 | Improved robustness of X server starting process. 230 | Removed unneeded files from the image. 231 | 232 | 233 | 1.1.3 234 | 2017-07-27 235 | Now using baseimage v2.0.3, which brings the following changes: 236 | Improved robustness of the X server starting process. 237 | 238 | 239 | 1.1.2 240 | 2017-07-23 241 | Now using baseimage v2.0.2, which brings the following changes: 242 | Proper VNC port is exposed. 243 | 244 | 245 | 1.1.1 246 | 2017-07-18 247 | Now using baseimage v2.0.1, which brings the following changes: 248 | Internal enhancements. 249 | Clean temporary files left by npm. 250 | 251 | 252 | 1.1.0 253 | 2017-07-17 254 | Now using baseimage v2.0.0, which brings the following changes: 255 | Various internal enhancements. 256 | Fixed the way a service waits for another one. 257 | 258 | 259 | 1.0.1 260 | 2017-07-07 261 | Fixed the auto archive extractor. 262 | Allow more time to JDownloader to gracefully shutdown. 263 | Improved handling/monitoring of JDownloader process. 264 | 265 | 266 | 1.0.0 267 | 2017-07-05 268 | Initial release. 269 | 270 | 271 |
272 | 273 | 274 | 275 | 276 | INSTALL_EXTRA_PKGS 277 | Space-separated list of Alpine Linux packages to install. See https://pkgs.alpinelinux.org/packages?name=&branch=v3.9&arch=x86_64 for the list of available Alpine Linux packages. 278 | 279 | 280 | Install Packages 281 | Space-separated list of Alpine Linux packages to install. See [i]https://pkgs.alpinelinux.org[/i] for the list of available Alpine Linux packages. 282 | advanced 283 | false 284 | false 285 | 286 | 287 | 288 | 289 | 290 | 291 | /output 292 | $HOME/Downloads 293 | This is where downloaded files are stored. 294 | rw 295 | true 296 | 297 | Output Directory 298 | This is the default output folder for downloaded files.[br]Container path: /output 299 | always-hide 300 | true 301 | false 302 | 303 | 304 | 305 | 306 | 307 | 308 | 3129 309 | tcp 310 | Port used by *MyJDownloader* mobile applications and browser extensions to establish a direct connect to the JDownloader Docker container instance. Port needs to be exposed only if *MyJDownloader* is enabled and configured in *Direct Connection* mode. **NOTE**: Since this port is being reported to the *MyJDownloader* online service, the port mapped on the host side **must** be the same (i.e. 3129). 311 | false 312 | 313 | 314 | 315 | 316 | 317 | 318 | 319 |
320 | --------------------------------------------------------------------------------