@@ -55,16 +55,16 @@ RUN dnf -y upgrade --refresh --nobest --skip-broken --nodocs --noplugins --setop
5555# upgrade first to avoid fixable vulnerabilities end
5656
5757# Install useful OS packages
58- RUN --mount=type=cache,target=/var/cache/dnf \
59- echo "Building for architecture: ${TARGETARCH}" && \
60- if [ "$TARGETARCH" = "s390x" ]; then \
61- PACKAGES="perl mesa-libGL skopeo gcc gcc-c++ make openssl-devel autoconf automake libtool cmake python3-devel pybind11-devel openblas-devel unixODBC-devel"; \
62- else \
63- PACKAGES=" perl mesa-libGL skopeo"; \
64- fi && \
65- echo "Installing: $PACKAGES" && \
66- dnf install -y $PACKAGES && \
67- dnf clean all && rm -rf /var/cache/yum
58+ COPY jupyter/utils utils/
59+ RUN --mount=type=cache,target=/var/cache/dnf /bin/bash <<'EOF'
60+ set -Eeuxo pipefail
61+ echo "Building for architecture: ${TARGETARCH}"
62+ if [ "$TARGETARCH" = "s390x" ]; then
63+ ./utils/install_with_retry.sh dnf-install perl mesa-libGL skopeo gcc gcc-c++ make openssl-devel autoconf automake libtool cmake python3-devel pybind11-devel openblas-devel unixODBC-devel
64+ else
65+ ./utils/install_with_retry.sh dnf-install perl mesa-libGL skopeo
66+ fi
67+ EOF
6868
6969RUN if [ "$TARGETARCH" = "s390x" ]; then \
7070 # Install Rust and set up environment
@@ -114,51 +114,58 @@ WORKDIR /tmp/build-wheels
114114
115115# Build pyarrow on ppc64le and s390x
116116RUN --mount=type=cache,target=/root/.cache/pip \
117- --mount=type=cache,target=/root/.cache/dnf \
118- if [ "$TARGETARCH" = "ppc64le" ] || [ "$TARGETARCH" = "s390x" ]; then \
119- # Install build dependencies (shared for pyarrow and onnx)
120- dnf install -y cmake make gcc-c++ pybind11-devel wget && \
121- dnf clean all && \
122- # Build and collect pyarrow wheel
123- git clone --depth 1 --branch "apache-arrow-17.0.0" https://github.com/apache/arrow.git && \
124- cd arrow/cpp && \
125- mkdir release && cd release && \
126- cmake -DCMAKE_BUILD_TYPE=Release \
127- -DCMAKE_INSTALL_PREFIX=/usr/local \
128- -DARROW_PYTHON=ON \
129- -DARROW_PARQUET=ON \
130- -DARROW_ORC=ON \
131- -DARROW_FILESYSTEM=ON \
132- -DARROW_JSON=ON \
133- -DARROW_CSV=ON \
134- -DARROW_DATASET=ON \
135- -DARROW_DEPENDENCY_SOURCE=BUNDLED \
136- -DARROW_WITH_LZ4=OFF \
137- -DARROW_WITH_ZSTD=OFF \
138- -DARROW_WITH_SNAPPY=OFF \
139- -DARROW_BUILD_TESTS=OFF \
140- -DARROW_BUILD_BENCHMARKS=OFF \
141- .. && \
142- make -j$(nproc) VERBOSE=1 && \
143- make install -j$(nproc) && \
144- cd ../../python && \
145- pip install --no-cache-dir -r requirements-build.txt && \
146- PYARROW_WITH_PARQUET=1 \
147- PYARROW_WITH_DATASET=1 \
148- PYARROW_WITH_FILESYSTEM=1 \
149- PYARROW_WITH_JSON=1 \
150- PYARROW_WITH_CSV=1 \
151- PYARROW_PARALLEL=$(nproc) \
152- python setup.py build_ext --build-type=release --bundle-arrow-cpp bdist_wheel && \
153- mkdir -p /tmp/wheels && \
154- cp dist/pyarrow-*.whl /tmp/wheels/ && \
155- chmod -R 777 /tmp/wheels && \
156- # Ensure wheels directory exists and has content
157- ls -la /tmp/wheels/; \
158- else \
159- # Create empty wheels directory for non-s390x
160- mkdir -p /tmp/wheels; \
161- fi
117+ --mount=type=cache,target=/root/.cache/dnf /bin/bash <<'EOF'
118+ set -Eeuxo pipefail
119+
120+ if [ "$TARGETARCH" = "ppc64le" ] || [ "$TARGETARCH" = "s390x" ]; then
121+ /opt/app-root/bin/utils/install_with_retry.sh dnf-install cmake make gcc-c++ pybind11-devel wget
122+
123+ # Build and collect pyarrow wheel
124+ git clone --depth 1 --branch "apache-arrow-17.0.0" https://github.com/apache/arrow.git
125+ cd arrow/cpp && mkdir release && cd release
126+
127+ cmake -DCMAKE_BUILD_TYPE=Release \
128+ -DCMAKE_INSTALL_PREFIX=/usr/local \
129+ -DARROW_PYTHON=ON \
130+ -DARROW_PARQUET=ON \
131+ -DARROW_ORC=ON \
132+ -DARROW_FILESYSTEM=ON \
133+ -DARROW_JSON=ON \
134+ -DARROW_CSV=ON \
135+ -DARROW_DATASET=ON \
136+ -DARROW_DEPENDENCY_SOURCE=BUNDLED \
137+ -DARROW_WITH_LZ4=OFF \
138+ -DARROW_WITH_ZSTD=OFF \
139+ -DARROW_WITH_SNAPPY=OFF \
140+ -DARROW_BUILD_TESTS=OFF \
141+ -DARROW_BUILD_BENCHMARKS=OFF \
142+ ..
143+
144+ make -j$(nproc) VERBOSE=1
145+ make install -j$(nproc)
146+
147+ cd ../../python
148+
149+ pip install --no-cache-dir -r requirements-build.txt
150+
151+ PYARROW_WITH_PARQUET=1 \
152+ PYARROW_WITH_DATASET=1 \
153+ PYARROW_WITH_FILESYSTEM=1 \
154+ PYARROW_WITH_JSON=1 \
155+ PYARROW_WITH_CSV=1 \
156+ PYARROW_PARALLEL=$(nproc) \
157+ python setup.py build_ext --build-type=release --bundle-arrow-cpp bdist_wheel
158+
159+ mkdir -p /tmp/wheels
160+ cp dist/pyarrow-*.whl /tmp/wheels/
161+ chmod -R 777 /tmp/wheels
162+ # Ensure wheels directory exists and has content
163+ ls -la /tmp/wheels/;
164+ else
165+ # Create empty wheels directory for non-s390x
166+ mkdir -p /tmp/wheels;
167+ fi
168+ EOF
162169
163170#######################################################
164171# common-builder (for Power-only)
@@ -169,8 +176,7 @@ USER root
169176RUN <<'EOF'
170177set -Eeuxo pipefail
171178if [ "${TARGETARCH}" = "ppc64le" ]; then
172- dnf install -y gcc-toolset-13 cmake ninja-build git wget unzip
173- dnf clean all
179+ /opt/app-root/bin/utils/install_with_retry.sh dnf-install gcc-toolset-13 cmake ninja-build git wget unzip
174180else
175181 echo "Skipping common-builder package install on non-Power"
176182fi
@@ -235,7 +241,7 @@ COPY ${MINIMAL_SOURCE_CODE}/start-notebook.sh ./
235241USER 0
236242
237243# Dependencies for PDF export begin
238- RUN ./utils/install_pdf_deps .sh
244+ RUN ./utils/install_with_retry .sh texlive-install
239245ENV PATH="/usr/local/texlive/bin/linux:/usr/local/pandoc/bin:$PATH"
240246# Dependencies for PDF export end
241247
@@ -272,8 +278,7 @@ WORKDIR /opt/app-root/bin
272278USER root
273279
274280# Install useful OS packages
275- RUN dnf install -y jq unixODBC unixODBC-devel postgresql git-lfs libsndfile libxcrypt-compat && \
276- dnf clean all && rm -rf /var/cache/yum
281+ RUN ./utils/install_with_retry.sh dnf-install jq unixODBC unixODBC-devel postgresql git-lfs libsndfile libxcrypt-compat
277282
278283# Copy dynamically-linked mongocli built in earlier build stage
279284COPY --from=mongocli-builder /tmp/mongocli /opt/app-root/bin/
0 commit comments