diff --git a/bitnami/cassandra/5.0/debian-12/Dockerfile b/bitnami/cassandra/5.0/debian-12/Dockerfile index 00ac651be04b..5564fc8e9200 100644 --- a/bitnami/cassandra/5.0/debian-12/Dockerfile +++ b/bitnami/cassandra/5.0/debian-12/Dockerfile @@ -8,7 +8,7 @@ ARG JAVA_EXTRA_SECURITY_DIR="/bitnami/java/extra-security" ARG TARGETARCH LABEL org.opencontainers.image.base.name="docker.io/bitnami/minideb:bookworm" \ - org.opencontainers.image.created="2026-06-26T09:21:13Z" \ + org.opencontainers.image.created="2026-07-10T22:01:11Z" \ org.opencontainers.image.description="Application packaged by Broadcom, Inc." \ org.opencontainers.image.documentation="https://github.com/bitnami/containers/tree/main/bitnami/cassandra/README.md" \ org.opencontainers.image.source="https://github.com/bitnami/containers/tree/main/bitnami/cassandra" \ @@ -24,12 +24,12 @@ ENV HOME="/" \ COPY prebuildfs / SHELL ["/bin/bash", "-o", "errexit", "-o", "nounset", "-o", "pipefail", "-c"] # Install required system packages and dependencies -RUN install_packages ca-certificates curl libbz2-1.0 libcom-err2 libcrypt1 libffi8 libgssapi-krb5-2 libjemalloc2 libk5crypto3 libkeyutils1 libkrb5-3 libkrb5support0 liblzma5 libncursesw6 libnsl2 libreadline8 libsqlite3-0 libssl3 libtinfo6 libtirpc3 procps zlib1g +RUN install_packages ca-certificates curl libbz2-1.0 libffi8 libjemalloc2 liblzma5 libncursesw6 libreadline8 libsqlite3-0 libssl3 libtinfo6 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=( \ - "python-3.11.15-19-linux-${OS_ARCH}-debian-12" \ + "python-3.14.6-6-linux-${OS_ARCH}-debian-12" \ "jre-11.0.31-11-1-linux-${OS_ARCH}-debian-12" \ "cassandra-5.0.8-0-linux-${OS_ARCH}-debian-12" \ ) ; \ @@ -55,7 +55,7 @@ RUN /opt/bitnami/scripts/cassandra/postunpack.sh RUN /opt/bitnami/scripts/java/postunpack.sh ENV APP_VERSION="5.0.8" \ BITNAMI_APP_NAME="cassandra" \ - IMAGE_REVISION="7" \ + IMAGE_REVISION="8" \ JAVA_HOME="/opt/bitnami/java" \ PATH="/opt/bitnami/python/bin:/opt/bitnami/java/bin:/opt/bitnami/cassandra/bin:$PATH" diff --git a/bitnami/cassandra/5.0/debian-12/prebuildfs/opt/bitnami/checksums/python-3.11.15-19-linux-amd64-debian-12.tar.gz.sha256 b/bitnami/cassandra/5.0/debian-12/prebuildfs/opt/bitnami/checksums/python-3.11.15-19-linux-amd64-debian-12.tar.gz.sha256 deleted file mode 100644 index 1d770b18703b..000000000000 --- a/bitnami/cassandra/5.0/debian-12/prebuildfs/opt/bitnami/checksums/python-3.11.15-19-linux-amd64-debian-12.tar.gz.sha256 +++ /dev/null @@ -1 +0,0 @@ -08ae01112059206035c39a0631c2fe4c570c97271517781bf483b9974534a14e python-3.11.15-19-linux-amd64-debian-12.tar.gz diff --git a/bitnami/cassandra/5.0/debian-12/prebuildfs/opt/bitnami/checksums/python-3.11.15-19-linux-arm64-debian-12.tar.gz.sha256 b/bitnami/cassandra/5.0/debian-12/prebuildfs/opt/bitnami/checksums/python-3.11.15-19-linux-arm64-debian-12.tar.gz.sha256 deleted file mode 100644 index be3ecb28b6f4..000000000000 --- a/bitnami/cassandra/5.0/debian-12/prebuildfs/opt/bitnami/checksums/python-3.11.15-19-linux-arm64-debian-12.tar.gz.sha256 +++ /dev/null @@ -1 +0,0 @@ -0981711b3797e7bf0b8bde5177b1b98c3db4a89149fe2d3bcedd47b5cd5159bc python-3.11.15-19-linux-arm64-debian-12.tar.gz diff --git a/bitnami/cassandra/5.0/debian-12/prebuildfs/opt/bitnami/checksums/python-3.14.6-6-linux-amd64-debian-12.tar.gz.sha256 b/bitnami/cassandra/5.0/debian-12/prebuildfs/opt/bitnami/checksums/python-3.14.6-6-linux-amd64-debian-12.tar.gz.sha256 new file mode 100644 index 000000000000..b7fe17417aad --- /dev/null +++ b/bitnami/cassandra/5.0/debian-12/prebuildfs/opt/bitnami/checksums/python-3.14.6-6-linux-amd64-debian-12.tar.gz.sha256 @@ -0,0 +1 @@ +4b19f2f8beea1ca79ebe3ec3100930ee5e400ec04b41c53538b5244781e6caee python-3.14.6-6-linux-amd64-debian-12.tar.gz diff --git a/bitnami/cassandra/5.0/debian-12/prebuildfs/opt/bitnami/checksums/python-3.14.6-6-linux-arm64-debian-12.tar.gz.sha256 b/bitnami/cassandra/5.0/debian-12/prebuildfs/opt/bitnami/checksums/python-3.14.6-6-linux-arm64-debian-12.tar.gz.sha256 new file mode 100644 index 000000000000..da7b02940943 --- /dev/null +++ b/bitnami/cassandra/5.0/debian-12/prebuildfs/opt/bitnami/checksums/python-3.14.6-6-linux-arm64-debian-12.tar.gz.sha256 @@ -0,0 +1 @@ +861435320fcee05f78c8cd6f76be0ec8cec45f0cf47042c89b1708ff27986592 python-3.14.6-6-linux-arm64-debian-12.tar.gz diff --git a/bitnami/cassandra/5.0/debian-12/prebuildfs/opt/bitnami/scripts/libservice.sh b/bitnami/cassandra/5.0/debian-12/prebuildfs/opt/bitnami/scripts/libservice.sh index a8293800d55c..c1d60a5c5f42 100644 --- a/bitnami/cassandra/5.0/debian-12/prebuildfs/opt/bitnami/scripts/libservice.sh +++ b/bitnami/cassandra/5.0/debian-12/prebuildfs/opt/bitnami/scripts/libservice.sh @@ -424,3 +424,23 @@ EOF WantedBy=bitnami.service EOF } + +######################## +# Register a SIGTERM handler that forwards the signal to all child processes. +# Should be called at the start of run.sh, before launching any background processes. +# Globals: +# None +# Arguments: +# None +# Returns: +# None +######################### +service_register_term_forwarder() { + _service_forward_term() { + warn "Caught signal SIGTERM, passing it to child processes..." + pgrep -P $$ | xargs kill -TERM 2>/dev/null + wait + exit $? + } + trap _service_forward_term TERM +} diff --git a/bitnami/cassandra/5.0/debian-12/rootfs/opt/bitnami/scripts/libcassandra.sh b/bitnami/cassandra/5.0/debian-12/rootfs/opt/bitnami/scripts/libcassandra.sh index 6d1d96f69e20..054f9fccd3d2 100644 --- a/bitnami/cassandra/5.0/debian-12/rootfs/opt/bitnami/scripts/libcassandra.sh +++ b/bitnami/cassandra/5.0/debian-12/rootfs/opt/bitnami/scripts/libcassandra.sh @@ -286,7 +286,10 @@ scylla_get_major_version() { # $1 - property # $2 - value # $3 - Use quotes in value (default: yes) -# $4 - Path to configuration file (default: $DB_CONF_FILE) +# $4 - Append the property instead of being a no-op when it is not already +# present (commented or not) in the file, e.g. for config keys not +# shipped in Bitnami's default configuration template (default: no) +# $5 - Path to configuration file (default: $DB_CONF_FILE) # Returns: # None ######################### @@ -294,9 +297,16 @@ cassandra_yaml_set() { local -r property="${1:?missing property}" local -r value="${2:?missing value}" local -r use_quotes="${3:-yes}" - local -r conf_file="${4:-$DB_CONF_FILE}" + local -r append="${4:-no}" + local -r conf_file="${5:-$DB_CONF_FILE}" - if is_boolean_yes "$use_quotes"; then + if is_boolean_yes "$append" && ! grep -qE "^\s*(#\s*)?(\-\s*)?${property}:" "$conf_file"; then + if is_boolean_yes "$use_quotes"; then + echo "${property}: '${value}'" >>"$conf_file" + else + echo "${property}: ${value}" >>"$conf_file" + fi + elif is_boolean_yes "$use_quotes"; then replace_in_file "$conf_file" "^(\s*)(#\s*)?(\s*)(\-\s*)?${property}:.*" "\1\3\4${property}: '${value}'" else replace_in_file "$conf_file" "^(\s*)(#\s*)?(\s*)(\-\s*)?${property}:.*" "\1\3\4${property}: ${value}" @@ -615,6 +625,11 @@ cassandra_enable_auth() { cassandra_yaml_set "authenticator" "${DB_AUTHENTICATOR}" cassandra_yaml_set "authorizer" "${DB_AUTHORIZER}" fi + if [[ "$DB_FLAVOR" = "scylladb" ]] && scylladb_supports_auth_superuser_config; then + info "Pre-seeding default superuser '$DB_USER' via auth_superuser_name/auth_superuser_salted_password" + cassandra_yaml_set "auth_superuser_name" "${DB_USER}" "yes" "yes" + cassandra_yaml_set "auth_superuser_salted_password" "$(scylladb_hash_password "$DB_PASSWORD")" "yes" "yes" + fi fi else debug "${DB_MOUNTED_CONF_PATH} mounted. Skipping authentication method configuration" @@ -910,7 +925,17 @@ cassandra_initialize() { fi if is_boolean_yes "$DB_PASSWORD_SEEDER"; then info "Password seeder node" - if [[ "$DB_FLAVOR" = "scylladb" ]]; then + local scylladb_preseeded_superuser="no" + if [[ "$DB_FLAVOR" = "scylladb" ]] && scylladb_supports_auth_superuser_config; then + scylladb_preseeded_superuser="yes" + fi + if is_boolean_yes "$scylladb_preseeded_superuser"; then + # ScyllaDB 2026.2+ no longer creates a default cassandra/cassandra superuser + # (scylladb/scylladb#27215); cassandra_enable_auth already pre-seeded $DB_USER + # as the superuser via auth_superuser_name/auth_superuser_salted_password, so + # there is no separate bootstrap-then-create/change-user step to perform here. + wait_for_cql_access "$DB_USER" "$DB_PASSWORD" "127.0.0.1" "$DB_PEER_CQL_MAX_RETRIES" "$DB_PEER_CQL_SLEEP_TIME" + elif [[ "$DB_FLAVOR" = "scylladb" ]]; then # ScyllaDB 2025.4.5+ (PR #22532): wait for the superuser record before connecting, # as CQL is accepting connections but auth is not ready until that log line appears. # Use 127.0.0.1 explicitly to prevent cqlsh from reconnecting to the pod IP via system.local. @@ -923,10 +948,12 @@ cassandra_initialize() { wait_for_cql_access "cassandra" "cassandra" "127.0.0.1" "$DB_PEER_CQL_MAX_RETRIES" "$DB_PEER_CQL_SLEEP_TIME" fi # Setup user - if [[ "$DB_USER" = "cassandra" ]]; then - cassandra_change_cassandra_password "cassandra" "$DB_PASSWORD" "$DB_CQL_MAX_RETRIES" "$DB_CQL_SLEEP_TIME" - else - cassandra_create_admin_user "$DB_USER" "$DB_PASSWORD" "cassandra" "cassandra" "$DB_CQL_MAX_RETRIES" "$DB_CQL_SLEEP_TIME" + if ! is_boolean_yes "$scylladb_preseeded_superuser"; then + if [[ "$DB_USER" = "cassandra" ]]; then + cassandra_change_cassandra_password "cassandra" "$DB_PASSWORD" "$DB_CQL_MAX_RETRIES" "$DB_CQL_SLEEP_TIME" + else + cassandra_create_admin_user "$DB_USER" "$DB_PASSWORD" "cassandra" "cassandra" "$DB_CQL_MAX_RETRIES" "$DB_CQL_SLEEP_TIME" + fi fi cassandra_execute_startup_cql