Skip to content

Commit 3e24316

Browse files
committed
iRODS: Add Docker Compose project for testing
1 parent 28c6c9a commit 3e24316

File tree

6 files changed

+296
-0
lines changed

6 files changed

+296
-0
lines changed
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
name: cyberduck-irods-testing
2+
3+
services:
4+
irods-catalog:
5+
build:
6+
context: irods_catalog
7+
environment:
8+
- POSTGRES_PASSWORD=testpassword
9+
restart: always
10+
11+
irods-catalog-provider:
12+
build:
13+
context: irods_catalog_provider
14+
init: true
15+
ports:
16+
- "1247:1247"
17+
shm_size: 100mb
18+
healthcheck:
19+
test: ["CMD", 'echo -e "\x00\x00\x00\x33<MsgHeader_PI><type>HEARTBEAT</type></MsgHeader_PI>" | (exec 3<>/dev/tcp/127.0.0.1/1247; cat >&3; cat <&3; exec 3<&-)']
20+
interval: 10s
21+
timeout: 10s
22+
retries: 3
23+
start_period: 20s
24+
start_interval: 10s
25+
restart: always
26+
depends_on:
27+
- irods-catalog
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
FROM postgres:17
2+
3+
COPY init-user-db.sh /docker-entrypoint-initdb.d/init-user-db.sh
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
#! /bin/bash
2+
3+
# Adapted from "Initialization script" in documentation for official Postgres dockerhub:
4+
# https://hub.docker.com/_/postgres/
5+
set -e
6+
7+
psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-EOSQL
8+
CREATE USER irods WITH PASSWORD 'testpassword';
9+
CREATE DATABASE "ICAT";
10+
GRANT ALL PRIVILEGES ON DATABASE "ICAT" to irods;
11+
ALTER DATABASE "ICAT" OWNER TO irods;
12+
EOSQL
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
FROM ubuntu:24.04
2+
3+
ENV DEBIAN_FRONTEND=noninteractive
4+
5+
RUN apt-get update && \
6+
apt-get install -y \
7+
apt-transport-https \
8+
gnupg \
9+
wget \
10+
netcat-traditional \
11+
&& \
12+
apt-get clean && \
13+
rm -rf /var/lib/apt/lists/* /tmp/*
14+
15+
RUN mkdir -p /etc/apt/keyrings && \
16+
wget -qO - https://packages.irods.org/irods-signing-key.asc | \
17+
gpg \
18+
--no-options \
19+
--no-default-keyring \
20+
--no-auto-check-trustdb \
21+
--homedir /dev/null \
22+
--no-keyring \
23+
--import-options import-export \
24+
--output /etc/apt/keyrings/renci-irods-archive-keyring.pgp \
25+
--import \
26+
&& \
27+
echo "deb [signed-by=/etc/apt/keyrings/renci-irods-archive-keyring.pgp arch=amd64] https://packages.irods.org/apt/ noble main" | \
28+
tee /etc/apt/sources.list.d/renci-irods.list
29+
30+
RUN apt-get update && \
31+
apt-get install -y \
32+
libcurl4-gnutls-dev \
33+
python3 \
34+
python3-distro \
35+
python3-jsonschema \
36+
python3-pip \
37+
python3-psutil \
38+
python3-requests \
39+
rsyslog \
40+
unixodbc \
41+
&& \
42+
apt-get clean && \
43+
rm -rf /var/lib/apt/lists/* /tmp/*
44+
45+
ARG irods_version=5.0.2
46+
ARG irods_package_version_suffix=-0~noble
47+
ARG irods_package_version=${irods_version}${irods_package_version_suffix}
48+
49+
RUN apt-get update && \
50+
apt-get install -y \
51+
irods-database-plugin-postgres=${irods_package_version} \
52+
irods-runtime=${irods_package_version} \
53+
irods-server=${irods_package_version} \
54+
irods-icommands=${irods_package_version} \
55+
&& \
56+
apt-get clean && \
57+
rm -rf /var/lib/apt/lists/* /tmp/*
58+
59+
COPY unattended_install.json /
60+
COPY --chmod=755 entrypoint.sh /
61+
ENTRYPOINT ["./entrypoint.sh"]
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
#! /bin/bash -e
2+
3+
echo "Waiting for iRODS catalog database to be ready"
4+
catalog_db_hostname=irods-catalog
5+
until pg_isready -h ${catalog_db_hostname} -d ICAT -U irods -q; do
6+
sleep 1
7+
done
8+
echo "iRODS catalog database is ready"
9+
10+
unattended_install_file=/unattended_install.json
11+
if [ -f "${unattended_install_file}" ]; then
12+
echo "Running iRODS setup"
13+
14+
# Add generated hostname as a recognizable alias.
15+
sed -i "s/CONTAINER_HOSTNAME_ALIAS/${HOSTNAME}/g" ${unattended_install_file}
16+
python3 /var/lib/irods/scripts/setup_irods.py --json_configuration_file ${unattended_install_file}
17+
18+
# Move the input file used to configure the server out of the way so
19+
# the container is restartable.
20+
mv ${unattended_install_file} ${unattended_install_file}.processed
21+
fi
22+
23+
echo "Starting server"
24+
su - irods -c 'irodsServer --stdout'
Lines changed: 169 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,169 @@
1+
{
2+
"admin_password": "rods",
3+
"default_resource_directory": "/var/lib/irods/Vault",
4+
"default_resource_name": "demoResc",
5+
"host_system_information": {
6+
"service_account_user_name": "irods",
7+
"service_account_group_name": "irods"
8+
},
9+
"service_account_environment": {
10+
"irods_client_server_policy": "CS_NEG_REFUSE",
11+
"irods_connection_pool_refresh_time_in_seconds": 300,
12+
"irods_cwd": "/tempZone/home/rods",
13+
"irods_default_hash_scheme": "SHA256",
14+
"irods_default_number_of_transfer_threads": 4,
15+
"irods_default_resource": "demoResc",
16+
"irods_encryption_algorithm": "AES-256-CBC",
17+
"irods_encryption_key_size": 32,
18+
"irods_encryption_num_hash_rounds": 16,
19+
"irods_encryption_salt_size": 8,
20+
"irods_home": "/tempZone/home/rods",
21+
"irods_host": "irods-catalog-provider",
22+
"irods_match_hash_policy": "compatible",
23+
"irods_maximum_size_for_single_buffer_in_megabytes": 32,
24+
"irods_port": 1247,
25+
"irods_transfer_buffer_size_for_parallel_transfer_in_megabytes": 4,
26+
"irods_user_name": "rods",
27+
"irods_zone_name": "tempZone",
28+
"schema_name": "service_account_environment",
29+
"schema_version": "v5"
30+
},
31+
"server_config": {
32+
"advanced_settings": {
33+
"checksum_read_buffer_size_in_bytes": 1048576,
34+
"default_number_of_transfer_threads": 4,
35+
"default_temporary_password_lifetime_in_seconds": 120,
36+
"delay_rule_executors": [],
37+
"delay_server_sleep_time_in_seconds": 30,
38+
"dns_cache": {
39+
"eviction_age_in_seconds": 3600,
40+
"cache_clearer_sleep_time_in_seconds": 600,
41+
"shared_memory_size_in_bytes": 5000000
42+
},
43+
"hostname_cache": {
44+
"eviction_age_in_seconds": 3600,
45+
"cache_clearer_sleep_time_in_seconds": 600,
46+
"shared_memory_size_in_bytes": 2500000
47+
},
48+
"maximum_size_for_single_buffer_in_megabytes": 32,
49+
"maximum_size_of_delay_queue_in_bytes": 0,
50+
"maximum_temporary_password_lifetime_in_seconds": 1000,
51+
"migrate_delay_server_sleep_time_in_seconds": 5,
52+
"number_of_concurrent_delay_rule_executors": 4,
53+
"stacktrace_file_processor_sleep_time_in_seconds": 10,
54+
"transfer_buffer_size_for_parallel_transfer_in_megabytes": 4,
55+
"transfer_chunk_size_for_parallel_transfer_in_megabytes": 40
56+
},
57+
"catalog_provider_hosts": [
58+
"irods-catalog-provider"
59+
],
60+
"catalog_service_role": "provider",
61+
"client_server_policy": "CS_NEG_REFUSE",
62+
"connection_pool_refresh_time_in_seconds": 300,
63+
"controlled_user_connection_list": {
64+
"control_type": "denylist",
65+
"users": []
66+
},
67+
"default_dir_mode": "0750",
68+
"default_file_mode": "0600",
69+
"default_hash_scheme": "SHA256",
70+
"default_resource_name": "demoResc",
71+
"encryption": {
72+
"algorithm": "AES-256-CBC",
73+
"key_size": 32,
74+
"num_hash_rounds": 16,
75+
"salt_size": 8
76+
},
77+
"environment_variables": {},
78+
"federation": [],
79+
"graceful_shutdown_timeout_in_seconds": 30,
80+
"host": "irods-catalog-provider",
81+
"host_access_control": {
82+
"access_entries": []
83+
},
84+
"host_resolution": {
85+
"host_entries": [
86+
{
87+
"address_type": "local",
88+
"addresses": [
89+
"irods-catalog-provider",
90+
"CONTAINER_HOSTNAME_ALIAS"
91+
]
92+
}
93+
]
94+
},
95+
"log_level": {
96+
"agent": "info",
97+
"agent_factory": "info",
98+
"api": "info",
99+
"authentication": "info",
100+
"database": "info",
101+
"delay_server": "info",
102+
"genquery1": "info",
103+
"genquery2": "info",
104+
"legacy": "info",
105+
"microservice": "info",
106+
"network": "info",
107+
"resource": "info",
108+
"rule_engine": "info",
109+
"server": "info",
110+
"sql": "info"
111+
},
112+
"match_hash_policy": "compatible",
113+
"negotiation_key": "32_byte_server_negotiation_key__",
114+
"plugin_configuration": {
115+
"authentication": {},
116+
"database": {
117+
"technology": "postgres",
118+
"host": "irods-catalog",
119+
"name": "ICAT",
120+
"odbc_driver": "PostgreSQL ANSI",
121+
"password": "testpassword",
122+
"port": 5432,
123+
"username": "irods"
124+
},
125+
"network": {},
126+
"resource": {},
127+
"rule_engines": [
128+
{
129+
"instance_name": "irods_rule_engine_plugin-irods_rule_language-instance",
130+
"plugin_name": "irods_rule_engine_plugin-irods_rule_language",
131+
"plugin_specific_configuration": {
132+
"re_data_variable_mapping_set": [
133+
"core"
134+
],
135+
"re_function_name_mapping_set": [
136+
"core"
137+
],
138+
"re_rulebase_set": [
139+
"core"
140+
],
141+
"regexes_for_supported_peps": [
142+
"ac[^ ]*",
143+
"msi[^ ]*",
144+
"[^ ]*pep_[^ ]*_(pre|post|except|finally)"
145+
]
146+
},
147+
"shared_memory_instance": "irods_rule_language_rule_engine"
148+
},
149+
{
150+
"instance_name": "irods_rule_engine_plugin-cpp_default_policy-instance",
151+
"plugin_name": "irods_rule_engine_plugin-cpp_default_policy",
152+
"plugin_specific_configuration": {}
153+
}
154+
]
155+
},
156+
"rule_engine_namespaces": [
157+
""
158+
],
159+
"schema_name": "server_config",
160+
"schema_version": "v5",
161+
"server_port_range_end": 20199,
162+
"server_port_range_start": 20000,
163+
"zone_auth_scheme": "native",
164+
"zone_key": "TEMPORARY_ZONE_KEY",
165+
"zone_name": "tempZone",
166+
"zone_port": 1247,
167+
"zone_user": "rods"
168+
}
169+
}

0 commit comments

Comments
 (0)