diff --git a/.docker/poc/Dockerfile b/.docker/poc/Dockerfile index 6129f539c..587ec785e 100644 --- a/.docker/poc/Dockerfile +++ b/.docker/poc/Dockerfile @@ -36,16 +36,49 @@ RUN if [ "$(uname -m)" = "aarch64" ] || [ "$(uname -m)" = "arm64" ]; then \ else \ LIB_SUBDIR="x86_64-linux-gnu"; \ fi \ - && mkdir -p ${DAS_DIR}/syslibs/usr/lib/${LIB_SUBDIR} ${DAS_DIR}/syslibs/lib/${LIB_SUBDIR} ${DAS_DIR}/syslibs/etc/ssl/certs \ - && cp -f /usr/lib/${LIB_SUBDIR}/libssl.so.3 ${DAS_DIR}/syslibs/usr/lib/${LIB_SUBDIR}/ 2>/dev/null || true \ - && cp -f /usr/lib/${LIB_SUBDIR}/libcrypto.so.3 ${DAS_DIR}/syslibs/usr/lib/${LIB_SUBDIR}/ 2>/dev/null || true \ - && cp -f /lib/${LIB_SUBDIR}/libz.so.1 ${DAS_DIR}/syslibs/lib/${LIB_SUBDIR}/ 2>/dev/null || true \ - && cp -f /usr/lib/${LIB_SUBDIR}/libzstd.so.1 ${DAS_DIR}/syslibs/usr/lib/${LIB_SUBDIR}/ 2>/dev/null || true \ - && cp -f /usr/lib/${LIB_SUBDIR}/libsnappy.so.1 ${DAS_DIR}/syslibs/usr/lib/${LIB_SUBDIR}/ 2>/dev/null || true \ - && cp -f /lib/${LIB_SUBDIR}/libbz2.so.1.0 ${DAS_DIR}/syslibs/lib/${LIB_SUBDIR}/ 2>/dev/null || true \ - && cp -f /lib/${LIB_SUBDIR}/liblzma.so.5 ${DAS_DIR}/syslibs/lib/${LIB_SUBDIR}/ 2>/dev/null || true \ - && cp -f /usr/lib/${LIB_SUBDIR}/libcurl.so.4 ${DAS_DIR}/syslibs/usr/lib/${LIB_SUBDIR}/ 2>/dev/null || true \ - && cp -f /usr/lib/${LIB_SUBDIR}/libevent-2.1.so.7 ${DAS_DIR}/syslibs/usr/lib/${LIB_SUBDIR}/ 2>/dev/null || true \ + && mkdir -p ${DAS_DIR}/syslibs/usr/lib/${LIB_SUBDIR} \ + ${DAS_DIR}/syslibs/lib/${LIB_SUBDIR} \ + ${DAS_DIR}/syslibs/etc/ssl/certs \ + # --- usr/lib/ libraries --- + && USR_LIBS=" \ + libssl.so.3 \ + libcrypto.so.3 \ + libzstd.so.1 \ + libsnappy.so.1 \ + libcurl.so.4 \ + libevent-2.1.so.7 \ + # Libs from here and on are related to the libpqxx lib, used by the database-adapter. + libgssapi_krb5.so.2 \ + libkrb5.so.3 \ + libk5crypto.so.3 \ + libcom_err.so.2 \ + libkrb5support.so.0 \ + liblber-2.5.so.0 \ + libkeyutils.so.1 \ + libp11-kit.so.0 \ + libidn2.so.0 \ + libunistring.so.2 \ + libtasn1.so.6 \ + libnettle.so.8 \ + libhogweed.so.6 \ + libgmp.so.10 \ + libffi.so.8 \ + libldap-2.5.so.0 \ + libsasl2.so.2 \ + libgnutls.so.30 \ + " \ + # lib/ folder libraries --- + && LIB_LIBS=" \ + libz.so.1 \ + libbz2.so.1.0 \ + liblzma.so.5 \ + " \ + && for lib in $USR_LIBS; do \ + cp -f /usr/lib/${LIB_SUBDIR}/$lib ${DAS_DIR}/syslibs/usr/lib/${LIB_SUBDIR}/ 2>/dev/null || true; \ + done \ + && for lib in $LIB_LIBS; do \ + cp -f /lib/${LIB_SUBDIR}/$lib ${DAS_DIR}/syslibs/lib/${LIB_SUBDIR}/ 2>/dev/null || true; \ + done \ && cp -f /etc/ssl/certs/ca-certificates.crt ${DAS_DIR}/syslibs/etc/ssl/certs/ 2>/dev/null || true FROM gcr.io/distroless/cc-debian12:nonroot AS runner @@ -61,8 +94,8 @@ COPY --from=builder /opt/das/syslibs/usr/lib/ /usr/lib/ COPY --from=builder /opt/das/syslibs/lib/ /lib/ COPY --from=builder /opt/das/syslibs/etc/ssl/certs/ /etc/ssl/certs/ -ENV LD_LIBRARY_PATH=/usr/local/lib:/usr/lib/x86_64-linux-gnu:/usr/lib/aarch64-linux-gnu:/lib/x86_64-linux-gnu:/lib/aarch64-linux-gnu +ENV LD_LIBRARY_PATH=/opt/das/lib:/usr/local/lib:/usr/lib/x86_64-linux-gnu:/usr/lib/aarch64-linux-gnu:/lib/x86_64-linux-gnu:/lib/aarch64-linux-gnu USER nonroot:nonroot -CMD [ "query_broker" ] +CMD [ "busnode" ] diff --git a/.github/scripts/bazel_build.sh b/.github/scripts/bazel_build.sh index 698bba6ae..311557792 100755 --- a/.github/scripts/bazel_build.sh +++ b/.github/scripts/bazel_build.sh @@ -67,6 +67,7 @@ BAZEL_BINARY_TARGETS=( "//:tests_db_loader" "//:busnode" "//:busclient" + "//:database_adapter" ) BAZEL_BINARY_OUTPUTS=( @@ -78,6 +79,7 @@ BAZEL_BINARY_OUTPUTS=( "bazel-bin/tests_db_loader" "bazel-bin/busnode" "bazel-bin/busclient" + "bazel-bin/database_adapter" ) BAZEL_LIB_OUTPUTS=( @@ -181,6 +183,21 @@ if [ -d "$LIB_DIR" ]; then done fi +echo "[INFO] Copying database-adapter shared library dependencies into $LIB_DIR..." + +find "$BIN_DIR" -type f -executable -name "database_adapter" | while IFS= read -r binfile; do + ldd "$binfile" | awk '/=> \// { print $3 }' | while IFS= read -r dep; do + dep_base=$(basename "$dep") + case "$dep_base" in + "libpq.so.5") + if [ -f "$dep" ]; then + cp -f "$dep" "$LIB_DIR" + fi + ;; + esac + done +done + echo "[INFO] Build finished successfully." echo "[INFO] Binaries in: $BIN_DIR" echo "[INFO] Libraries in: $LIB_DIR" diff --git a/.github/scripts/setup_bazel.sh b/.github/scripts/setup_bazel.sh index 1b6de899d..8057e1cff 100755 --- a/.github/scripts/setup_bazel.sh +++ b/.github/scripts/setup_bazel.sh @@ -29,12 +29,14 @@ sudo apt update -y sudo apt install -y \ git build-essential curl protobuf-compiler python3 python3-pip \ cmake unzip uuid-runtime lcov bc \ - libevent-dev libssl-dev pkg-config libncurses5 + libevent-dev libssl-dev pkg-config libncurses5 libpq-dev echo "[INFO] Cleaning apt cache..." sudo apt clean -y || true sudo rm -rf /var/lib/apt/lists/* || true +# Installing bazelisk and copying other assets. + echo "[INFO] Installing 3rd-party tools (bazelisk, buildifier)..." if [[ ! -f "${ASSETS_DIR}/3rd-party.tgz" ]]; then @@ -119,6 +121,28 @@ if ! id "builder" &>/dev/null; then sudo useradd -ms /bin/bash builder fi +echo "[INFO] Installing libpqxx (PostgreSQL C++ client)..." + +if [[ ! -f "${ASSETS_DIR}/libpqxx-7.10.5.tar.gz" ]]; then + echo "[ERROR] ${ASSETS_DIR}/libpqxx-7.10.5.tar.gz not found." + exit 1 +fi + +cp "${ASSETS_DIR}/libpqxx-7.10.5.tar.gz" "${TMP_DIR}/" +cd "${TMP_DIR}" +tar xzvf libpqxx-7.10.5.tar.gz +cd libpqxx-7.10.5 + +cmake -S . -B build \ + -DCMAKE_BUILD_TYPE=RelWithDebInfo \ + -DBUILD_TESTING=OFF \ + -DCMAKE_INSTALL_PREFIX=/usr/local + +cmake --build build -j"$(nproc)" + +sudo cmake --install build +sudo ldconfig + echo "[INFO] Configuring git safe.directory for ${DAS_DIR}..." sudo -u builder git config --global --add safe.directory "${DAS_DIR}" diff --git a/src/package/BUILD b/src/package/BUILD index 47503b62a..3fa30cae2 100644 --- a/src/package/BUILD +++ b/src/package/BUILD @@ -65,7 +65,7 @@ pkg_rpm( "@platforms//os:linux": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "1.0.3", + version = "1", ) # DEB Packaging Setup @@ -119,5 +119,5 @@ pkg_deb( description = "Distributed AtomSpace Binaries and Libraries", maintainer = "Hyperon DAS Team", package = "das", - version = "1.0.3", + version = "1", ) diff --git a/src/scripts/bazel_build.sh b/src/scripts/bazel_build.sh index bf1da2d9e..ee700df86 100755 --- a/src/scripts/bazel_build.sh +++ b/src/scripts/bazel_build.sh @@ -60,7 +60,6 @@ if [ "$BUILD_BINARIES" = true ]; then MOVE_BIN_TARGETS+=" bazel-bin/tests_db_loader" MOVE_BIN_TARGETS+=" bazel-bin/database_adapter" - fi if [ "$BUILD_WHEELS" = true ]; then @@ -87,5 +86,19 @@ find "$LIB_DIR" -type f -name "*.so" | while IFS= read -r sofile; do done done +# Add exclusive block just to handle database_adapter SO dependencies. + +find "$BIN_DIR" -type f -executable -name "database_adapter" | while IFS= read -r binfile; do + ldd "$binfile" | awk '/=> \// { print $3 }' | while IFS= read -r dep; do + dep_base=$(basename "$dep") + case "$dep_base" in + "libpq.so.5") + if [ -f "$dep" ]; then + cp -f "$dep" "$LIB_DIR" + fi + ;; + esac + done +done exit $? diff --git a/src/scripts/bazel_package.sh b/src/scripts/bazel_package.sh index 999781caf..771be14b1 100755 --- a/src/scripts/bazel_package.sh +++ b/src/scripts/bazel_package.sh @@ -57,16 +57,33 @@ find "$BUILT_TARGETS_PATH" -type f -name "*.so" | while IFS= read -r sofile; do done done +find "$BUILT_TARGETS_PATH" -type f -executable -name "database_adapter" | while IFS= read -r binfile; do + ldd "$binfile" | awk '/=> \// { print $3 }' | while IFS= read -r dep; do + dep_base=$(basename "$dep") + case "$dep_base" in + "libpq.so.5") + if [ -f "$dep" ]; then + cp -f "$dep" "$EXTERNAL_LIBS_PATH" + fi + ;; + esac + done +done + if [[ "$PACKAGE_TYPE" == "deb" ]]; then BUILD_TARGETS=" //package:das_deb_package" $BAZELISK_BUILD_CMD $BUILD_TARGETS - cp -L bazel-bin/package/das_1.0.3_amd64.deb $PKG_DIR + + LATEST_DEB=$(ls -t bazel-bin/package/*.deb | head -n 1) + cp -L "$LATEST_DEB" "$PKG_DIR/das_package.deb" elif [[ "$PACKAGE_TYPE" == "rpm" ]]; then BUILD_TARGETS=" //package:das_rpm_package" $BAZELISK_BUILD_CMD $BUILD_TARGETS - cp -L bazel-bin/package/das-1.0.3-1.x86_64.rpm $PKG_DIR + + LATEST_RPM=$(ls -t bazel-bin/package/*.rpm | head -n 1) + cp -L "$LATEST_RPM" "$PKG_DIR/das_package.rpm" fi -rm -rf $EXTERNAL_LIBS_PATH +rm -rf "$EXTERNAL_LIBS_PATH" exit $? \ No newline at end of file