3232
3333# Check no two encryption types are enabled at the same time
3434if [ ${ENCRYPTION_RUN} -eq 1 ]; then
35- enabled_count=$(( ${COMPONENT_KEYRING_FILE} + ${COMPONENT_KEYRING_VAULT} + ${PLUGIN_KEYRING_VAULT} + ${PLUGIN_KEYRING_FILE} ))
35+ enabled_count=$(( ${COMPONENT_KEYRING_FILE} + ${COMPONENT_KEYRING_VAULT} + ${PLUGIN_KEYRING_VAULT} + ${PLUGIN_KEYRING_FILE} + ${COMPONENT_KEYRING_KMIP} ))
3636 if [ " $enabled_count " -gt 1 ]; then
37- echo " Enable one encryption(keyring_file|keyring_vault) type(plugin|component) at a time"
37+ echo " Enable one encryption(keyring_file|keyring_vault|keyring_kmip ) type(plugin|component) at a time"
3838 exit 1
3939 fi
4040elif [ ${ENCRYPTION_RUN} -eq 0 ]; then
4141 COMPONENT_KEYRING_FILE=0
4242 COMPONENT_KEYRING_VAULT=0
43+ COMPONENT_KEYRING_KMIP=0
4344 PLUGIN_KEYRING_VAULT=0
4445 PLUGIN_KEYRING_FILE=0
4546fi
@@ -124,6 +125,41 @@ start_vault_server(){
124125 vault_ca=$( grep ' vault_ca' " ${WORKDIR} /vault/keyring_vault_ps.cnf" | awk -F ' =' ' {print $2}' | tr -d ' [:space:]' )
125126}
126127
128+ # Start KMIP server
129+ start_kmip_server (){
130+ # Check if KMIP docker container is already running
131+ container_id=$( sudo docker ps -a | grep mohitpercona/kmip | awk ' {print $1}' )
132+ if [ -n " $container_id " ]; then
133+ sudo docker stop " $container_id " > /dev/null 2>&1
134+ sudo docker rm " $container_id " > /dev/null 2>&1
135+ fi
136+ # Start KMIP server with docker container
137+ sudo docker run -d --security-opt seccomp=unconfined --cap-add=NET_ADMIN --rm -p 5696:5696 --name kmip mohitpercona/kmip:latest
138+
139+ # Sleep for 30 seconds for KMIP server to fully initialise
140+ sleep 30
141+
142+ # Copy the certs
143+ if [ -d ${WORKDIR} /kmip_certs ]; then
144+ rm -rf ${WORKDIR} /kmip_certs
145+ fi
146+ mkdir ${WORKDIR} /kmip_certs
147+ sudo docker cp kmip:/opt/certs/root_certificate.pem ${WORKDIR} /kmip_certs
148+ sudo docker cp kmip:/opt/certs/client_key_jane_doe.pem ${WORKDIR} /kmip_certs
149+ sudo docker cp kmip:/opt/certs/client_certificate_jane_doe.pem ${WORKDIR} /kmip_certs
150+
151+ # Generate component_keyring_kmip.cnf
152+ cat > ${WORKDIR} /kmip_certs/component_keyring_kmip.cnf << EOF
153+ {
154+ "server_addr": "127.0.0.1",
155+ "server_port": "5696",
156+ "client_ca": "${WORKDIR} /kmip_certs/client_certificate_jane_doe.pem",
157+ "client_key": "${WORKDIR} /kmip_certs/client_key_jane_doe.pem",
158+ "server_ca": "${WORKDIR} /kmip_certs/root_certificate.pem"
159+ }
160+ EOF
161+ }
162+
127163# PXC Bug found display function
128164pxc_bug_found (){
129165 NODE=$1
205241}
206242EOF
207243 fi
244+ elif [ " $cmp_name " == " component_keyring_kmip" ]; then
245+ if [ " $node " == " " ]; then
246+ cp ${WORKDIR} /kmip_certs/component_keyring_kmip.cnf ${RUNDIR} /${TRIAL} /data
247+ else
248+ cp ${WORKDIR} /kmip_certs/component_keyring_kmip.cnf ${RUNDIR} /${TRIAL} /node$node
249+ cp ${WORKDIR} /kmip_certs/component_keyring_kmip.cnf ${RUNDIR} /${TRIAL} /node$node
250+ cp ${WORKDIR} /kmip_certs/component_keyring_kmip.cnf ${RUNDIR} /${TRIAL} /node$node
251+ fi
208252 fi
253+
209254}
210255
211256# Incase, user starts pstress in RR mode, check if RR is installed on the machine
@@ -395,6 +440,7 @@ if [[ $PXC -eq 1 ]];then
395440 SPASS=
396441 rm -rf ${BASEDIR} /my.cnf
397442 echo " [mysqld]" > ${BASEDIR} /my.cnf
443+ echo " mysqlx=OFF" >> ${BASEDIR} /my.cnf
398444 echo " basedir=${BASEDIR} " >> ${BASEDIR} /my.cnf
399445 echo " wsrep-debug=1" >> ${BASEDIR} /my.cnf
400446 echo " pxc_strict_mode=ENFORCING" >> ${BASEDIR} /my.cnf
@@ -439,6 +485,10 @@ pxc_startup(){
439485 if ${BASEDIR} /bin/mysqladmin -uroot -S${SOCKET} ping > /dev/null 2>&1 ; then
440486 break
441487 fi
488+ if [ $X -eq ${PXC_START_TIMEOUT} ]; then
489+ echo " Node$NR failed to start. Exiting"
490+ exit 1
491+ fi
442492 done
443493 }
444494 unset PXC_PORTS
@@ -608,6 +658,7 @@ gr_startup(){
608658# General replication settings
609659
610660disabled_storage_engines=" MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY"
661+ mysqlx=OFF
611662gtid_mode = ON
612663enforce_gtid_consistency = ON
613664master_info_repository = TABLE
737788
738789 get_error_socket_file 1
739790 if [ ${ENCRYPTION_RUN} -eq 1 ]; then
740- if [ ${COMPONENT_KEYRING_FILE} -eq 1 -o ${COMPONENT_KEYRING_VAULT} -eq 1 ]; then
791+ if [ ${COMPONENT_KEYRING_FILE} -eq 1 -o ${COMPONENT_KEYRING_VAULT} -eq 1 -o ${COMPONENT_KEYRING_KMIP} -eq 1 ]; then
741792 ${BASEDIR} /bin/mysqld --defaults-file=$DATADIR_1 /n1.cnf --basedir=${BASEDIR} --datadir=$DATADIR_1 \
742793 --core-file --log-error=$ERR_FILE --socket=$SOCKET --port=$RBASE1 $MYEXTRA > $ERR_FILE 2>&1 &
743794 elif [ ${PLUGIN_KEYRING_FILE} -eq 1 ]; then
779830 get_error_socket_file 2
780831
781832 if [ " ${ENCRYPTION_RUN} " == " 1" ]; then
782- if [ ${COMPONENT_KEYRING_FILE} -eq 1 -o ${COMPONENT_KEYRING_VAULT} -eq 1 ]; then
833+ if [ ${COMPONENT_KEYRING_FILE} -eq 1 -o ${COMPONENT_KEYRING_VAULT} -eq 1 -o ${COMPONENT_KEYRING_KMIP} -eq 1 ]; then
783834 ${BASEDIR} /bin/mysqld --defaults-file=$DATADIR_2 /n2.cnf --basedir=${BASEDIR} --datadir=$DATADIR_2 \
784835 --core-file --log-error=$ERR_FILE --socket=$SOCKET --port=$RBASE2 $MYEXTRA > $ERR_FILE 2>&1 &
785836 elif [ ${PLUGIN_KEYRING_FILE} -eq 1 ]; then
821872 get_error_socket_file 3
822873
823874 if [ ${ENCRYPTION_RUN} -eq 1 ]; then
824- if [ ${COMPONENT_KEYRING_FILE} -eq 1 -o ${COMPONENT_KEYRING_VAULT} ]; then
875+ if [ ${COMPONENT_KEYRING_FILE} -eq 1 -o ${COMPONENT_KEYRING_VAULT} -eq 1 -o ${COMPONENT_KEYRING_KMIP} -eq 1 ]; then
825876 ${BASEDIR} /bin/mysqld --defaults-file=$DATADIR_3 /n3.cnf --basedir=${BASEDIR} --datadir=$DATADIR_3 \
826877 --core-file --log-error=$ERR_FILE --socket=$SOCKET --port=$RBASE3 $MYEXTRA > $ERR_FILE 2>&1 &
827878 elif [ ${PLUGIN_KEYRING_FILE} -eq 1 ]; then
@@ -898,6 +949,9 @@ pstress_test(){
898949 elif [ ${COMPONENT_KEYRING_VAULT} -eq 1 ]; then
899950 create_local_manifest component_keyring_vault
900951 create_local_config component_keyring_vault
952+ elif [ ${COMPONENT_KEYRING_KMIP} -eq 1 ]; then
953+ create_local_manifest component_keyring_kmip
954+ create_local_config component_keyring_kmip
901955 fi
902956 fi
903957 MYEXTRA=
@@ -956,7 +1010,7 @@ pstress_test(){
9561010 CMD=" ${BIN} ${MYEXTRA} ${KEYRING_PARAM} --basedir=${BASEDIR} --datadir=${RUNDIR} /${TRIAL} /data \
9571011 --tmpdir=${RUNDIR} /${TRIAL} /tmp --core-file --port=$PORT --pid_file=${RUNDIR} /${TRIAL} /pid.pid --socket=${SOCKET} \
9581012 --log-output=none --log-error-verbosity=3 --log-error=${RUNDIR} /${TRIAL} /log/master.err"
959- elif [ ${COMPONENT_KEYRING_FILE} -eq 1 -o ${COMPONENT_KEYRING_VAULT} -eq 1 ]; then
1013+ elif [ ${COMPONENT_KEYRING_FILE} -eq 1 -o ${COMPONENT_KEYRING_VAULT} -eq 1 -o ${COMPONENT_KEYRING_KMIP} -eq 1 ]; then
9601014 CMD=" ${BIN} ${MYEXTRA} --basedir=${BASEDIR} --datadir=${RUNDIR} /${TRIAL} /data \
9611015 --tmpdir=${RUNDIR} /${TRIAL} /tmp --core-file --port=$PORT --pid_file=${RUNDIR} /${TRIAL} /pid.pid --socket=${SOCKET} \
9621016 --log-output=none --log-error-verbosity=3 --log-error=${RUNDIR} /${TRIAL} /log/master.err"
@@ -1047,6 +1101,13 @@ pstress_test(){
10471101 create_local_config component_keyring_vault 1
10481102 create_local_config component_keyring_vault 2
10491103 create_local_config component_keyring_vault 3
1104+ elif [ ${COMPONENT_KEYRING_KMIP} -eq 1 ]; then
1105+ create_local_manifest component_keyring_kmip 1
1106+ create_local_manifest component_keyring_kmip 2
1107+ create_local_manifest component_keyring_kmip 3
1108+ create_local_config component_keyring_kmip 1
1109+ create_local_config component_keyring_kmip 2
1110+ create_local_config component_keyring_kmip 3
10501111 fi
10511112 fi
10521113
@@ -1492,6 +1553,7 @@ if [ "${VERSION_INFO}" == "5.7" ]; then
14921553 # Keyring components are not supported in PS-5.7 and PXC-5.7, hence disabling it.
14931554 COMPONENT_KEYRING_FILE=0
14941555 COMPONENT_KEYRING_VAULT=0
1556+ COMPONENT_KEYRING_KMIP=0
14951557fi
14961558
14971559if [ ${ENCRYPTION_RUN} -eq 1 ]; then
@@ -1514,12 +1576,14 @@ elif [ ${PLUGIN_KEYRING_FILE} -eq 1 ]; then
15141576fi
15151577
15161578if [ ${COMPONENT_KEYRING_VAULT} -eq 1 ]; then
1517- if check_for_version $MYSQL_VERSION " 8.1.0" ; then
1518- start_vault_server
1519- else
1520- echoit " ERROR: Vault as a component is not supported in versions older than PS-8.1.0. Use PLUGIN_KEYRING_VAULT=1 instead"
1521- exit 1
1522- fi
1579+ if check_for_version $MYSQL_VERSION " 8.1.0" ; then
1580+ start_vault_server
1581+ else
1582+ echoit " ERROR: Vault as a component is not supported in versions older than PS-8.1.0. Use PLUGIN_KEYRING_VAULT=1 instead"
1583+ exit 1
1584+ fi
1585+ elif [ ${COMPONENT_KEYRING_KMIP} -eq 1 ]; then
1586+ start_kmip_server
15231587fi
15241588
15251589echoit " Making a copy of the mysqld binary into ${WORKDIR} /mysqld (handy for coredump analysis and manually starting server)..."
@@ -1618,6 +1682,10 @@ rm -Rf ${RUNDIR}
16181682if [ ${COMPONENT_KEYRING_VAULT} -eq 1 ]; then
16191683 echoit " Stopping vault server"
16201684 killall vault > /dev/null 2>&1
1685+ elif [ ${COMPONENT_KEYRING_KMIP} -eq 1 ]; then
1686+ echoit " Stopping kmip server"
1687+ sudo docker stop kmip
1688+ sudo docker rm kmip
16211689fi
16221690echoit " The results of this run can be found in the workdir ${WORKDIR} ..."
16231691echoit " Done. Exiting $0 with exit code 0..."
0 commit comments