From 11f358cafab2da28692fdaa837dfbcc3cc163736 Mon Sep 17 00:00:00 2001 From: Joseph Hunkeler Date: Thu, 31 Jan 2019 14:12:13 -0500 Subject: Refactor all --- etc/pkgs/001-gcc.sh | 95 ---------------------------- etc/pkgs/001-openssl.sh | 73 +++++++++++++++++++++ etc/pkgs/002-binutils.sh | 26 -------- etc/pkgs/002-python.sh | 132 ++++++++++++++++++++++++++++++++++++++ etc/pkgs/003-openssl.sh | 73 --------------------- etc/pkgs/004-python.sh | 133 --------------------------------------- etc/tasks/001-packages.sh | 8 --- etc/tasks/002-python-packages.sh | 7 --- etc/tasks/999-clean.sh | 12 +--- 9 files changed, 208 insertions(+), 351 deletions(-) delete mode 100755 etc/pkgs/001-gcc.sh create mode 100755 etc/pkgs/001-openssl.sh delete mode 100755 etc/pkgs/002-binutils.sh create mode 100755 etc/pkgs/002-python.sh delete mode 100755 etc/pkgs/003-openssl.sh delete mode 100755 etc/pkgs/004-python.sh (limited to 'etc') 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/001-openssl.sh b/etc/pkgs/001-openssl.sh new file mode 100755 index 0000000..fe7aad8 --- /dev/null +++ b/etc/pkgs/001-openssl.sh @@ -0,0 +1,73 @@ +#!/bin/bash +set -x + +name="openssl" +version="1.1.0j" + +tarball="${name}-${version}.tar.gz" +dest="${tarball%%.tar.gz}" +url="https://www.openssl.org/source/${tarball}" +prefix="${TOOLCHAIN}" + + +function pre() +{ + curl -LO "${url}" + tar xf "${tarball}" +} + + +function get_system_cacert() { + local paths=( + /etc/ssl/cert.pem + /etc/ssl/cacert.pem + /etc/ssl/certs/cacert.pem + /etc/ssl/certs/ca-bundle.crt + ) + for bundle in "${paths[@]}" + do + if [[ -f ${bundle} ]]; then + echo "${bundle}" + break + fi + done +} + + +function build() +{ + pre + pushd "${dest}" + export PATH="${prefix}/bin:${PATH}" + export LDFLAGS="-Wl,-rpath=${prefix}/lib" + export KERNEL_BITS=64 + target="linux-x86_64" + + ./Configure \ + --prefix="${prefix}" \ + --openssldir="ssl" \ + --libdir="lib" \ + ${LDFLAGS} \ + ${target} \ + enable-ec_nistp_64_gcc_128 \ + zlib-dynamic \ + shared \ + no-ssl3-method + make -j${_maxjobs} + make install MANDIR="${prefix}/share/man" MANSUFFIX=ssl + popd + post +} + +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." +} + +# Main +build 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/002-python.sh b/etc/pkgs/002-python.sh new file mode 100755 index 0000000..36cebc6 --- /dev/null +++ b/etc/pkgs/002-python.sh @@ -0,0 +1,132 @@ +#!/bin/bash +set -x + +python_version="${PYTHON_VERSION}" +python_basever="${python_version%.*}" + +if [[ ! ${python_version} || ! ${python_basever} ]]; then + echo "Need a python version..." + exit 1 +fi + +python_base_url="https://www.python.org/ftp/python" +python_tarball="Python-${python_version}.tgz" +python_source="${python_tarball%%.tgz}" +python_url="${python_base_url}/${python_version}/${python_tarball}" +prefix="${TOOLCHAIN}" + +dep_table=( + "bzlib.h libbz2.so" + "expat.h libexpat.so" + "ffi.h libffi.so" + "gdbm.h libgdbm.so" + "lzma.h liblzma.so" + "ncurses.h libncurses.so" + "nislib.h libnsl.so" + "readline.h libreadline.so" + "ssl.h libssl.so" + "sqlite3.h libsqlite3.so" + "tcl.h libtcl.so" + "tk.h libtk.so" + "zlib.h libz.so" +) + + +function depcheck() +{ + dep_count=0 + dep_total="${#dep_table[@]}" + + set +x + for _record in "${dep_table[@]}" + do + unset record + read -ra record <<< $_record + + header=$(find /usr/include /usr/lib{,64} -regex ".*\/${record[0]}" 2>/dev/null | head -n 1 || true) + if [[ -n $header ]]; then + dep_count=$((dep_count+1)) + else + echo "Missing header: ${record[0]}" + fi + lib=$(find /usr/lib{,64} -regex ".*\/${record[1]}" 2>/dev/null | head -n 1 || true) + if [[ -n "$lib" ]]; then + dep_count=$((dep_count+1)) + else + echo "Missing library: ${record[1]}" + fi + done + set -x + + if [[ ${dep_count} != $(( (dep_total * 2) )) ]]; then + echo 'Missing dependencies...' + exit 1 + fi +} + + +function pre() +{ + depcheck + + if [[ ! -f ${python_tarball} ]]; then + curl -LO "${python_url}" + fi + + if [[ -d ${python_source} ]]; then + rm -rf "${python_source}" + fi + + tar xf "${python_tarball}" +} + + +function build() +{ + pre + export CFLAGS="-I${prefix}/include" + export LDFLAGS="-L${prefix}/lib -Wl,-rpath=${prefix}/lib" + pushd "${python_source}" + #--enable-optimizations \ + ./configure \ + --prefix="${prefix}" \ + --enable-ipv6 \ + --enable-loadable-sqlite-extensions \ + --enable-profiling \ + --enable-shared \ + --with-dbmliborder=gdbm:ndbm \ + --with-pymalloc \ + --with-system-expat + make -j${_maxjobs} + make install + popd + post +} + + +function post() +{ + export PATH=$prefix/bin:$PATH + ln -sf python3 "${prefix}"/bin/python + ln -sf python3-config "${prefix}"/bin/python-config + ln -sf idle3 "${prefix}"/bin/idle + ln -sf pydoc3 "${prefix}"/bin/pydoc + ln -sf pip3 "${prefix}"/bin/pip + ln -sf python${python_basever}.1 "${prefix}"/share/man/man1/python.1 + + echo '---' + python --version + python -c "import sys; from pprint import pprint; pprint(sys.path)" + echo '---' + ldd $(which python) + echo '---' + + rm -rf $HOME/.config/pip + rm -rf "${python_tarball}" + rm -rf "${python_source}" + echo "All done." +} + + +# Main +build diff --git a/etc/pkgs/003-openssl.sh b/etc/pkgs/003-openssl.sh deleted file mode 100755 index c5aaabe..0000000 --- a/etc/pkgs/003-openssl.sh +++ /dev/null @@ -1,73 +0,0 @@ -#!/bin/bash -set -e -set -x - -name="openssl" -version="1.1.0j" - -tarball="${name}-${version}.tar.gz" -dest="${tarball%%.tar.gz}" -url="https://www.openssl.org/source/${tarball}" -prefix="${TOOLCHAIN}" - - -function pre() -{ - curl -LO "${url}" - tar xf "${tarball}" -} - - -function get_system_cacert() { - local paths=( - /etc/ssl/cert.pem - /etc/ssl/cacert.pem - /etc/ssl/certs/cacert.pem - /etc/ssl/certs/ca-bundle.crt - ) - for bundle in "${paths[@]}" - do - if [[ -f ${bundle} ]]; then - echo "${bundle}" - break - fi - done -} - - -function build() -{ - pre - pushd "${dest}" - export PATH="${prefix}/bin:${PATH}" - export LDFLAGS="-Wl,-rpath=${prefix}/lib" - export KERNEL_BITS=64 - target="linux-x86_64" - - ./Configure \ - --prefix="${prefix}" \ - --openssldir="ssl" \ - --libdir="lib" \ - ${LDFLAGS} \ - ${target} \ - enable-ec_nistp_64_gcc_128 \ - zlib-dynamic \ - shared \ - no-ssl3-method - make -j${_maxjobs} - make install MANDIR="${prefix}/share/man" MANSUFFIX=ssl - popd - post -} - -function post() -{ - bundle=$(get_system_cacert) - install -D -m644 "${bundle}" "${prefix}/ssl/cert.pem" - rm -rf "${dest}" - rm -rf "${tarball}" - echo "All done." -} - -# Main -build diff --git a/etc/pkgs/004-python.sh b/etc/pkgs/004-python.sh deleted file mode 100755 index d7db12f..0000000 --- a/etc/pkgs/004-python.sh +++ /dev/null @@ -1,133 +0,0 @@ -#!/bin/bash -set -e -set -x - -python_version="${PYTHON_VERSION}" -python_basever="${python_version%.*}" - -if [[ ! ${python_version} || ! ${python_basever} ]]; then - echo "Need a python version..." - exit 1 -fi - -python_base_url="https://www.python.org/ftp/python" -python_tarball="Python-${python_version}.tgz" -python_source="${python_tarball%%.tgz}" -python_url="${python_base_url}/${python_version}/${python_tarball}" -prefix="${TOOLCHAIN}" - -dep_table=( - "bzlib.h libbz2.so" - "expat.h libexpat.so" - "ffi.h libffi.so" - "gdbm.h libgdbm.so" - "lzma.h liblzma.so" - "ncurses.h libncurses.so" - "nislib.h libnsl.so" - "readline.h libreadline.so" - "ssl.h libssl.so" - "sqlite3.h libsqlite3.so" - "tcl.h libtcl.so" - "tk.h libtk.so" - "zlib.h libz.so" -) - - -function depcheck() -{ - dep_count=0 - dep_total="${#dep_table[@]}" - - set +x - for _record in "${dep_table[@]}" - do - unset record - read -ra record <<< $_record - - header=$(find /usr/include /usr/lib{,64} -regex ".*\/${record[0]}" 2>/dev/null | head -n 1 || true) - if [[ -n $header ]]; then - dep_count=$((dep_count+1)) - else - echo "Missing header: ${record[0]}" - fi - lib=$(find /usr/lib{,64} -regex ".*\/${record[1]}" 2>/dev/null | head -n 1 || true) - if [[ -n "$lib" ]]; then - dep_count=$((dep_count+1)) - else - echo "Missing library: ${record[1]}" - fi - done - set -x - - if [[ ${dep_count} != $(( (dep_total * 2) )) ]]; then - echo 'Missing dependencies...' - exit 1 - fi -} - - -function pre() -{ - depcheck - - if [[ ! -f ${python_tarball} ]]; then - curl -LO "${python_url}" - fi - - if [[ -d ${python_source} ]]; then - rm -rf "${python_source}" - fi - - tar xf "${python_tarball}" -} - - -function build() -{ - pre - export CFLAGS="-I${prefix}/include" - export LDFLAGS="-L${prefix}/lib -Wl,-rpath=${prefix}/lib" - pushd "${python_source}" - #--enable-optimizations \ - ./configure \ - --prefix="${prefix}" \ - --enable-ipv6 \ - --enable-loadable-sqlite-extensions \ - --enable-profiling \ - --enable-shared \ - --with-dbmliborder=gdbm:ndbm \ - --with-pymalloc \ - --with-system-expat - make -j4 - make install - popd - post -} - - -function post() -{ - export PATH=$prefix/bin:$PATH - ln -sf python3 "${prefix}"/bin/python - ln -sf python3-config "${prefix}"/bin/python-config - ln -sf idle3 "${prefix}"/bin/idle - ln -sf pydoc3 "${prefix}"/bin/pydoc - ln -sf pip3 "${prefix}"/bin/pip - ln -sf python${python_basever}.1 "${prefix}"/share/man/man1/python.1 - - echo '---' - python --version - python -c "import sys; from pprint import pprint; pprint(sys.path)" - echo '---' - ldd $(which python) - echo '---' - - rm -rf $HOME/.config/pip - rm -rf "${python_tarball}" - rm -rf "${python_source}" - echo "All done." -} - - -# Main -build 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}" -- cgit