diff --git a/bitnami/jupyterhub/6/debian-12/Dockerfile b/bitnami/jupyterhub/6/debian-12/Dockerfile new file mode 100644 index 000000000000..080b1664f331 --- /dev/null +++ b/bitnami/jupyterhub/6/debian-12/Dockerfile @@ -0,0 +1,55 @@ +# Copyright Broadcom, Inc. All Rights Reserved. +# SPDX-License-Identifier: APACHE-2.0 + +FROM docker.io/bitnami/minideb:bookworm + +ARG DOWNLOADS_URL="https://downloads.bitnami.com/files/stacksmith" +ARG TARGETARCH + +LABEL org.opencontainers.image.base.name="docker.io/bitnami/minideb:bookworm" \ + org.opencontainers.image.created="2026-09-03T09:54:24Z" \ + org.opencontainers.image.description="Application packaged by Broadcom, Inc." \ + org.opencontainers.image.documentation="https://github.com/bitnami/containers/tree/main/bitnami/jupyterhub/README.md" \ + org.opencontainers.image.source="https://github.com/bitnami/containers/tree/main/bitnami/jupyterhub" \ + org.opencontainers.image.title="jupyterhub" \ + org.opencontainers.image.vendor="Broadcom, Inc." \ + org.opencontainers.image.version="6.0.0" + +ENV HOME="/" \ + OS_ARCH="${TARGETARCH:-amd64}" \ + OS_FLAVOUR="debian-12" \ + OS_NAME="linux" + +COPY prebuildfs / +SHELL ["/bin/bash", "-o", "errexit", "-o", "nounset", "-o", "pipefail", "-c"] +# Install required system packages and dependencies +RUN install_packages ca-certificates curl libgcc-s1 libssl3 libstdc++6 procps zlib1g +RUN --mount=type=secret,id=downloads_url,env=SECRET_DOWNLOADS_URL \ + DOWNLOADS_URL=${SECRET_DOWNLOADS_URL:-${DOWNLOADS_URL}} ; \ + mkdir -p /tmp/bitnami/pkg/cache/ ; cd /tmp/bitnami/pkg/cache/ || exit 1 ; \ + COMPONENTS=( \ + "miniforge-26.5.3-0-0-linux-${OS_ARCH}-debian-12" \ + "jupyterhub-6.0.0-0-linux-${OS_ARCH}-debian-12" \ + ) ; \ + for COMPONENT in "${COMPONENTS[@]}"; do \ + if [ ! -f "${COMPONENT}.tar.gz" ]; then \ + curl -SsLf "${DOWNLOADS_URL}/${COMPONENT}.tar.gz" -O ; \ + fi ; \ + sha256sum -c "/opt/bitnami/checksums/${COMPONENT}.tar.gz.sha256" ; \ + tar -zxf "${COMPONENT}.tar.gz" -C /opt/bitnami --strip-components=2 --no-same-owner ; \ + rm -rf "${COMPONENT}".tar.gz ; \ + done ; \ + rm -rf /opt/bitnami/checksums ; +RUN apt-get update && apt-get upgrade -y && \ + apt-get clean && rm -rf /var/lib/apt/lists /var/cache/apt/archives +RUN chmod g+rwX /opt/bitnami +RUN find / -perm /6000 -type f -exec chmod a-s {} \; || true +RUN uninstall_packages curl + +ENV APP_VERSION="6.0.0" \ + BITNAMI_APP_NAME="jupyterhub" \ + IMAGE_REVISION="0" \ + PATH="/opt/bitnami/miniforge/bin:/opt/bitnami/miniforge/bin/:$PATH" + +USER 1001 +ENTRYPOINT [ "jupyterhub" ] diff --git a/bitnami/jupyterhub/6/debian-12/docker-compose.yml b/bitnami/jupyterhub/6/debian-12/docker-compose.yml new file mode 100644 index 000000000000..75dd365bcb66 --- /dev/null +++ b/bitnami/jupyterhub/6/debian-12/docker-compose.yml @@ -0,0 +1,75 @@ +# Copyright Broadcom, Inc. All Rights Reserved. +# SPDX-License-Identifier: APACHE-2.0 + +services: + postgresql: + image: docker.io/bitnami/postgresql:latest + environment: + - POSTGRESQL_USERNAME=jupyterhub + - POSTGRESQL_PASSWORD=jupyterhub + - POSTGRESQL_DATABASE=jupyterhub + volumes: + - postgresql_data:/bitnami/postgresql + + jupyterhub: + image: docker.io/bitnami/jupyterhub:6 + user: root + environment: + - JUPYTERHUB_CRYPT_KEY=c31f45e8a4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1 + - CONFIGPROXY_AUTH_TOKEN=c31f45e8a4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1 + volumes: + - /var/run/docker.sock:/var/run/docker.sock + - jupyterhub_data:/data + command: > + --JupyterHub.spawner_class=dockerspawner.DockerSpawner + --DockerSpawner.image=docker.io/bitnami/jupyter-base-notebook:6 + --DockerSpawner.network_name=jupyterhub_default + --JupyterHub.hub_ip=0.0.0.0 + --JupyterHub.hub_connect_ip=jupyterhub + --JupyterHub.authenticator_class=dummy + --DummyAuthenticator.password=bitnami + --JupyterHub.cookie_secret_file=/data/jupyterhub_cookie_secret + --JupyterHub.db_url=postgresql://jupyterhub:jupyterhub@postgresql:5432/jupyterhub + --ConfigurableHTTPProxy.should_start=False + --ConfigurableHTTPProxy.api_url=http://proxy:8001 + depends_on: + - postgresql + + proxy: + image: docker.io/bitnami/configurable-http-proxy:latest + command: + - --ip=0.0.0.0 + - --api-ip=0.0.0.0 + - --api-port=8001 + - --default-target=http://jupyterhub:8081 + - --error-target=http://jupyterhub:8081/hub/error + - --port=8000 + ports: + - "8000:8000" + environment: + - CONFIGPROXY_AUTH_TOKEN=c31f45e8a4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1 + depends_on: + - jupyterhub + + jupyter-base-notebook: + image: docker.io/bitnami/jupyter-base-notebook:6 + command: + - jupyter + - lab + - --ip=0.0.0.0 + - --port=8888 + - --no-browser + - --ServerApp.token='' + - --ServerApp.password='' + ports: + - '8888:8888' + volumes: + - 'jupyter_data:/opt/bitnami/jupyterhub-singleuser/' + +volumes: + postgresql_data: + driver: local + jupyterhub_data: + driver: local + jupyter_data: + driver: local diff --git a/bitnami/jupyterhub/6/debian-12/prebuildfs/opt/bitnami/checksums/jupyterhub-6.0.0-0-linux-amd64-debian-12.tar.gz.sha256 b/bitnami/jupyterhub/6/debian-12/prebuildfs/opt/bitnami/checksums/jupyterhub-6.0.0-0-linux-amd64-debian-12.tar.gz.sha256 new file mode 100644 index 000000000000..0ad79130cab5 --- /dev/null +++ b/bitnami/jupyterhub/6/debian-12/prebuildfs/opt/bitnami/checksums/jupyterhub-6.0.0-0-linux-amd64-debian-12.tar.gz.sha256 @@ -0,0 +1 @@ +eb3d0e1005635beac772f49eec25c8947619b21de506b1908dce5e323f802a01 jupyterhub-6.0.0-0-linux-amd64-debian-12.tar.gz diff --git a/bitnami/jupyterhub/6/debian-12/prebuildfs/opt/bitnami/checksums/jupyterhub-6.0.0-0-linux-arm64-debian-12.tar.gz.sha256 b/bitnami/jupyterhub/6/debian-12/prebuildfs/opt/bitnami/checksums/jupyterhub-6.0.0-0-linux-arm64-debian-12.tar.gz.sha256 new file mode 100644 index 000000000000..fb2f17fd8ada --- /dev/null +++ b/bitnami/jupyterhub/6/debian-12/prebuildfs/opt/bitnami/checksums/jupyterhub-6.0.0-0-linux-arm64-debian-12.tar.gz.sha256 @@ -0,0 +1 @@ +dbaee75d47b388c6bdff2210933946b9f27b2821a18c2d3fce4e9f4af927a330 jupyterhub-6.0.0-0-linux-arm64-debian-12.tar.gz diff --git a/bitnami/jupyterhub/6/debian-12/prebuildfs/opt/bitnami/checksums/miniforge-26.5.3-0-0-linux-amd64-debian-12.tar.gz.sha256 b/bitnami/jupyterhub/6/debian-12/prebuildfs/opt/bitnami/checksums/miniforge-26.5.3-0-0-linux-amd64-debian-12.tar.gz.sha256 new file mode 100644 index 000000000000..1a7a14ecd71e --- /dev/null +++ b/bitnami/jupyterhub/6/debian-12/prebuildfs/opt/bitnami/checksums/miniforge-26.5.3-0-0-linux-amd64-debian-12.tar.gz.sha256 @@ -0,0 +1 @@ +70c191452882fcb3e96609f0c49bc43ac7a8c84e975ebbc98c84639c2fd72970 miniforge-26.5.3-0-0-linux-amd64-debian-12.tar.gz diff --git a/bitnami/jupyterhub/6/debian-12/prebuildfs/opt/bitnami/checksums/miniforge-26.5.3-0-0-linux-arm64-debian-12.tar.gz.sha256 b/bitnami/jupyterhub/6/debian-12/prebuildfs/opt/bitnami/checksums/miniforge-26.5.3-0-0-linux-arm64-debian-12.tar.gz.sha256 new file mode 100644 index 000000000000..5db2fff14fc7 --- /dev/null +++ b/bitnami/jupyterhub/6/debian-12/prebuildfs/opt/bitnami/checksums/miniforge-26.5.3-0-0-linux-arm64-debian-12.tar.gz.sha256 @@ -0,0 +1 @@ +46df3e2cc4e7e56b9d1de2ee8f6ec86b89c8727be7e12fbba74379993c11c979 miniforge-26.5.3-0-0-linux-arm64-debian-12.tar.gz diff --git a/bitnami/jupyterhub/6/debian-12/prebuildfs/opt/bitnami/licenses/licenses.txt b/bitnami/jupyterhub/6/debian-12/prebuildfs/opt/bitnami/licenses/licenses.txt new file mode 100644 index 000000000000..76956b38e82c --- /dev/null +++ b/bitnami/jupyterhub/6/debian-12/prebuildfs/opt/bitnami/licenses/licenses.txt @@ -0,0 +1,2 @@ +Bitnami containers ship with software bundles. You can find the licenses under: +/opt/bitnami/[name-of-bundle]/licenses/[bundle-version].txt diff --git a/bitnami/jupyterhub/6/debian-12/prebuildfs/usr/sbin/install_packages b/bitnami/jupyterhub/6/debian-12/prebuildfs/usr/sbin/install_packages new file mode 100755 index 000000000000..ccce248b2d14 --- /dev/null +++ b/bitnami/jupyterhub/6/debian-12/prebuildfs/usr/sbin/install_packages @@ -0,0 +1,27 @@ +#!/bin/sh +# Copyright Broadcom, Inc. All Rights Reserved. +# SPDX-License-Identifier: APACHE-2.0 +set -eu + +n=0 +max=2 +export DEBIAN_FRONTEND=noninteractive + +until [ $n -gt $max ]; do + set +e + ( + apt-get update -qq && + apt-get install -y --no-install-recommends "$@" + ) + CODE=$? + set -e + if [ $CODE -eq 0 ]; then + break + fi + if [ $n -eq $max ]; then + exit $CODE + fi + echo "apt failed, retrying" + n=$(($n + 1)) +done +apt-get clean && rm -rf /var/lib/apt/lists /var/cache/apt/archives diff --git a/bitnami/jupyterhub/6/debian-12/prebuildfs/usr/sbin/run-script b/bitnami/jupyterhub/6/debian-12/prebuildfs/usr/sbin/run-script new file mode 100755 index 000000000000..0e07c9038dfd --- /dev/null +++ b/bitnami/jupyterhub/6/debian-12/prebuildfs/usr/sbin/run-script @@ -0,0 +1,24 @@ +#!/bin/sh +# Copyright Broadcom, Inc. All Rights Reserved. +# SPDX-License-Identifier: APACHE-2.0 +set -u + +if [ $# -eq 0 ]; then + >&2 echo "No arguments provided" + exit 1 +fi + +script=$1 +exit_code="${2:-96}" +fail_if_not_present="${3:-n}" + +if test -f "$script"; then + sh $script + + if [ $? -ne 0 ]; then + exit $((exit_code)) + fi +elif [ "$fail_if_not_present" = "y" ]; then + >&2 echo "script not found: $script" + exit 127 +fi diff --git a/bitnami/jupyterhub/6/debian-12/prebuildfs/usr/sbin/uninstall_packages b/bitnami/jupyterhub/6/debian-12/prebuildfs/usr/sbin/uninstall_packages new file mode 100755 index 000000000000..615c430e4e68 --- /dev/null +++ b/bitnami/jupyterhub/6/debian-12/prebuildfs/usr/sbin/uninstall_packages @@ -0,0 +1,26 @@ +#!/bin/sh +# Copyright Broadcom, Inc. All Rights Reserved. +# SPDX-License-Identifier: APACHE-2.0 +set -eu + +n=0 +max=2 +export DEBIAN_FRONTEND=noninteractive + +until [ $n -gt $max ]; do + set +e + ( + apt-get autoremove --purge -y "$@" + ) + CODE=$? + set -e + if [ $CODE -eq 0 ]; then + break + fi + if [ $n -eq $max ]; then + exit $CODE + fi + echo "apt failed, retrying" + n=$(($n + 1)) +done +apt-get clean && rm -rf /var/lib/apt/lists /var/cache/apt/archives diff --git a/bitnami/jupyterhub/docker-compose.yml b/bitnami/jupyterhub/docker-compose.yml index 8c8ec179842f..75dd365bcb66 100644 --- a/bitnami/jupyterhub/docker-compose.yml +++ b/bitnami/jupyterhub/docker-compose.yml @@ -12,7 +12,7 @@ services: - postgresql_data:/bitnami/postgresql jupyterhub: - image: docker.io/bitnami/jupyterhub:5 + image: docker.io/bitnami/jupyterhub:6 user: root environment: - JUPYTERHUB_CRYPT_KEY=c31f45e8a4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1 @@ -22,7 +22,7 @@ services: - jupyterhub_data:/data command: > --JupyterHub.spawner_class=dockerspawner.DockerSpawner - --DockerSpawner.image=docker.io/bitnami/jupyter-base-notebook:5 + --DockerSpawner.image=docker.io/bitnami/jupyter-base-notebook:6 --DockerSpawner.network_name=jupyterhub_default --JupyterHub.hub_ip=0.0.0.0 --JupyterHub.hub_connect_ip=jupyterhub @@ -52,7 +52,7 @@ services: - jupyterhub jupyter-base-notebook: - image: docker.io/bitnami/jupyter-base-notebook:5 + image: docker.io/bitnami/jupyter-base-notebook:6 command: - jupyter - lab