summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoseph Hunkeler <jhunkeler@gmail.com>2019-01-31 14:12:13 -0500
committerJoseph Hunkeler <jhunkeler@gmail.com>2019-01-31 14:12:13 -0500
commit11f358cafab2da28692fdaa837dfbcc3cc163736 (patch)
tree9ed443d35c71e4c27a2803733c41d3e8a2322a73
parent73a53c48901e120a06d221c8cb4f02076e3b9888 (diff)
downloaddocker-python-11f358cafab2da28692fdaa837dfbcc3cc163736.tar.gz
Refactor all
-rw-r--r--Dockerfile53
-rwxr-xr-xbuild.sh2
-rwxr-xr-xetc/pkgs/001-gcc.sh95
-rwxr-xr-xetc/pkgs/001-openssl.sh (renamed from etc/pkgs/003-openssl.sh)2
-rwxr-xr-xetc/pkgs/002-binutils.sh26
-rwxr-xr-xetc/pkgs/002-python.sh (renamed from etc/pkgs/004-python.sh)3
-rwxr-xr-xetc/tasks/001-packages.sh8
-rwxr-xr-xetc/tasks/002-python-packages.sh7
-rwxr-xr-xetc/tasks/999-clean.sh12
-rwxr-xr-xscripts/build.sh11
10 files changed, 25 insertions, 194 deletions
diff --git a/Dockerfile b/Dockerfile
index 82214fd..d03e3e9 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -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}"
diff --git a/build.sh b/build.sh
index 2f1fa49..8d9848a 100755
--- a/build.sh
+++ b/build.sh
@@ -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