From 539e976aa9d5c6ffd25904ed961210628ff31c60 Mon Sep 17 00:00:00 2001 From: Utz Bacher Date: Tue, 9 May 2017 23:56:08 +0200 Subject: [PATCH] adding rpm builds for ppc64le and s390x Signed-off-by: Christy Perez Signed-off-by: Christopher Jones Signed-off-by: Dominik Dingel Signed-off-by: Thorsten Winkler Signed-off-by: Utz Bacher --- .../builder/rpm/ppc64le/centos-7/Dockerfile | 19 +++ contrib/builder/rpm/ppc64le/generate.sh | 58 +++++-- .../rpm/ppc64le/opensuse-42.1/Dockerfile | 20 +++ contrib/builder/rpm/s390x/build.sh | 10 ++ .../rpm/s390x/clefos-base-s390x-7/Dockerfile | 19 +++ contrib/builder/rpm/s390x/generate.sh | 145 ++++++++++++++++++ .../s390x/opensuse-tumbleweed-1/Dockerfile | 20 +++ 7 files changed, 281 insertions(+), 10 deletions(-) create mode 100644 contrib/builder/rpm/ppc64le/centos-7/Dockerfile create mode 100644 contrib/builder/rpm/ppc64le/opensuse-42.1/Dockerfile create mode 100755 contrib/builder/rpm/s390x/build.sh create mode 100644 contrib/builder/rpm/s390x/clefos-base-s390x-7/Dockerfile create mode 100755 contrib/builder/rpm/s390x/generate.sh create mode 100644 contrib/builder/rpm/s390x/opensuse-tumbleweed-1/Dockerfile diff --git a/contrib/builder/rpm/ppc64le/centos-7/Dockerfile b/contrib/builder/rpm/ppc64le/centos-7/Dockerfile new file mode 100644 index 0000000000..5885137206 --- /dev/null +++ b/contrib/builder/rpm/ppc64le/centos-7/Dockerfile @@ -0,0 +1,19 @@ +# +# THIS FILE IS AUTOGENERATED; SEE "contrib/builder/rpm/ppc64le/generate.sh"! +# + +FROM ppc64le/centos:7 + +RUN yum groupinstall -y "Development Tools" +RUN yum -y swap -- remove systemd-container systemd-container-libs -- install systemd systemd-libs +RUN yum install -y btrfs-progs-devel device-mapper-devel glibc-static libseccomp-devel libselinux-devel libtool-ltdl-devel pkgconfig selinux-policy selinux-policy-devel sqlite-devel systemd-devel tar git cmake vim-common + +ENV GO_VERSION 1.8.1 +RUN curl -fSL "https://golang.org/dl/go${GO_VERSION}.linux-ppc64le.tar.gz" | tar xzC /usr/local +ENV PATH $PATH:/usr/local/go/bin + +ENV AUTO_GOPATH 1 + +ENV DOCKER_BUILDTAGS pkcs11 seccomp selinux +ENV RUNC_BUILDTAGS seccomp selinux + diff --git a/contrib/builder/rpm/ppc64le/generate.sh b/contrib/builder/rpm/ppc64le/generate.sh index b9f657c12d..cb0c81b964 100755 --- a/contrib/builder/rpm/ppc64le/generate.sh +++ b/contrib/builder/rpm/ppc64le/generate.sh @@ -4,8 +4,8 @@ set -e # usage: ./generate.sh [versions] # ie: ./generate.sh # to update all Dockerfiles in this directory -# or: ./generate.sh -# to only update fedora-23/Dockerfile +# or: ./generate.sh centos-7 +# to only update centos-7/Dockerfile # or: ./generate.sh fedora-newversion # to create a new folder and a Dockerfile within it @@ -20,8 +20,9 @@ versions=( "${versions[@]%/}" ) for version in "${versions[@]}"; do distro="${version%-*}" suite="${version##*-}" - from="${distro}:${suite}" + from="ppc64le/${distro}:${suite}" installer=yum + if [[ "$distro" == "fedora" ]]; then installer=dnf fi @@ -33,7 +34,7 @@ for version in "${versions[@]}"; do # THIS FILE IS AUTOGENERATED; SEE "contrib/builder/rpm/ppc64le/generate.sh"! # - FROM ppc64le/$from + FROM $from EOF echo >> "$version/Dockerfile" @@ -42,14 +43,33 @@ for version in "${versions[@]}"; do runcBuildTags= case "$from" in - # add centos and opensuse tools install bits later - fedora:*) + ppc64le/fedora:*) echo "RUN ${installer} -y upgrade" >> "$version/Dockerfile" + ;; + *) ;; + esac + + case "$from" in + ppc64le/centos:*) + # get "Development Tools" packages dependencies + echo 'RUN yum groupinstall -y "Development Tools"' >> "$version/Dockerfile" + + if [[ "$version" == "centos-7" ]]; then + echo 'RUN yum -y swap -- remove systemd-container systemd-container-libs -- install systemd systemd-libs' >> "$version/Dockerfile" + fi + ;; + ppc64le/opensuse:*) + # Add the ppc64le repo (hopefully the image is updated soon) + # get rpm-build and curl packages and dependencies + echo "RUN zypper addrepo -n ppc64le-oss -f https://download.opensuse.org/ports/ppc/distribution/leap/${suite}/repo/oss/ ppc64le-oss" >> "$version/Dockerfile" + echo "RUN zypper addrepo -n ppc64le-updates -f https://download.opensuse.org/ports/update/${suite}/ ppc64le-updates" >> "$version/Dockerfile" + echo 'RUN zypper --non-interactive install ca-certificates* curl gzip rpm-build' >> "$version/Dockerfile" + ;; + *) echo "RUN ${installer} install -y @development-tools fedora-packager" >> "$version/Dockerfile" ;; esac - # this list is sorted alphabetically; please keep it that way packages=( btrfs-progs-devel # for "btrfs/ioctl.h" (and "version.h" if possible) device-mapper-devel # for "libdevmapper.h" @@ -60,15 +80,20 @@ for version in "${versions[@]}"; do pkgconfig # for the pkg-config command selinux-policy selinux-policy-devel + sqlite-devel # for "sqlite3.h" systemd-devel # for "sd-journal.h" and libraries tar # older versions of dev-tools do not have tar git # required for containerd and runc clone cmake # tini build + vim-common # tini build ) # opensuse does not have the right libseccomp libs case "$from" in - # add opensuse libseccomp package substitution when adding build support + ppc64le/opensuse:*) + packages=( "${packages[@]/libseccomp-devel}" ) + runcBuildTags="selinux" + ;; *) extraBuildTags+=' seccomp' runcBuildTags="seccomp selinux" @@ -76,7 +101,17 @@ for version in "${versions[@]}"; do esac case "$from" in - # add opensuse btrfs package substitution when adding build support + ppc64le/opensuse:*) + packages=( "${packages[@]/btrfs-progs-devel/libbtrfs-devel}" ) + packages=( "${packages[@]/pkgconfig/pkg-config}" ) + packages=( "${packages[@]/vim-common/vim}" ) + if [[ "$from" == "ppc64le/opensuse:13."* ]]; then + packages+=( systemd-rpm-macros ) + fi + + # use zypper + echo "RUN zypper --non-interactive install ${packages[*]}" >> "$version/Dockerfile" + ;; *) echo "RUN ${installer} install -y ${packages[*]}" >> "$version/Dockerfile" ;; @@ -84,12 +119,15 @@ for version in "${versions[@]}"; do echo >> "$version/Dockerfile" + awk '$1 == "ENV" && $2 == "GO_VERSION" { print; exit }' ../../../../Dockerfile.ppc64le >> "$version/Dockerfile" echo 'RUN curl -fsSL "https://golang.org/dl/go${GO_VERSION}.linux-ppc64le.tar.gz" | tar xzC /usr/local' >> "$version/Dockerfile" echo 'ENV PATH $PATH:/usr/local/go/bin' >> "$version/Dockerfile" - echo >> "$version/Dockerfile" + + echo >> "$version/Dockerfile" echo 'ENV AUTO_GOPATH 1' >> "$version/Dockerfile" + echo >> "$version/Dockerfile" # print build tags in alphabetical order diff --git a/contrib/builder/rpm/ppc64le/opensuse-42.1/Dockerfile b/contrib/builder/rpm/ppc64le/opensuse-42.1/Dockerfile new file mode 100644 index 0000000000..1bfcef84f9 --- /dev/null +++ b/contrib/builder/rpm/ppc64le/opensuse-42.1/Dockerfile @@ -0,0 +1,20 @@ +# +# THIS FILE IS AUTOGENERATED; SEE "contrib/builder/rpm/ppc64le/generate.sh"! +# + +FROM ppc64le/opensuse:42.1 + +RUN zypper addrepo -n ppc64le-oss -f https://download.opensuse.org/ports/ppc/distribution/leap/42.1/repo/oss/ ppc64le-oss +RUN zypper addrepo -n ppc64le-updates -f https://download.opensuse.org/ports/update/42.1/ ppc64le-updates +RUN zypper --non-interactive install ca-certificates* curl gzip rpm-build +RUN zypper --non-interactive install libbtrfs-devel device-mapper-devel glibc-static libselinux-devel libtool-ltdl-devel pkg-config selinux-policy selinux-policy-devel sqlite-devel systemd-devel tar git cmake vim + +ENV GO_VERSION 1.8.1 +RUN curl -fSL "https://golang.org/dl/go${GO_VERSION}.linux-ppc64le.tar.gz" | tar xzC /usr/local +ENV PATH $PATH:/usr/local/go/bin + +ENV AUTO_GOPATH 1 + +ENV DOCKER_BUILDTAGS pkcs11 selinux +ENV RUNC_BUILDTAGS selinux + diff --git a/contrib/builder/rpm/s390x/build.sh b/contrib/builder/rpm/s390x/build.sh new file mode 100755 index 0000000000..1e3565a34a --- /dev/null +++ b/contrib/builder/rpm/s390x/build.sh @@ -0,0 +1,10 @@ +#!/usr/bin/env bash +set -e + +cd "$(dirname "$(readlink -f "$BASH_SOURCE")")" + +set -x +./generate.sh +for d in */; do + docker build -t "dockercore/builder-rpm:$(basename "$d")" "$d" +done diff --git a/contrib/builder/rpm/s390x/clefos-base-s390x-7/Dockerfile b/contrib/builder/rpm/s390x/clefos-base-s390x-7/Dockerfile new file mode 100644 index 0000000000..78a232c4e7 --- /dev/null +++ b/contrib/builder/rpm/s390x/clefos-base-s390x-7/Dockerfile @@ -0,0 +1,19 @@ +# +# THIS FILE IS AUTOGENERATED; SEE "contrib/builder/rpm/s390x/generate.sh"! +# + +FROM sinenomine/clefos-base-s390x + + +RUN touch /var/lib/rpm/* && yum groupinstall -y "Development Tools" +RUN touch /var/lib/rpm/* && yum install -y btrfs-progs-devel device-mapper-devel glibc-static libseccomp-devel libselinux-devel libtool-ltdl-devel pkgconfig selinux-policy selinux-policy-devel sqlite-devel systemd-devel tar git cmake vim-common + +ENV GO_VERSION 1.8.1 +RUN curl -fsSL "https://golang.org/dl/go${GO_VERSION}.linux-s390x.tar.gz" | tar xzC /usr/local +ENV PATH $PATH:/usr/local/go/bin + +ENV AUTO_GOPATH 1 + +ENV DOCKER_BUILDTAGS pkcs11 seccomp selinux +ENV RUNC_BUILDTAGS seccomp selinux +RUN ln -s /usr/bin/gcc /usr/bin/s390x-linux-gnu-gcc diff --git a/contrib/builder/rpm/s390x/generate.sh b/contrib/builder/rpm/s390x/generate.sh new file mode 100755 index 0000000000..7e9a9cf6a3 --- /dev/null +++ b/contrib/builder/rpm/s390x/generate.sh @@ -0,0 +1,145 @@ +#!/usr/bin/env bash +set -e + +# This file is used to auto-generate Dockerfiles for making rpms via 'make rpm' +# +# usage: ./generate.sh [versions] +# ie: ./generate.sh +# to update all Dockerfiles in this directory +# or: ./generate.sh centos-7 +# to only update centos-7/Dockerfile +# or: ./generate.sh fedora-newversion +# to create a new folder and a Dockerfile within it + +cd "$(dirname "$(readlink -f "$BASH_SOURCE")")" + +versions=( "$@" ) +if [ ${#versions[@]} -eq 0 ]; then + versions=( */ ) +fi +versions=( "${versions[@]%/}" ) + +for version in "${versions[@]}"; do + echo "${versions[@]}" + distro="${version%-*}" + suite="${version##*-}" + case "$distro" in + *opensuse*) + from="opensuse/s390x:tumbleweed" + ;; + *clefos*) + from="sinenomine/${distro}" + ;; + *) + echo No appropriate or supported image available. + exit 1 + ;; + esac + installer=yum + + mkdir -p "$version" + echo "$version -> FROM $from" + cat > "$version/Dockerfile" <<-EOF + # + # THIS FILE IS AUTOGENERATED; SEE "contrib/builder/rpm/s390x/generate.sh"! + # + + FROM $from + + EOF + + echo >> "$version/Dockerfile" + + extraBuildTags='pkcs11' + runcBuildTags= + + case "$from" in + *clefos*) + # Fix for RHBZ #1213602 + get "Development Tools" packages dependencies + echo 'RUN touch /var/lib/rpm/* && yum groupinstall -y "Development Tools"' >> "$version/Dockerfile" + ;; + *opensuse*) + echo "RUN zypper ar https://download.opensuse.org/ports/zsystems/tumbleweed/repo/oss/ tumbleweed" >> "$version/Dockerfile" + # get rpm-build and curl packages and dependencies + echo 'RUN zypper --non-interactive install ca-certificates* curl gzip rpm-build' >> "$version/Dockerfile" + ;; + *) + echo No appropriate or supported image available. + exit 1 + ;; + esac + + packages=( + btrfs-progs-devel # for "btrfs/ioctl.h" (and "version.h" if possible) + device-mapper-devel # for "libdevmapper.h" + glibc-static + libseccomp-devel # for "seccomp.h" & "libseccomp.so" + libselinux-devel # for "libselinux.so" + libtool-ltdl-devel # for pkcs11 "ltdl.h" + pkgconfig # for the pkg-config command + selinux-policy + selinux-policy-devel + sqlite-devel # for "sqlite3.h" + systemd-devel # for "sd-journal.h" and libraries + tar # older versions of dev-tools do not have tar + git # required for containerd and runc clone + cmake # tini build + vim-common # tini build + ) + + case "$from" in + *clefos*) + extraBuildTags+=' seccomp' + runcBuildTags="seccomp selinux" + ;; + *opensuse*) + packages=( "${packages[@]/libseccomp-devel}" ) + runcBuildTags="selinux" + ;; + *) + echo No appropriate or supported image available. + exit 1 + ;; + esac + + case "$from" in + *clefos*) + # Same RHBZ fix needed on all yum lines + echo "RUN touch /var/lib/rpm/* && ${installer} install -y ${packages[*]}" >> "$version/Dockerfile" + ;; + *opensuse*) + packages=( "${packages[@]/btrfs-progs-devel/libbtrfs-devel}" ) + packages=( "${packages[@]/pkgconfig/pkg-config}" ) + packages=( "${packages[@]/vim-common/vim}" ) + + packages+=( systemd-rpm-macros ) # for use of >= opensuse:13.* + + # use zypper + echo "RUN zypper --non-interactive install ${packages[*]}" >> "$version/Dockerfile" + ;; + *) + echo No appropriate or supported image available. + exit 1 + ;; + esac + + echo >> "$version/Dockerfile" + + awk '$1 == "ENV" && $2 == "GO_VERSION" { print; exit }' ../../../../Dockerfile.s390x >> "$version/Dockerfile" + echo 'RUN curl -fsSL "https://golang.org/dl/go${GO_VERSION}.linux-s390x.tar.gz" | tar xzC /usr/local' >> "$version/Dockerfile" + echo 'ENV PATH $PATH:/usr/local/go/bin' >> "$version/Dockerfile" + + echo >> "$version/Dockerfile" + + echo 'ENV AUTO_GOPATH 1' >> "$version/Dockerfile" + + echo >> "$version/Dockerfile" + + # print build tags in alphabetical order + buildTags=$( echo "selinux $extraBuildTags" | xargs -n1 | sort -n | tr '\n' ' ' | sed -e 's/[[:space:]]*$//' ) + + echo "ENV DOCKER_BUILDTAGS $buildTags" >> "$version/Dockerfile" + echo "ENV RUNC_BUILDTAGS $runcBuildTags" >> "$version/Dockerfile" + # TODO: Investigate why "s390x-linux-gnu-gcc" is required + echo "RUN ln -s /usr/bin/gcc /usr/bin/s390x-linux-gnu-gcc" >> "$version/Dockerfile" +done diff --git a/contrib/builder/rpm/s390x/opensuse-tumbleweed-1/Dockerfile b/contrib/builder/rpm/s390x/opensuse-tumbleweed-1/Dockerfile new file mode 100644 index 0000000000..de55b1f987 --- /dev/null +++ b/contrib/builder/rpm/s390x/opensuse-tumbleweed-1/Dockerfile @@ -0,0 +1,20 @@ +# +# THIS FILE IS AUTOGENERATED; SEE "contrib/builder/rpm/s390x/generate.sh"! +# + +FROM opensuse/s390x:tumbleweed + + +RUN zypper ar https://download.opensuse.org/ports/zsystems/tumbleweed/repo/oss/ tumbleweed +RUN zypper --non-interactive install ca-certificates* curl gzip rpm-build +RUN zypper --non-interactive install libbtrfs-devel device-mapper-devel glibc-static libselinux-devel libtool-ltdl-devel pkg-config selinux-policy selinux-policy-devel sqlite-devel systemd-devel tar git cmake vim systemd-rpm-macros + +ENV GO_VERSION 1.8.1 +RUN curl -fsSL "https://golang.org/dl/go${GO_VERSION}.linux-s390x.tar.gz" | tar xzC /usr/local +ENV PATH $PATH:/usr/local/go/bin + +ENV AUTO_GOPATH 1 + +ENV DOCKER_BUILDTAGS pkcs11 selinux +ENV RUNC_BUILDTAGS selinux +RUN ln -s /usr/bin/gcc /usr/bin/s390x-linux-gnu-gcc