From 4a3bdf3b53db16a8a89453536961b4a5e9a4d8ca Mon Sep 17 00:00:00 2001 From: Arthur Barr Date: Thu, 9 May 2019 16:37:41 +0100 Subject: [PATCH] Containerized build --- .travis.yml | 3 +- Dockerfile-server | 5 +- Makefile | 92 ++++++++++++++++------ buildah/Dockerfile | 23 ++++++ buildah/build.sh | 41 ++++++++++ buildah/mq-buildah | 51 ++++++++++++ docs/building.md | 5 ++ incubating/mq-explorer/Dockerfile | 28 ++++--- incubating/mq-golang-sdk/Dockerfile | 33 -------- incubating/mq-golang-sdk/README.md | 5 -- incubating/mq-golang-sdk/install-golang.sh | 73 ----------------- incubating/mq-sdk/Dockerfile | 11 +-- install-mq-server-prereqs.sh | 6 -- test/messaging/Dockerfile | 6 +- 14 files changed, 220 insertions(+), 162 deletions(-) create mode 100644 buildah/Dockerfile create mode 100644 buildah/build.sh create mode 100755 buildah/mq-buildah delete mode 100644 incubating/mq-golang-sdk/Dockerfile delete mode 100644 incubating/mq-golang-sdk/README.md delete mode 100644 incubating/mq-golang-sdk/install-golang.sh diff --git a/.travis.yml b/.travis.yml index 5d41df9..1cff245 100644 --- a/.travis.yml +++ b/.travis.yml @@ -61,7 +61,8 @@ before_script: - make deps - echo -en 'travis_fold:end:deps\\r' - echo 'Building Developer image...' && echo -en 'travis_fold:start:build-devserver\\r' - - make build-devserver + # Use the containerized build explicitly + - make build-devserver-ctr - echo -en 'travis_fold:end:build-devserver\\r' - echo 'Building Developer JMS test image...' && echo -en 'travis_fold:start:build-devjmstest\\r' - make build-devjmstest diff --git a/Dockerfile-server b/Dockerfile-server index 70761ba..dd3a643 100644 --- a/Dockerfile-server +++ b/Dockerfile-server @@ -16,6 +16,7 @@ # Build stage to build Go code ############################################################################### FROM registry.access.redhat.com/devtools/go-toolset-7-rhel7 as builder +# FROM docker.io/centos/go-toolset-7-centos7 as builder # The URL to download the MQ installer from in tar.gz format # This assumes an archive containing the MQ RPM install packages ARG MQ_URL="https://public.dhe.ibm.com/ibmdl/export/pub/software/websphere/messaging/mqadv/mqadv_dev912_linux_x86-64.tar.gz" @@ -53,6 +54,7 @@ FROM registry.access.redhat.com/ubi7/ubi-minimal AS mq-server # The MQ packages to install - see install-mq.sh for default value ARG MQ_URL="https://public.dhe.ibm.com/ibmdl/export/pub/software/websphere/messaging/mqadv/mqadv_dev912_linux_x86-64.tar.gz" ARG MQ_PACKAGES="MQSeriesRuntime-*.rpm MQSeriesServer-*.rpm MQSeriesJava*.rpm MQSeriesJRE*.rpm MQSeriesGSKit*.rpm MQSeriesMsg*.rpm MQSeriesSamples*.rpm MQSeriesWeb*.rpm MQSeriesAMS-*.rpm" +#ARG MQ_PACKAGES="ibmmq-server ibmmq-java ibmmq-jre ibmmq-gskit ibmmq-msg-.* ibmmq-samples ibmmq-web ibmmq-ams" ARG MQM_UID=888 LABEL summary="IBM MQ Advanced Server" LABEL description="Simplify, accelerate and facilitate the reliable exchange of data with a security-rich messaging solution — trusted by the world’s most successful enterprises" @@ -84,7 +86,7 @@ RUN chmod ug+x /usr/local/bin/runmqserver \ && chown mqm:root /run/termination-log \ && chmod 0660 /run/termination-log # Always use port 1414 for MQ & 9157 for the metrics -EXPOSE 1414 9157 +EXPOSE 1414 9157 9443 ENV LANG=en_US.UTF-8 AMQ_DIAGNOSTIC_MSG_SEVERITY=1 AMQ_ADDITIONAL_JSON_LOG=1 LOG_FORMAT=basic USER $MQM_UID ENTRYPOINT ["runmqserver"] @@ -131,7 +133,6 @@ COPY incubating/mqadvanced-server-dev/web /etc/mqm/web RUN chown -R mqm:mqm /etc/mqm/* \ && chmod +x /usr/local/bin/runmq* \ && install --directory --mode 0775 --owner mqm --group root /run/runmqdevserver -EXPOSE 9443 ENV MQ_BETA_ENABLE_WEB_SERVER=1 USER $MQM_UID ENTRYPOINT ["runmqdevserver"] \ No newline at end of file diff --git a/Makefile b/Makefile index e00d5a5..204848c 100644 --- a/Makefile +++ b/Makefile @@ -38,7 +38,7 @@ MQ_TAG ?=$(MQ_VERSION)-$(ARCH) # DOCKER is the Docker command to run. Defaults to "podman" if it's available, otherwise "docker" DOCKER ?= $(shell type -p podman || echo docker) # MQ_PACKAGES specifies the MQ packages (.deb or .rpm) to install. Defaults vary on base image. -MQ_PACKAGES ?= +MQ_PACKAGES ?=MQSeriesRuntime-*.rpm MQSeriesServer-*.rpm MQSeriesJava*.rpm MQSeriesJRE*.rpm MQSeriesGSKit*.rpm MQSeriesMsg*.rpm MQSeriesSamples*.rpm MQSeriesWeb*.rpm MQSeriesAMS-*.rpm # MQM_UID is the UID to use for the "mqm" user MQM_UID ?= 888 @@ -69,6 +69,14 @@ SPACE:= $(EMPTY) $(EMPTY) # MQ_VERSION_VRM is MQ_VERSION with only the Version, Release and Modifier fields (no Fix field). e.g. 9.1.2 instead of 9.1.2.0 MQ_VERSION_VRM=$(subst $(SPACE),.,$(wordlist 1,3,$(subst .,$(SPACE),$(MQ_VERSION)))) +# Set variable if running on a Red Hat Enterprise Linux host +ifneq ($(wildcard /etc/redhat-release),) +REDHAT_RELEASE = $(shell cat /etc/redhat-release) +ifeq "$(findstring Red Hat,$(REDHAT_RELEASE))" "Red Hat" + RHEL_HOST = "true" +endif +endif + ifneq (,$(findstring Microsoft,$(shell uname -r))) DOWNLOADS_DIR=$(patsubst /mnt/c%,C:%,$(realpath ./downloads/)) else @@ -182,7 +190,7 @@ test-advancedserver-cover: test/docker/vendor coverage tail -q -n +2 ./coverage/unit.cov ./coverage/docker.cov >> ./coverage/combined.cov go tool cover -html=./coverage/combined.cov -o ./coverage/combined.html -define docker-build-mq +define build-mq # Create a temporary network to use for the build $(DOCKER) network create build # Start a web server to host the MQ downloadable (tar.gz) file @@ -193,28 +201,48 @@ define docker-build-mq --network-alias build \ --volume $(DOWNLOADS_DIR):/usr/share/nginx/html:ro \ --detach \ - nginx:alpine + docker.io/nginx:alpine # Build the new image $(DOCKER) build \ --tag $1:$2 \ --file $3 \ --network build \ --build-arg MQ_URL=http://build:80/$4 \ + --build-arg MQ_PACKAGES="$(MQ_PACKAGES)" \ --build-arg IMAGE_REVISION="$(IMAGE_REVISION)" \ --build-arg IMAGE_SOURCE="$(IMAGE_SOURCE)" \ --build-arg IMAGE_TAG="$1:$2" \ --build-arg MQM_UID=$(MQM_UID) \ - --label version=$7 \ + --label version=$(MQ_VERSION) \ --label name=$1 \ --label build-date=$(shell date +%Y-%m-%dT%H:%M:%S%z) \ --label release="" \ --label vcs-ref=$(IMAGE_REVISION) \ --label vcs-type=git \ --label vcs-url=$(IMAGE_SOURCE) \ - --target $8 \ + --target $5 \ . ; $(DOCKER) kill $(BUILD_SERVER_CONTAINER) && $(DOCKER) network rm build endef +define build-mq-ctr + buildah/mq-buildah $1 $2 \ + --file /src/Dockerfile-server \ + --build-arg MQ_URL="file:///src/downloads/$3" \ + --build-arg MQ_PACKAGES="$(MQ_PACKAGES)" \ + --build-arg IMAGE_REVISION="$(IMAGE_REVISION)" \ + --build-arg IMAGE_SOURCE="$(IMAGE_SOURCE)" \ + --build-arg IMAGE_TAG="$1:$2" \ + --build-arg MQM_UID=$(MQM_UID) \ + --label version=$(MQ_VERSION) \ + --label name=$1 \ + --label build-date=$(shell date +%Y-%m-%dT%H:%M:%S%z) \ + --label release="" \ + --label vcs-ref=$(IMAGE_REVISION) \ + --label vcs-type=git \ + --label vcs-url=$(IMAGE_SOURCE) \ + --target $4 +endef + DOCKER_SERVER_VERSION=$(shell docker version --format "{{ .Server.Version }}") DOCKER_CLIENT_VERSION=$(shell docker version --format "{{ .Client.Version }}") .PHONY: docker-version @@ -223,33 +251,53 @@ docker-version: @test "$(word 1,$(subst ., ,$(DOCKER_SERVER_VERSION)))" -ge "17" || ("$(word 1,$(subst ., ,$(DOCKER_SERVER_VERSION)))" -eq "17" && "$(word 2,$(subst ., ,$(DOCKER_CLIENT_VERSION)))" -ge "05") || (echo "Error: Docker server 17.05 or greater is required" && exit 1) .PHONY: build-advancedserver -build-advancedserver: MQ_SDK_ARCHIVE=$(MQ_ARCHIVE) -build-advancedserver: downloads/$(MQ_ARCHIVE) docker-version #build-golang-sdk-ex +ifdef RHEL_HOST +# Build using Buildah inside a container on RHEL hosts +build-advancedserver: build-advancedserver-ctr +else +build-advancedserver: build-advancedserver-host +endif + +.PHONY: build-advancedserver-host +build-advancedserver-host: downloads/$(MQ_ARCHIVE) docker-version $(info $(SPACER)$(shell printf $(TITLE)"Build $(MQ_IMAGE_ADVANCEDSERVER):$(MQ_TAG)"$(END))) - $(call docker-build-mq,$(MQ_IMAGE_ADVANCEDSERVER),$(MQ_TAG),Dockerfile-server,$(MQ_ARCHIVE),"4486e8c4cc9146fd9b3ce1f14a2dfc5b","IBM MQ Advanced",$(MQ_VERSION),mq-server) + $(call build-mq,$(MQ_IMAGE_ADVANCEDSERVER),$(MQ_TAG),Dockerfile-server,$(MQ_ARCHIVE),mq-server) + +.PHONY: buildah-advancedserver-host +build-advancedserver-ctr: downloads/$(MQ_ARCHIVE) + $(info $(shell printf $(TITLE)"Build $(MQ_IMAGE_ADVANCEDSERVER):$(MQ_TAG) in a container"$(END))) + $(call build-mq-ctr,$(MQ_IMAGE_ADVANCEDSERVER),$(MQ_TAG),$(MQ_ARCHIVE),mq-server) .PHONY: build-devserver -build-devserver: downloads/$(MQ_ARCHIVE_DEV) docker-version #build-golang-sdk-ex - $(info $(shell printf $(TITLE)"Build $(MQ_IMAGE_DEVSERVER_BASE):$(MQ_TAG)"$(END))) - $(call docker-build-mq,$(MQ_IMAGE_DEVSERVER),$(MQ_TAG),Dockerfile-server,$(MQ_ARCHIVE_DEV),"98102d16795c4263ad9ca075190a2d4d","IBM MQ Advanced for Developers (Non-Warranted)",$(MQ_VERSION),mq-dev-server) +ifdef RHEL_HOST +# Build using Buildah inside a container on RHEL hosts +build-devserver: build-devserver-ctr +else +build-devserver: build-devserver-host +endif + +.PHONY: build-devserver-host +build-devserver-host: downloads/$(MQ_ARCHIVE_DEV) docker-version + $(info $(shell printf $(TITLE)"Build $(MQ_IMAGE_DEVSERVER):$(MQ_TAG)"$(END))) + $(call build-mq,$(MQ_IMAGE_DEVSERVER),$(MQ_TAG),Dockerfile-server,$(MQ_ARCHIVE_DEV),mq-dev-server) + +.PHONY: buildah-devserver-ctr +build-devserver-ctr: downloads/$(MQ_ARCHIVE_DEV) + $(info $(shell printf $(TITLE)"Build $(MQ_IMAGE_DEVSERVER):$(MQ_TAG) in a container"$(END))) + $(call build-mq-ctr,$(MQ_IMAGE_DEVSERVER),$(MQ_TAG),$(MQ_ARCHIVE_DEV),mq-dev-server) .PHONY: build-advancedserver-cover build-advancedserver-cover: docker-version $(DOCKER) build --build-arg BASE_IMAGE=$(MQ_IMAGE_ADVANCEDSERVER):$(MQ_TAG) -t $(MQ_IMAGE_ADVANCEDSERVER):$(MQ_TAG)-cover -f Dockerfile-server.cover . .PHONY: build-explorer -ifeq "$(findstring ubuntu,$(BASE_IMAGE))" "ubuntu" -build-explorer: MQ_PACKAGES=ibmmq-explorer -else -build-explorer: MQ_PACKAGES=MQSeriesRuntime*.rpm MQSeriesJRE*.rpm MQSeriesExplorer*.rpm -endif -build-explorer: downloads/$(MQ_ARCHIVE_DEV) docker-pull - $(call docker-build-mq,mq-explorer:latest-$(ARCH),incubating/mq-explorer/Dockerfile,$(MQ_ARCHIVE_DEV),"98102d16795c4263ad9ca075190a2d4d","IBM MQ Advanced for Developers (Non-Warranted)",$(MQ_VERSION),"ubuntu:16.04") - -.PHONY: docker-pull -docker-pull: - $(DOCKER) pull $(BASE_IMAGE) +build-explorer: downloads/$(MQ_ARCHIVE_DEV) + $(call build-mq,mq-explorer,latest-$(ARCH),incubating/mq-explorer/Dockerfile,$(MQ_ARCHIVE_DEV),mq-explorer) +.PHONY: build-sdk +build-sdk: downloads/$(MQ_ARCHIVE_DEV) + $(info $(shell printf $(TITLE)"Build $(MQ_IMAGE_SDK)"$(END))) + $(call build-mq,mq-sdk,$(MQ_TAG),incubating/mq-sdk/Dockerfile,$(MQ_SDK_ARCHIVE),mq-sdk) .PHONY: debug-vars debug-vars: diff --git a/buildah/Dockerfile b/buildah/Dockerfile new file mode 100644 index 0000000..6f520bc --- /dev/null +++ b/buildah/Dockerfile @@ -0,0 +1,23 @@ +# © Copyright IBM Corporation 2019 +# +# 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. + +# Fedora includes more recent versions of buildah (need buildah V1.7 to get +# multi-stage builds to work properly) +FROM docker.io/fedora:29 +RUN yum install -y buildah +COPY build.sh /usr/local/bin/build +RUN chmod +x /usr/local/bin/build +ENV STORAGE_DRIVER=vfs +ENV BUILDAH_ISOLATION=chroot +ENTRYPOINT ["build"] diff --git a/buildah/build.sh b/buildah/build.sh new file mode 100644 index 0000000..4908429 --- /dev/null +++ b/buildah/build.sh @@ -0,0 +1,41 @@ +#!/bin/bash +# -*- mode: sh -*- +# © Copyright IBM Corporation 2019 +# +# +# 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. + +# Build a container image from a Dockerfile using Buildah +# If the Docker socket is available, the image will be pushed to Docker once built. + +readonly IMAGE=$1:$2 +shift +shift +readonly SRC="/src" +readonly OCI_DIR="/var/oci" + +echo "****************************************" +echo " Inside the Buildah container" +echo "****************************************" +set -ex +# Build using the supplied options. Always pass the source directory in, and +# use it as the build context +buildah build-using-dockerfile --tag ${IMAGE} --volume /src:/src "$@" /src + +if [ -e ${OCI_DIR} ]; then + buildah push ${IMAGE} oci-archive:${OCI_DIR}/${IMAGE} +fi + +if [ -e /var/run/docker.sock ]; then + buildah push ${IMAGE} docker-daemon:${IMAGE} +fi \ No newline at end of file diff --git a/buildah/mq-buildah b/buildah/mq-buildah new file mode 100755 index 0000000..c767f37 --- /dev/null +++ b/buildah/mq-buildah @@ -0,0 +1,51 @@ +#!/bin/bash +# -*- mode: sh -*- +# © Copyright IBM Corporation 2019 +# +# +# 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. + +# Build and run a container image with Buildah installed + +if [ $# -eq 0 ]; then + echo "Usage: $0 imageName imageTag buildah-options" + exit 1 +fi + +readonly SCRIPT_DIR="$( cd "$(dirname "$0")" ; pwd -P )" +readonly DIR=${SCRIPT_DIR}/.. +readonly BUILDAH_IMAGE=mq-buildah +RUN_OPTS="--volume ${DIR}:/src --cap-add SYS_ADMIN --rm --interactive --tty" +CMD="docker" + +# If Docker is installed, then map the Docker socket into the container, to +# allow buildah to push the resulting image into Docker's image store +# WARNING: This means that the buildah container can do anything the "docker" +# can do. +command -v docker +if [[ $? == 0 && -e /var/run/docker.sock ]]; then + RUN_OPTS="${RUN_OPTS} --volume /var/run/docker.sock:/var/run/docker.sock" +fi + +command -v podman +if [[ $? -eq 0 ]]; then + CMD="podman" + OCI_DIR="/tmp/mq-buildah" + mkdir -p ${OCI_DIR} + RUN_OPTS="${RUN_OPTS} --volume ${OCI_DIR}:/var/oci" + echo "Image archives will be written to ${OCI_DIR}" +fi + +${CMD} build --tag ${BUILDAH_IMAGE} --file ${SCRIPT_DIR}/Dockerfile ${SCRIPT_DIR} +set -x +${CMD} run ${RUN_OPTS} ${BUILDAH_IMAGE} "$@" diff --git a/docs/building.md b/docs/building.md index b2346e7..dbeda92 100644 --- a/docs/building.md +++ b/docs/building.md @@ -36,6 +36,11 @@ Run `make build-devserver`, which will download the latest version of MQ Advance You can use the environment variable `MQ_ARCHIVE_DEV` to specify an alternative local file to install from (which must be in the `downloads` directory). +## Building from a Red Hat Enterprise Linux host +Red Hat Enterprise Linux (RHEL) offers a suite of container tools, including Buildah for building container images, and Podman for running containers. Buildah can accept input described in a [Dockerfile](https://docs.docker.com/engine/reference/builder/). This MQ sample uses a multi-stage build, which requires a recent version of Podman, which is not yet available in Red Hat Enterprise Linux V7. Therefore, if you are on a RHEL host, then the `build-devserver` and `build-advancedserver` targets are run using a more recent version of Buildah from inside a container. + +The containerized build process on a RHEL host will write an OCI compliant archive file to `/tmp/mq-buildah`. If a version of Docker is installed on the host, it will also push the image into Docker's internal image registry. + ## Installed components This image includes the core MQ server, Java, language packs, GSKit, and web server. This can be configured by setting the `MQ_PACKAGES` argument to `make`. \ No newline at end of file diff --git a/incubating/mq-explorer/Dockerfile b/incubating/mq-explorer/Dockerfile index 327c901..2ec8095 100644 --- a/incubating/mq-explorer/Dockerfile +++ b/incubating/mq-explorer/Dockerfile @@ -12,29 +12,33 @@ # See the License for the specific language governing permissions and # limitations under the License. -FROM ubuntu:16.04 +FROM registry.access.redhat.com/ubi7/ubi-minimal AS mq-explorer # 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_dev911_ubuntu_x86-64.tar.gz +ARG MQ_URL="https://public.dhe.ibm.com/ibmdl/export/pub/software/websphere/messaging/mqadv/mqadv_dev912_linux_x86-64.tar.gz" # The MQ packages to install -ARG MQ_PACKAGES +ENV MQ_PACKAGES="MQSeriesRuntime*.rpm MQSeriesJRE*.rpm MQSeriesExplorer*.rpm" -ARG MQM_UID=999 +ARG MQM_UID=888 -RUN export DEBIAN_FRONTEND=noninteractive \ - && apt-get update \ - && apt-get install -y \ - libgtk2.0-0 \ - libxtst6 +RUN microdnf install -y --nodocs gtk2 libXtst \ + && microdnf clean all ADD install-mq.sh /usr/local/bin/ + +# Install MQ Explorer. To avoid a "text file busy" error here, we sleep before installing. +# Need to re-instate the `/var/mqm` directory after installation, to avoid MQ +# errors with some commands (e.g. `dspmqver`) RUN chmod u+x /usr/local/bin/install-mq.sh \ - && install-mq.sh + && sleep 1 \ + && install-mq.sh $MQM_UID \ + && rm -rf /var/mqm \ + && /opt/mqm/bin/crtmqdir -f -s ENV LANG=en_US.UTF-8 -# Run as mqm (999) -USER 999 +# Run as mqm +USER $MQM_UID ENTRYPOINT ["MQExplorer"] \ No newline at end of file diff --git a/incubating/mq-golang-sdk/Dockerfile b/incubating/mq-golang-sdk/Dockerfile deleted file mode 100644 index ff5dc3b..0000000 --- a/incubating/mq-golang-sdk/Dockerfile +++ /dev/null @@ -1,33 +0,0 @@ -# © Copyright IBM Corporation 2018, 2019 -# -# 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. - -ARG BASE_IMAGE=mq-sdk:9.1.1.0-x86_64-ubuntu-16.04 - -FROM $BASE_IMAGE - -COPY incubating/mq-golang-sdk/install-golang.sh /usr/local/bin - -ENV GO_VERSION=1.10 - -ENV PATH="${PATH}:/usr/lib/go-${GO_VERSION}/bin:/go/bin:/usr/local/go/bin" \ - CGO_CFLAGS="-I/opt/mqm/inc/" \ - CGO_LDFLAGS_ALLOW="-Wl,-rpath.*" \ - GOPATH="/go" - -# Install the Go compiler and Git -RUN chmod +x /usr/local/bin/install-golang.sh \ - && sleep 1 \ - && install-golang.sh - -WORKDIR $GOPATH \ No newline at end of file diff --git a/incubating/mq-golang-sdk/README.md b/incubating/mq-golang-sdk/README.md deleted file mode 100644 index ca301a2..0000000 --- a/incubating/mq-golang-sdk/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# IBM MQ Software Developer Kit (SDK) with Go - -This image contains the MQ SDK, Git, the Go compiler, and the `build-essential` package (which includes GNU C and C++ compilers plus other essential tools like `make`). - -This image doesn't contain any Go code for MQ. You can add a CGO wrapper for the MQ C client, for example [mq-golang](https://github.com/ibm-messaging/mq-golang), via your vendor directory, or directly using `go get`. \ No newline at end of file diff --git a/incubating/mq-golang-sdk/install-golang.sh b/incubating/mq-golang-sdk/install-golang.sh deleted file mode 100644 index 9185c37..0000000 --- a/incubating/mq-golang-sdk/install-golang.sh +++ /dev/null @@ -1,73 +0,0 @@ -#!/bin/bash -# -*- mode: sh -*- -# © Copyright IBM Corporation 2018 -# -# -# 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. - -# Fail on any non-zero return code -set -ex - -test -f /usr/bin/yum && RHEL=true || RHEL=false -test -f /usr/bin/apt-get && UBUNTU=true || UBUNTU=false - -if ($UBUNTU); then - export DEBIAN_FRONTEND=noninteractive - # Use a reduced set of apt repositories. - # This ensures no unsupported code gets installed, and makes the build faster - source /etc/os-release - # Figure out the correct apt URL based on the CPU architecture - CPU_ARCH=$(uname -p) - if [ ${CPU_ARCH} == "x86_64" ]; then - APT_URL="http://archive.ubuntu.com/ubuntu/" - else - APT_URL="http://ports.ubuntu.com/ubuntu-ports/" - fi - # Use a reduced set of apt repositories. - # This ensures no unsupported code gets installed, and makes the build faster - echo "deb ${APT_URL} ${UBUNTU_CODENAME} main restricted" > /etc/apt/sources.list - echo "deb ${APT_URL} ${UBUNTU_CODENAME}-updates main restricted" >> /etc/apt/sources.list - echo "deb ${APT_URL} ${UBUNTU_CODENAME}-backports main restricted universe" >> /etc/apt/sources.list; - echo "deb ${APT_URL} ${UBUNTU_CODENAME}-security main restricted" >> /etc/apt/sources.list - - apt-get update - apt-get install -y --no-install-recommends \ - golang-${GO_VERSION} \ - git \ - ca-certificates -fi - -if ($RHEL); then - # Install additional packages required by MQ, this install process and the runtime scripts - yum -y install \ - git \ - curl \ - tar \ - gcc - - cd /tmp - curl -LO https://storage.googleapis.com/golang/go${GO_VERSION}.linux-amd64.tar.gz - tar -C /usr/local -xzf go${GO_VERSION}.linux-amd64.tar.gz -fi - -# Remove any orphaned packages -$UBUNTU && apt-get autoremove -y - -# Clean up cached files -$UBUNTU && rm -rf /var/lib/apt/lists/* -$RHEL && yum -y clean all -$RHEL && rm -rf /var/cache/yum/* - -# Make the GOLANG directories -mkdir -p $GOPATH/src $GOPATH/bin -chmod -R 777 $GOPATH \ No newline at end of file diff --git a/incubating/mq-sdk/Dockerfile b/incubating/mq-sdk/Dockerfile index a7a8833..f12b9bd 100644 --- a/incubating/mq-sdk/Dockerfile +++ b/incubating/mq-sdk/Dockerfile @@ -12,19 +12,19 @@ # See the License for the specific language governing permissions and # limitations under the License. -ARG BASE_IMAGE=ubuntu:16.04 - -FROM $BASE_IMAGE +FROM registry.access.redhat.com/rhscl/devtoolset-7-toolchain-rhel7 AS mq-sdk +#FROM docker.io/centos/devtoolset-7-toolchain-centos7 AS mq-sdk # The URL to download the MQ installer from in tar.gz format # This assumes an archive containing the MQ Debian (.deb) install packages ARG MQ_URL # The packages to install in install-mq.sh -ARG MQ_PACKAGES +ENV MQ_PACKAGES="MQSeriesRuntime-*.rpm MQSeriesSDK-*.rpm MQSeriesSamples*.rpm" -ARG MQM_UID=999 +ENV MQM_UID=888 +USER 0 COPY install-mq.sh /usr/local/bin/ # Install MQ. To avoid a "text file busy" error here, we sleep before installing. @@ -35,3 +35,4 @@ RUN chmod u+x /usr/local/bin/install-mq.sh \ && install-mq.sh $MQM_UID \ && rm -rf /var/mqm \ && /opt/mqm/bin/crtmqdir -f -s +USER 1001 \ No newline at end of file diff --git a/install-mq-server-prereqs.sh b/install-mq-server-prereqs.sh index 7b54428..8282fb4 100644 --- a/install-mq-server-prereqs.sh +++ b/install-mq-server-prereqs.sh @@ -23,12 +23,6 @@ test -f /usr/bin/microdnf && MICRODNF=true || MICRODNF=false test -f /usr/bin/rpm && RPM=true || RPM=false test -f /usr/bin/apt-get && UBUNTU=true || UBUNTU=false -# If MQ_PACKAGES isn't specifically set, then choose a valid set of defaults -if [ -z "$MQ_PACKAGES" ]; then - $UBUNTU && MQ_PACKAGES="ibmmq-server ibmmq-java ibmmq-jre ibmmq-gskit ibmmq-msg-.* ibmmq-samples ibmmq-ams" - $RPM && MQ_PACKAGES="MQSeriesRuntime-*.rpm MQSeriesServer-*.rpm MQSeriesJava*.rpm MQSeriesJRE*.rpm MQSeriesGSKit*.rpm MQSeriesMsg*.rpm MQSeriesSamples*.rpm MQSeriesAMS-*.rpm" -fi - if ($UBUNTU); then export DEBIAN_FRONTEND=noninteractive # Use a reduced set of apt repositories. diff --git a/test/messaging/Dockerfile b/test/messaging/Dockerfile index 32c6117..4dc87fc 100644 --- a/test/messaging/Dockerfile +++ b/test/messaging/Dockerfile @@ -1,4 +1,4 @@ -# © Copyright IBM Corporation 2018 +# © Copyright IBM Corporation 2018, 2019 # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -15,7 +15,7 @@ ############################################################################### # Application build environment (Maven) ############################################################################### -FROM maven:3-ibmjava as builder +FROM docker.io/maven:3-ibmjava as builder COPY pom.xml /usr/src/mymaven/ WORKDIR /usr/src/mymaven # Download dependencies separately, so Docker caches them @@ -30,7 +30,7 @@ RUN find /usr/src/mymaven ############################################################################### # Application runtime (JRE only, no build environment) ############################################################################### -FROM ibmjava:8-jre +FROM docker.io/ibmjava:8-jre COPY --from=builder /usr/src/mymaven/target/*.jar /opt/app/ COPY --from=builder /usr/src/mymaven/target/lib/*.jar /opt/app/ ENTRYPOINT ["java", "-classpath", "/opt/app/*", "org.junit.platform.console.ConsoleLauncher", "-p", "com.ibm.mqcontainer.test", "--details", "verbose"]