diff --git a/Makefile b/Makefile index dace7f1b..c82ba823 100644 --- a/Makefile +++ b/Makefile @@ -8,6 +8,11 @@ SHELL:=bash OWNER:=jupyter # need to list these manually because there's a dependency tree +ARCH:=$(shell uname -m) + +ifeq ($(ARCH),ppc64le) +ALL_STACKS:=base-notebook +else ALL_STACKS:=base-notebook \ minimal-notebook \ r-notebook \ @@ -16,6 +21,7 @@ ALL_STACKS:=base-notebook \ datascience-notebook \ pyspark-notebook \ all-spark-notebook +endif ALL_IMAGES:=$(ALL_STACKS) @@ -31,12 +37,22 @@ help: @echo @grep -E '^[a-zA-Z0-9_%/-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}' +arch_patch/%: ## apply hardware architecture specific patches to the Dockerfile + if [ -e ./$(notdir $@)/Dockerfile.orig ]; then \ + cp -f ./$(notdir $@)/Dockerfile.orig ./$(notdir $@)/Dockerfile;\ + else\ + cp -f ./$(notdir $@)/Dockerfile ./$(notdir $@)/Dockerfile.orig;\ + fi;\ + if [ -e ./$(notdir $@)/Dockerfile.$(ARCH).patch ]; then \ + patch -f ./$(notdir $@)/Dockerfile ./$(notdir $@)/Dockerfile.$(ARCH).patch; \ + fi + build/%: DARGS?= build/%: ## build the latest image for a stack docker build $(DARGS) --rm --force-rm -t $(OWNER)/$(notdir $@):latest ./$(notdir $@) -build-all: $(ALL_IMAGES:%=build/%) ## build all stacks -build-test-all: $(foreach I,$(ALL_IMAGES),build/$(I) test/$(I) ) ## build and test all stacks +build-all: $(foreach I,$(ALL_IMAGES),arch_patch/$(I) build/$(I) ) ## build all stacks +build-test-all: $(foreach I,$(ALL_IMAGES),arch_patch/$(I) build/$(I) test/$(I) ) ## build and test all stacks dev/%: ARGS?= dev/%: DARGS?= diff --git a/base-notebook/Dockerfile.ppc64le b/base-notebook/Dockerfile.ppc64le index 1dd208c9..940483f6 100644 --- a/base-notebook/Dockerfile.ppc64le +++ b/base-notebook/Dockerfile.ppc64le @@ -12,41 +12,30 @@ USER root # Install all OS dependencies for notebook server that starts but lacks all # features (e.g., download as all possible file formats) ENV DEBIAN_FRONTEND noninteractive -RUN apt-get update && apt-get install -yq --no-install-recommends \ - wget \ - curl \ - bzip2 \ +RUN apt-get update && apt-get -yq dist-upgrade \ + && apt-get install -yq --no-install-recommends \ + build-essential \ + bzip2 \ ca-certificates \ - sudo \ - locales \ - git \ - bison \ - byacc \ - cpp \ - csh \ - make \ cmake \ - zip \ - build-essential \ - ksh \ - binutils \ + git \ + locales \ + sudo \ + wget \ && apt-get clean && \ rm -rf /var/lib/apt/lists/* -RUN echo "LANGUAGE=en_US.UTF-8" >> /etc/environment -RUN echo "LC_ALL=en_US.UTF-8" >> /etc/environment -RUN echo "LC_TYPE=en_US.UTF-8" >> /etc/environment -RUN locale-gen en_US en_US.UTF-8 hu_HU hu_HU.UTF-8 -RUN dpkg-reconfigure locales +RUN echo "LANGUAGE=en_US.UTF-8" >> /etc/default/locale +RUN echo "LC_ALL=en_US.UTF-8" >> /etc/default/locale +RUN echo "LC_TYPE=en_US.UTF-8" >> /etc/default/locale +RUN locale-gen en_US en_US.UTF-8 - -#build and install Tini +#build and install Tini for ppc64le RUN wget https://github.com/krallin/tini/archive/v0.10.0.tar.gz && \ tar zxvf v0.10.0.tar.gz && \ rm -rf v0.10.0.tar.gz WORKDIR tini-0.10.0/ RUN cmake . && make install -RUN ls -al RUN mv ./tini /usr/local/bin/tini && \ chmod +x /usr/local/bin/tini WORKDIR .. @@ -77,42 +66,29 @@ RUN mkdir /home/$NB_USER/work && \ # Install conda as jovyan RUN cd /tmp && \ mkdir -p $CONDA_DIR && \ - wget https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-ppc64le.sh && \ - /bin/bash Miniconda3-latest-Linux-ppc64le.sh -f -b -p $CONDA_DIR && \ - rm Miniconda3-latest-Linux-ppc64le.sh && \ - $CONDA_DIR/bin/conda install --quiet --yes conda && \ + wget https://repo.continuum.io/miniconda/Miniconda3-4.2.12-Linux-ppc64le.sh && \ + /bin/bash Miniconda3-4.2.12-Linux-ppc64le.sh -f -b -p $CONDA_DIR && \ + rm -rf Miniconda3-4.2.12-Linux-ppc64le.sh && \ + $CONDA_DIR/bin/conda install --quiet --yes conda=4.2.12 && \ $CONDA_DIR/bin/conda config --system --add channels conda-forge && \ -# no such option auto_update_conda on ppc64le -# $CONDA_DIR/bin/conda config --system --set auto_update_conda false && \ + $CONDA_DIR/bin/conda config --system --set auto_update_conda false && \ conda clean -tipsy # Temporary workaround for https://github.com/jupyter/docker-stacks/issues/210 # Stick with jpeg 8 to avoid problems with R packages RUN echo "jpeg 8*" >> /opt/conda/conda-meta/pinned -RUN conda install conda-build && \ - conda update conda && \ - conda update conda-build && \ - conda install python=3.5 - # Install Jupyter notebook as jovyan -##---------------------------------------------- -RUN pip install --upgrade pip -RUN pip install notebook - -###----------------------------------------------------------------- -# Install JupyterHub to get the jupyterhub-singleuser startup script -RUN pip --no-cache-dir install 'jupyterhub==0.5' - -# Show the list of installed packages -RUN conda list +RUN yes | pip install --upgrade pip +RUN yes | pip install --quiet --no-cache-dir \ + 'notebook==4.2.*' \ + jupyterhub==0.7 USER root EXPOSE 8888 WORKDIR /home/$NB_USER/work RUN echo "ALL ALL = (ALL) NOPASSWD: ALL" >> /etc/sudoers -RUN cat /etc/sudoers # Configure container startup ENTRYPOINT ["tini", "--"] @@ -122,8 +98,6 @@ CMD ["start-notebook.sh"] COPY start.sh /usr/local/bin/ COPY start-notebook.sh /usr/local/bin/ COPY start-singleuser.sh /usr/local/bin/ -RUN chmod 755 /usr/local/bin/start*.sh - COPY jupyter_notebook_config.py /home/$NB_USER/.jupyter/ RUN chown -R $NB_USER:users /home/$NB_USER/.jupyter diff --git a/base-notebook/Dockerfile.ppc64le.patch b/base-notebook/Dockerfile.ppc64le.patch new file mode 100644 index 00000000..9edebb55 --- /dev/null +++ b/base-notebook/Dockerfile.ppc64le.patch @@ -0,0 +1,103 @@ +--- Dockerfile 2016-12-07 14:36:13.998198003 -0500 ++++ Dockerfile.ppc64le 2016-12-07 14:35:24.928197537 -0500 +@@ -1,36 +1,44 @@ +-# Copyright (c) Jupyter Development Team. +-# Distributed under the terms of the Modified BSD License. ++# Copyright (c) IBM Corporation 2016 ++# Distributed under the terms of the Apache V2 License, ++# https://opensource.org/licenses/Apache-2.0 + +-# Debian Jessie image released 2016 May 03. +-FROM debian@sha256:32a225e412babcd54c0ea777846183c61003d125278882873fb2bc97f9057c51 ++# Ubuntu image ++FROM ppc64le/ubuntu:trusty + +-MAINTAINER Jupyter Project ++MAINTAINER Ilsiyar Gaynutdinov + + USER root + + # Install all OS dependencies for notebook server that starts but lacks all + # features (e.g., download as all possible file formats) + ENV DEBIAN_FRONTEND noninteractive +-RUN REPO=http://cdn-fastly.deb.debian.org \ +- && echo "deb $REPO/debian jessie main\ndeb $REPO/debian-security jessie/updates main" > /etc/apt/sources.list \ +- && apt-get update && apt-get -yq dist-upgrade \ ++RUN apt-get update && apt-get -yq dist-upgrade \ + && apt-get install -yq --no-install-recommends \ +- wget \ ++ build-essential \ + bzip2 \ + ca-certificates \ +- sudo \ ++ cmake \ ++ git \ + locales \ +- && apt-get clean \ +- && rm -rf /var/lib/apt/lists/* +- +-RUN echo "en_US.UTF-8 UTF-8" > /etc/locale.gen && \ +- locale-gen ++ sudo \ ++ wget \ ++ && apt-get clean && \ ++ rm -rf /var/lib/apt/lists/* + +-# Install Tini +-RUN wget --quiet https://github.com/krallin/tini/releases/download/v0.10.0/tini && \ +- echo "1361527f39190a7338a0b434bd8c88ff7233ce7b9a4876f3315c22fce7eca1b0 *tini" | sha256sum -c - && \ +- mv tini /usr/local/bin/tini && \ ++RUN echo "LANGUAGE=en_US.UTF-8" >> /etc/default/locale ++RUN echo "LC_ALL=en_US.UTF-8" >> /etc/default/locale ++RUN echo "LC_TYPE=en_US.UTF-8" >> /etc/default/locale ++RUN locale-gen en_US en_US.UTF-8 ++ ++#build and install Tini for ppc64le ++RUN wget https://github.com/krallin/tini/archive/v0.10.0.tar.gz && \ ++ tar zxvf v0.10.0.tar.gz && \ ++ rm -rf v0.10.0.tar.gz ++WORKDIR tini-0.10.0/ ++RUN cmake . && make install ++RUN mv ./tini /usr/local/bin/tini && \ + chmod +x /usr/local/bin/tini ++WORKDIR .. + + # Configure environment + ENV CONDA_DIR /opt/conda +@@ -58,11 +66,10 @@ + # Install conda as jovyan + RUN cd /tmp && \ + mkdir -p $CONDA_DIR && \ +- wget --quiet https://repo.continuum.io/miniconda/Miniconda3-4.1.11-Linux-x86_64.sh && \ +- echo "efd6a9362fc6b4085f599a881d20e57de628da8c1a898c08ec82874f3bad41bf *Miniconda3-4.1.11-Linux-x86_64.sh" | sha256sum -c - && \ +- /bin/bash Miniconda3-4.1.11-Linux-x86_64.sh -f -b -p $CONDA_DIR && \ +- rm Miniconda3-4.1.11-Linux-x86_64.sh && \ +- $CONDA_DIR/bin/conda install --quiet --yes conda==4.1.11 && \ ++ wget https://repo.continuum.io/miniconda/Miniconda3-4.2.12-Linux-ppc64le.sh && \ ++ /bin/bash Miniconda3-4.2.12-Linux-ppc64le.sh -f -b -p $CONDA_DIR && \ ++ rm -rf Miniconda3-4.2.12-Linux-ppc64le.sh && \ ++ $CONDA_DIR/bin/conda install --quiet --yes conda=4.2.12 && \ + $CONDA_DIR/bin/conda config --system --add channels conda-forge && \ + $CONDA_DIR/bin/conda config --system --set auto_update_conda false && \ + conda clean -tipsy +@@ -72,15 +79,16 @@ + RUN echo "jpeg 8*" >> /opt/conda/conda-meta/pinned + + # Install Jupyter notebook as jovyan +-RUN conda install --quiet --yes \ +- 'notebook=4.2*' \ +- jupyterhub=0.7 \ +- && conda clean -tipsy ++RUN yes | pip install --upgrade pip ++RUN yes | pip install --quiet --no-cache-dir \ ++ 'notebook==4.2.*' \ ++ jupyterhub==0.7 + + USER root + + EXPOSE 8888 + WORKDIR /home/$NB_USER/work ++RUN echo "ALL ALL = (ALL) NOPASSWD: ALL" >> /etc/sudoers + + # Configure container startup + ENTRYPOINT ["tini", "--"]