From c0973aa3eb40085877bda863a321ab0d913dcc90 Mon Sep 17 00:00:00 2001 From: Blake Nedved Date: Wed, 1 Nov 2023 09:18:54 -0400 Subject: [PATCH] started using unified dep install script --- Dockerfile | 318 +++++++++++++++++--------------- scripts/install_dependencies.sh | 10 +- 2 files changed, 173 insertions(+), 155 deletions(-) diff --git a/Dockerfile b/Dockerfile index 477c1ddb7..2a644c214 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,44 +1,56 @@ -ARG GCS_IMAGE="code.ornl.gov:4567/dlsw/datafed/gcs-ubuntu-focal" -ARG DATAFED_DIR="/datafed" -ARG BUILD_DIR="$DATAFED_DIR/source" +ARG DATAFED_DIR="/datafed" ARG DATAFED_INSTALL_PATH="$DATAFED_DIR/install" -ARG NVM_DIR="$DATAFED_DIR/.nvm" -ARG NVM_INC="$DATAFED_DIR/.nvm/versions/node/v13.14.0/include/node" -ARG NVM_BIN="$DATAFED_DIR/.nvm/versions/node/v13.14.0/bin" +ARG GCS_IMAGE="code.ornl.gov:4567/dlsw/datafed/gcs-ubuntu-focal" +ARG BUILD_DIR="$DATAFED_DIR/source" +ARG NVM_DIR="$DATAFED_DIR/.nvm" +ARG NVM_INC="$DATAFED_DIR/.nvm/versions/node/v13.14.0/include/node" +ARG NVM_BIN="$DATAFED_DIR/.nvm/versions/node/v13.14.0/bin" +ARG LIB_DIR="/usr/local/lib" -FROM ubunutu:focal AS dependencies +FROM ubuntu:focal AS base +FROM base AS dependencies + +ARG NVM_DIR ARG DATAFED_DIR ARG BUILD_DIR ARG DATAFED_INSTALL_PATH +ARG DEBIAN_FRONTEND=noninteractive + +ENV DATAFED_DIR="${DATAFED_DIR}" RUN mkdir -p ${BUILD_DIR} RUN mkdir -p ${BUILD_DIR}/logs RUN mkdir -p ${BUILD_DIR}/repository/server RUN mkdir -p ${BUILD_DIR}/common/proto +RUN mkdir -p ${NVM_DIR} WORKDIR ${BUILD_DIR} -RUN apt-get update -RUN apt-get install -y cmake +RUN apt update +RUN apt install -y cmake git # Copy install scripts -COPY ./scripts/dependency_install_functions.sh ${BUILD_DIR}/scripts/ -COPY ./scripts/dependency_versions.sh ${BUILD_DIR}/scripts/ -COPY ./scripts/install_core_dependencies.sh ${BUILD_DIR}/scripts/ -COPY ./scripts/install_repo_dependencies.sh ${BUILD_DIR}/scripts/ -COPY ./scripts/install_ws_dependencies.sh ${BUILD_DIR}/scripts/ +COPY ./scripts/dependency_install_functions.sh ${BUILD_DIR}/scripts/ +COPY ./scripts/dependency_versions.sh ${BUILD_DIR}/scripts/ +# COPY ./scripts/install_core_dependencies.sh ${BUILD_DIR}/scripts/ +# COPY ./scripts/install_repo_dependencies.sh ${BUILD_DIR}/scripts/ +# COPY ./scripts/install_ws_dependencies.sh ${BUILD_DIR}/scripts/ # COPY ./scripts/install_gcs.sh ${BUILD_DIR}/scripts/ # COPY ./scripts/install_authz_dependencies.sh ${BUILD_DIR}/scripts/ +COPY ./scripts/install_dependencies.sh ${BUILD_DIR}/scripts/ RUN echo "#!/bin/bash\n\$@" > /usr/bin/sudo && chmod +x /usr/bin/sudo # run build scripts -RUN DEBIAN_FRONTEND=noninteractive TZ=Etc/UTC ${BUILD_DIR}/scripts/install_core_dependencies.sh -RUN DEBIAN_FRONTEND=noninteractive TZ=Etc/UTC ${BUILD_DIR}/scripts/install_repo_dependencies.sh -RUN DEBIAN_FRONTEND=noninteractive TZ=Etc/UTC ${BUILD_DIR}/scripts/install_ws_dependencies.sh -n "${DATAFED_DIR}" +# RUN DEBIAN_FRONTEND=noninteractive TZ=Etc/UTC ${BUILD_DIR}/scripts/install_core_dependencies.sh +# RUN DEBIAN_FRONTEND=noninteractive TZ=Etc/UTC ${BUILD_DIR}/scripts/install_repo_dependencies.sh +# RUN DEBIAN_FRONTEND=noninteractive TZ=Etc/UTC ${BUILD_DIR}/scripts/install_ws_dependencies.sh -n "${DATAFED_DIR}" # RUN DEBIAN_FRONTEND=noninteractive TZ=Etc/UTC ${BUILD_DIR}/scripts/install_gcs.sh # RUN DEBIAN_FRONTEND=noninteractive TZ=Etc/UTC ${BUILD_DIR}/scripts/install_authz_dependencies.sh +RUN DEBIAN_FRONTEND=noninteractive TZ=Etc/UTC ${BUILD_DIR}/scripts/install_dependencies.sh + +# RUN cp -R $HOME/.nvm ${NVM_DIR} FROM ${GCS_IMAGE} AS gcs-base @@ -67,9 +79,9 @@ RUN adduser --disabled-password --gecos "" datafed RUN echo "#!/bin/bash\n\$@" > /usr/bin/sudo && chmod +x /usr/bin/sudo -COPY ./scripts/dependency_versions.sh ${BUILD_DIR}/scripts/ -COPY ./scripts/dependency_install_functions.sh ${BUILD_DIR}/scripts/ -COPY ./scripts/install_authz_dependencies.sh ${BUILD_DIR}/scripts/ +COPY ./scripts/dependency_versions.sh ${BUILD_DIR}/scripts/ +COPY ./scripts/dependency_install_functions.sh ${BUILD_DIR}/scripts/ +COPY ./scripts/install_authz_dependencies.sh ${BUILD_DIR}/scripts/ RUN DEBIAN_FRONTEND=noninteractive TZ=Etc/UTC ${BUILD_DIR}/scripts/install_authz_dependencies.sh @@ -99,15 +111,15 @@ EXPOSE 7513 # ArangoDB port EXPOSE 8529 -COPY ./core/CMakeLists.txt ${BUILD_DIR}/core/CMakeLists.txt -COPY ./CMakeLists.txt ${BUILD_DIR} -COPY ./scripts/dependency_versions.sh ${BUILD_DIR}/scripts/ -COPY ./scripts/generate_datafed.sh ${BUILD_DIR}/scripts/ -COPY ./scripts/generate_core_config.sh ${BUILD_DIR}/scripts/ -COPY ./scripts/install_core.sh ${BUILD_DIR}/scripts/ -COPY ./cmake ${BUILD_DIR}/cmake -COPY ./core/docker/entrypoint.sh ${BUILD_DIR}/core/docker/ -COPY ./core/server ${BUILD_DIR}/core/server +COPY ./core/CMakeLists.txt ${BUILD_DIR}/core/CMakeLists.txt +COPY ./CMakeLists.txt ${BUILD_DIR} +COPY ./scripts/dependency_versions.sh ${BUILD_DIR}/scripts/ +COPY ./scripts/generate_datafed.sh ${BUILD_DIR}/scripts/ +COPY ./scripts/generate_core_config.sh ${BUILD_DIR}/scripts/ +COPY ./scripts/install_core.sh ${BUILD_DIR}/scripts/ +COPY ./cmake ${BUILD_DIR}/cmake +COPY ./core/docker/entrypoint.sh ${BUILD_DIR}/core/docker/ +COPY ./core/server ${BUILD_DIR}/core/server # All files should be owned by the datafed user # RUN chown -R datafed:datafed ${DATAFED_DIR} @@ -115,12 +127,12 @@ COPY ./core/server ${BUILD_DIR}/core/server # USER datafed RUN ${BUILD_DIR}/scripts/generate_datafed.sh -RUN cmake -S. -B build \ - -DBUILD_REPO_SERVER=False \ - -DBUILD_AUTHZ=False \ - -DBUILD_CORE_SERVER=True \ - -DBUILD_WEB_SERVER=False \ - -DBUILD_DOCS=False \ +RUN cmake -S. -B build \ + -DBUILD_REPO_SERVER=False \ + -DBUILD_AUTHZ=False \ + -DBUILD_CORE_SERVER=True \ + -DBUILD_WEB_SERVER=False \ + -DBUILD_DOCS=False \ -DBUILD_PYTHON_CLIENT=False \ -DBUILD_FOXX=False RUN cmake --build build -j 8 @@ -138,24 +150,24 @@ EXPOSE 7512 # and ingress? EXPOSE 9000 -COPY ./repository/CMakeLists.txt ${BUILD_DIR}/repository/CMakeLists.txt -COPY ./CMakeLists.txt ${BUILD_DIR} -COPY ./cmake/* ${BUILD_DIR}/cmake/ -COPY ./scripts/dependency_versions.sh ${BUILD_DIR}/scripts/ -COPY ./scripts/dependency_install_functions.sh ${BUILD_DIR}/scripts/ -COPY ./scripts/generate_datafed.sh ${BUILD_DIR}/scripts/ -COPY ./scripts/generate_repo_config.sh ${BUILD_DIR}/scripts/ -COPY ./scripts/install_repo.sh ${BUILD_DIR}/scripts/ -COPY ./cmake ${BUILD_DIR}/ -COPY ./repository/server ${BUILD_DIR}/repository/server +COPY ./repository/CMakeLists.txt ${BUILD_DIR}/repository/CMakeLists.txt +COPY ./CMakeLists.txt ${BUILD_DIR} +COPY ./cmake/* ${BUILD_DIR}/cmake/ +COPY ./scripts/dependency_versions.sh ${BUILD_DIR}/scripts/ +COPY ./scripts/dependency_install_functions.sh ${BUILD_DIR}/scripts/ +COPY ./scripts/generate_datafed.sh ${BUILD_DIR}/scripts/ +COPY ./scripts/generate_repo_config.sh ${BUILD_DIR}/scripts/ +COPY ./scripts/install_repo.sh ${BUILD_DIR}/scripts/ +COPY ./cmake ${BUILD_DIR}/ +COPY ./repository/server ${BUILD_DIR}/repository/server RUN ${BUILD_DIR}/scripts/generate_datafed.sh -RUN cmake -S. -B build \ - -DBUILD_REPO_SERVER=True \ - -DBUILD_AUTHZ=False \ - -DBUILD_CORE_SERVER=False \ - -DBUILD_WEB_SERVER=False \ - -DBUILD_DOCS=False \ +RUN cmake -S. -B build \ + -DBUILD_REPO_SERVER=True \ + -DBUILD_AUTHZ=False \ + -DBUILD_CORE_SERVER=False \ + -DBUILD_WEB_SERVER=False \ + -DBUILD_DOCS=False \ -DBUILD_PYTHON_CLIENT=False \ -DBUILD_FOXX=False RUN cmake --build build @@ -175,31 +187,31 @@ EXPOSE 7513 # For communication with the public EXPOSE 443 -COPY ./CMakeLists.txt ${BUILD_DIR} +COPY ./CMakeLists.txt ${BUILD_DIR} COPY ./scripts/dependency_versions.sh ${BUILD_DIR}/scripts/ -COPY ./scripts/generate_datafed.sh ${BUILD_DIR}/scripts/ -COPY ./scripts/generate_ws_config.sh ${BUILD_DIR}/scripts/ -COPY ./scripts/install_ws.sh ${BUILD_DIR}/scripts/ -COPY ./cmake ${BUILD_DIR}/cmake -COPY ./common/proto ${BUILD_DIR}/common/proto -COPY ./web ${BUILD_DIR}/web +COPY ./scripts/generate_datafed.sh ${BUILD_DIR}/scripts/ +COPY ./scripts/generate_ws_config.sh ${BUILD_DIR}/scripts/ +COPY ./scripts/install_ws.sh ${BUILD_DIR}/scripts/ +COPY ./cmake ${BUILD_DIR}/cmake +COPY ./common/proto ${BUILD_DIR}/common/proto +COPY ./web ${BUILD_DIR}/web RUN ${BUILD_DIR}/scripts/generate_datafed.sh -RUN cmake -S. -B build \ - -DBUILD_REPO_SERVER=False \ - -DBUILD_AUTHZ=False \ - -DBUILD_CORE_SERVER=False \ - -DBUILD_WEB_SERVER=True \ - -DBUILD_DOCS=False \ +RUN cmake -S. -B build \ + -DBUILD_REPO_SERVER=False \ + -DBUILD_AUTHZ=False \ + -DBUILD_CORE_SERVER=False \ + -DBUILD_WEB_SERVER=True \ + -DBUILD_DOCS=False \ -DBUILD_PYTHON_CLIENT=False \ - -DBUILD_FOXX=False \ + -DBUILD_FOXX=False \ -DBUILD_COMMON=False RUN cmake --build build ENV NVM_DIR="$NVM_DIR" ENV NVM_INC="$NVM_INC" ENV NVM_BIN="$NVM_BIN" -ENV PATH="$NVM_BIN:$PATH" +ENV PATH="$NVM_BIN:$PATH" RUN cmake --build build --target install @@ -213,13 +225,13 @@ ARG BUILD_DIR # Recommended to mount ssh public key on run RUN adduser --disabled-password --gecos "" datafed -RUN mkdir -p /datafed +RUN mkdir -p ${DATAFED_DIR} RUN mkdir -p /opt/datafed RUN mkdir -p /var/log/datafed RUN chown -R datafed:datafed /opt/datafed RUN chown -R datafed:datafed /var/log/datafed -RUN chown -R datafed:datafed /datafed -WORKDIR /datafed +RUN chown -R datafed:datafed ${DATAFED_DIR} +WORKDIR ${DATAFED_DIR} RUN apt update RUN apt install -y grep libcurl4 @@ -230,41 +242,42 @@ FROM runtime AS core ARG DATAFED_DIR ARG DATAFED_INSTALL_PATH ARG BUILD_DIR +ARG LIB_DIR # The above should also be available at runtime -ENV DATAFED_DIR="$DATAFED_DIR" ENV DATAFED_INSTALL_PATH="$DATAFED_INSTALL_PATH" -ENV BUILD_DIR="$BUILD_DIR" +ENV DATAFED_DIR="$DATAFED_DIR" +ENV BUILD_DIR="$BUILD_DIR" # copy necessary shared libraries # libprotobuf -COPY --from=dependencies /usr/local/lib/libprotobuf.so.3.17.3.0 /usr/local/lib/libprotobuf.so.3.17.3.0 -RUN ln -s /usr/local/lib/libprotobuf.so.3.17.3.0 /usr/local/lib/libprotobuf.so +COPY --from=dependencies ${LIB_DIR}/libprotobuf.so.3.17.3.0 ${LIB_DIR}/libprotobuf.so.3.17.3.0 +RUN ln -s ${LIB_DIR}/libprotobuf.so.3.17.3.0 ${LIB_DIR}/libprotobuf.so # libzmq -COPY --from=dependencies /usr/local/lib/libzmq.so.5.2.4 /usr/local/lib/libzmq.so.5.2.4 -RUN ln -s /usr/local/lib/libzmq.so.5.2.4 /usr/local/lib/libzmq.so.5 -RUN ln -s /usr/local/lib/libzmq.so.5 /usr/local/lib/libzmq.so +COPY --from=dependencies ${LIB_DIR}/libzmq.so.5.2.4 ${LIB_DIR}/libzmq.so.5.2.4 +RUN ln -s ${LIB_DIR}/libzmq.so.5.2.4 ${LIB_DIR}/libzmq.so.5 +RUN ln -s ${LIB_DIR}/libzmq.so.5 ${LIB_DIR}/libzmq.so # libsodium -COPY --from=dependencies /usr/local/lib/libsodium.so.23.3.0 /usr/local/lib/libsodium.so.23.3.0 -RUN ln -s /usr/local/lib/libsodium.so.23.3.0 /usr/local/lib/libsodium.so.23 -RUN ln -s /usr/local/lib/libsodium.so.23 /usr/local/lib/libsodium.so +COPY --from=dependencies ${LIB_DIR}/libsodium.so.23.3.0 ${LIB_DIR}/libsodium.so.23.3.0 +RUN ln -s ${LIB_DIR}/libsodium.so.23.3.0 ${LIB_DIR}/libsodium.so.23 +RUN ln -s ${LIB_DIR}/libsodium.so.23 ${LIB_DIR}/libsodium.so # libboost-program-options -COPY --from=dependencies /lib/x86_64-linux-gnu/libboost_program_options.so.1.71.0 /usr/local/lib/libboost_program_options.so.1.71.0 -RUN ln -s /usr/local/lib/libboost_program_options.so.1.71.0 /usr/local/lib/libboost_program_options.so +COPY --from=dependencies /lib/x86_64-linux-gnu/libboost_program_options.so.1.71.0 ${LIB_DIR}/libboost_program_options.so.1.71.0 +RUN ln -s ${LIB_DIR}/libboost_program_options.so.1.71.0 ${LIB_DIR}/libboost_program_options.so RUN ldconfig USER datafed -COPY --chown=datafed:datafed ./scripts/generate_datafed.sh /datafed/scripts/generate_datafed.sh -COPY --chown=datafed:datafed ./scripts/generate_core_config.sh /datafed/scripts/generate_core_config.sh -COPY --chown=datafed:datafed ./scripts/install_core.sh /datafed/scripts/install_core.sh -COPY --chown=datafed:datafed ./cmake/Version.cmake /datafed/cmake/Version.cmake -COPY --from=core-build --chown=datafed:datafed /datafed/source/core/docker/entrypoint.sh /datafed/source/core/entrypoint.sh -COPY --from=core-build --chown=datafed:datafed /datafed/install/core/datafed-core /datafed/install/core/datafed-core +COPY --chown=datafed:datafed ./scripts/generate_datafed.sh ${DATAFED_DIR}/scripts/generate_datafed.sh +COPY --chown=datafed:datafed ./scripts/generate_core_config.sh ${DATAFED_DIR}/scripts/generate_core_config.sh +COPY --chown=datafed:datafed ./scripts/install_core.sh ${DATAFED_DIR}/scripts/install_core.sh +COPY --chown=datafed:datafed ./cmake/Version.cmake ${DATAFED_DIR}/cmake/Version.cmake +COPY --from=core-build --chown=datafed:datafed ${BUILD_DIR}/core/docker/entrypoint.sh ${BUILD_DIR}/core/entrypoint.sh +COPY --from=core-build --chown=datafed:datafed ${DATAFED_INSTALL_PATH}/core/datafed-core ${DATAFED_INSTALL_PATH}/core/datafed-core # ENTRYPOINT ["/app/entrypoint.sh"] # CMD ["/app/datafed-core","--cfg","/app/datafed-core.cfg"] @@ -274,47 +287,48 @@ FROM runtime AS repo ARG DATAFED_DIR ARG DATAFED_INSTALL_PATH ARG BUILD_DIR +ARG LIB_DIR # The above should also be available at runtime -ENV DATAFED_DIR="$DATAFED_DIR" ENV DATAFED_INSTALL_PATH="$DATAFED_INSTALL_PATH" -ENV BUILD_DIR="$BUILD_DIR" +ENV DATAFED_DIR="$DATAFED_DIR" +ENV BUILD_DIR="$BUILD_DIR" WORKDIR /datafed # copy necessary shared libraries # libprotobuf -COPY --from=dependencies /usr/local/lib/libprotobuf.so.3.17.3.0 /usr/local/lib/libprotobuf.so.3.17.3.0 -RUN ln -s /usr/local/lib/libprotobuf.so.3.17.3.0 /usr/local/lib/libprotobuf.so +COPY --from=dependencies ${LIB_DIR}/libprotobuf.so.3.17.3.0 ${LIB_DIR}/libprotobuf.so.3.17.3.0 +RUN ln -s ${LIB_DIR}/libprotobuf.so.3.17.3.0 ${LIB_DIR}/libprotobuf.so # libzmq -COPY --from=dependencies /usr/local/lib/libzmq.so.5.2.4 /usr/local/lib/libzmq.so.5.2.4 -RUN ln -s /usr/local/lib/libzmq.so.5.2.4 /usr/local/lib/libzmq.so.5 -RUN ln -s /usr/local/lib/libzmq.so.5 /usr/local/lib/libzmq.so +COPY --from=dependencies ${LIB_DIR}/libzmq.so.5.2.4 ${LIB_DIR}/libzmq.so.5.2.4 +RUN ln -s ${LIB_DIR}/libzmq.so.5.2.4 ${LIB_DIR}/libzmq.so.5 +RUN ln -s ${LIB_DIR}/libzmq.so.5 ${LIB_DIR}/libzmq.so # libsodium -COPY --from=dependencies /usr/local/lib/libsodium.so.23.3.0 /usr/local/lib/libsodium.so.23.3.0 -RUN ln -s /usr/local/lib/libsodium.so.23.3.0 /usr/local/lib/libsodium.so.23 -RUN ln -s /usr/local/lib/libsodium.so.23 /usr/local/lib/libsodium.so +COPY --from=dependencies ${LIB_DIR}/libsodium.so.23.3.0 ${LIB_DIR}/libsodium.so.23.3.0 +RUN ln -s ${LIB_DIR}/libsodium.so.23.3.0 ${LIB_DIR}/libsodium.so.23 +RUN ln -s ${LIB_DIR}/libsodium.so.23 ${LIB_DIR}/libsodium.so # libboost-filesystem -COPY --from=dependencies /lib/x86_64-linux-gnu/libboost_filesystem.so.1.71.0 /usr/local/lib/libboost_filesystem.so.1.71.0 -RUN ln -s /usr/local/lib/libboost_filesystem.so.1.71.0 /usr/local/lib/libboost_filesystem.so +COPY --from=dependencies /lib/x86_64-linux-gnu/libboost_filesystem.so.1.71.0 ${LIB_DIR}/libboost_filesystem.so.1.71.0 +RUN ln -s ${LIB_DIR}/libboost_filesystem.so.1.71.0 ${LIB_DIR}/libboost_filesystem.so # libboost-program-options -COPY --from=dependencies /lib/x86_64-linux-gnu/libboost_program_options.so.1.71.0 /usr/local/lib/libboost_program_options.so.1.71.0 -RUN ln -s /usr/local/lib/libboost_program_options.so.1.71.0 /usr/local/lib/libboost_program_options.so +COPY --from=dependencies /lib/x86_64-linux-gnu/libboost_program_options.so.1.71.0 ${LIB_DIR}/libboost_program_options.so.1.71.0 +RUN ln -s ${LIB_DIR}/libboost_program_options.so.1.71.0 ${LIB_DIR}/libboost_program_options.so RUN ldconfig USER datafed -COPY --chown=datafed:datafed ./repository/docker/entrypoint_repo.sh /datafed/source/repository/entrypoint.sh -COPY --chown=datafed:datafed ./scripts/generate_datafed.sh /datafed/scripts/generate_datafed.sh -COPY --chown=datafed:datafed ./scripts/generate_repo_config.sh /datafed/scripts/generate_repo_config.sh -COPY --chown=datafed:datafed ./scripts/install_repo.sh /datafed/scripts/install_repo.sh -COPY --chown=datafed:datafed ./cmake/Version.cmake /datafed/cmake/Version.cmake -COPY --from=repo-build --chown=datafed:datafed /datafed/install/repo/datafed-repo /datafed/install/repo/datafed-repo +COPY --chown=datafed:datafed ./repository/docker/entrypoint_repo.sh ${BUILD_DIR}/repository/entrypoint.sh +COPY --chown=datafed:datafed ./scripts/generate_datafed.sh ${DATAFED_DIR}/scripts/generate_datafed.sh +COPY --chown=datafed:datafed ./scripts/generate_repo_config.sh ${DATAFED_DIR}/scripts/generate_repo_config.sh +COPY --chown=datafed:datafed ./scripts/install_repo.sh ${DATAFED_DIR}/scripts/install_repo.sh +COPY --chown=datafed:datafed ./cmake/Version.cmake ${DATAFED_DIR}/cmake/Version.cmake +COPY --from=repo-build --chown=datafed:datafed ${DATAFED_INSTALL_PATH}/repo/datafed-repo ${DATAFED_INSTALL_PATH}/repo/datafed-repo # ENTRYPOINT ["/app/entrypoint.sh"] # CMD ["/app/datafed-core","--cfg","/app/datafed-core.cfg"] @@ -330,14 +344,13 @@ ARG NVM_INC ARG NVM_BIN # The above should also be available at runtime -ENV DATAFED_DIR="$DATAFED_DIR" ENV DATAFED_INSTALL_PATH="$DATAFED_INSTALL_PATH" -ENV BUILD_DIR="$BUILD_DIR" - -ENV NVM_DIR="$NVM_DIR" -ENV NVM_INC="$NVM_INC" -ENV NVM_BIN="$NVM_BIN" -ENV PATH="$NVM_BIN:$PATH" +ENV DATAFED_DIR="$DATAFED_DIR" +ENV BUILD_DIR="$BUILD_DIR" +ENV NVM_DIR="$NVM_DIR" +ENV NVM_INC="$NVM_INC" +ENV NVM_BIN="$NVM_BIN" +ENV PATH="$NVM_BIN:$PATH" RUN apt install -y python3 make g++ @@ -347,72 +360,77 @@ RUN mkdir -p /home/cades RUN chown -R datafed:datafed /home/cades COPY --from=dependencies --chown=datafed:datafed "$NVM_DIR" "$NVM_DIR" -RUN ln -s /datafed/install/web /datafed/web +RUN ln -s ${DATAFED_INSTALL_PATH}/web ${DATAFED_DIR}/web RUN ln -s "$NVM_DIR" /home/cades/.nvm USER datafed -COPY --chown=datafed:datafed ./web/docker/entrypoint.sh /datafed/source/web/entrypoint.sh -COPY --chown=datafed:datafed ./scripts/generate_datafed.sh /datafed/scripts/generate_datafed.sh -COPY --chown=datafed:datafed ./scripts/dependency_versions.sh /datafed/scripts/dependency_versions.sh -COPY --chown=datafed:datafed ./scripts/generate_ws_config.sh /datafed/scripts/generate_ws_config.sh -COPY --chown=datafed:datafed ./scripts/install_ws.sh /datafed/scripts/install_ws.sh -COPY --chown=datafed:datafed ./cmake/Version.cmake /datafed/cmake/Version.cmake +COPY --chown=datafed:datafed ./web/docker/entrypoint.sh ${BUILD_DIR}/web/entrypoint.sh +COPY --chown=datafed:datafed ./scripts/generate_datafed.sh ${DATAFED_DIR}/scripts/generate_datafed.sh +COPY --chown=datafed:datafed ./scripts/dependency_versions.sh ${DATAFED_DIR}/scripts/dependency_versions.sh +COPY --chown=datafed:datafed ./scripts/generate_ws_config.sh ${DATAFED_DIR}/scripts/generate_ws_config.sh +COPY --chown=datafed:datafed ./scripts/install_ws.sh ${DATAFED_DIR}/scripts/install_ws.sh +COPY --chown=datafed:datafed ./cmake/Version.cmake ${DATAFED_DIR}/cmake/Version.cmake -COPY --from=ws-build --chown=datafed:datafed /datafed/source/web/package.json /datafed/install/web/package.json -RUN . /datafed/scripts/dependency_versions.sh && \ - . /datafed/.nvm/nvm.sh && \ - npm --allow-root --unsafe-perm --prefix /datafed/install/web install +COPY --from=ws-build --chown=datafed:datafed ${BUILD_DIR}/web/package.json ${DATAFED_INSTALL_PATH}/web/package.json +RUN . ${DATAFED_DIR}/scripts/dependency_versions.sh && \ + . ${DATAFED_DIR}/.nvm/nvm.sh && \ + npm --allow-root --unsafe-perm --prefix ${DATAFED_INSTALL_PATH}/web install -COPY --from=ws-build --chown=datafed:datafed /datafed/source/web /datafed/install/web +COPY --from=ws-build --chown=datafed:datafed ${BUILD_DIR}/web ${DATAFED_INSTALL_PATH}/web -WORKDIR /datafed/install/web +WORKDIR ${DATAFED_INSTALL_PATH}/web FROM gcs-base AS gcs-authz +ARG rebuild=true ARG DATAFED_DIR ARG BUILD_DIR ARG DATAFED_INSTALL_PATH -ENV DATAFED_DIR="$DATAFED_DIR" -ENV BUILD_DIR="$BUILD_DIR" -ENV DATAFED_INSTALL_PATH="$DATAFED_INSTALL_PATH" ENV GCS_COLLECTION_ROOT_PATH="$DATAFED_DIR/collections/mapped" +ENV DATAFED_INSTALL_PATH="$DATAFED_INSTALL_PATH" +ENV DATAFED_DIR="$DATAFED_DIR" +ENV BUILD_DIR="$BUILD_DIR" # All files should be owned by the datafed user RUN chown -R datafed:datafed ${DATAFED_DIR} -COPY --chown=datafed:datafed ./scripts/dependency_versions.sh ${BUILD_DIR}/scripts/ -COPY --chown=datafed:datafed ./scripts/generate_authz_config.sh ${BUILD_DIR}/scripts/generate_authz_config.sh -COPY --chown=datafed:datafed ./scripts/generate_datafed.sh ${BUILD_DIR}/scripts/generate_datafed.sh -COPY --chown=datafed:datafed ./CMakeLists.txt ${BUILD_DIR} -COPY --chown=datafed:datafed ./cmake ${BUILD_DIR}/cmake -COPY --chown=datafed:datafed ./repository/CMakeLists.txt ${BUILD_DIR}/repository/CMakeLists.txt -COPY --chown=datafed:datafed ./repository/gridftp/CMakeLists.txt ${BUILD_DIR}/repository/gridftp/CMakeLists.txt -COPY --chown=datafed:datafed ./scripts/globus/setup_globus.sh ${BUILD_DIR}/scripts/globus/setup_globus.sh -COPY --chown=datafed:datafed ./scripts/globus/generate_repo_form.sh ${BUILD_DIR}/scripts/globus/generate_repo_form.sh -COPY --chown=datafed:datafed ./repository/docker/entrypoint_authz.sh ${BUILD_DIR}/repository/docker/entrypoint_authz.sh -COPY --chown=datafed:datafed ./common ${BUILD_DIR}/common -COPY --chown=datafed:datafed ./repository/gridftp/globus5 ${BUILD_DIR}/repository/gridftp/globus5 +COPY --chown=datafed:datafed ./scripts/dependency_versions.sh ${BUILD_DIR}/scripts/ +COPY --chown=datafed:datafed ./scripts/generate_authz_config.sh ${BUILD_DIR}/scripts/generate_authz_config.sh +COPY --chown=datafed:datafed ./scripts/generate_datafed.sh ${BUILD_DIR}/scripts/generate_datafed.sh +COPY --chown=datafed:datafed ./CMakeLists.txt ${BUILD_DIR} +COPY --chown=datafed:datafed ./cmake ${BUILD_DIR}/cmake +COPY --chown=datafed:datafed ./repository/CMakeLists.txt ${BUILD_DIR}/repository/CMakeLists.txt +COPY --chown=datafed:datafed ./repository/gridftp/CMakeLists.txt ${BUILD_DIR}/repository/gridftp/CMakeLists.txt +COPY --chown=datafed:datafed ./scripts/globus/setup_globus.sh ${BUILD_DIR}/scripts/globus/setup_globus.sh +COPY --chown=datafed:datafed ./scripts/globus/generate_repo_form.sh ${BUILD_DIR}/scripts/globus/generate_repo_form.sh +COPY --chown=datafed:datafed ./repository/docker/entrypoint_authz.sh ${BUILD_DIR}/repository/docker/entrypoint_authz.sh +COPY --chown=datafed:datafed ./common ${BUILD_DIR}/common +COPY --chown=datafed:datafed ./repository/gridftp/globus5 ${BUILD_DIR}/repository/gridftp/globus5 # Build as if a non root user USER datafed RUN ${BUILD_DIR}/scripts/generate_datafed.sh -RUN ${BUILD_DIR}/scripts/generate_authz_config.sh && \ - cmake -S. -B build \ - -DBUILD_REPO_SERVER=False \ - -DBUILD_AUTHZ=True \ - -DBUILD_CORE_SERVER=False \ - -DBUILD_WEB_SERVER=False \ - -DBUILD_DOCS=False \ - -DBUILD_PYTHON_CLIENT=False \ +RUN ${BUILD_DIR}/scripts/generate_authz_config.sh && \ + cmake -S. -B build \ + -DBUILD_REPO_SERVER=False \ + -DBUILD_AUTHZ=True \ + -DBUILD_CORE_SERVER=False \ + -DBUILD_WEB_SERVER=False \ + -DBUILD_DOCS=False \ + -DBUILD_PYTHON_CLIENT=False \ -DBUILD_FOXX=False RUN cmake --build build RUN cmake --build build --target install +COPY ./scripts/globus/setup_globus.sh ${BUILD_DIR}/scripts/globus/setup_globus.sh +COPY ./scripts/globus/generate_repo_form.sh ${BUILD_DIR}/scripts/globus/generate_repo_form.sh +COPY ./repository/docker/entrypoint_authz.sh ${BUILD_DIR}/repository/docker/entrypoint_authz.sh + USER root WORKDIR ${DATAFED_INSTALL_PATH}/authz diff --git a/scripts/install_dependencies.sh b/scripts/install_dependencies.sh index fe6305728..7c9c60873 100755 --- a/scripts/install_dependencies.sh +++ b/scripts/install_dependencies.sh @@ -15,7 +15,7 @@ sudo apt-get update sudo dpkg --configure -a sudo apt-get install -y libtool build-essential g++ gcc npm libboost-all-dev \ pkg-config autoconf automake libtool wget curl make unzip libcurl4-openssl-dev \ -libfuse-dev rapidjson-dev libglobus-common-dev libkrb5-dev +libfuse-dev rapidjson-dev libglobus-common-dev libkrb5-dev python3-pip sudo apt-get install -y libzmq3-dev @@ -26,12 +26,15 @@ install_cmake # 1. Install nvm which will allow us to update node curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash -export NVM_DIR="$HOME/.nvm" +export NVM_DIR="$DATAFED_DIR/.nvm" [ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" # This loads nvm nvm install $DATAFED_NODE_VERSION nvm use $DATAFED_NODE_VERSION +python3 -m pip install --upgrade pip +python3 -m pip install setuptools sphinx sphinx-rtd-theme sphinx-autoapi + install_nlohmann_json cd ~ @@ -55,6 +58,3 @@ echo 'deb https://download.arangodb.com/arangodb38/DEBIAN/ /' | sudo tee /etc/ap sudo apt-get install apt-transport-https sudo apt-get update sudo apt-get install arangodb3 - -python3 -m pip install --upgrade pip -python3 -m pip install setuptools sphinx sphinx-rtd-theme sphinx-autoapi