2020-11-19 09:50:16 -05:00
#! /bin/bash
2024-11-07 10:52:25 -05:00
if command -v docker > /dev/null; then
CONTAINER_CLI = $( command -v docker)
HEALTCHECK_PATH = "{{.State.Health.Status}}"
PRIVILEGED_CLI = ""
else
2022-04-06 12:52:56 -04:00
CONTAINER_CLI = $( command -v podman)
HEALTCHECK_PATH = "{{.State.Healthcheck.Status}}"
# Only use sudo for podman
if command -v sudo > /dev/null; then
PRIVILEGED_CLI = "sudo"
else
PRIVILEGED_CLI = ""
fi
fi
2022-09-20 03:26:06 -04:00
mysql( ) {
2023-12-08 08:23:11 -05:00
mysql_8_2
2022-09-20 03:26:06 -04:00
}
2020-11-19 09:50:16 -05:00
mysql_8_0( ) {
2022-04-06 12:52:56 -04:00
$CONTAINER_CLI rm -f mysql || true
2024-08-21 07:47:57 -04:00
$CONTAINER_CLI run --name mysql -e MYSQL_USER = hibernate_orm_test -e MYSQL_PASSWORD = hibernate_orm_test -e MYSQL_ROOT_PASSWORD = hibernate_orm_test -e MYSQL_DATABASE = hibernate_orm_test -e MYSQL_ROOT_PASSWORD = hibernate_orm_test -p3306:3306 -d ${ DB_IMAGE_MYSQL_8_0 :- docker .io/mysql : 8 .0.31 } --character-set-server= utf8mb4 --collation-server= utf8mb4_0900_as_cs --skip-character-set-client-handshake --log-bin-trust-function-creators= 1 --lower_case_table_names= 2
2021-07-26 11:18:34 -04:00
# Give the container some time to start
OUTPUT =
n = 0
until [ " $n " -ge 5 ]
do
# Need to access STDERR. Thanks for the snippet https://stackoverflow.com/a/56577569/412446
2022-04-06 12:52:56 -04:00
{ OUTPUT = " $( { $CONTAINER_CLI logs mysql; } 2>& 1 1>& 3 3>& - ) " ; } 3>& 1;
2021-07-26 11:18:34 -04:00
if [ [ $OUTPUT = = *"ready for connections" * ] ] ; then
break;
fi
n = $(( n+1))
echo "Waiting for MySQL to start..."
sleep 3
done
if [ " $n " -ge 5 ] ; then
echo "MySQL failed to start and configure after 15 seconds"
else
echo "MySQL successfully started"
fi
2020-11-19 09:50:16 -05:00
}
2023-09-04 10:51:59 -04:00
mysql_8_1( ) {
$CONTAINER_CLI rm -f mysql || true
2024-08-21 07:47:57 -04:00
$CONTAINER_CLI run --name mysql -e MYSQL_USER = hibernate_orm_test -e MYSQL_PASSWORD = hibernate_orm_test -e MYSQL_ROOT_PASSWORD = hibernate_orm_test -e MYSQL_DATABASE = hibernate_orm_test -e MYSQL_ROOT_PASSWORD = hibernate_orm_test -p3306:3306 -d ${ DB_IMAGE_MYSQL_8_1 :- docker .io/mysql : 8 .1.0 } --character-set-server= utf8mb4 --collation-server= utf8mb4_0900_as_cs --skip-character-set-client-handshake --log-bin-trust-function-creators= 1 --lower_case_table_names= 2
2023-09-04 10:51:59 -04:00
# Give the container some time to start
OUTPUT =
n = 0
until [ " $n " -ge 5 ]
do
# Need to access STDERR. Thanks for the snippet https://stackoverflow.com/a/56577569/412446
{ OUTPUT = " $( { $CONTAINER_CLI logs mysql; } 2>& 1 1>& 3 3>& - ) " ; } 3>& 1;
if [ [ $OUTPUT = = *"ready for connections" * ] ] ; then
break;
fi
n = $(( n+1))
echo "Waiting for MySQL to start..."
sleep 3
done
if [ " $n " -ge 5 ] ; then
echo "MySQL failed to start and configure after 15 seconds"
else
echo "MySQL successfully started"
fi
}
2023-12-08 08:23:11 -05:00
mysql_8_2( ) {
$CONTAINER_CLI rm -f mysql || true
2024-08-21 07:47:57 -04:00
$CONTAINER_CLI run --name mysql -e MYSQL_USER = hibernate_orm_test -e MYSQL_PASSWORD = hibernate_orm_test -e MYSQL_ROOT_PASSWORD = hibernate_orm_test -e MYSQL_DATABASE = hibernate_orm_test -e MYSQL_ROOT_PASSWORD = hibernate_orm_test -p3306:3306 -d ${ DB_IMAGE_MYSQL_8_2 :- docker .io/mysql : 8 .2.0 } --character-set-server= utf8mb4 --collation-server= utf8mb4_0900_as_cs --skip-character-set-client-handshake --log-bin-trust-function-creators= 1 --lower_case_table_names= 2
2023-12-08 08:23:11 -05:00
# Give the container some time to start
OUTPUT =
n = 0
until [ " $n " -ge 5 ]
do
# Need to access STDERR. Thanks for the snippet https://stackoverflow.com/a/56577569/412446
{ OUTPUT = " $( { $CONTAINER_CLI logs mysql; } 2>& 1 1>& 3 3>& - ) " ; } 3>& 1;
if [ [ $OUTPUT = = *"ready for connections" * ] ] ; then
break;
fi
n = $(( n+1))
echo "Waiting for MySQL to start..."
sleep 3
done
if [ " $n " -ge 5 ] ; then
echo "MySQL failed to start and configure after 15 seconds"
else
echo "MySQL successfully started"
fi
}
2020-11-19 09:50:16 -05:00
mariadb( ) {
2024-06-26 00:25:03 -04:00
mariadb_11_4
2022-11-03 10:15:01 -04:00
}
2024-06-26 00:18:14 -04:00
mariadb_wait_until_start( )
{
2022-11-03 10:15:01 -04:00
n = 0
until [ " $n " -ge 5 ]
do
2024-06-26 00:18:14 -04:00
if $CONTAINER_CLI exec mariadb healthcheck.sh --connect --innodb_initialized; then
2022-11-03 10:15:01 -04:00
break;
fi
n = $(( n+1))
echo "Waiting for MariaDB to start..."
sleep 3
done
2024-06-26 00:18:14 -04:00
if $CONTAINER_CLI exec mariadb healthcheck.sh --connect --innodb_initialized; then
2022-11-03 10:15:01 -04:00
echo "MariaDB successfully started"
2024-06-26 00:18:14 -04:00
else
echo "MariaDB failed to start and configure after 15 seconds"
2022-11-03 10:15:01 -04:00
fi
}
2024-07-31 13:38:21 -04:00
mariadb_10_5( ) {
2024-06-26 00:18:14 -04:00
$CONTAINER_CLI rm -f mariadb || true
2024-08-21 07:47:57 -04:00
$CONTAINER_CLI run --name mariadb -e MARIADB_USER = hibernate_orm_test -e MARIADB_PASSWORD = hibernate_orm_test -e MARIADB_DATABASE = hibernate_orm_test -e MARIADB_ROOT_PASSWORD = hibernate_orm_test -p3306:3306 -d ${ DB_IMAGE_MARIADB_10_5 :- docker .io/mariadb : 10 .5.25 } --character-set-server= utf8mb4 --collation-server= utf8mb4_bin --skip-character-set-client-handshake --lower_case_table_names= 2
2024-06-26 00:18:14 -04:00
mariadb_wait_until_start
}
2024-06-26 00:22:43 -04:00
mariadb_10_11( ) {
2022-11-03 10:15:01 -04:00
$CONTAINER_CLI rm -f mariadb || true
2024-08-21 07:47:57 -04:00
$CONTAINER_CLI run --name mariadb -e MARIADB_USER = hibernate_orm_test -e MARIADB_PASSWORD = hibernate_orm_test -e MARIADB_DATABASE = hibernate_orm_test -e MARIADB_ROOT_PASSWORD = hibernate_orm_test -p3306:3306 -d ${ DB_IMAGE_MARIADB_10_11 :- docker .io/mariadb : 10 .11.8 } --character-set-server= utf8mb4 --collation-server= utf8mb4_bin --skip-character-set-client-handshake --lower_case_table_names= 2
2024-06-26 00:18:14 -04:00
mariadb_wait_until_start
2020-11-19 09:50:16 -05:00
}
2023-09-04 10:51:59 -04:00
mariadb_11_1( ) {
$CONTAINER_CLI rm -f mariadb || true
2024-08-21 07:47:57 -04:00
$CONTAINER_CLI run --name mariadb -e MARIADB_USER = hibernate_orm_test -e MARIADB_PASSWORD = hibernate_orm_test -e MARIADB_DATABASE = hibernate_orm_test -e MARIADB_ROOT_PASSWORD = hibernate_orm_test -p3306:3306 -d ${ DB_IMAGE_MARIADB_11_1 :- docker .io/mariadb : 11 .1.2 } --character-set-server= utf8mb4 --collation-server= utf8mb4_bin --skip-character-set-client-handshake --lower_case_table_names= 2
2024-06-26 00:18:14 -04:00
mariadb_wait_until_start
2023-09-04 10:51:59 -04:00
}
2024-06-26 00:25:03 -04:00
mariadb_11_4( ) {
2023-12-08 08:27:02 -05:00
$CONTAINER_CLI rm -f mariadb || true
2024-08-21 07:47:57 -04:00
$CONTAINER_CLI run --name mariadb -e MARIADB_USER = hibernate_orm_test -e MARIADB_PASSWORD = hibernate_orm_test -e MARIADB_DATABASE = hibernate_orm_test -e MARIADB_ROOT_PASSWORD = hibernate_orm_test -p3306:3306 -d ${ DB_IMAGE_MARIADB_11_4 :- docker .io/mariadb : 11 .4.2 } --character-set-server= utf8mb4 --collation-server= utf8mb4_bin --skip-character-set-client-handshake --lower_case_table_names= 2
2024-06-26 00:18:14 -04:00
mariadb_wait_until_start
2023-12-08 08:27:02 -05:00
}
2024-06-26 00:32:38 -04:00
mariadb_verylatest( ) {
$CONTAINER_CLI rm -f mariadb || true
2024-08-21 07:47:57 -04:00
$CONTAINER_CLI run --name mariadb -e MARIADB_USER = hibernate_orm_test -e MARIADB_PASSWORD = hibernate_orm_test -e MARIADB_DATABASE = hibernate_orm_test -e MARIADB_ROOT_PASSWORD = hibernate_orm_test -p3306:3306 -d ${ DB_IMAGE_MARIADB_VERYLATEST :- quay .io/mariadb-foundation/mariadb-devel : verylatest } --character-set-server= utf8mb4 --collation-server= utf8mb4_bin --skip-character-set-client-handshake --lower_case_table_names= 2
2024-06-26 00:32:38 -04:00
mariadb_wait_until_start
}
2022-09-20 03:26:06 -04:00
postgresql( ) {
2023-12-08 08:29:49 -05:00
postgresql_16
2022-09-20 03:26:06 -04:00
}
2023-10-11 11:24:52 -04:00
postgresql_12( ) {
2022-04-06 12:52:56 -04:00
$CONTAINER_CLI rm -f postgres || true
2024-08-21 07:47:57 -04:00
$CONTAINER_CLI run --name postgres -e POSTGRES_USER = hibernate_orm_test -e POSTGRES_PASSWORD = hibernate_orm_test -e POSTGRES_DB = hibernate_orm_test -p5432:5432 -d ${ DB_IMAGE_POSTGRESQL_12 :- docker .io/postgis/postgis : 12 -3.4 }
2024-02-12 08:04:18 -05:00
$CONTAINER_CLI exec postgres bash -c '/usr/share/postgresql-common/pgdg/apt.postgresql.org.sh -y && apt install -y postgresql-12-pgvector && psql -U hibernate_orm_test -d hibernate_orm_test -c "create extension vector;"'
2022-09-21 07:58:41 -04:00
}
2020-12-17 12:16:09 -05:00
postgresql_13( ) {
2022-04-06 12:52:56 -04:00
$CONTAINER_CLI rm -f postgres || true
2024-08-21 07:47:57 -04:00
$CONTAINER_CLI run --name postgres -e POSTGRES_USER = hibernate_orm_test -e POSTGRES_PASSWORD = hibernate_orm_test -e POSTGRES_DB = hibernate_orm_test -p5432:5432 -d ${ DB_IMAGE_POSTGRESQL_13 :- docker .io/postgis/postgis : 13 -3.1 }
2024-02-12 08:04:18 -05:00
$CONTAINER_CLI exec postgres bash -c '/usr/share/postgresql-common/pgdg/apt.postgresql.org.sh -y && apt install -y postgresql-13-pgvector && psql -U hibernate_orm_test -d hibernate_orm_test -c "create extension vector;"'
2020-12-17 12:16:09 -05:00
}
2022-09-21 07:58:41 -04:00
postgresql_14( ) {
$CONTAINER_CLI rm -f postgres || true
2024-08-21 07:47:57 -04:00
$CONTAINER_CLI run --name postgres -e POSTGRES_USER = hibernate_orm_test -e POSTGRES_PASSWORD = hibernate_orm_test -e POSTGRES_DB = hibernate_orm_test -p5432:5432 -d ${ DB_IMAGE_POSTGRESQL_14 :- docker .io/postgis/postgis : 14 -3.3 }
2024-02-12 08:04:18 -05:00
$CONTAINER_CLI exec postgres bash -c '/usr/share/postgresql-common/pgdg/apt.postgresql.org.sh -y && apt install -y postgresql-14-pgvector && psql -U hibernate_orm_test -d hibernate_orm_test -c "create extension vector;"'
2022-09-21 07:58:41 -04:00
}
2022-12-14 14:39:34 -05:00
postgresql_15( ) {
$CONTAINER_CLI rm -f postgres || true
2024-08-21 07:47:57 -04:00
$CONTAINER_CLI run --name postgres -e POSTGRES_USER = hibernate_orm_test -e POSTGRES_PASSWORD = hibernate_orm_test -e POSTGRES_DB = hibernate_orm_test -p5432:5432 --tmpfs /pgtmpfs:size= 131072k -d ${ DB_IMAGE_POSTGRESQL_15 :- docker .io/postgis/postgis : 15 -3.3 } \
2023-10-09 10:04:00 -04:00
-c fsync = off -c synchronous_commit = off -c full_page_writes = off -c shared_buffers = 256MB -c maintenance_work_mem = 256MB -c max_wal_size = 1GB -c checkpoint_timeout = 1d
2024-02-12 08:04:18 -05:00
$CONTAINER_CLI exec postgres bash -c '/usr/share/postgresql-common/pgdg/apt.postgresql.org.sh -y && apt install -y postgresql-15-pgvector && psql -U hibernate_orm_test -d hibernate_orm_test -c "create extension vector;"'
2022-12-14 14:39:34 -05:00
}
2023-12-08 08:29:49 -05:00
postgresql_16( ) {
$CONTAINER_CLI rm -f postgres || true
2024-08-21 07:47:57 -04:00
$CONTAINER_CLI run --name postgres -e POSTGRES_USER = hibernate_orm_test -e POSTGRES_PASSWORD = hibernate_orm_test -e POSTGRES_DB = hibernate_orm_test -p5432:5432 --tmpfs /pgtmpfs:size= 131072k -d ${ DB_IMAGE_POSTGRESQL_16 :- docker .io/postgis/postgis : 16 -3.4 } \
2023-12-08 08:29:49 -05:00
-c fsync = off -c synchronous_commit = off -c full_page_writes = off -c shared_buffers = 256MB -c maintenance_work_mem = 256MB -c max_wal_size = 1GB -c checkpoint_timeout = 1d
2024-02-12 08:04:18 -05:00
$CONTAINER_CLI exec postgres bash -c '/usr/share/postgresql-common/pgdg/apt.postgresql.org.sh -y && apt install -y postgresql-16-pgvector && psql -U hibernate_orm_test -d hibernate_orm_test -c "create extension vector;"'
2023-12-08 08:29:49 -05:00
}
2021-06-23 08:56:57 -04:00
edb( ) {
2023-12-08 08:31:25 -05:00
edb_16
2022-10-19 13:25:16 -04:00
}
2023-10-11 14:42:59 -04:00
edb_12( ) {
2022-04-06 12:52:56 -04:00
$CONTAINER_CLI rm -f edb || true
2022-10-19 13:25:16 -04:00
# We need to build a derived image because the existing image is mainly made for use by a kubernetes operator
2023-10-11 14:42:59 -04:00
( cd edb; $CONTAINER_CLI build -t edb-test:12 -f edb12.Dockerfile .)
$CONTAINER_CLI run --name edb -e POSTGRES_USER = hibernate_orm_test -e POSTGRES_PASSWORD = hibernate_orm_test -e POSTGRES_DB = hibernate_orm_test -p 5444:5444 -d edb-test:12
2022-11-03 10:15:01 -04:00
}
edb_14( ) {
$CONTAINER_CLI rm -f edb || true
# We need to build a derived image because the existing image is mainly made for use by a kubernetes operator
( cd edb; $CONTAINER_CLI build -t edb-test:14 -f edb14.Dockerfile .)
$CONTAINER_CLI run --name edb -e POSTGRES_USER = hibernate_orm_test -e POSTGRES_PASSWORD = hibernate_orm_test -e POSTGRES_DB = hibernate_orm_test -p 5444:5444 -d edb-test:14
2021-02-08 17:33:03 -05:00
}
2023-05-02 05:23:46 -04:00
edb_15( ) {
$CONTAINER_CLI rm -f edb || true
# We need to build a derived image because the existing image is mainly made for use by a kubernetes operator
( cd edb; $CONTAINER_CLI build -t edb-test:15 -f edb15.Dockerfile .)
$CONTAINER_CLI run --name edb -e POSTGRES_USER = hibernate_orm_test -e POSTGRES_PASSWORD = hibernate_orm_test -e POSTGRES_DB = hibernate_orm_test -p 5444:5444 -d edb-test:15
}
2023-12-08 08:31:25 -05:00
edb_16( ) {
$CONTAINER_CLI rm -f edb || true
# We need to build a derived image because the existing image is mainly made for use by a kubernetes operator
( cd edb; $CONTAINER_CLI build -t edb-test:16 -f edb16.Dockerfile .)
$CONTAINER_CLI run --name edb -e POSTGRES_USER = hibernate_orm_test -e POSTGRES_PASSWORD = hibernate_orm_test -e POSTGRES_DB = hibernate_orm_test -p 5444:5444 -d edb-test:16
}
2020-11-19 09:50:16 -05:00
db2( ) {
2022-11-03 10:15:01 -04:00
db2_11_5
}
db2_11_5( ) {
2022-04-06 12:52:56 -04:00
$PRIVILEGED_CLI $CONTAINER_CLI rm -f db2 || true
2024-08-21 07:47:57 -04:00
$PRIVILEGED_CLI $CONTAINER_CLI run --name db2 --privileged -e DB2INSTANCE = orm_test -e DB2INST1_PASSWORD = orm_test -e DBNAME = orm_test -e LICENSE = accept -e AUTOCONFIG = false -e ARCHIVE_LOGS = false -e TO_CREATE_SAMPLEDB = false -e REPODB = false -p 50000:50000 -d ${ DB_IMAGE_DB2_11_5 :- icr .io/db2_community/db2 : 11 .5.9.0 }
2020-11-19 09:50:16 -05:00
# Give the container some time to start
OUTPUT =
2020-12-17 12:16:09 -05:00
while [ [ $OUTPUT != *"INSTANCE" * ] ] ; do
2020-11-19 09:50:16 -05:00
echo "Waiting for DB2 to start..."
sleep 10
2022-12-21 06:36:22 -05:00
OUTPUT = $( $PRIVILEGED_CLI $CONTAINER_CLI logs db2 2>& 1)
2020-11-19 09:50:16 -05:00
done
2023-09-06 04:28:32 -04:00
$PRIVILEGED_CLI $CONTAINER_CLI exec -t db2 su - orm_test bash -c ". /database/config/orm_test/sqllib/db2profile; /database/config/orm_test/sqllib/bin/db2 'connect to orm_test'; /database/config/orm_test/sqllib/bin/db2 'CREATE USER TEMPORARY TABLESPACE usr_tbsp MANAGED BY AUTOMATIC STORAGE'"
2020-11-19 09:50:16 -05:00
}
2022-11-03 10:15:01 -04:00
db2_10_5( ) {
$PRIVILEGED_CLI $CONTAINER_CLI rm -f db2 || true
# The sha represents the tag 10.5.0.5-3.10.0
2024-10-09 06:41:53 -04:00
$PRIVILEGED_CLI $CONTAINER_CLI run --name db2 --privileged -e DB2INST1_PASSWORD = db2inst1-pwd -e LICENSE = accept -p 50000:50000 -d ${ DB_IMAGE_DB2_10_5 :- quay .io/hibernate/db2express-c@sha256 : a499afd9709a1f69fb41703e88def9869955234c3525547e2efc3418d1f4ca2b } db2start
2022-11-03 10:15:01 -04:00
# Give the container some time to start
OUTPUT =
while [ [ $OUTPUT != *"DB2START" * ] ] ; do
echo "Waiting for DB2 to start..."
sleep 10
2022-12-21 06:36:22 -05:00
OUTPUT = $( $PRIVILEGED_CLI $CONTAINER_CLI logs db2 2>& 1)
2022-11-03 10:15:01 -04:00
done
$PRIVILEGED_CLI $CONTAINER_CLI exec -t db2 su - db2inst1 bash -c " /home/db2inst1/sqllib/bin/db2 create database orm_test &&
/home/db2inst1/sqllib/bin/db2 'connect to orm_test' &&
/home/db2inst1/sqllib/bin/db2 'CREATE BUFFERPOOL BP8K pagesize 8K' &&
/home/db2inst1/sqllib/bin/db2 'CREATE SYSTEM TEMPORARY TABLESPACE STB_8 PAGESIZE 8K BUFFERPOOL BP8K' &&
/home/db2inst1/sqllib/bin/db2 'CREATE BUFFERPOOL BP16K pagesize 16K' &&
/home/db2inst1/sqllib/bin/db2 'CREATE SYSTEM TEMPORARY TABLESPACE STB_16 PAGESIZE 16K BUFFERPOOL BP16K' &&
/home/db2inst1/sqllib/bin/db2 'CREATE BUFFERPOOL BP32K pagesize 32K' &&
/home/db2inst1/sqllib/bin/db2 'CREATE SYSTEM TEMPORARY TABLESPACE STB_32 PAGESIZE 32K BUFFERPOOL BP32K' &&
/home/db2inst1/sqllib/bin/db2 'CREATE USER TEMPORARY TABLESPACE usr_tbsp MANAGED BY AUTOMATIC STORAGE' "
}
2021-02-11 14:13:09 -05:00
db2_spatial( ) {
2022-04-06 12:52:56 -04:00
$PRIVILEGED_CLI $CONTAINER_CLI rm -f db2spatial || true
2021-02-11 14:13:09 -05:00
temp_dir = $( mktemp -d)
cat <<EOF >${ temp_dir } /ewkt.sql
create or replace function db2gse.asewkt( geometry db2gse.st_geometry)
returns clob( 2G)
specific db2gse.asewkt1
language sql
deterministic
no external action
reads sql data
return 'srid=' || varchar( db2gse.st_srsid( geometry) ) || ';' || db2gse.st_astext( geometry)
;
-- Create SQL function to create a geometry from EWKT format
create or replace function db2gse.geomfromewkt( instring varchar( 32000) )
returns db2gse.st_geometry
specific db2gse.fromewkt1
language sql
deterministic
no external action
reads sql data
return db2gse.st_geometry(
substr( instring,posstr( instring,';' ) +1, length( instring) - posstr( instring,';' ) ) ,
integer( substr( instring,posstr( instring,'=' ) +1,posstr( instring,';' ) -( posstr( instring,'=' ) +1) ) )
)
;
-- Create a DB2 transform group to return and accept EWKT
CREATE TRANSFORM FOR db2gse.ST_Geometry EWKT (
FROM SQL WITH FUNCTION db2gse.asewkt( db2gse.ST_Geometry) ,
TO SQL WITH FUNCTION db2gse.geomfromewkt( varchar( 32000) ) )
;
-- Redefine the default DB2_PROGRAM to return and accept EWKT instead of WKT
DROP TRANSFORM DB2_PROGRAM FOR db2gse.ST_Geometry;
CREATE TRANSFORM FOR db2gse.ST_Geometry DB2_PROGRAM (
FROM SQL WITH FUNCTION db2gse.asewkt( db2gse.ST_Geometry) ,
TO SQL WITH FUNCTION db2gse.geomfromewkt( varchar( 32000) ) )
;
EOF
2022-04-06 12:52:56 -04:00
$PRIVILEGED_CLI $CONTAINER_CLI run --name db2spatial --privileged -e DB2INSTANCE = orm_test -e DB2INST1_PASSWORD = orm_test -e DBNAME = orm_test -e LICENSE = accept -e AUTOCONFIG = false -e ARCHIVE_LOGS = false -e TO_CREATE_SAMPLEDB = false -e REPODB = false \
2021-02-11 14:13:09 -05:00
-v ${ temp_dir } :/conf \
2024-08-21 07:47:57 -04:00
-p 50000:50000 -d ${ DB_IMAGE_DB2_SPATIAL :- docker .io/ibmcom/db2 : 11 .5.5.0 }
2021-02-11 14:13:09 -05:00
# Give the container some time to start
OUTPUT =
while [ [ $OUTPUT != *"Setup has completed." * ] ] ; do
echo "Waiting for DB2 to start..."
sleep 10
2022-12-21 06:36:22 -05:00
OUTPUT = $( $PRIVILEGED_CLI $CONTAINER_CLI logs db2spatial 2>& 1)
2021-02-11 14:13:09 -05:00
done
sleep 10
echo "Enabling spatial extender"
2022-04-06 12:52:56 -04:00
$PRIVILEGED_CLI $CONTAINER_CLI exec -t db2spatial su - orm_test bash -c "/database/config/orm_test/sqllib/db2profile && /database/config/orm_test/sqllib/bin/db2se enable_db orm_test"
2021-02-11 14:13:09 -05:00
echo "Installing required transform group"
2022-04-06 12:52:56 -04:00
$PRIVILEGED_CLI $CONTAINER_CLI exec -t db2spatial su - orm_test bash -c "/database/config/orm_test/sqllib/db2profile && /database/config/orm_test/sqllib/bin/db2 'connect to orm_test' && /database/config/orm_test/sqllib/bin/db2 -tvf /conf/ewkt.sql"
2021-02-11 14:13:09 -05:00
}
2020-11-19 09:50:16 -05:00
mssql( ) {
2022-11-03 10:15:01 -04:00
mssql_2022
}
mssql_2017( ) {
$CONTAINER_CLI rm -f mssql || true
#This sha256 matches a specific tag of mcr.microsoft.com/mssql/server:2017-latest :
2024-08-21 07:47:57 -04:00
$CONTAINER_CLI run --name mssql -d -p 1433:1433 -e "SA_PASSWORD=Hibernate_orm_test" -e ACCEPT_EULA = Y ${ DB_IMAGE_MSSQL_2017 :- mcr .microsoft.com/mssql/server@sha256 : 7d194c54e34cb63bca083542369485c8f4141596805611e84d8c8bab2339eede }
2022-11-03 10:15:01 -04:00
sleep 5
n = 0
until [ " $n " -ge 5 ]
do
# We need a database that uses a non-lock based MVCC approach
# https://github.com/microsoft/homebrew-mssql-release/issues/2#issuecomment-682285561
$CONTAINER_CLI exec mssql bash -c 'echo "create database hibernate_orm_test collate SQL_Latin1_General_CP1_CS_AS; alter database hibernate_orm_test set READ_COMMITTED_SNAPSHOT ON" | /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P Hibernate_orm_test -i /dev/stdin' && break
echo "Waiting for SQL Server to start..."
n = $(( n+1))
sleep 5
done
if [ " $n " -ge 5 ] ; then
echo "SQL Server failed to start and configure after 25 seconds"
else
echo "SQL Server successfully started"
fi
}
mssql_2022( ) {
2022-04-06 12:52:56 -04:00
$CONTAINER_CLI rm -f mssql || true
2024-04-03 08:25:33 -04:00
#This sha256 matches a specific tag of 2022-CU12-ubuntu-22.04 (https://mcr.microsoft.com/en-us/product/mssql/server/tags):
2024-08-21 07:47:57 -04:00
$CONTAINER_CLI run --name mssql -d -p 1433:1433 -e "SA_PASSWORD=Hibernate_orm_test" -e ACCEPT_EULA = Y ${ DB_IMAGE_MSSQL_2022 :- mcr .microsoft.com/mssql/server@sha256 : b94071acd4612bfe60a73e265097c2b6388d14d9d493db8f37cf4479a4337480 }
2020-12-17 12:16:09 -05:00
sleep 5
n = 0
until [ " $n " -ge 5 ]
do
# We need a database that uses a non-lock based MVCC approach
# https://github.com/microsoft/homebrew-mssql-release/issues/2#issuecomment-682285561
2022-04-06 12:52:56 -04:00
$CONTAINER_CLI exec mssql bash -c 'echo "create database hibernate_orm_test collate SQL_Latin1_General_CP1_CS_AS; alter database hibernate_orm_test set READ_COMMITTED_SNAPSHOT ON" | /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P Hibernate_orm_test -i /dev/stdin' && break
2020-12-17 12:16:09 -05:00
echo "Waiting for SQL Server to start..."
n = $(( n+1))
sleep 5
done
if [ " $n " -ge 5 ] ; then
echo "SQL Server failed to start and configure after 25 seconds"
else
echo "SQL Server successfully started"
fi
2020-11-19 09:50:16 -05:00
}
2021-06-23 08:56:57 -04:00
sybase( ) {
2022-04-06 12:52:56 -04:00
$CONTAINER_CLI rm -f sybase || true
2021-06-23 08:56:57 -04:00
# Yup, that sucks, but on ubuntu we need to use -T11889 as per: https://github.com/DataGrip/docker-env/issues/12
2024-08-21 07:47:57 -04:00
$CONTAINER_CLI run -d -p 9000:5000 -p 9001:5001 --name sybase --entrypoint /bin/bash ${ DB_IMAGE_SYBASE :- docker .io/nguoianphu/docker-sybase } -c " source /opt/sybase/SYBASE.sh
2021-06-23 08:56:57 -04:00
/opt/sybase/ASE-16_0/bin/dataserver \
-d/opt/sybase/data/master.dat \
-e/opt/sybase/ASE-16_0/install/MYSYBASE.log \
-c/opt/sybase/ASE-16_0/MYSYBASE.cfg \
-M/opt/sybase/ASE-16_0 \
-N/opt/sybase/ASE-16_0/sysam/MYSYBASE.properties \
-i/opt/sybase \
-sMYSYBASE \
-T11889
RET = \$ ?
exit 0
"
sybase_check( ) {
2022-04-06 12:52:56 -04:00
$CONTAINER_CLI exec sybase bash -c " source /opt/sybase/SYBASE.sh;
2021-06-23 08:56:57 -04:00
/opt/sybase/OCS-16_0/bin/isql -Usa -P myPassword -S MYSYBASE <<EOF
Select name from sysdatabases where status2 & 48 > 0
go
quit
EOF
"
}
START_STATUS = 0
j = 1
while ( ( $j < 30 ) ) ; do
echo "Waiting for Sybase to start..."
sleep 1
j = $(( j+1))
START_STATUS = $( sybase_check | grep '(0 rows affected)' | wc -c)
if ( ( $START_STATUS > 0 ) ) ; then
break
fi
done
if ( ( $j = = 30 ) ) ; then
echo "Failed starting Sybase"
2022-04-06 12:52:56 -04:00
$CONTAINER_CLI ps -a
$CONTAINER_CLI logs sybase
2021-06-23 08:56:57 -04:00
sybase_check
exit 1
fi
export SYBASE_DB = hibernate_orm_test
export SYBASE_USER = hibernate_orm_test
export SYBASE_PASSWORD = hibernate_orm_test
2022-04-06 12:52:56 -04:00
$CONTAINER_CLI exec sybase bash -c " source /opt/sybase/SYBASE.sh;
2021-06-23 08:56:57 -04:00
cat <<-EOSQL > init1.sql
use master
go
disk resize name = 'master' , size = '256m'
go
create database $SYBASE_DB on master = '96m'
go
sp_dboption $SYBASE_DB , \" single user\" , true
go
alter database $SYBASE_DB log on master = '50m'
go
use $SYBASE_DB
go
exec sp_extendsegment logsegment, $SYBASE_DB , master
go
use master
go
sp_dboption $SYBASE_DB , \" single user\" , false
go
use $SYBASE_DB
go
checkpoint
go
use master
go
create login $SYBASE_USER with password $SYBASE_PASSWORD
go
2024-10-09 08:15:14 -04:00
exec sp_configure 'enable xml' , 1
go
2021-06-23 08:56:57 -04:00
exec sp_dboption $SYBASE_DB , 'abort tran on log full' , true
go
exec sp_dboption $SYBASE_DB , 'allow nulls by default' , true
go
exec sp_dboption $SYBASE_DB , 'ddl in tran' , true
go
exec sp_dboption $SYBASE_DB , 'trunc log on chkpt' , true
go
exec sp_dboption $SYBASE_DB , 'full logging for select into' , true
go
exec sp_dboption $SYBASE_DB , 'full logging for alter table' , true
go
sp_dboption $SYBASE_DB , \" select into\" , true
go
2021-11-23 12:16:48 -05:00
sp_dboption tempdb, 'ddl in tran' , true
go
2021-06-23 08:56:57 -04:00
EOSQL
/opt/sybase/OCS-16_0/bin/isql -Usa -P myPassword -S MYSYBASE -i ./init1.sql
echo = = = = = = = = = = = = = = = CREATING DB = = = = = = = = = = = = = = = = = = = = = = = = = =
cat <<-EOSQL > init2.sql
use $SYBASE_DB
go
sp_adduser '$SYBASE_USER' , '$SYBASE_USER' , null
go
grant create default to $SYBASE_USER
go
grant create table to $SYBASE_USER
go
grant create view to $SYBASE_USER
go
grant create rule to $SYBASE_USER
go
grant create function to $SYBASE_USER
go
grant create procedure to $SYBASE_USER
go
commit
go
EOSQL
/opt/sybase/OCS-16_0/bin/isql -Usa -P myPassword -S MYSYBASE -i ./init2.sql"
echo "Sybase successfully started"
}
2022-04-06 12:52:56 -04:00
oracle_setup( ) {
HEALTHSTATUS =
until [ " $HEALTHSTATUS " = = "healthy" ] ;
2021-02-03 04:55:07 -05:00
do
echo "Waiting for Oracle to start..."
2022-04-06 12:52:56 -04:00
sleep 5;
# On WSL, health-checks intervals don't work for Podman, so run them manually
2024-11-07 10:52:25 -05:00
if ! command -v docker > /dev/null; then
2023-08-21 06:42:00 -04:00
$PRIVILEGED_CLI $CONTAINER_CLI healthcheck run oracle > /dev/null
2022-04-06 12:52:56 -04:00
fi
2023-08-21 06:42:00 -04:00
HEALTHSTATUS = " ` $PRIVILEGED_CLI $CONTAINER_CLI inspect -f $HEALTCHECK_PATH oracle` "
2022-04-06 12:52:56 -04:00
HEALTHSTATUS = ${ HEALTHSTATUS ##+( ) } #Remove longest matching series of spaces from the front
HEALTHSTATUS = ${ HEALTHSTATUS %%+( ) } #Remove longest matching series of spaces from the back
2021-02-03 04:55:07 -05:00
done
2022-04-06 12:52:56 -04:00
sleep 2;
2021-02-03 04:55:07 -05:00
echo "Oracle successfully started"
# We increase file sizes to avoid online resizes as that requires lots of CPU which is restricted in XE
2023-08-21 06:42:00 -04:00
$PRIVILEGED_CLI $CONTAINER_CLI exec oracle bash -c " source /home/oracle/.bashrc; bash -c \"
2023-01-02 10:28:22 -05:00
cat <<EOF | \$ORACLE _HOME/bin/sqlplus / as sysdba
2023-01-13 04:14:30 -05:00
set timing on
2023-08-21 06:42:00 -04:00
-- Remove DISABLE_OOB parameter from Listener configuration and restart it
!echo Enabling OOB for Listener...
!echo NAMES.DIRECTORY_PATH= \( EZCONNECT,TNSNAMES\) > /opt/oracle/oradata/dbconfig/XE/sqlnet.ora
!lsnrctl reload
2023-01-02 10:28:22 -05:00
-- Increasing redo logs
2022-11-03 10:15:01 -04:00
alter database add logfile group 4 '\$ORACLE_BASE/oradata/XE/redo04.log' size 500M reuse;
alter database add logfile group 5 '\$ORACLE_BASE/oradata/XE/redo05.log' size 500M reuse;
alter database add logfile group 6 '\$ORACLE_BASE/oradata/XE/redo06.log' size 500M reuse;
2021-02-03 04:55:07 -05:00
alter system switch logfile;
alter system switch logfile;
alter system switch logfile;
alter system checkpoint;
alter database drop logfile group 1;
alter database drop logfile group 2;
alter database drop logfile group 3;
2023-01-02 10:28:22 -05:00
!rm \$ ORACLE_BASE/oradata/XE/redo01.log
!rm \$ ORACLE_BASE/oradata/XE/redo02.log
!rm \$ ORACLE_BASE/oradata/XE/redo03.log
-- Increasing SYSAUX data file
alter database datafile '\$ORACLE_BASE/oradata/XE/sysaux01.dbf' resize 600M;
-- Modifying database init parameters
2021-03-12 06:51:38 -05:00
alter system set open_cursors = 1000 sid = '*' scope = both;
2023-01-02 10:28:22 -05:00
alter system set session_cached_cursors = 500 sid = '*' scope = spfile;
alter system set db_securefile = ALWAYS sid = '*' scope = spfile;
alter system set dispatchers = '(PROTOCOL=TCP)(SERVICE=XEXDB)(DISPATCHERS=0)' sid = '*' scope = spfile;
alter system set recyclebin = OFF sid = '*' SCOPE = SPFILE;
-- Comment the 2 next lines to be able to use Diagnostics Pack features
alter system set sga_target = 0m sid = '*' scope = both;
2023-01-13 04:14:30 -05:00
-- alter system set statistics_level = BASIC sid = '*' scope = spfile;
2023-01-02 10:28:22 -05:00
-- Restart the database
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE OPEN;
-- Switch to the XEPDB1 pluggable database
alter session set container = xepdb1;
-- Modify XEPDB1 datafiles and tablespaces
alter database datafile '\$ORACLE_BASE/oradata/XE/XEPDB1/system01.dbf' resize 320M;
alter database datafile '\$ORACLE_BASE/oradata/XE/XEPDB1/sysaux01.dbf' resize 360M;
alter database datafile '\$ORACLE_BASE/oradata/XE/XEPDB1/undotbs01.dbf' resize 400M;
alter database datafile '\$ORACLE_BASE/oradata/XE/XEPDB1/undotbs01.dbf' autoextend on next 16M;
alter database tempfile '\$ORACLE_BASE/oradata/XE/XEPDB1/temp01.dbf' resize 400M;
alter database tempfile '\$ORACLE_BASE/oradata/XE/XEPDB1/temp01.dbf' autoextend on next 16M;
alter database datafile '\$ORACLE_BASE/oradata/XE/XEPDB1/users01.dbf' resize 100M;
alter database datafile '\$ORACLE_BASE/oradata/XE/XEPDB1/users01.dbf' autoextend on next 16M;
alter tablespace USERS nologging;
alter tablespace SYSTEM nologging;
alter tablespace SYSAUX nologging;
2022-11-24 07:41:59 -05:00
create user hibernate_orm_test identified by hibernate_orm_test quota unlimited on users;
grant all privileges to hibernate_orm_test;
2021-02-03 04:55:07 -05:00
EOF\" "
2020-11-19 09:50:16 -05:00
}
2023-06-30 09:18:16 -04:00
oracle_free_setup( ) {
HEALTHSTATUS =
until [ " $HEALTHSTATUS " = = "healthy" ] ;
do
echo "Waiting for Oracle Free to start..."
sleep 5;
# On WSL, health-checks intervals don't work for Podman, so run them manually
2024-11-07 10:52:25 -05:00
if ! command -v docker > /dev/null; then
2023-06-30 09:18:16 -04:00
$PRIVILEGED_CLI $CONTAINER_CLI healthcheck run oracle > /dev/null
fi
HEALTHSTATUS = " ` $PRIVILEGED_CLI $CONTAINER_CLI inspect -f $HEALTCHECK_PATH oracle` "
HEALTHSTATUS = ${ HEALTHSTATUS ##+( ) } #Remove longest matching series of spaces from the front
HEALTHSTATUS = ${ HEALTHSTATUS %%+( ) } #Remove longest matching series of spaces from the back
done
sleep 2;
echo "Oracle successfully started"
# We increase file sizes to avoid online resizes as that requires lots of CPU which is restricted in XE
$PRIVILEGED_CLI $CONTAINER_CLI exec oracle bash -c " source /home/oracle/.bashrc; bash -c \"
cat <<EOF | \$ORACLE _HOME/bin/sqlplus / as sysdba
set timing on
-- Remove DISABLE_OOB parameter from Listener configuration and restart it
!echo Enabling OOB for Listener...
!echo NAMES.DIRECTORY_PATH= \( EZCONNECT,TNSNAMES\) > /opt/oracle/oradata/dbconfig/FREE/sqlnet.ora
!lsnrctl reload
-- Increasing redo logs
alter database add logfile group 4 '\$ORACLE_BASE/oradata/FREE/redo04.log' size 500M reuse;
alter database add logfile group 5 '\$ORACLE_BASE/oradata/FREE/redo05.log' size 500M reuse;
alter database add logfile group 6 '\$ORACLE_BASE/oradata/FREE/redo06.log' size 500M reuse;
alter system switch logfile;
alter system switch logfile;
alter system switch logfile;
alter system checkpoint;
alter database drop logfile group 1;
alter database drop logfile group 2;
alter database drop logfile group 3;
!rm \$ ORACLE_BASE/oradata/FREE/redo01.log
!rm \$ ORACLE_BASE/oradata/FREE/redo02.log
!rm \$ ORACLE_BASE/oradata/FREE/redo03.log
-- Increasing SYSAUX data file
alter database datafile '\$ORACLE_BASE/oradata/FREE/sysaux01.dbf' resize 600M;
-- Modifying database init parameters
alter system set open_cursors = 1000 sid = '*' scope = both;
alter system set session_cached_cursors = 500 sid = '*' scope = spfile;
alter system set db_securefile = ALWAYS sid = '*' scope = spfile;
alter system set dispatchers = '(PROTOCOL=TCP)(SERVICE=FREEXDB)(DISPATCHERS=0)' sid = '*' scope = spfile;
alter system set recyclebin = OFF sid = '*' SCOPE = SPFILE;
-- Comment the 2 next lines to be able to use Diagnostics Pack features
alter system set sga_target = 0m sid = '*' scope = both;
-- alter system set statistics_level = BASIC sid = '*' scope = spfile;
-- Restart the database
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE OPEN;
-- Switch to the FREEPDB1 pluggable database
alter session set container = freepdb1;
-- Modify FREEPDB1 datafiles and tablespaces
alter database datafile '\$ORACLE_BASE/oradata/FREE/FREEPDB1/system01.dbf' resize 320M;
alter database datafile '\$ORACLE_BASE/oradata/FREE/FREEPDB1/sysaux01.dbf' resize 360M;
alter database datafile '\$ORACLE_BASE/oradata/FREE/FREEPDB1/undotbs01.dbf' resize 400M;
alter database datafile '\$ORACLE_BASE/oradata/FREE/FREEPDB1/undotbs01.dbf' autoextend on next 16M;
alter database tempfile '\$ORACLE_BASE/oradata/FREE/FREEPDB1/temp01.dbf' resize 400M;
alter database tempfile '\$ORACLE_BASE/oradata/FREE/FREEPDB1/temp01.dbf' autoextend on next 16M;
alter database datafile '\$ORACLE_BASE/oradata/FREE/FREEPDB1/users01.dbf' resize 100M;
alter database datafile '\$ORACLE_BASE/oradata/FREE/FREEPDB1/users01.dbf' autoextend on next 16M;
alter tablespace USERS nologging;
alter tablespace SYSTEM nologging;
alter tablespace SYSAUX nologging;
create user hibernate_orm_test identified by hibernate_orm_test quota unlimited on users;
grant all privileges to hibernate_orm_test;
EOF\" "
}
2023-08-21 06:42:00 -04:00
disable_userland_proxy( ) {
if [ [ " $HEALTCHECK_PATH " = = "{{.State.Health.Status}}" ] ] ; then
2023-10-20 05:09:16 -04:00
if [ [ ! -f /etc/docker/daemon.json ] ] ; then
echo "Didn't find /etc/docker/daemon.json but need to disable userland-proxy..."
echo "Stopping docker..."
2023-08-21 06:42:00 -04:00
sudo service docker stop
2023-10-20 05:09:16 -04:00
echo "Creating /etc/docker/daemon.json..."
2023-09-27 14:12:46 -04:00
sudo bash -c "echo '{\"userland-proxy\": false}' > /etc/docker/daemon.json"
2023-10-20 05:09:16 -04:00
echo "Starting docker..."
2023-08-21 06:42:00 -04:00
sudo service docker start
2023-10-20 05:09:16 -04:00
echo "Docker successfully started with userland proxies disabled"
elif ! grep -q userland-proxy /etc/docker/daemon.json; then
echo "Userland proxy is still enabled in /etc/docker/daemon.json, but need to disable it..."
2023-09-27 14:12:46 -04:00
export docker_daemon_json = $( </etc/docker/daemon.json)
2023-10-20 05:09:16 -04:00
echo "Stopping docker..."
2023-08-21 06:42:00 -04:00
sudo service docker stop
2023-10-20 05:09:16 -04:00
echo "Updating /etc/docker/daemon.json..."
2024-11-07 10:52:25 -05:00
sudo bash -c " export docker_daemon_json=' $docker_daemon_json '; echo \"\${docker_daemon_json/\}/,}\\\"userland-proxy\\\": false}\" > /etc/docker/daemon.json "
echo "New docker daemon config:"
cat /etc/docker/daemon.json
2023-10-20 05:09:16 -04:00
echo "Starting docker..."
2023-08-21 06:42:00 -04:00
sudo service docker start
2024-11-07 10:52:25 -05:00
echo "Service status:"
sudo journalctl -xeu docker.service
2023-10-20 05:09:16 -04:00
echo "Docker successfully started with userland proxies disabled"
2023-08-21 06:42:00 -04:00
fi
fi
}
2023-09-21 09:42:43 -04:00
oracle_atps( ) {
echo "Managing Oracle Autonomous Database..."
2024-02-14 05:35:11 -05:00
export INFO = $( curl -s -k -L -X GET "https://api.atlas-controller.oraclecloud.com/ords/atlas/admin/database?type=autonomous2&hostname=`hostname`" -H 'accept: application/json' )
2023-09-21 09:42:43 -04:00
export HOST = $( echo $INFO | jq -r '.database' | jq -r '.host' )
export SERVICE = $( echo $INFO | jq -r '.database' | jq -r '.service' )
export PASSWORD = $( echo $INFO | jq -r '.database' | jq -r '.password' )
2024-02-14 05:29:21 -05:00
curl -k -s -X POST " https:// ${ HOST } .oraclevcn.com:8443/ords/admin/_/sql " -H 'content-type: application/sql' -H 'accept: application/json' -basic -u admin:${ PASSWORD } --data-ascii " create user hibernate_orm_test_ $RUNID identified by \"Oracle_19_Password\" DEFAULT TABLESPACE DATA TEMPORARY TABLESPACE TEMP;alter user hibernate_orm_test_ $RUNID quota unlimited on data;grant CREATE SESSION, RESOURCE, CREATE VIEW, CREATE SYNONYM, CREATE ANY INDEX, EXECUTE ANY TYPE to hibernate_orm_test_ $RUNID ; "
}
oracle_atps_tls( ) {
echo "Managing Oracle Autonomous Database..."
export INFO = $( curl -s -k -L -X GET "https://api.atlas-controller.oraclecloud.com/ords/atlas/admin/database?type=autonomous&hostname=`hostname`" -H 'accept: application/json' )
export HOST = $( echo $INFO | jq -r '.database' | jq -r '.host' )
export SERVICE = $( echo $INFO | jq -r '.database' | jq -r '.service' )
export PASSWORD = $( echo $INFO | jq -r '.database' | jq -r '.password' )
2023-10-13 06:01:41 -04:00
curl -s -X POST " https:// ${ HOST } .oraclecloudapps.com/ords/admin/_/sql " -H 'content-type: application/sql' -H 'accept: application/json' -basic -u admin:${ PASSWORD } --data-ascii " create user hibernate_orm_test_ $RUNID identified by \"Oracle_19_Password\" DEFAULT TABLESPACE DATA TEMPORARY TABLESPACE TEMP;alter user hibernate_orm_test_ $RUNID quota unlimited on data;grant CREATE SESSION, RESOURCE, CREATE VIEW, CREATE SYNONYM, CREATE ANY INDEX, EXECUTE ANY TYPE to hibernate_orm_test_ $RUNID ; "
2023-09-21 09:42:43 -04:00
}
oracle_db19c( ) {
echo "Managing Oracle Database 19c..."
export INFO = $( curl -s -k -L -X GET "https://api.atlas-controller.oraclecloud.com/ords/atlas/admin/database?type=db19c&hostname=`hostname`" -H 'accept: application/json' )
export HOST = $( echo $INFO | jq -r '.database' | jq -r '.host' )
export SERVICE = $( echo $INFO | jq -r '.database' | jq -r '.service' )
export PASSWORD = $( echo $INFO | jq -r '.database' | jq -r '.password' )
/home/opc/sqlcl/bin/sql -s system/$PASSWORD @$HOST :1521/$SERVICE <<EOF
create user hibernate_orm_test_$RUNID identified by "Oracle_19_Password" DEFAULT TABLESPACE USERS TEMPORARY TABLESPACE TEMP;
alter user hibernate_orm_test_$RUNID quota unlimited on users;
2023-10-13 06:01:41 -04:00
grant CREATE SESSION, RESOURCE, CREATE VIEW, CREATE SYNONYM, CREATE ANY INDEX, EXECUTE ANY TYPE to hibernate_orm_test_$RUNID ;
2023-09-21 09:42:43 -04:00
EOF
}
oracle_db21c( ) {
echo "Managing Oracle Database 21c..."
export INFO = $( curl -s -k -L -X GET "https://api.atlas-controller.oraclecloud.com/ords/atlas/admin/database?type=db21c&hostname=`hostname`" -H 'accept: application/json' )
export HOST = $( echo $INFO | jq -r '.database' | jq -r '.host' )
export SERVICE = $( echo $INFO | jq -r '.database' | jq -r '.service' )
export PASSWORD = $( echo $INFO | jq -r '.database' | jq -r '.password' )
/home/opc/sqlcl/bin/sql -s system/$PASSWORD @$HOST :1521/$SERVICE <<EOF
create user hibernate_orm_test_$RUNID identified by "Oracle_21_Password" DEFAULT TABLESPACE USERS TEMPORARY TABLESPACE TEMP;
alter user hibernate_orm_test_$RUNID quota unlimited on users;
2023-10-13 06:01:41 -04:00
grant CREATE SESSION, RESOURCE, CREATE VIEW, CREATE SYNONYM, CREATE ANY INDEX, EXECUTE ANY TYPE to hibernate_orm_test_$RUNID ;
2023-09-21 09:42:43 -04:00
EOF
}
oracle_db23c( ) {
echo "Managing Oracle Database 23c..."
export INFO = $( curl -s -k -L -X GET "https://api.atlas-controller.oraclecloud.com/ords/atlas/admin/database?type=db23c&hostname=`hostname`" -H 'accept: application/json' )
export HOST = $( echo $INFO | jq -r '.database' | jq -r '.host' )
export SERVICE = $( echo $INFO | jq -r '.database' | jq -r '.service' )
export PASSWORD = $( echo $INFO | jq -r '.database' | jq -r '.password' )
/home/opc/sqlcl/bin/sql -s system/$PASSWORD @$HOST :1521/$SERVICE <<EOF
create user hibernate_orm_test_$RUNID identified by "Oracle_23_Password" DEFAULT TABLESPACE USERS TEMPORARY TABLESPACE TEMP;
alter user hibernate_orm_test_$RUNID quota unlimited on users;
2023-10-13 06:01:41 -04:00
grant DB_DEVELOPER_ROLE to hibernate_orm_test_$RUNID ;
2023-09-21 09:42:43 -04:00
EOF
}
2022-04-06 12:52:56 -04:00
oracle( ) {
2023-06-30 09:18:16 -04:00
oracle_23
2022-04-06 12:52:56 -04:00
}
2024-11-07 10:52:25 -05:00
oracle_18( ) {
$PRIVILEGED_CLI $CONTAINER_CLI rm -f oracle || true
disable_userland_proxy
# We need to use the defaults
# SYSTEM/Oracle18
$PRIVILEGED_CLI $CONTAINER_CLI run --name oracle -d -p 1521:1521 -e ORACLE_PASSWORD = Oracle18 \
--cap-add cap_net_raw \
--health-cmd healthcheck.sh \
--health-interval 5s \
--health-timeout 5s \
--health-retries 10 \
${ DB_IMAGE_ORACLE_21 :- docker .io/gvenzl/oracle-xe : 18 .4.0 }
oracle_setup
}
2022-04-06 12:52:56 -04:00
oracle_21( ) {
2023-08-21 06:42:00 -04:00
$PRIVILEGED_CLI $CONTAINER_CLI rm -f oracle || true
disable_userland_proxy
2022-04-06 12:52:56 -04:00
# We need to use the defaults
# SYSTEM/Oracle18
2023-08-21 06:42:00 -04:00
$PRIVILEGED_CLI $CONTAINER_CLI run --name oracle -d -p 1521:1521 -e ORACLE_PASSWORD = Oracle18 \
--cap-add cap_net_raw \
2022-04-06 12:52:56 -04:00
--health-cmd healthcheck.sh \
--health-interval 5s \
--health-timeout 5s \
--health-retries 10 \
2024-08-21 07:47:57 -04:00
${ DB_IMAGE_ORACLE_21 :- docker .io/gvenzl/oracle-xe : 21 .3.0 }
2022-04-06 12:52:56 -04:00
oracle_setup
}
2023-06-30 09:18:16 -04:00
oracle_23( ) {
$PRIVILEGED_CLI $CONTAINER_CLI rm -f oracle || true
disable_userland_proxy
# We need to use the defaults
# SYSTEM/Oracle18
$PRIVILEGED_CLI $CONTAINER_CLI run --name oracle -d -p 1521:1521 -e ORACLE_PASSWORD = Oracle18 \
--health-cmd healthcheck.sh \
--health-interval 5s \
--health-timeout 5s \
--health-retries 10 \
2024-08-21 07:47:57 -04:00
${ DB_IMAGE_ORACLE_23 :- docker .io/gvenzl/oracle-free : 23 }
2023-06-30 09:18:16 -04:00
oracle_free_setup
}
2021-02-09 07:03:18 -05:00
hana( ) {
temp_dir = $( mktemp -d)
2021-07-06 06:55:10 -04:00
echo '{"master_password" : "H1bernate_test"}' >$temp_dir /password.json
2024-11-07 10:52:25 -05:00
chmod -R 777 $temp_dir
2022-12-21 06:36:22 -05:00
$PRIVILEGED_CLI $CONTAINER_CLI rm -f hana || true
$PRIVILEGED_CLI $CONTAINER_CLI run -d --name hana -p 39013:39013 -p 39017:39017 -p 39041-39045:39041-39045 -p 1128-1129:1128-1129 -p 59013-59014:59013-59014 \
2021-04-06 08:24:13 -04:00
--memory= 8g \
2021-02-09 07:03:18 -05:00
--ulimit nofile = 1048576:1048576 \
--sysctl kernel.shmmax= 1073741824 \
--sysctl net.ipv4.ip_local_port_range= '40000 60999' \
2021-03-17 15:03:13 -04:00
--sysctl kernel.shmmni= 4096 \
2021-02-09 07:03:18 -05:00
--sysctl kernel.shmall= 8388608 \
2022-12-21 06:36:22 -05:00
-v $temp_dir :/config:Z \
2024-11-07 10:52:25 -05:00
${ DB_IMAGE_HANA :- docker .io/saplabs/hanaexpress : 2 .00.076.00.20240701.1 } \
2021-02-09 07:03:18 -05:00
--passwords-url file:///config/password.json \
--agree-to-sap-license
# Give the container some time to start
OUTPUT =
while [ [ $OUTPUT != *"Startup finished" * ] ] ; do
echo "Waiting for HANA to start..."
sleep 10
2022-12-21 06:36:22 -05:00
OUTPUT = $( $PRIVILEGED_CLI $CONTAINER_CLI logs hana 2>& 1)
2021-02-09 07:03:18 -05:00
done
echo "HANA successfully started"
}
2021-02-12 09:11:44 -05:00
cockroachdb( ) {
2024-10-20 08:58:02 -04:00
cockroachdb_24_1
2023-01-10 12:13:14 -05:00
}
2024-10-20 08:58:02 -04:00
cockroachdb_24_1( ) {
2023-05-10 04:00:13 -04:00
$CONTAINER_CLI rm -f cockroach || true
LOG_CONFIG = "
sinks:
stderr:
channels: all
filter: ERROR
redact: false
exit-on-error: true
"
2024-10-20 08:58:02 -04:00
$CONTAINER_CLI run -d --name= cockroach -m 6g -p 26257:26257 -p 8080:8080 ${ DB_IMAGE_COCKROACHDB_24_1 :- cockroachdb /cockroach : v24 .1.5 } start-single-node \
2023-05-10 04:00:13 -04:00
--insecure --store= type = mem,size= 0.25 --advertise-addr= localhost --log= " $LOG_CONFIG "
OUTPUT =
while [ [ $OUTPUT != *"CockroachDB node starting" * ] ] ; do
echo "Waiting for CockroachDB to start..."
sleep 10
# Note we need to redirect stderr to stdout to capture the logs
OUTPUT = $( $CONTAINER_CLI logs cockroach 2>& 1)
done
echo "Enabling experimental box2d operators and some optimized settings for running the tests"
2024-10-20 08:58:02 -04:00
#settings documented in https://www.cockroachlabs.com/docs/v24.1/local-testing#use-a-local-single-node-cluster-with-in-memory-storage
2023-05-10 04:00:13 -04:00
$CONTAINER_CLI exec cockroach bash -c " cat <<EOF | ./cockroach sql --insecure
SET CLUSTER SETTING sql.spatial.experimental_box2d_comparison_operators.enabled = on;
SET CLUSTER SETTING kv.range_merge.queue_interval = '50ms' ;
SET CLUSTER SETTING jobs.registry.interval.gc = '30s' ;
SET CLUSTER SETTING jobs.registry.interval.cancel = '180s' ;
SET CLUSTER SETTING jobs.retention_time = '15s' ;
SET CLUSTER SETTING sql.stats.automatic_collection.enabled = false;
SET CLUSTER SETTING kv.range_split.by_load_merge_delay = '5s' ;
ALTER RANGE default CONFIGURE ZONE USING "gc.ttlseconds" = 600;
ALTER DATABASE system CONFIGURE ZONE USING "gc.ttlseconds" = 600;
quit
EOF
"
echo "Cockroachdb successfully started"
}
2024-10-20 08:58:02 -04:00
cockroachdb_23_1( ) {
2023-01-10 12:13:14 -05:00
$CONTAINER_CLI rm -f cockroach || true
LOG_CONFIG = "
sinks:
stderr:
channels: all
filter: ERROR
redact: false
exit-on-error: true
"
2024-10-20 08:58:02 -04:00
$CONTAINER_CLI run -d --name= cockroach -m 6g -p 26257:26257 -p 8080:8080 ${ DB_IMAGE_COCKROACHDB_23_1 :- docker .io/cockroachdb/cockroach : v23 .1.28 } start-single-node \
2023-01-10 12:13:14 -05:00
--insecure --store= type = mem,size= 0.25 --advertise-addr= localhost --log= " $LOG_CONFIG "
OUTPUT =
while [ [ $OUTPUT != *"CockroachDB node starting" * ] ] ; do
echo "Waiting for CockroachDB to start..."
sleep 10
# Note we need to redirect stderr to stdout to capture the logs
OUTPUT = $( $CONTAINER_CLI logs cockroach 2>& 1)
done
echo "Enabling experimental box2d operators and some optimized settings for running the tests"
#settings documented in https://www.cockroachlabs.com/docs/v22.1/local-testing.html#use-a-local-single-node-cluster-with-in-memory-storage
$CONTAINER_CLI exec cockroach bash -c " cat <<EOF | ./cockroach sql --insecure
SET CLUSTER SETTING sql.spatial.experimental_box2d_comparison_operators.enabled = on;
SET CLUSTER SETTING kv.raft_log.disable_synchronization_unsafe = true;
SET CLUSTER SETTING kv.range_merge.queue_interval = '50ms' ;
SET CLUSTER SETTING jobs.registry.interval.gc = '30s' ;
SET CLUSTER SETTING jobs.registry.interval.cancel = '180s' ;
SET CLUSTER SETTING jobs.retention_time = '15s' ;
SET CLUSTER SETTING sql.stats.automatic_collection.enabled = false;
SET CLUSTER SETTING kv.range_split.by_load_merge_delay = '5s' ;
2024-05-03 03:08:51 -04:00
SET CLUSTER SETTING sql.defaults.serial_normalization = 'sql_sequence_cached' ;
2023-01-10 12:13:14 -05:00
ALTER RANGE default CONFIGURE ZONE USING "gc.ttlseconds" = 600;
ALTER DATABASE system CONFIGURE ZONE USING "gc.ttlseconds" = 600;
quit
EOF
"
echo "Cockroachdb successfully started"
2022-11-03 10:15:01 -04:00
}
2023-02-02 10:15:28 -05:00
tidb( ) {
2024-02-19 03:38:07 -05:00
tidb_5_4
2023-02-02 10:15:28 -05:00
}
2024-02-19 03:38:07 -05:00
tidb_5_4( ) {
2023-02-02 10:15:28 -05:00
$CONTAINER_CLI rm -f tidb || true
2024-02-19 03:38:07 -05:00
$CONTAINER_CLI network rm -f tidb_network || true
$CONTAINER_CLI network create tidb_network
2024-08-21 07:47:57 -04:00
$CONTAINER_CLI run --name tidb -p4000:4000 -d --network tidb_network ${ DB_IMAGE_TIDB_5_4 :- docker .io/pingcap/tidb : v5 .4.3 }
2023-02-02 10:15:28 -05:00
# Give the container some time to start
OUTPUT =
n = 0
until [ " $n " -ge 5 ]
do
OUTPUT = $( $CONTAINER_CLI logs tidb 2>& 1)
if [ [ $OUTPUT = = *"server is running" * ] ] ; then
break;
fi
n = $(( n+1))
echo "Waiting for TiDB to start..."
sleep 3
done
2024-02-19 03:38:07 -05:00
$CONTAINER_CLI run -it --rm --network tidb_network docker.io/mysql:8.2.0 mysql -htidb -P4000 -uroot -e "create database hibernate_orm_test; create user 'hibernate_orm_test' identified by 'hibernate_orm_test'; grant all on hibernate_orm_test.* to 'hibernate_orm_test';"
2023-02-02 10:15:28 -05:00
if [ " $n " -ge 5 ] ; then
echo "TiDB failed to start and configure after 15 seconds"
else
echo "TiDB successfully started"
fi
}
2024-06-07 08:51:13 -04:00
informix( ) {
informix_14_10
}
informix_14_10( ) {
2024-09-03 05:13:38 -04:00
temp_dir = $( mktemp -d)
echo "ALLOW_NEWLINE 1" >$temp_dir /onconfig.mod
chmod 777 -R $temp_dir
2024-06-07 08:51:13 -04:00
$PRIVILEGED_CLI $CONTAINER_CLI rm -f informix || true
2024-09-03 05:13:38 -04:00
$PRIVILEGED_CLI $CONTAINER_CLI run --name informix --privileged -p 9088:9088 -v $temp_dir :/opt/ibm/config -e LICENSE = accept -e GL_USEGLU = 1 -d ${ DB_IMAGE_INFORMIX_14_10 :- icr .io/informix/informix-developer-database : 14 .10.FC9W1DE }
2024-06-07 08:51:13 -04:00
echo "Starting Informix. This can take a few minutes"
# Give the container some time to start
OUTPUT =
n = 0
2024-06-13 09:44:46 -04:00
until [ " $n " -ge 5 ]
2024-06-07 08:51:13 -04:00
do
2024-06-13 09:44:46 -04:00
OUTPUT = $( $PRIVILEGED_CLI $CONTAINER_CLI logs informix 2>& 1)
2024-06-07 08:51:13 -04:00
if [ [ $OUTPUT = = *"Server Started" * ] ] ; then
2024-06-13 09:44:46 -04:00
sleep 15
2024-06-28 11:04:27 -04:00
$PRIVILEGED_CLI $CONTAINER_CLI exec informix bash -l -c "export DB_LOCALE=en_US.utf8;export CLIENT_LOCALE=en_US.utf8;echo \"execute function task('create dbspace from storagepool', 'datadbs', '100 MB', '4');execute function task('create sbspace from storagepool', 'sbspace', '20 M', '0');create database dev in datadbs with log;\" > post_init.sql;dbaccess sysadmin post_init.sql"
2024-06-07 08:51:13 -04:00
break;
fi
n = $(( n+1))
echo "Waiting for Informix to start..."
sleep 30
done
2024-06-13 09:44:46 -04:00
if [ " $n " -ge 5 ] ; then
2024-06-07 08:51:13 -04:00
echo "Informix failed to start and configure after 5 minutes"
else
echo "Informix successfully started"
fi
}
informix_12_10( ) {
$PRIVILEGED_CLI $CONTAINER_CLI rm -f informix || true
2024-08-21 07:47:57 -04:00
$PRIVILEGED_CLI $CONTAINER_CLI run --name informix --privileged -p 9088:9088 -e LICENSE = accept -e GL_USEGLU = 1 -d ${ DB_IMAGE_INFORMIX_12_10 :- ibmcom /informix-developer-database : 12 .10.FC12W1DE }
2024-06-07 08:51:13 -04:00
echo "Starting Informix. This can take a few minutes"
# Give the container some time to start
OUTPUT =
n = 0
2024-06-13 09:44:46 -04:00
until [ " $n " -ge 5 ]
2024-06-07 08:51:13 -04:00
do
2024-06-13 09:44:46 -04:00
OUTPUT = $( $PRIVILEGED_CLI $CONTAINER_CLI logs informix 2>& 1)
2024-06-07 08:51:13 -04:00
if [ [ $OUTPUT = = *"login Information" * ] ] ; then
2024-06-13 09:44:46 -04:00
sleep 15
2024-06-28 11:04:27 -04:00
$PRIVILEGED_CLI $CONTAINER_CLI exec informix bash -l -c "export DB_LOCALE=en_US.utf8;export CLIENT_LOCALE=en_US.utf8;echo \"execute function task('create dbspace from storagepool', 'datadbs', '100 MB', '4');execute function task('create sbspace from storagepool', 'sbspace', '20 M', '0');create database dev in datadbs with log;\" > post_init.sql;dbaccess sysadmin post_init.sql"
2024-06-07 08:51:13 -04:00
break;
fi
n = $(( n+1))
echo "Waiting for Informix to start..."
sleep 30
done
2024-06-13 09:44:46 -04:00
if [ " $n " -ge 5 ] ; then
2024-06-07 08:51:13 -04:00
echo "Informix failed to start and configure after 5 minutes"
else
echo "Informix successfully started"
fi
}
2020-11-19 09:50:16 -05:00
if [ -z ${ 1 } ] ; then
echo "No db name provided"
echo "Provide one of:"
2021-06-23 08:56:57 -04:00
echo -e "\tcockroachdb"
2024-10-20 08:58:02 -04:00
echo -e "\tcockroachdb_24_1"
2023-05-10 04:00:13 -04:00
echo -e "\tcockroachdb_23_1"
2020-11-19 09:50:16 -05:00
echo -e "\tdb2"
2022-11-03 10:15:01 -04:00
echo -e "\tdb2_11_5"
echo -e "\tdb2_10_5"
2021-06-23 08:56:57 -04:00
echo -e "\tdb2_spatial"
echo -e "\tedb"
2023-12-08 08:31:25 -05:00
echo -e "\tedb_16"
2023-09-04 10:51:59 -04:00
echo -e "\tedb_15"
2022-11-03 10:15:01 -04:00
echo -e "\tedb_14"
2023-10-11 14:42:59 -04:00
echo -e "\tedb_12"
2021-06-23 08:56:57 -04:00
echo -e "\thana"
echo -e "\tmariadb"
2024-06-26 00:32:38 -04:00
echo -e "\tmariadb_verylatest"
2024-06-26 00:25:03 -04:00
echo -e "\tmariadb_11_4"
2023-09-04 10:51:59 -04:00
echo -e "\tmariadb_11_1"
2024-06-26 00:22:43 -04:00
echo -e "\tmariadb_10_11"
2024-07-31 13:38:21 -04:00
echo -e "\tmariadb_10_5"
2020-11-19 09:50:16 -05:00
echo -e "\tmssql"
2022-11-03 10:15:01 -04:00
echo -e "\tmssql_2022"
echo -e "\tmssql_2017"
2022-09-20 03:26:06 -04:00
echo -e "\tmysql"
2023-12-08 08:23:11 -05:00
echo -e "\tmysql_8_2"
2023-09-04 10:51:59 -04:00
echo -e "\tmysql_8_1"
2021-06-23 08:56:57 -04:00
echo -e "\tmysql_8_0"
2020-11-19 09:50:16 -05:00
echo -e "\toracle"
2023-06-30 09:18:16 -04:00
echo -e "\toracle_23"
2022-04-06 12:52:56 -04:00
echo -e "\toracle_21"
2022-11-03 10:15:01 -04:00
echo -e "\tpostgresql"
2023-12-08 08:29:49 -05:00
echo -e "\tpostgresql_16"
2022-12-14 14:39:34 -05:00
echo -e "\tpostgresql_15"
2022-09-21 07:58:41 -04:00
echo -e "\tpostgresql_14"
2021-06-23 08:56:57 -04:00
echo -e "\tpostgresql_13"
2023-10-11 11:24:52 -04:00
echo -e "\tpostgresql_12"
2021-06-23 08:56:57 -04:00
echo -e "\tsybase"
2023-02-02 10:15:28 -05:00
echo -e "\ttidb"
2024-02-19 03:38:07 -05:00
echo -e "\ttidb_5_4"
2024-06-13 09:44:46 -04:00
echo -e "\informix"
echo -e "\informix_14_10"
echo -e "\informix_12_10"
2020-11-19 09:50:16 -05:00
else
${ 1 }
2021-04-06 08:24:13 -04:00
fi