From 5617a6a201637a2bf148fef1dc3fc52a29e79f93 Mon Sep 17 00:00:00 2001 From: Arthur Barr Date: Tue, 21 Mar 2017 09:01:09 +0000 Subject: [PATCH 01/15] Upgrade to V9.0.2, installing DEBs --- Dockerfile | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/Dockerfile b/Dockerfile index 83d7607..30d9dff 100644 --- a/Dockerfile +++ b/Dockerfile @@ -17,10 +17,10 @@ FROM ubuntu:16.04 LABEL maintainer "Arthur Barr " # The URL to download the MQ installer from in tar.gz format -ARG MQ_URL=http://public.dhe.ibm.com/ibmdl/export/pub/software/websphere/messaging/mqadv/mqadv_dev901_linux_x86-64.tar.gz +ARG MQ_URL=http://public.dhe.ibm.com/ibmdl/export/pub/software/websphere/messaging/mqadv/mqadv_dev902_ubuntu_x86-64.tar.gz # The MQ packages to install -ARG MQ_PACKAGES="MQSeriesRuntime-*.rpm MQSeriesServer-*.rpm MQSeriesMsg*.rpm MQSeriesJava*.rpm MQSeriesJRE*.rpm MQSeriesGSKit*.rpm MQSeriesWeb*.rpm" +ARG MQ_PACKAGES="ibmmq-server ibmmq-java ibmmq-jre ibmmq-gskit ibmmq-web" RUN export DEBIAN_FRONTEND=noninteractive \ # Install additional packages required by MQ, this install process and the runtime scripts @@ -39,7 +39,6 @@ RUN export DEBIAN_FRONTEND=noninteractive \ mount \ passwd \ procps \ - rpm \ sed \ tar \ util-linux \ @@ -52,14 +51,17 @@ RUN export DEBIAN_FRONTEND=noninteractive \ && groupadd --gid 1000 mqm \ && useradd --uid 1000 --gid mqm mqm \ && usermod -G mqm root \ - && cd /tmp/mq/MQServer \ + && cd /tmp/mq/DebianMQServer \ # Accept the MQ license && ./mqlicense.sh -text_only -accept \ - # Install MQ using the RPM packages - && rpm -ivh --force-debian $MQ_PACKAGES \ + && echo "deb [trusted=yes] file:/tmp/mq/DebianMQServer ./" > /etc/apt/sources.list.d/IBM_MQ.list \ + # Install MQ using the DEB packages + && apt-get update \ + && apt-get install -y $MQ_PACKAGES \ # Recommended: Set the default MQ installation (makes the MQ commands available on the PATH) && /opt/mqm/bin/setmqinst -p /opt/mqm -i \ # Clean up all the downloaded files + && rm -f /etc/apt/sources.list.d/IBM_MQ.list \ && rm -rf /tmp/mq \ && rm -rf /var/lib/apt/lists/* \ # Optional: Update the command prompt with the MQ version From 8abf2a81342442feb31810d5d60c24d94b180768 Mon Sep 17 00:00:00 2001 From: Dominic Evans Date: Wed, 29 Mar 2017 10:12:09 +0100 Subject: [PATCH 02/15] Purge 32-bit libraries and tar.gz packages These don't make sense on a 64-bit image and it reduces the size by ~200MB --- Dockerfile | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Dockerfile b/Dockerfile index 30d9dff..7735181 100644 --- a/Dockerfile +++ b/Dockerfile @@ -31,6 +31,7 @@ RUN export DEBIAN_FRONTEND=noninteractive \ coreutils \ curl \ debianutils \ + file \ findutils \ gawk \ grep \ @@ -58,6 +59,11 @@ RUN export DEBIAN_FRONTEND=noninteractive \ # Install MQ using the DEB packages && apt-get update \ && apt-get install -y $MQ_PACKAGES \ + # Remove 32-bit libraries from 64-bit container + && find /opt/mqm /var/mqm -type f -exec file {} \; \ + | awk -F: '/ELF 32-bit/{print $1}' | xargs --no-run-if-empty rm -f \ + # Remove tar.gz files unpacked by RPM postinst scripts + && find /opt/mqm -name '*.tar.gz' -delete \ # Recommended: Set the default MQ installation (makes the MQ commands available on the PATH) && /opt/mqm/bin/setmqinst -p /opt/mqm -i \ # Clean up all the downloaded files From f2b7cd9541519f8f2d1a05573370d4f91f9bbbbc Mon Sep 17 00:00:00 2001 From: Dominic Evans Date: Wed, 29 Mar 2017 10:12:44 +0100 Subject: [PATCH 03/15] Use TLS for secure MQ installer download --- Dockerfile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 7735181..1c9bf70 100644 --- a/Dockerfile +++ b/Dockerfile @@ -17,7 +17,7 @@ FROM ubuntu:16.04 LABEL maintainer "Arthur Barr " # The URL to download the MQ installer from in tar.gz format -ARG MQ_URL=http://public.dhe.ibm.com/ibmdl/export/pub/software/websphere/messaging/mqadv/mqadv_dev902_ubuntu_x86-64.tar.gz +ARG MQ_URL=https://public.dhe.ibm.com/ibmdl/export/pub/software/websphere/messaging/mqadv/mqadv_dev902_ubuntu_x86-64.tar.gz # The MQ packages to install ARG MQ_PACKAGES="ibmmq-server ibmmq-java ibmmq-jre ibmmq-gskit ibmmq-web" @@ -28,6 +28,7 @@ RUN export DEBIAN_FRONTEND=noninteractive \ && apt-get install -y --no-install-recommends \ bash \ bc \ + ca-certificates \ coreutils \ curl \ debianutils \ From 473263b14124d36b810104a5941e8597636e2bae Mon Sep 17 00:00:00 2001 From: Arthur Barr Date: Tue, 21 Mar 2017 09:01:09 +0000 Subject: [PATCH 04/15] Upgrade to V9.0.2, installing DEBs --- Dockerfile | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/Dockerfile b/Dockerfile index 51a489b..2b9e8ce 100644 --- a/Dockerfile +++ b/Dockerfile @@ -17,10 +17,10 @@ FROM ubuntu:16.04 LABEL maintainer "Arthur Barr " # The URL to download the MQ installer from in tar.gz format -ARG MQ_URL=http://public.dhe.ibm.com/ibmdl/export/pub/software/websphere/messaging/mqadv/mqadv_dev901_linux_x86-64.tar.gz +ARG MQ_URL=http://public.dhe.ibm.com/ibmdl/export/pub/software/websphere/messaging/mqadv/mqadv_dev902_ubuntu_x86-64.tar.gz # The MQ packages to install -ARG MQ_PACKAGES="MQSeriesRuntime-*.rpm MQSeriesServer-*.rpm MQSeriesMsg*.rpm MQSeriesJava*.rpm MQSeriesJRE*.rpm MQSeriesGSKit*.rpm MQSeriesWeb*.rpm" +ARG MQ_PACKAGES="ibmmq-server ibmmq-java ibmmq-jre ibmmq-gskit ibmmq-web" RUN export DEBIAN_FRONTEND=noninteractive \ # Install additional packages required by MQ, this install process and the runtime scripts @@ -39,7 +39,6 @@ RUN export DEBIAN_FRONTEND=noninteractive \ mount \ passwd \ procps \ - rpm \ sed \ tar \ util-linux \ @@ -52,14 +51,17 @@ RUN export DEBIAN_FRONTEND=noninteractive \ && groupadd --gid 1000 mqm \ && useradd --uid 1000 --gid mqm mqm \ && usermod -G mqm root \ - && cd /tmp/mq/MQServer \ + && cd /tmp/mq/DebianMQServer \ # Accept the MQ license && ./mqlicense.sh -text_only -accept \ - # Install MQ using the RPM packages - && rpm -ivh --force-debian $MQ_PACKAGES \ + && echo "deb [trusted=yes] file:/tmp/mq/DebianMQServer ./" > /etc/apt/sources.list.d/IBM_MQ.list \ + # Install MQ using the DEB packages + && apt-get update \ + && apt-get install -y $MQ_PACKAGES \ # Recommended: Set the default MQ installation (makes the MQ commands available on the PATH) && /opt/mqm/bin/setmqinst -p /opt/mqm -i \ # Clean up all the downloaded files + && rm -f /etc/apt/sources.list.d/IBM_MQ.list \ && rm -rf /tmp/mq \ # Apply any bug fixes not included in base Ubuntu or MQ image. # Don't upgrade everything based on Docker best practices https://docs.docker.com/engine/userguide/eng-image/dockerfile_best-practices/#run From 26799fd8257e668d8ff21aa9970cad580b53888d Mon Sep 17 00:00:00 2001 From: Arthur Barr Date: Wed, 29 Mar 2017 11:57:42 +0100 Subject: [PATCH 05/15] Add language packages back in --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 2b9e8ce..e72ae64 100644 --- a/Dockerfile +++ b/Dockerfile @@ -20,7 +20,7 @@ LABEL maintainer "Arthur Barr " ARG MQ_URL=http://public.dhe.ibm.com/ibmdl/export/pub/software/websphere/messaging/mqadv/mqadv_dev902_ubuntu_x86-64.tar.gz # The MQ packages to install -ARG MQ_PACKAGES="ibmmq-server ibmmq-java ibmmq-jre ibmmq-gskit ibmmq-web" +ARG MQ_PACKAGES="ibmmq-server ibmmq-java ibmmq-jre ibmmq-gskit ibmmq-web ibmmq-msg-.*" RUN export DEBIAN_FRONTEND=noninteractive \ # Install additional packages required by MQ, this install process and the runtime scripts From 7db230258da2221ad6a68e95abfe25bb9a4770f1 Mon Sep 17 00:00:00 2001 From: Rob Parker Date: Wed, 29 Mar 2017 15:31:21 +0100 Subject: [PATCH 06/15] Split mq.sh into multiple scripts --- mq-configure-qmgr.sh | 21 +++++++ mq-create-qmgr.sh | 27 +++++++++ mq-dev-config.sh | 30 +++++----- mq-monitor-qmgr.sh | 48 ++++++++++++++++ mq-parameter-check.sh | 25 +++++++++ mq-pre-create-setup.sh | 22 ++++++++ mq-start-qmgr.sh | 24 ++++++++ mq-stop-container.sh | 20 +++++++ mq.sh | 124 ++++++----------------------------------- setup-mqm-web.sh | 10 +++- 10 files changed, 228 insertions(+), 123 deletions(-) create mode 100644 mq-configure-qmgr.sh create mode 100644 mq-create-qmgr.sh create mode 100644 mq-monitor-qmgr.sh create mode 100644 mq-parameter-check.sh create mode 100644 mq-pre-create-setup.sh create mode 100644 mq-start-qmgr.sh create mode 100644 mq-stop-container.sh diff --git a/mq-configure-qmgr.sh b/mq-configure-qmgr.sh new file mode 100644 index 0000000..9521c76 --- /dev/null +++ b/mq-configure-qmgr.sh @@ -0,0 +1,21 @@ +#!/bin/bash +# -*- mode: sh -*- +# © Copyright IBM Corporation 2015, 2017 +# +# Licensed 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. + +# Turn off script failing here because of listeners failing the script + +for MQSC_FILE in $(ls -v /etc/mqm/*.mqsc); do + runmqsc ${MQ_QMGR_NAME} < ${MQSC_FILE} +done diff --git a/mq-create-qmgr.sh b/mq-create-qmgr.sh new file mode 100644 index 0000000..ae8f5b7 --- /dev/null +++ b/mq-create-qmgr.sh @@ -0,0 +1,27 @@ +#!/bin/bash +# -*- mode: sh -*- +# © Copyright IBM Corporation 2015, 2017 +# +# Licensed 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. + +set -e + +QMGR_EXISTS=`dspmq | grep ${MQ_QMGR_NAME} > /dev/null ; echo $?` +if [ ${QMGR_EXISTS} -ne 0 ]; then + MQ_DEV=${MQ_DEV:-"true"} + if [ "${MQ_DEV}" == "true" ]; then + # Turns on early adopt if we're using Developer defaults + export AMQ_EXTRA_QM_STANZAS=Channels:ChlauthEarlyAdopt=Y + fi + crtmqm -q ${MQ_QMGR_NAME} || true +fi diff --git a/mq-dev-config.sh b/mq-dev-config.sh index 1c05d50..b3d4efc 100644 --- a/mq-dev-config.sh +++ b/mq-dev-config.sh @@ -89,15 +89,15 @@ configure_tls() # Now copy the key files chown mqm:mqm /tmp/tlsTemp/key.* chmod 640 /tmp/tlsTemp/key.* - su -c "cp -PTv /tmp/tlsTemp/key.kdb ${DATA_PATH}/qmgrs/$1/ssl/key.kdb" -l mqm - su -c "cp -PTv /tmp/tlsTemp/key.sth ${DATA_PATH}/qmgrs/$1/ssl/key.sth" -l mqm + su -c "cp -PTv /tmp/tlsTemp/key.kdb ${DATA_PATH}/qmgrs/${MQ_QMGR_NAME}/ssl/key.kdb" -l mqm + su -c "cp -PTv /tmp/tlsTemp/key.sth ${DATA_PATH}/qmgrs/${MQ_QMGR_NAME}/ssl/key.sth" -l mqm # Set up Dev default MQ objects # Make channel TLS CHANNEL # Create SSLPEERMAP Channel Authentication record if [ "${MQ_DEV}" == "true" ]; then - su -l mqm -c "echo \"ALTER CHANNEL('DEV.APP.SVRCONN') CHLTYPE(SVRCONN) SSLCIPH(TLS_RSA_WITH_AES_256_GCM_SHA384) SSLCAUTH(OPTIONAL)\" | runmqsc $1" - su -l mqm -c "echo \"ALTER CHANNEL('DEV.ADMIN.SVRCONN') CHLTYPE(SVRCONN) SSLCIPH(TLS_RSA_WITH_AES_256_GCM_SHA384) SSLCAUTH(OPTIONAL)\" | runmqsc $1" + su -l mqm -c "echo \"ALTER CHANNEL('DEV.APP.SVRCONN') CHLTYPE(SVRCONN) SSLCIPH(TLS_RSA_WITH_AES_256_GCM_SHA384) SSLCAUTH(OPTIONAL)\" | runmqsc ${MQ_QMGR_NAME}" + su -l mqm -c "echo \"ALTER CHANNEL('DEV.ADMIN.SVRCONN') CHLTYPE(SVRCONN) SSLCIPH(TLS_RSA_WITH_AES_256_GCM_SHA384) SSLCAUTH(OPTIONAL)\" | runmqsc ${MQ_QMGR_NAME}" fi } @@ -127,33 +127,33 @@ if ! getent group mqclient; then fi configure_os_user 1002 1002 MQ_APP_NAME MQ_APP_PASSWORD /home/app # Set authorities to give access to qmgr, queues and topic -su -l mqm -c "setmqaut -m $1 -t qmgr -g mqclient +connect +inq" -su -l mqm -c "setmqaut -m $1 -n \"DEV.**\" -t queue -g mqclient +put +get +browse" -su -l mqm -c "setmqaut -m $1 -n \"DEV.**\" -t topic -g mqclient +sub +pub" +su -l mqm -c "setmqaut -m ${MQ_QMGR_NAME} -t qmgr -g mqclient +connect +inq" +su -l mqm -c "setmqaut -m ${MQ_QMGR_NAME} -n \"DEV.**\" -t queue -g mqclient +put +get +browse" +su -l mqm -c "setmqaut -m ${MQ_QMGR_NAME} -n \"DEV.**\" -t topic -g mqclient +sub +pub" echo "Configuring admin user" configure_os_user 1001 1000 MQ_ADMIN_NAME MQ_ADMIN_PASSWORD /home/admin if [ "${MQ_DEV}" == "true" ]; then - echo "Configuring default objects for queue manager: $1" + echo "Configuring default objects for queue manager: ${MQ_QMGR_NAME}" set +e - runmqsc $1 < /etc/mqm/mq-dev-config - echo "ALTER CHANNEL('DEV.APP.SVRCONN') CHLTYPE(SVRCONN) MCAUSER('${MQ_APP_NAME}')" | runmqsc $1 + runmqsc ${MQ_QMGR_NAME} < /etc/mqm/mq-dev-config + echo "ALTER CHANNEL('DEV.APP.SVRCONN') CHLTYPE(SVRCONN) MCAUSER('${MQ_APP_NAME}')" | runmqsc ${MQ_QMGR_NAME} # If client password set to "" allow users to connect to application channel without a userid if [ "${MQ_APP_PASSWORD}" == "" ]; then - echo "SET CHLAUTH('DEV.APP.SVRCONN') TYPE(ADDRESSMAP) ADDRESS('*') USERSRC(CHANNEL) CHCKCLNT(ASQMGR) ACTION(REPLACE)" | runmqsc $1 + echo "SET CHLAUTH('DEV.APP.SVRCONN') TYPE(ADDRESSMAP) ADDRESS('*') USERSRC(CHANNEL) CHCKCLNT(ASQMGR) ACTION(REPLACE)" | runmqsc ${MQ_QMGR_NAME} fi set -e fi if [ ! -z ${MQ_TLS_KEYSTORE+x} ]; then - if [ ! -e "${DATA_PATH}/qmgrs/$1/ssl/key.kdb" ]; then - echo "Configuring TLS for queue manager $1" + if [ ! -e "${DATA_PATH}/qmgrs/${MQ_QMGR_NAME}/ssl/key.kdb" ]; then + echo "Configuring TLS for queue manager ${MQ_QMGR_NAME}" mkdir -p /tmp/tlsTemp chown mqm:mqm /tmp/tlsTemp - configure_tls $1 + configure_tls else - echo "A key store already exists at '${DATA_PATH}/qmgrs/$1/ssl/key.kdb'" + echo "A key store already exists at '${DATA_PATH}/qmgrs/${MQ_QMGR_NAME}/ssl/key.kdb'" fi fi diff --git a/mq-monitor-qmgr.sh b/mq-monitor-qmgr.sh new file mode 100644 index 0000000..1a4f382 --- /dev/null +++ b/mq-monitor-qmgr.sh @@ -0,0 +1,48 @@ +#!/bin/bash +# -*- mode: sh -*- +# © Copyright IBM Corporation 2015, 2017 +# +# Licensed 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. + +set -e + +state() +{ + dspmq -n -m ${MQ_QMGR_NAME} | awk -F '[()]' '{ print $4 }' +} + +trap mq-stop-container.sh SIGTERM SIGINT + +# Loop until "dspmq" says the queue manager is running +until [ "`state`" == "RUNNING" ]; do + sleep 1 +done +dspmq + +echo "IBM MQ Queue Manager ${MQ_QMGR_NAME} is now fully running" + +# Loop until "dspmq" says the queue manager is not running any more +until [ "`state`" != "RUNNING" ]; do + sleep 5 +done + +# Wait until queue manager has ended before exiting +while true; do + STATE=`state` + case "$STATE" in + ENDED*) break;; + *) ;; + esac + sleep 1 +done +dspmq diff --git a/mq-parameter-check.sh b/mq-parameter-check.sh new file mode 100644 index 0000000..afbdb9c --- /dev/null +++ b/mq-parameter-check.sh @@ -0,0 +1,25 @@ +#!/bin/bash +# -*- mode: sh -*- +# © Copyright IBM Corporation 2015, 2017 +# +# Licensed 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. + +set -e + +: ${MQ_QMGR_NAME?"ERROR: You need to set the MQ_QMGR_NAME environment variable"} + +# We want to do parameter checking early as then we can stop and error early before it looks +# like everything is going to be ok (when it won't) +if [ ! -z ${MQ_TLS_KEYSTORE+x} ]; then + : ${MQ_TLS_PASSPHRASE?"Error: If you supply MQ_TLS_KEYSTORE, you must supply MQ_TLS_PASSPHRASE"} +fi diff --git a/mq-pre-create-setup.sh b/mq-pre-create-setup.sh new file mode 100644 index 0000000..9636ee8 --- /dev/null +++ b/mq-pre-create-setup.sh @@ -0,0 +1,22 @@ +#!/bin/bash +# -*- mode: sh -*- +# © Copyright IBM Corporation 2015, 2017 +# +# Licensed 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. + +set -e + +source /opt/mqm/bin/setmqenv -s +dspmqver +echo "Checking filesystem..." +amqmfsck /var/mqm diff --git a/mq-start-qmgr.sh b/mq-start-qmgr.sh new file mode 100644 index 0000000..8f0c2f9 --- /dev/null +++ b/mq-start-qmgr.sh @@ -0,0 +1,24 @@ +#!/bin/bash +# -*- mode: sh -*- +# © Copyright IBM Corporation 2015, 2017 +# +# Licensed 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. + +set -e + +if [ ${MQ_QMGR_CMDLEVEL+x} ]; then + # Enables the specified command level, then stops the queue manager + strmqm -e CMDLEVEL=${MQ_QMGR_CMDLEVEL} || true +fi + +strmqm ${MQ_QMGR_NAME} diff --git a/mq-stop-container.sh b/mq-stop-container.sh new file mode 100644 index 0000000..7622d45 --- /dev/null +++ b/mq-stop-container.sh @@ -0,0 +1,20 @@ +#!/bin/bash +# -*- mode: sh -*- +# © Copyright IBM Corporation 2015, 2017 +# +# Licensed 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. + +set -e + +endmqm $MQ_QMGR_NAME +which endmqweb && endmqweb diff --git a/mq.sh b/mq.sh index cba7296..3ea1fbb 100644 --- a/mq.sh +++ b/mq.sh @@ -15,110 +15,22 @@ # limitations under the License. set -e - -stop() -{ - endmqm $MQ_QMGR_NAME -} - -parameterCheck() -{ - : ${MQ_QMGR_NAME?"ERROR: You need to set the MQ_QMGR_NAME environment variable"} - - # We want to do parameter checking early as then we can stop and error early before it looks - # like everything is going to be ok (when it won't) - if [ ! -z ${MQ_TLS_KEYSTORE+x} ]; then - if [ -z ${MQ_TLS_PASSPHRASE+x} ]; then - echo "Error: If you supply MQ_TLS_KEYSTORE, you must supply MQ_TLS_PASSPHRASE" - exit 1; - fi - fi -} - -config() -{ - # Populate and update the contents of /var/mqm - this is needed for - # bind-mounted volumes, and also to migrate data from previous versions of MQ - - setup-var-mqm.sh - - if [ -z "${MQ_DISABLE_WEB_CONSOLE}" ]; then - echo $MQ_ADMIN_PASSWORD - # Start the web console, if it's been installed - which strmqweb && setup-mqm-web.sh - fi - - ls -l /var/mqm - source /opt/mqm/bin/setmqenv -s - echo "----------------------------------------" - dspmqver - echo "----------------------------------------" - - QMGR_EXISTS=`dspmq | grep ${MQ_QMGR_NAME} > /dev/null ; echo $?` - if [ ${QMGR_EXISTS} -ne 0 ]; then - echo "Checking filesystem..." - amqmfsck /var/mqm - echo "----------------------------------------" - MQ_DEV=${MQ_DEV:-"true"} - if [ "${MQ_DEV}" == "true" ]; then - # Turns on early adopt if we're using Developer defaults - export AMQ_EXTRA_QM_STANZAS=Channels:ChlauthEarlyAdopt=Y - fi - crtmqm -q ${MQ_QMGR_NAME} || true - if [ ${MQ_QMGR_CMDLEVEL+x} ]; then - # Enables the specified command level, then stops the queue manager - strmqm -e CMDLEVEL=${MQ_QMGR_CMDLEVEL} || true - fi - echo "----------------------------------------" - fi - strmqm ${MQ_QMGR_NAME} - - # Turn off script failing here because of listeners failing the script - set +e - for MQSC_FILE in $(ls -v /etc/mqm/*.mqsc); do - runmqsc ${MQ_QMGR_NAME} < ${MQSC_FILE} - done - set -e - - echo "----------------------------------------" - mq-dev-config.sh ${MQ_QMGR_NAME} - echo "----------------------------------------" -} - -state() -{ - dspmq -n -m ${MQ_QMGR_NAME} | awk -F '[()]' '{ print $4 }' -} - -monitor() -{ - # Loop until "dspmq" says the queue manager is running - until [ "`state`" == "RUNNING" ]; do - sleep 1 - done - dspmq - - echo "IBM MQ Queue Manager ${MQ_QMGR_NAME} is now fully running" - - # Loop until "dspmq" says the queue manager is not running any more - until [ "`state`" != "RUNNING" ]; do - sleep 5 - done - - # Wait until queue manager has ended before exiting - while true; do - STATE=`state` - case "$STATE" in - ENDED*) break;; - *) ;; - esac - sleep 1 - done - dspmq -} - mq-license-check.sh -parameterCheck -config -trap stop SIGTERM SIGINT -monitor +echo "----------------------------------------" +mq-parameter-check.sh +echo "----------------------------------------" +setup-var-mqm.sh +echo "----------------------------------------" +which strmqweb && setup-mqm-web.sh +echo "----------------------------------------" +mq-pre-create-setup.sh +echo "----------------------------------------" +mq-create-qmgr.sh +echo "----------------------------------------" +mq-start-qmgr.sh +echo "----------------------------------------" +mq-configure-qmgr.sh +echo "----------------------------------------" +mq-dev-config.sh +echo "----------------------------------------" +exec mq-monitor-qmgr.sh diff --git a/setup-mqm-web.sh b/setup-mqm-web.sh index 60881db..2da0a8c 100644 --- a/setup-mqm-web.sh +++ b/setup-mqm-web.sh @@ -102,10 +102,16 @@ configure_server_xml() } +if [ ! -z ${MQ_DISABLE_WEB_CONSOLE+x} ]; then + #don't do anything + exit 0 +fi + +echo "Starting MQ Console" + MQ_INSTALLATION=`dspmqver -b -f 512` DATA_PATH=`dspmqver -b -f 4096` MQ_ADMIN_NAME="admin" -echo $MQ_ADMIN_PASSWORD MQ_ADMIN_PASSWORD=${MQ_ADMIN_PASSWORD:-"passw0rd"} if [ ! -e "/tmp/webTemp" ]; then @@ -127,7 +133,7 @@ fi #Run the server as mqm su -l mqm -c "bash strmqweb &" -echo "Web Server started" +echo "MQ Console started" # Print out the connection info IPADDR="$(hostname -I | sed -e 's/[[:space:]]*$//')" From ac2efdb58b576067d8ec567ac82313da4fe9dad8 Mon Sep 17 00:00:00 2001 From: Rob Parker Date: Fri, 19 May 2017 11:03:20 +0100 Subject: [PATCH 07/15] Update mq-dev-config.sh --- mq-dev-config.sh | 50 +++++++++++++++++------------------------------- 1 file changed, 18 insertions(+), 32 deletions(-) diff --git a/mq-dev-config.sh b/mq-dev-config.sh index b3d4efc..d680f15 100644 --- a/mq-dev-config.sh +++ b/mq-dev-config.sh @@ -19,36 +19,24 @@ set -e configure_os_user() { - # The UID of the user to configure - local -r ID_NUM=$1 # The group ID of the user to configure - local -r GROUP_NUM=$2 + local -r GROUP_NAME=$1 # Name of environment variable containing the user name - local -r USER_VAR=$3 + local -r USER_VAR=$2 # Name of environment variable containing the password - local -r PASSWORD=$4 + local -r PASSWORD=$3 # Home directory for the user - local -r HOME=$5 + local -r HOME=$4 # Determine the login name of the user (assuming it exists already) - local -r LOGIN=$(getent passwd ${ID_NUM} | cut -f1 -d:) - if [ -z ${!USER_VAR+x} ]; then - # MQ_CLIENT_USER is unset - if id --user ${ID_NUM}; then - userdel --force --remove ${LOGIN} >/dev/null 2>&1 - fi - else - # MQ_CLIENT_USER is set - if id --user ${ID_NUM}; then - # Modify the existing user - usermod -l ${!USER_VAR} ${LOGIN} - else - useradd --uid ${ID_NUM} --gid ${GROUP_NUM} --home ${HOME} ${!USER_VAR} - fi - - # Change the user's password (if set) - if [ ! "${!PASSWORD}" == "" ]; then - echo ${!USER_VAR}:${!PASSWORD} | chpasswd - fi + + # if user does not exist + if ! id ${!USER_VAR} 2>1 > /dev/null; then + # create + useradd --gid ${GROUP_NAME} --home ${HOME} ${!USER_VAR} + fi + # Change the user's password (if set) + if [ ! "${!PASSWORD}" == "" ]; then + echo ${!USER_VAR}:${!PASSWORD} | chpasswd fi } @@ -103,10 +91,7 @@ configure_tls() # Check valid parameters if [ ! -z ${MQ_TLS_KEYSTORE+x} ]; then - if [ -z ${MQ_TLS_PASSPHRASE+x} ]; then - echo "Error: If you supply MQ_TLS_KEYSTORE, you must supply MQ_TLS_PASSPHRASE" - exit 1; - fi + : ${MQ_TLS_PASSPHRASE?"Error: If you supply MQ_TLS_KEYSTORE, you must supply MQ_TLS_PASSPHRASE"} fi # Set default unless it is set @@ -123,16 +108,17 @@ INSTALLATION=`dspmqver -b -f 512` echo "Configuring app user" if ! getent group mqclient; then # Group doesn't exist already - groupadd --gid 1002 mqclient + groupadd mqclient fi -configure_os_user 1002 1002 MQ_APP_NAME MQ_APP_PASSWORD /home/app +configure_os_user mqclient MQ_APP_NAME MQ_APP_PASSWORD /home/app + # Set authorities to give access to qmgr, queues and topic su -l mqm -c "setmqaut -m ${MQ_QMGR_NAME} -t qmgr -g mqclient +connect +inq" su -l mqm -c "setmqaut -m ${MQ_QMGR_NAME} -n \"DEV.**\" -t queue -g mqclient +put +get +browse" su -l mqm -c "setmqaut -m ${MQ_QMGR_NAME} -n \"DEV.**\" -t topic -g mqclient +sub +pub" echo "Configuring admin user" -configure_os_user 1001 1000 MQ_ADMIN_NAME MQ_ADMIN_PASSWORD /home/admin +configure_os_user mqm MQ_ADMIN_NAME MQ_ADMIN_PASSWORD /home/admin if [ "${MQ_DEV}" == "true" ]; then echo "Configuring default objects for queue manager: ${MQ_QMGR_NAME}" From 26d8fe6453ebe873d424fd436d7194e7f81f55db Mon Sep 17 00:00:00 2001 From: Rob Parker Date: Thu, 25 May 2017 15:36:08 +0100 Subject: [PATCH 08/15] Update README with Bluemix Container Service details --- README.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 54792aa..9467226 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,12 @@ # Contents * [Overview](#overview) * [Docker Hub](#docker-hub) +* [Bluemix Container Service](#bluemix-container-service) * [Preparing your Docker host](#preparing-your-docker-host) * [Build](#build) * [Usage](#usage) * [Running with the default configuration](#running-with-the-default-configuration) - * [Running on Bluemix with volumes](#running-on-bluemix-with-volumes) + * [Running on Bluemix with volumes](#running-on-ibm-bluemix-with-volumes) * [Customizing the queue manager configuration](#customizing-the-queue-manager-configuration) * [Running MQ commands](#running-mq-commands) * [Installed components](#installed-components) @@ -29,6 +30,11 @@ The image is available on Docker Hub as [`ibmcom/mq`](https://hub.docker.com/r/i * `cd`, `9-cd`, `9`, `latest` ([Dockerfile](https://github.com/ibm-messaging/mq-docker/blob/master/server/Dockerfile)) * `lts`, `9-lts` ([Dockerfile](https://github.com/ibm-messaging/mq-docker/blob/mq-9-lts/Dockerfile)) * `8` ([Dockerfile](https://github.com/ibm-messaging/mq-docker/blob/mq-8/Dockerfile)) + +# Bluemix Container Service +This image is available on the Bluemix Container Service as a default image. + + * `latest` ([catalog](https://console.eu-gb.bluemix.net/catalog/images/ibm-mq?env_id=ibm:yp:eu-gb)) # Preparing your Docker host You need to make sure that you either have a Linux kernel version of V3.16, or else you need to add the [`--ipc host`](http://docs.docker.com/reference/run/#ipc-settings) option when you run an MQ container. The reason for this is that IBM MQ uses shared memory, and on Linux kernels prior to V3.16, containers are usually limited to 32 MB of shared memory. In a [change](https://git.kernel.org/cgit/linux/kernel/git/mhocko/mm.git/commit/include/uapi/linux/shm.h?id=060028bac94bf60a65415d1d55a359c3a17d5c31 From d21fbe5c60f63478f4de246d9642a52c6ffaf1e7 Mon Sep 17 00:00:00 2001 From: Rob Parker Date: Thu, 25 May 2017 15:38:38 +0100 Subject: [PATCH 09/15] Changelog v3 details --- CHANGELOG.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index efe5af5..6011da3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,14 @@ # Change log +## 3.0.0 (2017-xx-xx) +### Action required +None + +### Other notable changes +* Updated to MQ V9.0.3 +* Restructured startup scripts +* Removed fixed UID numbers + ## 2.0.0 (2017-03-11) ### Action required * Ensure that you use the `REPLACE` keyword in all of your `DEFINE` MQSC statements. With this change, any supplied MQSC files are run *every* time the queue manager runs. This allows you to update the MQSC file, re-build the image, and then have the changes applied when you start a container based on that new image. From a20d9d89e6c7e0460b01faad5e65dce9db2c8ddf Mon Sep 17 00:00:00 2001 From: Rob Parker Date: Wed, 31 May 2017 14:54:49 +0100 Subject: [PATCH 10/15] Remove requirement for MQ_QMGR_NAME env var --- mq-create-qmgr.sh | 9 +++++ mq-monitor-qmgr.sh | 6 +++- mq-parameter-check.sh | 2 -- mq-stop-container.sh | 4 +-- mq.sh | 10 +++--- test/test.js | 78 +++++++++++++++++++++++++++++++++++++------ 6 files changed, 88 insertions(+), 21 deletions(-) diff --git a/mq-create-qmgr.sh b/mq-create-qmgr.sh index ae8f5b7..a819c0a 100644 --- a/mq-create-qmgr.sh +++ b/mq-create-qmgr.sh @@ -16,7 +16,16 @@ set -e +if [ -z ${MQ_QMGR_NAME+x} ]; then + # no ${MQ_QMGR_NAME} supplied so set Queue Manager name as the hostname + # However make sure we remove any characters that are not valid. + echo "Hostname is: $(hostname)" + MQ_QMGR_NAME=`echo $(hostname) | sed 's/[^a-zA-Z0-9._%/]//g'` +fi +echo "Setting Queue Manager name to ${MQ_QMGR_NAME}" + QMGR_EXISTS=`dspmq | grep ${MQ_QMGR_NAME} > /dev/null ; echo $?` + if [ ${QMGR_EXISTS} -ne 0 ]; then MQ_DEV=${MQ_DEV:-"true"} if [ "${MQ_DEV}" == "true" ]; then diff --git a/mq-monitor-qmgr.sh b/mq-monitor-qmgr.sh index 1a4f382..5e84b5a 100644 --- a/mq-monitor-qmgr.sh +++ b/mq-monitor-qmgr.sh @@ -16,12 +16,16 @@ set -e +MQ_QMGR_NAME=$1 + state() { dspmq -n -m ${MQ_QMGR_NAME} | awk -F '[()]' '{ print $4 }' } -trap mq-stop-container.sh SIGTERM SIGINT +trap "source mq-stop-container.sh" SIGTERM SIGINT + +echo "Monitoring Queue Manager ${MQ_QMGR_NAME}" # Loop until "dspmq" says the queue manager is running until [ "`state`" == "RUNNING" ]; do diff --git a/mq-parameter-check.sh b/mq-parameter-check.sh index afbdb9c..90e2be4 100644 --- a/mq-parameter-check.sh +++ b/mq-parameter-check.sh @@ -16,8 +16,6 @@ set -e -: ${MQ_QMGR_NAME?"ERROR: You need to set the MQ_QMGR_NAME environment variable"} - # We want to do parameter checking early as then we can stop and error early before it looks # like everything is going to be ok (when it won't) if [ ! -z ${MQ_TLS_KEYSTORE+x} ]; then diff --git a/mq-stop-container.sh b/mq-stop-container.sh index 7622d45..12a1ce2 100644 --- a/mq-stop-container.sh +++ b/mq-stop-container.sh @@ -16,5 +16,5 @@ set -e -endmqm $MQ_QMGR_NAME -which endmqweb && endmqweb +endmqm ${MQ_QMGR_NAME} +which endmqweb && su -c "endmqweb" -l mqm diff --git a/mq.sh b/mq.sh index 3ea1fbb..3e8cbb3 100644 --- a/mq.sh +++ b/mq.sh @@ -25,12 +25,12 @@ which strmqweb && setup-mqm-web.sh echo "----------------------------------------" mq-pre-create-setup.sh echo "----------------------------------------" -mq-create-qmgr.sh +source mq-create-qmgr.sh echo "----------------------------------------" -mq-start-qmgr.sh +source mq-start-qmgr.sh echo "----------------------------------------" -mq-configure-qmgr.sh +source mq-configure-qmgr.sh echo "----------------------------------------" -mq-dev-config.sh +source mq-dev-config.sh echo "----------------------------------------" -exec mq-monitor-qmgr.sh +exec mq-monitor-qmgr.sh ${MQ_QMGR_NAME} diff --git a/test/test.js b/test/test.js index 4886713..2b9738a 100644 --- a/test/test.js +++ b/test/test.js @@ -46,23 +46,24 @@ describe('MQ Docker sample', function() { done(); }); }); - it('should fail if MQ_QMGR_NAME is not set', function (done) { - exec(`docker run --rm --env LICENSE=accept ${DOCKER_IMAGE}`, function (err, stdout, stderr) { - assert.equal(err.code, 1); - assert.isTrue(stderr.includes("ERROR")); - done(); - }); - }); }); // Utility function to run a container and wait until MQ starts - let runContainer = function(options) { + let runContainer = function(options, unsetQMName, hostname) { return new Promise((resolve, reject) => { - let cmd = `docker run -d --env LICENSE=accept --env MQ_QMGR_NAME=${QMGR_NAME} --net ${DOCKER_NETWORK} ${options} ${DOCKER_IMAGE}`; + let cmd = ""; + let qmName = ""; + if(!unsetQMName){ + cmd = `docker run -d --env LICENSE=accept --env MQ_QMGR_NAME=${QMGR_NAME} --net ${DOCKER_NETWORK} ${options} ${DOCKER_IMAGE}`; + qmName=QMGR_NAME + } else{ + cmd = `docker run -d --env LICENSE=accept --net ${DOCKER_NETWORK} ${options} ${DOCKER_IMAGE}`; + qmName=hostname + } exec(cmd, function (err, stdout, stderr) { if (err) reject(err); let containerId = stdout.trim(); - let startStr = `IBM MQ Queue Manager ${QMGR_NAME} is now fully running`; + let startStr = `IBM MQ Queue Manager ${qmName} is now fully running`; // Run dspmq every second, until the queue manager comes up let timer = setInterval(function() { exec(`docker logs ${containerId}`, function (err, stdout, stderr) { @@ -118,6 +119,61 @@ describe('MQ Docker sample', function() { let container = null; this.timeout(10000); + describe('and no queue manager variable supplied', function(){ + let containerName="MQTestQM" + + before(function() { + this.timeout(20000); + return runContainer("-h " + containerName, true, containerName) + .then((details) => { + container = details; + }); + }); + after(function() { + return deleteContainer(container.id); + }); + it('should be using the hostname as the queue manager name', function (done) { + exec(`docker exec ${container.id} dspmq`, function (err, stdout, stderr) { + if (err) throw(err); + if (stdout && stdout.includes(containerName)) { + // Queue manager is up, so clear the timer + done(); + } + }); + }); + }); + + describe('with running container', function() { + let container = null; + this.timeout(10000); + + describe('and no queue manager variable supplied but the hostname has invalid characters', function(){ + let containerName="MQ-Test-QM" + let containerValidName="MQTestQM" + + before(function() { + this.timeout(20000); + return runContainer("-h " + containerName, true, containerValidName) + .then((details) => { + container = details; + }); + }); + after(function() { + return deleteContainer(container.id); + }); + it('should be using the hostname as the queue manager name without the invalid characters', function (done) { + exec(`docker exec ${container.id} dspmq`, function (err, stdout, stderr) { + if (err) throw(err); + if (stdout && stdout.includes(containerValidName)) { + // Queue manager is up, so clear the timer + done(); + } + }); + }); + }); + }); + + describe('and implicit volume', function() { before(function() { this.timeout(20000); @@ -280,6 +336,6 @@ describe('MQ Docker sample', function() { }); }); }); - }); + }); }); }); From cf8b2d27f7ebbec951e41ca6219dc3d9a5c56bd9 Mon Sep 17 00:00:00 2001 From: Rob Parker Date: Wed, 31 May 2017 14:58:25 +0100 Subject: [PATCH 11/15] remove rogue space in test.js --- test/test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/test.js b/test/test.js index 2b9738a..94c48fc 100644 --- a/test/test.js +++ b/test/test.js @@ -336,6 +336,6 @@ describe('MQ Docker sample', function() { }); }); }); - }); + }); }); }); From 5706926981620d2cd08585c5859c50fe5b1b4052 Mon Sep 17 00:00:00 2001 From: Arthur Barr Date: Mon, 5 Jun 2017 09:05:55 +0100 Subject: [PATCH 12/15] Update to MQ V9.0.3 --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 11a7b91..4b4af6b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -17,7 +17,7 @@ FROM ubuntu:16.04 LABEL maintainer "Arthur Barr " # The URL to download the MQ installer from in tar.gz format -ARG MQ_URL=https://public.dhe.ibm.com/ibmdl/export/pub/software/websphere/messaging/mqadv/mqadv_dev902_ubuntu_x86-64.tar.gz +ARG MQ_URL=https://public.dhe.ibm.com/ibmdl/export/pub/software/websphere/messaging/mqadv/mqadv_dev903_ubuntu_x86-64.tar.gz # The MQ packages to install ARG MQ_PACKAGES="ibmmq-server ibmmq-java ibmmq-jre ibmmq-gskit ibmmq-web ibmmq-msg-.*" From 96efdd1a2efc27362cf7c9e20ac9ab2f96886c38 Mon Sep 17 00:00:00 2001 From: Arthur Barr Date: Mon, 5 Jun 2017 09:08:20 +0100 Subject: [PATCH 13/15] Update to use crtmqdir --- setup-var-mqm.sh | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/setup-var-mqm.sh b/setup-var-mqm.sh index e0322ea..b7d46df 100644 --- a/setup-var-mqm.sh +++ b/setup-var-mqm.sh @@ -21,13 +21,11 @@ if [ -d "/var/mqm/qmgrs" ]; then # User is probably following old instructions to mount a volume into /var/mqm echo "Using existing MQ Data under /var/mqm" - /opt/mqm/bin/amqicdir -i -f - /opt/mqm/bin/amqicdir -s -f + /opt/mqm/bin/crtmqdir -a -f else if [ -L "/var/mqm" ]; then echo "/var/mqm is already a symlink." - /opt/mqm/bin/amqicdir -i -f - /opt/mqm/bin/amqicdir -s -f + /opt/mqm/bin/crtmqdir -a -f else if [ -d "/mnt/mqm/" ]; then DATA_DIR=/mnt/mqm/data @@ -44,8 +42,7 @@ else su -c "chmod 775 ${DATA_DIR}" -l mqm fi - /opt/mqm/bin/amqicdir -i -f - /opt/mqm/bin/amqicdir -s -f + /opt/mqm/bin/crtmqdir -a -f su -c "cp -RTnv /var/mqm /mnt/mqm/data" -l mqm # Remove /var/mqm and replace with a symlink @@ -53,10 +50,8 @@ else ln -s ${DATA_DIR} /var/mqm chown -h mqm:mqm /var/mqm else - #Create the MQ data Directory - echo "Running amqicdir" - /opt/mqm/bin/amqicdir -i -f - /opt/mqm/bin/amqicdir -s -f + # Create the MQ data Directory + /opt/mqm/bin/crtmqdir -a -f fi fi fi From 987d6e38179f2cf57e4f7deeca8a39a1f1e1ab87 Mon Sep 17 00:00:00 2001 From: Arthur Barr Date: Thu, 8 Jun 2017 11:07:41 +0100 Subject: [PATCH 14/15] Add new maintainer --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 4b4af6b..28c4efd 100644 --- a/Dockerfile +++ b/Dockerfile @@ -14,7 +14,7 @@ FROM ubuntu:16.04 -LABEL maintainer "Arthur Barr " +LABEL maintainer "Arthur Barr , Rob Parker " # The URL to download the MQ installer from in tar.gz format ARG MQ_URL=https://public.dhe.ibm.com/ibmdl/export/pub/software/websphere/messaging/mqadv/mqadv_dev903_ubuntu_x86-64.tar.gz From 9d718b59e5ab61ea462027f2da2b3f5687e32c84 Mon Sep 17 00:00:00 2001 From: Arthur Barr Date: Thu, 8 Jun 2017 11:15:13 +0100 Subject: [PATCH 15/15] Updated change log for V3 --- CHANGELOG.md | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6011da3..b79d17c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,13 +1,16 @@ # Change log -## 3.0.0 (2017-xx-xx) +## 3.0.0 (2017-06-08) ### Action required -None +* Updated to install Ubuntu `.deb` files - Any changes to the `MQ_PACKAGES` variable will now need to use the new package names (for example, "ibmmq-web" instead of "MQSeriesWeb") ### Other notable changes * Updated to MQ V9.0.3 +* Migrated from `amqicdir` to new official `crtmqdir` utility * Restructured startup scripts -* Removed fixed UID numbers +* Removed fixed UID numbers for developer config +* Use HTTPS for MQ installer download +* Reduced image size by purging 32-bit libraries ## 2.0.0 (2017-03-11) ### Action required