From ea7105c82c5d79c3d911e6dc56db74d328ce395e Mon Sep 17 00:00:00 2001 From: Rob Parker Date: Wed, 20 Jun 2018 13:18:49 +0100 Subject: [PATCH] Fix MQ Developer scripts to allow centos image building --- .travis.yml | 18 +++++ Dockerfile-server | 3 +- Makefile | 20 ++++-- incubating/mq-golang-sdk/Dockerfile | 24 +++---- incubating/mq-golang-sdk/install-golang.sh | 73 +++++++++++++++++++++ incubating/mq-sdk/Dockerfile | 6 +- incubating/mqadvanced-server-dev/Dockerfile | 7 +- 7 files changed, 128 insertions(+), 23 deletions(-) create mode 100644 incubating/mq-golang-sdk/install-golang.sh diff --git a/.travis.yml b/.travis.yml index b223522..711c794 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,3 +1,17 @@ +# © 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. + sudo: required language: go @@ -13,6 +27,10 @@ cache: directories: - downloads +env: + - BASE_IMAGE=ubuntu:16.04 + - BASE_IMAGE=centos:latest + jobs: include: - if: type IN (pull_request) diff --git a/Dockerfile-server b/Dockerfile-server index 60017f4..3edebf4 100644 --- a/Dockerfile-server +++ b/Dockerfile-server @@ -13,11 +13,12 @@ # limitations under the License. ARG BASE_IMAGE=ubuntu:16.04 +ARG BUILDER_IMAGE=mq-golang-sdk:9.0.5.0-x86_64-ubuntu-16.04 ############################################################################### # Build stage to build Go code ############################################################################### -FROM mq-golang-sdk:9.0.5.0-x86_64-ubuntu-16.04 as builder +FROM $BUILDER_IMAGE as builder WORKDIR /go/src/github.com/ibm-messaging/mq-container/ COPY cmd/ ./cmd COPY internal/ ./internal diff --git a/Makefile b/Makefile index 9b225d9..2fca483 100644 --- a/Makefile +++ b/Makefile @@ -68,8 +68,10 @@ endif # Try to figure out which archive to use from the BASE_IMAGE ifeq "$(findstring ubuntu,$(BASE_IMAGE))" "ubuntu" MQ_ARCHIVE_TYPE=UBUNTU + MQ_ARCHIVE_DEV_PLATFORM=ubuntu else MQ_ARCHIVE_TYPE=LINUX + MQ_ARCHIVE_DEV_PLATFORM=linux endif # Try to figure out which archive to use from the architecture ifeq "$(ARCH)" "x86_64" @@ -80,8 +82,8 @@ else ifeq "$(ARCH)" "s390x" MQ_ARCHIVE_ARCH=SYSTEM_Z endif # Archive names for IBM MQ Advanced for Developers for Ubuntu -MQ_ARCHIVE_DEV_9.0.4.0=mqadv_dev904_ubuntu_x86-64.tar.gz -MQ_ARCHIVE_DEV_9.0.5.0=mqadv_dev905_ubuntu_x86-64.tar.gz +MQ_ARCHIVE_DEV_9.0.4.0=mqadv_dev904_$(MQ_ARCHIVE_DEV_PLATFORM)_x86-64.tar.gz +MQ_ARCHIVE_DEV_9.0.5.0=mqadv_dev905_$(MQ_ARCHIVE_DEV_PLATFORM)_x86-64.tar.gz ############################################################################### # Build targets @@ -205,6 +207,7 @@ define docker-build-mq --network build \ --build-arg MQ_URL=http://build:80/$3 \ --build-arg BASE_IMAGE=$(BASE_IMAGE) \ + --build-arg BUILDER_IMAGE=$(MQ_IMAGE_GOLANG_SDK) \ --label IBM_PRODUCT_ID=$4 \ --label IBM_PRODUCT_NAME=$5 \ --label IBM_PRODUCT_VERSION=$6 \ @@ -226,11 +229,15 @@ build-advancedserver: downloads/$(MQ_ARCHIVE) docker-version build-golang-sdk .PHONY: build-devserver # Target-specific variable to add web server into devserver image +ifeq "$(findstring ubuntu,$(BASE_IMAGE))" "ubuntu" build-devserver: MQ_PACKAGES=ibmmq-server ibmmq-java ibmmq-jre ibmmq-gskit ibmmq-msg-.* ibmmq-samples ibmmq-ams ibmmq-web +else +build-devserver: MQ_PACKAGES=MQSeriesRuntime-*.rpm MQSeriesServer-*.rpm MQSeriesJava*.rpm MQSeriesJRE*.rpm MQSeriesGSKit*.rpm MQSeriesMsg*.rpm MQSeriesSamples*.rpm MQSeriesAMS-*.rpm MQSeriesWeb-*.rpm +endif build-devserver: downloads/$(MQ_ARCHIVE_DEV) docker-version build-golang-sdk $(info $(shell printf $(TITLE)"Build $(MQ_IMAGE_DEVSERVER_BASE)"$(END))) $(call docker-build-mq,$(MQ_IMAGE_DEVSERVER_BASE),Dockerfile-server,$(MQ_ARCHIVE_DEV),"98102d16795c4263ad9ca075190a2d4d","IBM MQ Advanced for Developers (Non-Warranted)",$(MQ_VERSION)) - docker build --tag $(MQ_IMAGE_DEVSERVER) --file incubating/mqadvanced-server-dev/Dockerfile . + $(DOCKER) build --tag $(MQ_IMAGE_DEVSERVER) --build-arg BASE_IMAGE=$(MQ_IMAGE_DEVSERVER_BASE) --build-arg BUILDER_IMAGE=$(MQ_IMAGE_GOLANG_SDK) --file incubating/mqadvanced-server-dev/Dockerfile . .PHONY: build-advancedserver-cover build-advancedserver-cover: docker-version @@ -240,10 +247,15 @@ build-advancedserver-cover: docker-version build-explorer: downloads/$(MQ_ARCHIVE_DEV) $(call docker-build-mq,mq-explorer:latest-$(ARCH),incubating/mq-explorer/Dockerfile-mq-explorer,$(MQ_ARCHIVE_DEV),"98102d16795c4263ad9ca075190a2d4d","IBM MQ Advanced for Developers (Non-Warranted)",$(MQ_VERSION)) +ifeq "$(findstring ubuntu,$(BASE_IMAGE))" "ubuntu" +build-sdk: MQ_PACKAGES=ibmmq-sdk ibmmq-samples build-essential +else +build-sdk: MQ_PACKAGES=MQSeriesRuntime-*.rpm MQSeriesSDK-*.rpm MQSeriesSamples*.rpm +endif build-sdk: downloads/$(MQ_ARCHIVE_DEV) docker-version docker-pull $(call docker-build-mq,$(MQ_IMAGE_SDK),incubating/mq-sdk/Dockerfile,$(MQ_ARCHIVE_DEV),"98102d16795c4263ad9ca075190a2d4d","IBM MQ Advanced for Developers SDK (Non-Warranted)",$(MQ_VERSION)) -build-golang-sdk: build-sdk +build-golang-sdk: downloads/$(MQ_ARCHIVE_DEV) docker-version build-sdk $(DOCKER) build --build-arg BASE_IMAGE=$(MQ_IMAGE_SDK) -t $(MQ_IMAGE_GOLANG_SDK) -f incubating/mq-golang-sdk/Dockerfile . # $(call docker-build-mq,$(MQ_IMAGE_GOLANG_SDK),incubating/mq-golang-sdk/Dockerfile,$(MQ_ARCHIVE),"98102d16795c4263ad9ca075190a2d4d","IBM MQ Advanced for Developers SDK (Non-Warranted)",$(MQ_VERSION)) diff --git a/incubating/mq-golang-sdk/Dockerfile b/incubating/mq-golang-sdk/Dockerfile index 35b4d02..584992d 100644 --- a/incubating/mq-golang-sdk/Dockerfile +++ b/incubating/mq-golang-sdk/Dockerfile @@ -16,22 +16,18 @@ ARG BASE_IMAGE=mq-sdk:9.0.5.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 -# Install the Go compiler and Git -RUN export DEBIAN_FRONTEND=noninteractive \ - && bash -c 'source /etc/os-release; \ - echo "deb http://archive.ubuntu.com/ubuntu/ ${UBUNTU_CODENAME} main restricted" > /etc/apt/sources.list; \ - echo "deb http://archive.ubuntu.com/ubuntu/ ${UBUNTU_CODENAME}-updates main restricted" >> /etc/apt/sources.list; \ - echo "deb http://archive.ubuntu.com/ubuntu/ ${UBUNTU_CODENAME}-backports main restricted universe" >> /etc/apt/sources.list;' \ - && apt-get update \ - && apt-get install -y --no-install-recommends golang-${GO_VERSION} git ca-certificates \ - && rm -rf /var/lib/apt/lists/* - -ENV PATH="${PATH}:/usr/lib/go-${GO_VERSION}/bin:/go/bin" \ - CGO_CFLAGS="-I/opt/mqm/inc/" \ - CGO_LDFLAGS_ALLOW="-Wl,-rpath.*" \ +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" -RUN mkdir -p "$GOPATH/src" "$GOPATH/bin" && chmod -R 777 "$GOPATH" +# Install the Go compiler and Git +RUN chmod +x /usr/local/bin/install-golang.sh \ + && sleep 1 \ + && install-golang.sh + WORKDIR $GOPATH diff --git a/incubating/mq-golang-sdk/install-golang.sh b/incubating/mq-golang-sdk/install-golang.sh new file mode 100644 index 0000000..9185c37 --- /dev/null +++ b/incubating/mq-golang-sdk/install-golang.sh @@ -0,0 +1,73 @@ +#!/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 1233d81..7fb304e 100644 --- a/incubating/mq-sdk/Dockerfile +++ b/incubating/mq-sdk/Dockerfile @@ -12,14 +12,16 @@ # See the License for the specific language governing permissions and # limitations under the License. -FROM ubuntu:16.04 +ARG BASE_IMAGE=ubuntu:16.04 + +FROM $BASE_IMAGE # 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 -ENV MQ_PACKAGES="ibmmq-sdk ibmmq-samples build-essential" +ARG MQ_PACKAGES COPY install-mq.sh /usr/local/bin/ diff --git a/incubating/mqadvanced-server-dev/Dockerfile b/incubating/mqadvanced-server-dev/Dockerfile index d8d0528..3d850d5 100644 --- a/incubating/mqadvanced-server-dev/Dockerfile +++ b/incubating/mqadvanced-server-dev/Dockerfile @@ -12,10 +12,13 @@ # See the License for the specific language governing permissions and # limitations under the License. +ARG BASE_IMAGE=mqadvanced-server-dev-base:9.0.5.0-x86_64-ubuntu-16.04 +ARG BUILDER_IMAGE=mq-golang-sdk:9.0.5.0-x86_64-ubuntu-16.04 + ############################################################################### # Build stage to build Go code ############################################################################### -FROM mq-golang-sdk:9.0.5.0-x86_64-ubuntu-16.04 as builder +FROM $BUILDER_IMAGE as builder WORKDIR /go/src/github.com/ibm-messaging/mq-container/ COPY cmd/ ./cmd COPY internal/ ./internal @@ -29,7 +32,7 @@ RUN go test -v ./cmd/runmqdevserver/... ############################################################################### # Main build stage ############################################################################### -FROM mqadvanced-server-dev-base:9.0.5.0-x86_64-ubuntu-16.04 +FROM $BASE_IMAGE # Enable MQ developer default configuration ENV MQ_DEV=true