diff options
-rw-r--r-- | Dockerfile | 53 | ||||
-rwxr-xr-x | build.sh | 2 | ||||
-rwxr-xr-x | etc/pkgs/001-gcc.sh | 95 | ||||
-rwxr-xr-x | etc/pkgs/001-openssl.sh (renamed from etc/pkgs/003-openssl.sh) | 2 | ||||
-rwxr-xr-x | etc/pkgs/002-binutils.sh | 26 | ||||
-rwxr-xr-x | etc/pkgs/002-python.sh (renamed from etc/pkgs/004-python.sh) | 3 | ||||
-rwxr-xr-x | etc/tasks/001-packages.sh | 8 | ||||
-rwxr-xr-x | etc/tasks/002-python-packages.sh | 7 | ||||
-rwxr-xr-x | etc/tasks/999-clean.sh | 12 | ||||
-rwxr-xr-x | scripts/build.sh | 11 |
10 files changed, 25 insertions, 194 deletions
@@ -1,71 +1,36 @@ -FROM centos:6.9 +FROM astroconda/base:1.0.0 LABEL maintainer="jhunk@stsci.edu" \ vendor="Space Telescope Science Institute" -ENV TOOLCHAIN="/opt/toolchain" -ENV TOOLCHAIN_BIN="${TOOLCHAIN}/bin" -ENV TOOLCHAIN_LIB="${TOOLCHAIN}/lib" -ENV TOOLCHAIN_INCLUDE="${TOOLCHAIN}/include" -ENV TOOLCHAIN_DATA="${TOOLCHAIN}/share" -ENV TOOLCHAIN_SYSCONF="${TOOLCHAIN}/etc" -ENV TOOLCHAIN_MAN="${TOOLCHAIN_DATA}/man" -ENV TOOLCHAIN_PKGCONFIG="${TOOLCHAIN_LIB}/pkgconfig" -ENV TOOLCHAIN_BUILD="/opt/buildroot" -ENV PATH="${TOOLCHAIN_BIN}:${PATH}" - ARG PYTHON_VERSION=${PYTHON_VERSION:-3.7.1} -ARG USER_ACCT=${USER_ACCT:-developer} -ARG USER_HOME=/home/${USER_ACCT} -ARG USER_UID=${USER_UID:-1000} -ARG USER_GID=${USER_GID:-1000} + +USER root RUN yum install -y epel-release \ && yum install -y \ - gcc \ - gcc-c++ \ - gcc-gfortran \ - git \ - glibc \ - libuuid-devel \ - make \ - perl \ - pkgconfig \ - expat-devel \ bzip2-devel \ + expat-devel \ gdbm-devel \ + git \ libffi-devel \ + libuuid-devel \ ncurses-devel \ openssl-devel \ readline-devel \ sqlite-devel \ - sudo \ tcl-devel \ tk-devel \ - wget \ - which \ xz-devel \ zlib-devel \ - && yum clean all \ - && groupadd -g ${USER_GID} ${USER_ACCT} \ - && useradd -u ${USER_UID} -g ${USER_ACCT} \ - -m -d ${USER_HOME} -s /bin/bash ${USER_ACCT} \ - && echo "${USER_ACCT}:${USER_ACCT}" | chpasswd \ - && echo "${USER_ACCT} ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers \ - && echo export PATH="${TOOLCHAIN_BIN}:\${PATH}" > /etc/profile.d/toolchain.sh \ - && echo export MANPATH="${TOOLCHAIN_MAN}:\${MANPATH}" >> /etc/profile.d/toolchain.sh \ - && echo export PKG_CONFIG_PATH="${TOOLCHAIN_PKGCONFIG}:\${PKG_CONFIG_PATH}" >> /etc/profile.d/toolchain.sh + && yum clean all WORKDIR "${TOOLCHAIN_BUILD}" + COPY scripts/ ${TOOLCHAIN_BUILD}/bin COPY etc/ ${TOOLCHAIN_BUILD}/etc - -RUN mkdir -p "${TOOLCHAIN}" \ - && chown -R ${USER_ACCT}: \ - ${TOOLCHAIN} \ - ${TOOLCHAIN_BUILD} +RUN chown -R ${USER_ACCT}: "${TOOLCHAIN_BUILD}" USER "${USER_ACCT}" - RUN bin/build.sh \ && sudo rm -rf "${TOOLCHAIN_BUILD}" @@ -1,5 +1,5 @@ #!/bin/bash -PROJECT=python +PROJECT=astroconda/python PYTHON_VERSION="${1}" if [[ -z ${PYTHON_VERSION} ]]; then echo "Need a fully qualified Python version to build. [e.g. 3.7.1]" diff --git a/etc/pkgs/001-gcc.sh b/etc/pkgs/001-gcc.sh deleted file mode 100755 index 21065cd..0000000 --- a/etc/pkgs/001-gcc.sh +++ /dev/null @@ -1,95 +0,0 @@ -#!/bin/bash -e -set -x -name=gcc -version=8.2.0 -url=http://mirrors-usa.go-parts.com/gcc/releases/${name}-${version}/${name}-${version}.tar.gz -src=${name}-${version} -bld=${src}_build - -version_isl=0.20 -url_isl=http://isl.gforge.inria.fr/isl-${version_isl}.tar.bz2 - -version_cloog=0.18.4 -url_cloog="http://www.bastoul.net/cloog/pages/download/count.php3?url=./cloog-${version_cloog}.tar.gz" - -# Ensure 64-bit libraries go into /lib -sudo ln -sf ${TOOLCHAIN_LIB} ${TOOLCHAIN}/lib64 - -curl -LO ${url} -tar xf ${src}.tar.gz - -mkdir -p ${bld} -pushd ${src} - unset CFLAGS - unset LDFLAGS - - # Disable fixincludes - sed -i 's@\./fixinc\.sh@-c true@' gcc/Makefile.in - - # Use /lib, not /lib64 - #sed -i '/m64=/s/lib64/lib/' gcc/config/i386/t-linux64 - #sed -i 's/lib64/lib/g' gcc/config.gcc - #sed -i "/ac_cpp=/s/\$CPPFLAGS/\$CPPFLAGS -O2/" {libiberty,gcc}/configure - - # Download MPFR and friends - ./contrib/download_prerequisites - - curl -LO ${url_isl} - tar xf $(basename ${url_isl}) - ln -s isl-${version_isl} isl - - curl -LO ${url_cloog} - tar xf $(basename ${url_cloog}) - ln -s cloog-${version_cloog} cloog -popd - -pushd ${bld} - # Beware: x86_64-only toolchain (multilib disabled) - ../${src}/configure \ - --prefix=${TOOLCHAIN} \ - --libdir=${TOOLCHAIN_LIB} \ - --libexecdir=${TOOLCHAIN_LIB} \ - --disable-static \ - --disable-multilib \ - --disable-werror \ - --disable-libunwind-exceptions \ - --disable-libstdcxx-pch \ - --disable-libssp \ - --with-system-zlib \ - --with-isl \ - --with-linker-hash-style=gnu \ - --with-tune=generic \ - --enable-bootstrap \ - --enable-languages=c,c++,fortran,lto,go \ - --enable-shared \ - --enable-threads=posix \ - --enable-libmpx \ - --enable-__cxa_atexit \ - --enable-clocale=gnu \ - --enable-gnu-unique-object \ - --enable-linker-build-id \ - --enable-lto \ - --enable-plugin \ - --enable-install-libiberty \ - --enable-gnu-indirect-function \ - --enable-default-pie \ - --enable-default-ssp \ - --enable-cet=auto \ - --enable-checking=release - - make -j${_maxjobs} - make install-strip - - # Binutils build cannot use this static archive - rm -f "${TOOLCHAIN_LIB}/libiberty.a" - - # Prevent ldconfig from picking up gdb python scripts - autoload="${TOOLCHAIN_DATA}/gdb/auto-load${TOOLCHAIN_LIB}" - mkdir -p "${autoload}" - mv -v "${TOOLCHAIN_LIB}"/*gdb.py "${autoload}" - - # Enforce global linkage to toolchain - /bin/echo "${TOOLCHAIN_LIB}" > gcc.conf - sudo cp -a gcc.conf /etc/ld.so.conf.d - sudo ldconfig -popd diff --git a/etc/pkgs/003-openssl.sh b/etc/pkgs/001-openssl.sh index c5aaabe..fe7aad8 100755 --- a/etc/pkgs/003-openssl.sh +++ b/etc/pkgs/001-openssl.sh @@ -1,5 +1,4 @@ #!/bin/bash -set -e set -x name="openssl" @@ -64,6 +63,7 @@ function post() { bundle=$(get_system_cacert) install -D -m644 "${bundle}" "${prefix}/ssl/cert.pem" + rm -rf "${prefix}/share/doc/openssl/html" rm -rf "${dest}" rm -rf "${tarball}" echo "All done." diff --git a/etc/pkgs/002-binutils.sh b/etc/pkgs/002-binutils.sh deleted file mode 100755 index 83423be..0000000 --- a/etc/pkgs/002-binutils.sh +++ /dev/null @@ -1,26 +0,0 @@ -#!/bin/bash -x -name=binutils -version=2.31.1 -url=https://ftp.gnu.org/gnu/binutils/${name}-${version}.tar.gz - -curl -LO ${url} -tar xf ${name}-${version}.tar.gz - -mkdir -p binutils -pushd binutils - ../${name}-${version}/configure \ - --prefix=${TOOLCHAIN} \ - --target=x86_64-pc-linux-gnu \ - --enable-shared \ - --enable-lto \ - --enable-gold \ - --enable-ld=default \ - --enable-plugins \ - --enable-threads \ - --disable-static \ - --disable-multilib \ - --with-sysroot=/ \ - --with-tune=generic - make -j4 - make install-strip -popd diff --git a/etc/pkgs/004-python.sh b/etc/pkgs/002-python.sh index d7db12f..36cebc6 100755 --- a/etc/pkgs/004-python.sh +++ b/etc/pkgs/002-python.sh @@ -1,5 +1,4 @@ #!/bin/bash -set -e set -x python_version="${PYTHON_VERSION}" @@ -98,7 +97,7 @@ function build() --with-dbmliborder=gdbm:ndbm \ --with-pymalloc \ --with-system-expat - make -j4 + make -j${_maxjobs} make install popd post diff --git a/etc/tasks/001-packages.sh b/etc/tasks/001-packages.sh index fabad6e..5d20ee7 100755 --- a/etc/tasks/001-packages.sh +++ b/etc/tasks/001-packages.sh @@ -1,18 +1,10 @@ #!/bin/bash -set -e set -x -prefix="${TOOLCHAIN}" sysconfdir="${TOOLCHAIN_BUILD}/etc" reqdir=${sysconfdir}/pkgs blddir=builds -export PATH="${prefix}/bin:${PATH}" -export CFLAGS="-I${prefix}/include" -export LDFLAGS="-L${prefix}/lib -Wl,-rpath=${prefix}/lib" -export PKG_CONFIG_PATH="${prefix}/lib/pkgconfig" -export PREFIX="${prefix}" - function pre() { if [[ ! -d ${reqdir} ]]; then diff --git a/etc/tasks/002-python-packages.sh b/etc/tasks/002-python-packages.sh index 9218a8e..bcd0b6f 100755 --- a/etc/tasks/002-python-packages.sh +++ b/etc/tasks/002-python-packages.sh @@ -1,16 +1,9 @@ #!/bin/bash set -x -# Uses GLOBAL environment variable: PYTHON_VERSION defined by `docker build` argument -prefix="${TOOLCHAIN}" sysconfdir="${TOOLCHAIN_BUILD}/etc" reqdir=${sysconfdir}/pip -export PATH="${prefix}/bin:${PATH}" -export PKG_CONFIG_PATH="${prefix}/lib/pkgconfig" -export CFLAGS="-I${prefix}/include" -export LDFLAGS="-L${prefix}/lib -Wl,-rpath=${prefix}/lib" - function pre() { if [[ ! -d ${reqdir} ]]; then diff --git a/etc/tasks/999-clean.sh b/etc/tasks/999-clean.sh index c791ec5..e4e8d13 100755 --- a/etc/tasks/999-clean.sh +++ b/etc/tasks/999-clean.sh @@ -4,22 +4,16 @@ if [[ ! -f /.dockerenv ]]; then exit 1 fi -packages=( - gcc - gcc-c++ - gcc-gfortran -) -sudo yum remove -y "${packages[@]}" sudo yum clean all -# Remove all static libraries -sudo find "${TOOLCHAIN_LIB}" -name '*.a' -delete - sudo rm -rf "${HOME}/.astropy" sudo rm -rf "${HOME}"/* sudo rm -rf /tmp/* sudo rm -rf /var/cache/yum +# Ensure new shared libraries ingested +sudo ldconfig + for logfile in /var/log/* do [[ -f ${logfile} ]] && sudo truncate --size=0 "${logfile}" diff --git a/scripts/build.sh b/scripts/build.sh index f7c7a2d..63f0a00 100755 --- a/scripts/build.sh +++ b/scripts/build.sh @@ -1,13 +1,22 @@ -#!/bin/bash -e +#!/bin/bash -x +prefix="${TOOLCHAIN}" taskdir=${TOOLCHAIN_BUILD}/etc/tasks + export _maxjobs=$(getconf _NPROCESSORS_ONLN) +export PATH="${prefix}/bin:${PATH}" +export CFLAGS="-I${prefix}/include" +export LDFLAGS="-L${prefix}/lib -Wl,-rpath=${prefix}/lib" +export PKG_CONFIG_PATH="${prefix}/lib/pkgconfig" +export PREFIX="${prefix}" if [[ ! -d ${taskdir} ]]; then echo "No tasks. ${taskdir} does not exist." exit 1 fi +printenv | sort + for task in ${taskdir}/* do # Check for execution permission |