RANGER-4734: Docker setup to run Ranger enabled Trino
Signed-off-by: Madhan Neethiraj <madhan@apache.org>
diff --git a/agents-common/scripts/enable-agent.sh b/agents-common/scripts/enable-agent.sh
index 1302ac1..d4c7816 100755
--- a/agents-common/scripts/enable-agent.sh
+++ b/agents-common/scripts/enable-agent.sh
@@ -222,9 +222,9 @@
fi
elif [ "${HCOMPONENT_NAME}" = "trino" ]; then
HCOMPONENT_LIB_DIR=${HCOMPONENT_INSTALL_DIR}/plugin/ranger
- #Configure ranger plugin location for trino docker environment
+ #Configure ranger plugin location for trino docker environment
if [ "${INSTALL_ENV}" = "docker" ];then
- HCOMPONENT_LIB_DIR=/usr/lib/trino/plugin/ranger
+ HCOMPONENT_LIB_DIR=/usr/lib/trino/plugin/ranger
fi
if [ ! -d "${HCOMPONENT_LIB_DIR}" ]; then
@@ -263,8 +263,8 @@
HCOMPONENT_CONF_DIR=${HCOMPONENT_INSTALL_DIR}/etc
elif [ "${HCOMPONENT_NAME}" = "trino" ]; then
HCOMPONENT_CONF_DIR=${HCOMPONENT_INSTALL_DIR}/etc
- if [ "${INSTALL_ENV}" = "docker" ];then
- HCOMPONENT_CONF_DIR=${HCOMPONENT_INSTALL_DIR}
+ if [ "${INSTALL_ENV}" = "docker" ];then
+ HCOMPONENT_CONF_DIR=${HCOMPONENT_INSTALL_DIR}
fi
fi
diff --git a/dev-support/ranger-docker/.dockerignore b/dev-support/ranger-docker/.dockerignore
index 3568d85..a994d01 100644
--- a/dev-support/ranger-docker/.dockerignore
+++ b/dev-support/ranger-docker/.dockerignore
@@ -11,5 +11,6 @@
!dist/ranger-*-hbase-plugin.tar.gz
!dist/ranger-*-kafka-plugin.tar.gz
!dist/ranger-*-knox-plugin.tar.gz
+!dist/ranger-*-trino-plugin.tar.gz
!downloads/*
!scripts/*
diff --git a/dev-support/ranger-docker/.env b/dev-support/ranger-docker/.env
index 60bc4a9..d671841 100644
--- a/dev-support/ranger-docker/.env
+++ b/dev-support/ranger-docker/.env
@@ -3,6 +3,7 @@
GIT_URL=https://github.com/apache/ranger.git
BRANCH=master
PROFILE=
+BUILD_OPTS=
# Java version for RangerBase image.
# This image gets used as base docker image for all images.
@@ -11,6 +12,7 @@
# Java version to use to build Apache Ranger
# Valid values: 8, 11, 17
+# Trino builds on jdk 11 and above
RANGER_BUILD_JAVA_VERSION=8
# Java version to use to run Ranger Admin server
@@ -32,6 +34,7 @@
HIVE_HADOOP_VERSION=3.1.1
KAFKA_VERSION=2.8.1
KNOX_VERSION=1.4.0
+TRINO_VERSION=377
# versions of ranger services
RANGER_VERSION=3.0.0-SNAPSHOT
@@ -46,6 +49,7 @@
HBASE_PLUGIN_VERSION=3.0.0-SNAPSHOT
KAFKA_PLUGIN_VERSION=3.0.0-SNAPSHOT
KNOX_PLUGIN_VERSION=3.0.0-SNAPSHOT
+TRINO_PLUGIN_VERSION=3.0.0-SNAPSHOT
# To enable debug logs
DEBUG_ADMIN=false
diff --git a/dev-support/ranger-docker/Dockerfile.ranger-trino b/dev-support/ranger-docker/Dockerfile.ranger-trino
new file mode 100644
index 0000000..546b118
--- /dev/null
+++ b/dev-support/ranger-docker/Dockerfile.ranger-trino
@@ -0,0 +1,70 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+ARG TRINO_VERSION
+FROM trinodb/trino:${TRINO_VERSION}
+
+# trino base image layer has undergone changes in base os image with time.
+##########################################
+# Trino Versions | OS Layer #
+# 359 - 369 | centos 11 #
+# 370 - 389 | ubi8 #
+# 390 - 391 | azul openjdk #
+# 392 | ubi8 #
+# 393 - 431 | eclipse-temurin #
+# 432 - current | ubi9 #
+##########################################
+
+USER root
+
+ARG TRINO_VERSION
+ARG TRINO_PLUGIN_VERSION
+ENV PLUGIN_DIR=ranger-${TRINO_PLUGIN_VERSION}-trino-plugin
+
+RUN mkdir -p /home/ranger/dist
+RUN mkdir -p /opt/ranger
+RUN mkdir -p /home/ranger/scripts
+RUN groupadd ranger
+RUN useradd -g ranger -ms /bin/bash ranger
+RUN usermod -a -G ranger trino
+RUN chown -R ranger:ranger /home/ranger
+RUN chown -R ranger:ranger /opt/ranger
+
+COPY ./dist/version /home/ranger/dist
+COPY ./dist/ranger-${TRINO_PLUGIN_VERSION}-trino-plugin.tar.gz /home/ranger/dist
+COPY ./scripts/ranger-trino.sh /home/ranger/scripts
+COPY ./scripts/ranger-trino-plugin-install.properties /home/ranger/scripts
+
+RUN if [ $TRINO_VERSION -ge 370 ] && [ $TRINO_VERSION -lt 390 ] || [ $TRINO_VERSION -eq 392 ]; then\
+ dnf install -y initscripts;\
+ dnf install -y openssh-clients;\
+ dnf install -y openssh-server;\
+ elif [ $TRINO_VERSION -ge 432 ]; then\
+ microdnf install -y gzip;\
+ microdnf install -y initscripts;\
+ microdnf install -y openssh-clients;\
+ microdnf install -y openssh-server;\
+ else\
+ apt-get update; DEBIAN_FRONTEND="noninteractive" apt-get -y install ssh;\
+ fi
+
+RUN tar xvfz /home/ranger/dist/${PLUGIN_DIR}.tar.gz --directory=/opt/ranger
+RUN ln -s /opt/ranger/${PLUGIN_DIR} /opt/ranger/ranger-trino-plugin
+RUN rm -f /home/ranger/dist/${PLUGIN_DIR}.tar.gz
+RUN cp -f /home/ranger/scripts/ranger-trino-plugin-install.properties /opt/ranger/ranger-trino-plugin/install.properties
+RUN chmod 744 /home/ranger/scripts/ranger-trino.sh
+
+ENTRYPOINT ["/home/ranger/scripts/ranger-trino.sh"]
diff --git a/dev-support/ranger-docker/README.md b/dev-support/ranger-docker/README.md
index cfbe2df..0440b1c 100644
--- a/dev-support/ranger-docker/README.md
+++ b/dev-support/ranger-docker/README.md
@@ -68,14 +68,14 @@
8. Execute following command to start Ranger, Ranger enabled HDFS/YARN/HBase/Hive/Kafka/Knox and dependent services (Solr, DB) in containers:
~~~
- docker-compose -f docker-compose.ranger-base.yml -f docker-compose.ranger.yml -f docker-compose.ranger-${RANGER_DB_TYPE}.yml -f docker-compose.ranger-usersync.yml -f docker-compose.ranger-tagsync.yml -f docker-compose.ranger-kms.yml -f docker-compose.ranger-hadoop.yml -f docker-compose.ranger-hbase.yml -f docker-compose.ranger-kafka.yml -f docker-compose.ranger-hive.yml -f docker-compose.ranger-knox.yml up -d
+ docker-compose -f docker-compose.ranger-base.yml -f docker-compose.ranger.yml -f docker-compose.ranger-${RANGER_DB_TYPE}.yml -f docker-compose.ranger-usersync.yml -f docker-compose.ranger-tagsync.yml -f docker-compose.ranger-kms.yml -f docker-compose.ranger-hadoop.yml -f docker-compose.ranger-hbase.yml -f docker-compose.ranger-kafka.yml -f docker-compose.ranger-hive.yml -f docker-compose.ranger-trino.yml -f docker-compose.ranger-knox.yml up -d
~~~
- valid values for RANGER_DB_TYPE: mysql or postgres
9. To rebuild specific images and start containers with the new image, use following command:
~~~
- docker-compose -f docker-compose.ranger-base.yml -f docker-compose.ranger.yml -f docker-compose.ranger-usersync.yml -f docker-compose.ranger-tagsync.yml -f docker-compose.ranger-kms.yml -f docker-compose.ranger-hadoop.yml -f docker-compose.ranger-hbase.yml -f docker-compose.ranger-kafka.yml -f docker-compose.ranger-hive.yml -f docker-compose.ranger-knox.yml up -d --no-deps --force-recreate --build <service-1> <service-2>
+ docker-compose -f docker-compose.ranger-base.yml -f docker-compose.ranger.yml -f docker-compose.ranger-usersync.yml -f docker-compose.ranger-tagsync.yml -f docker-compose.ranger-kms.yml -f docker-compose.ranger-hadoop.yml -f docker-compose.ranger-hbase.yml -f docker-compose.ranger-kafka.yml -f docker-compose.ranger-hive.yml -f docker-compose.ranger-trino.yml -f docker-compose.ranger-knox.yml up -d --no-deps --force-recreate --build <service-1> <service-2>
~~~
9. Ranger Admin can be accessed at http://localhost:6080 (admin/rangerR0cks!)
diff --git a/dev-support/ranger-docker/docker-compose.ranger-trino.yml b/dev-support/ranger-docker/docker-compose.ranger-trino.yml
new file mode 100644
index 0000000..1b15b85
--- /dev/null
+++ b/dev-support/ranger-docker/docker-compose.ranger-trino.yml
@@ -0,0 +1,29 @@
+version: '3'
+services:
+ trino:
+ build:
+ context: .
+ dockerfile: Dockerfile.ranger-trino
+ args:
+ - TRINO_PLUGIN_VERSION=${TRINO_PLUGIN_VERSION}
+ - TRINO_VERSION=${TRINO_VERSION}
+ image: ranger-trino
+ hostname: ranger-trino
+ user: root
+ container_name: ranger-trino
+ stdin_open: true
+ tty: true
+ networks:
+ - ranger
+ ports:
+ - 8080:8080
+ depends_on:
+ ranger:
+ condition: service_started
+ environment:
+ - TRINO_PLUGIN_VERSION
+ - TRINO_VERSION
+
+networks:
+ ranger:
+ name: rangernw
diff --git a/dev-support/ranger-docker/scripts/create-ranger-services.py b/dev-support/ranger-docker/scripts/create-ranger-services.py
index c9ab326..07ca40b 100644
--- a/dev-support/ranger-docker/scripts/create-ranger-services.py
+++ b/dev-support/ranger-docker/scripts/create-ranger-services.py
@@ -46,8 +46,17 @@
'zookeeper.znode.parent': '/hbase'}})
kms = RangerService({'name': 'dev_kms', 'type': 'kms',
- 'configs': {'username': 'keyadmin', 'password': 'rangerR0cks!',
- 'provider': 'http://ranger-kms:9292'}})
+ 'configs': {'username': 'keyadmin', 'password': 'rangerR0cks!',
+ 'provider': 'http://ranger-kms:9292'}})
+
+trino = RangerService({'name': 'dev_trino',
+ 'type': 'trino',
+ 'configs': {
+ 'username': 'trino',
+ 'password': 'trino',
+ 'jdbc.driverClassName': 'io.trino.jdbc.TrinoDriver',
+ 'jdbc.url': 'jdbc:trino://ranger-trino:8080',
+ }})
if service_not_exists(hdfs):
ranger_client.create_service(hdfs)
@@ -70,3 +79,6 @@
if service_not_exists(kms):
ranger_client.create_service(kms)
print('KMS service created!')
+if service_not_exists(trino):
+ ranger_client.create_service(trino)
+ print('Trino service created!')
diff --git a/dev-support/ranger-docker/scripts/ranger-admin-install-mysql.properties b/dev-support/ranger-docker/scripts/ranger-admin-install-mysql.properties
index 5a696e4..4f4ed58 100644
--- a/dev-support/ranger-docker/scripts/ranger-admin-install-mysql.properties
+++ b/dev-support/ranger-docker/scripts/ranger-admin-install-mysql.properties
@@ -47,6 +47,15 @@
audit_solr_urls=http://ranger-solr:8983/solr/ranger_audits
audit_solr_collection_name=ranger_audits
+# audit_store=elasticsearch
+audit_elasticsearch_urls=
+audit_elasticsearch_port=9200
+audit_elasticsearch_protocol=http
+audit_elasticsearch_user=elastic
+audit_elasticsearch_password=elasticsearch
+audit_elasticsearch_index=ranger_audits
+audit_elasticsearch_bootstrap_enabled=true
+
policymgr_external_url=http://ranger-admin:6080
policymgr_http_enabled=true
diff --git a/dev-support/ranger-docker/scripts/ranger-admin-install-postgres.properties b/dev-support/ranger-docker/scripts/ranger-admin-install-postgres.properties
index 656430b..26ba2b8 100644
--- a/dev-support/ranger-docker/scripts/ranger-admin-install-postgres.properties
+++ b/dev-support/ranger-docker/scripts/ranger-admin-install-postgres.properties
@@ -47,6 +47,15 @@
audit_solr_urls=http://ranger-solr:8983/solr/ranger_audits
audit_solr_collection_name=ranger_audits
+# audit_store=elasticsearch
+audit_elasticsearch_urls=
+audit_elasticsearch_port=9200
+audit_elasticsearch_protocol=http
+audit_elasticsearch_user=elastic
+audit_elasticsearch_password=elasticsearch
+audit_elasticsearch_index=ranger_audits
+audit_elasticsearch_bootstrap_enabled=true
+
policymgr_external_url=http://ranger-admin:6080
policymgr_http_enabled=true
diff --git a/dev-support/ranger-docker/scripts/ranger-build.sh b/dev-support/ranger-docker/scripts/ranger-build.sh
index 99227bc..610b48c 100755
--- a/dev-support/ranger-docker/scripts/ranger-build.sh
+++ b/dev-support/ranger-docker/scripts/ranger-build.sh
@@ -84,7 +84,7 @@
done
fi
-mvn ${ARG_PROFILES} ${ARG_SKIPTESTS} -DskipDocs clean package
+mvn ${ARG_PROFILES} ${ARG_SKIPTESTS} -DskipDocs ${BUILD_OPTS} clean package
mv -f target/version /home/ranger/dist/
mv -f target/ranger-* /home/ranger/dist/
diff --git a/dev-support/ranger-docker/scripts/ranger-trino-plugin-install.properties b/dev-support/ranger-docker/scripts/ranger-trino-plugin-install.properties
new file mode 100644
index 0000000..c027cd3
--- /dev/null
+++ b/dev-support/ranger-docker/scripts/ranger-trino-plugin-install.properties
@@ -0,0 +1,169 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# Location of Policy Manager URL
+#
+POLICY_MGR_URL=http://ranger:6080
+#
+# This is the repository name created within policy manager
+#
+# Example:
+# REPOSITORY_NAME=trinodev
+#
+REPOSITORY_NAME=dev_trino
+# Custom added property to correctly configure ranger plugin for docker environment. This is required because trino uses different directories
+# for plugin and configuration for docker environment
+INSTALL_ENV=docker
+
+# Custom added property to correctly configure ranger plugin for docker environment. This is required because trino uses different directories
+# for plugin and configuration for docker environment
+COMPONENT_PLUGIN_DIR_NAME=/usr/lib/trino/plugin/ranger
+
+# Configure INSTALL_ENV=docker if running trino in docker environment
+#INSTALL_ENV=docker
+#
+# Name of the directory where the component's lib and conf directory exist.
+# This location should be relative to the parent of the directory containing
+# the plugin installation files.
+#
+COMPONENT_INSTALL_DIR_NAME=/etc/trino
+
+# Enable audit logs to Solr
+XAAUDIT.SOLR.ENABLE=true
+XAAUDIT.SOLR.URL=http://ranger-solr:8983/solr/ranger_audits
+XAAUDIT.SOLR.USER=solr
+XAAUDIT.SOLR.PASSWORD=NONE
+XAAUDIT.SOLR.ZOOKEEPER=NONE
+XAAUDIT.SOLR.FILE_SPOOL_DIR=/var/log/trino/audit/solr/spool
+
+# Enable audit logs to ElasticSearch
+XAAUDIT.ELASTICSEARCH.ENABLE=false
+XAAUDIT.ELASTICSEARCH.URL=http://ranger-es:9200
+XAAUDIT.ELASTICSEARCH.USER=elastic
+XAAUDIT.ELASTICSEARCH.PASSWORD=elasticsearch
+XAAUDIT.ELASTICSEARCH.INDEX=ranger_audits
+XAAUDIT.ELASTICSEARCH.PORT=9200
+XAAUDIT.ELASTICSEARCH.PROTOCOL=http
+
+# Enable audit logs to HDFS
+#Example
+#XAAUDIT.HDFS.ENABLE=true
+#XAAUDIT.HDFS.HDFS_DIR=hdfs://node-1.example.com:8020/ranger/audit
+# If using Azure Blob Storage
+#XAAUDIT.HDFS.HDFS_DIR=wasb[s]://<containername>@<accountname>.blob.core.windows.net/<path>
+#XAAUDIT.HDFS.HDFS_DIR=wasb://ranger_audit_container@my-azure-account.blob.core.windows.net/ranger/audit
+#XAAUDIT.HDFS.FILE_SPOOL_DIR=/var/log/trino/audit/hdfs/spool
+
+XAAUDIT.HDFS.ENABLE=false
+XAAUDIT.HDFS.HDFS_DIR=hdfs://__REPLACE__NAME_NODE_HOST:8020/ranger/audit
+XAAUDIT.HDFS.FILE_SPOOL_DIR=/var/log/trino/audit/hdfs/spool
+
+# Following additional propertis are needed When auditing to Azure Blob Storage via HDFS
+# Get these values from your /etc/hadoop/conf/core-site.xml
+#XAAUDIT.HDFS.HDFS_DIR=wasb[s]://<containername>@<accountname>.blob.core.windows.net/<path>
+XAAUDIT.HDFS.AZURE_ACCOUNTNAME=__REPLACE_AZURE_ACCOUNT_NAME
+XAAUDIT.HDFS.AZURE_ACCOUNTKEY=__REPLACE_AZURE_ACCOUNT_KEY
+XAAUDIT.HDFS.AZURE_SHELL_KEY_PROVIDER=__REPLACE_AZURE_SHELL_KEY_PROVIDER
+XAAUDIT.HDFS.AZURE_ACCOUNTKEY_PROVIDER=__REPLACE_AZURE_ACCOUNT_KEY_PROVIDER
+
+#Log4j Audit Provider
+XAAUDIT.LOG4J.ENABLE=false
+XAAUDIT.LOG4J.IS_ASYNC=false
+XAAUDIT.LOG4J.ASYNC.MAX.QUEUE.SIZE=10240
+XAAUDIT.LOG4J.ASYNC.MAX.FLUSH.INTERVAL.MS=30000
+XAAUDIT.LOG4J.DESTINATION.LOG4J=true
+XAAUDIT.LOG4J.DESTINATION.LOG4J.LOGGER=xaaudit
+
+# Enable audit logs to Amazon CloudWatch Logs
+#Example
+#XAAUDIT.AMAZON_CLOUDWATCH.ENABLE=true
+#XAAUDIT.AMAZON_CLOUDWATCH.LOG_GROUP=ranger_audits
+#XAAUDIT.AMAZON_CLOUDWATCH.LOG_STREAM={instance_id}
+#XAAUDIT.AMAZON_CLOUDWATCH.FILE_SPOOL_DIR=/var/log/hive/audit/amazon_cloudwatch/spool
+
+XAAUDIT.AMAZON_CLOUDWATCH.ENABLE=false
+XAAUDIT.AMAZON_CLOUDWATCH.LOG_GROUP=NONE
+XAAUDIT.AMAZON_CLOUDWATCH.LOG_STREAM_PREFIX=NONE
+XAAUDIT.AMAZON_CLOUDWATCH.FILE_SPOOL_DIR=NONE
+XAAUDIT.AMAZON_CLOUDWATCH.REGION=NONE
+
+# End of V3 properties
+#
+# Audit to HDFS Configuration
+#
+# If XAAUDIT.HDFS.IS_ENABLED is set to true, please replace tokens
+# that start with __REPLACE__ with appropriate values
+# XAAUDIT.HDFS.IS_ENABLED=true
+# XAAUDIT.HDFS.DESTINATION_DIRECTORY=hdfs://__REPLACE__NAME_NODE_HOST:8020/ranger/audit/%app-type%/%time:yyyyMMdd%
+# XAAUDIT.HDFS.LOCAL_BUFFER_DIRECTORY=__REPLACE__LOG_DIR/trino/audit
+# XAAUDIT.HDFS.LOCAL_ARCHIVE_DIRECTORY=__REPLACE__LOG_DIR/trino/audit/archive
+#
+# Example:
+# XAAUDIT.HDFS.IS_ENABLED=true
+# XAAUDIT.HDFS.DESTINATION_DIRECTORY=hdfs://namenode.example.com:8020/ranger/audit/%app-type%/%time:yyyyMMdd%
+# XAAUDIT.HDFS.LOCAL_BUFFER_DIRECTORY=/var/log/trino/audit
+# XAAUDIT.HDFS.LOCAL_ARCHIVE_DIRECTORY=/var/log/trino/audit/archive
+#
+XAAUDIT.HDFS.IS_ENABLED=false
+XAAUDIT.HDFS.DESTINATION_DIRECTORY=hdfs://__REPLACE__NAME_NODE_HOST:8020/ranger/audit/%app-type%/%time:yyyyMMdd%
+XAAUDIT.HDFS.LOCAL_BUFFER_DIRECTORY=__REPLACE__LOG_DIR/trino/audit
+XAAUDIT.HDFS.LOCAL_ARCHIVE_DIRECTORY=__REPLACE__LOG_DIR/trino/audit/archive
+
+XAAUDIT.HDFS.DESTINTATION_FILE=%hostname%-audit.log
+XAAUDIT.HDFS.DESTINTATION_FLUSH_INTERVAL_SECONDS=900
+XAAUDIT.HDFS.DESTINTATION_ROLLOVER_INTERVAL_SECONDS=86400
+XAAUDIT.HDFS.DESTINTATION_OPEN_RETRY_INTERVAL_SECONDS=60
+XAAUDIT.HDFS.LOCAL_BUFFER_FILE=%time:yyyyMMdd-HHmm.ss%.log
+XAAUDIT.HDFS.LOCAL_BUFFER_FLUSH_INTERVAL_SECONDS=60
+XAAUDIT.HDFS.LOCAL_BUFFER_ROLLOVER_INTERVAL_SECONDS=600
+XAAUDIT.HDFS.LOCAL_ARCHIVE_MAX_FILE_COUNT=10
+
+#Solr Audit Provider
+XAAUDIT.SOLR.IS_ENABLED=true
+XAAUDIT.SOLR.MAX_QUEUE_SIZE=1
+XAAUDIT.SOLR.MAX_FLUSH_INTERVAL_MS=1000
+XAAUDIT.SOLR.SOLR_URL=http://ranger-solr:6083/solr/ranger_audits
+
+# End of V2 properties
+
+#
+# SSL Client Certificate Information
+#
+# Example:
+# SSL_KEYSTORE_FILE_PATH=/etc/hadoop/conf/ranger-plugin-keystore.jks
+# SSL_KEYSTORE_PASSWORD=none
+# SSL_TRUSTSTORE_FILE_PATH=/etc/hadoop/conf/ranger-plugin-truststore.jks
+# SSL_TRUSTSTORE_PASSWORD=none
+#
+# You do not need use SSL between agent and security admin tool, please leave these sample value as it is.
+#
+SSL_KEYSTORE_FILE_PATH=/etc/hadoop/conf/ranger-plugin-keystore.jks
+SSL_KEYSTORE_PASSWORD=myKeyFilePassword
+SSL_TRUSTSTORE_FILE_PATH=/etc/hadoop/conf/ranger-plugin-truststore.jks
+SSL_TRUSTSTORE_PASSWORD=changeit
+
+#
+# Custom component user
+# CUSTOM_COMPONENT_USER=<custom-user>
+# keep blank if component user is default
+CUSTOM_USER=root
+
+
+#
+# Custom component group
+# CUSTOM_COMPONENT_GROUP=<custom-group>
+# keep blank if component group is default
+CUSTOM_GROUP=root
+XAAUDIT.SUMMARY.ENABLE=false
diff --git a/dev-support/ranger-docker/scripts/ranger-trino.sh b/dev-support/ranger-docker/scripts/ranger-trino.sh
new file mode 100644
index 0000000..6ca92ec
--- /dev/null
+++ b/dev-support/ranger-docker/scripts/ranger-trino.sh
@@ -0,0 +1,35 @@
+#!/bin/bash
+
+ssh-keygen -A
+/usr/sbin/sshd
+
+if [ ! -e "${TRINO_HOME}"/.setupDone ]
+then
+ su -c "ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa" trino
+ su -c "cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys" trino
+ su -c "chmod 0600 ~/.ssh/authorized_keys" trino
+
+ cat <<EOF > /etc/ssh/ssh_config
+Host *
+ StrictHostKeyChecking no
+ UserKnownHostsFile=/dev/null
+EOF
+
+ cd /opt/ranger/ranger-trino-plugin || exit
+ ./enable-trino-plugin.sh
+
+ touch "${TRINO_HOME}"/.setupDone
+ echo "Ranger Trino Plugin Installation is complete!"
+fi
+
+/usr/lib/trino/bin/run-trino
+
+TRINO_PID=$(ps -ef | grep -v grep | grep -i "io.trino.server.TrinoServer" | awk '{print $2}')
+
+# prevent the container from exiting
+if [ -z "$TRINO_PID" ]
+then
+ echo "The Trino process probably exited, no process id found!"
+else
+ tail --pid="$TRINO_PID" -f /dev/null
+fi