Commit 64181971 authored by Ramon Nou's avatar Ramon Nou
Browse files

Merge branch 'rnou/381-add-docker-release' into 'master'

Resolve "add docker release"

Closes #381

Closes #381

See merge request !279
parents b1fe51d3 f30d47ed
Loading
Loading
Loading
Loading
Loading
+18 −4
Original line number Diff line number Diff line
.git
.gitignore
build
/archive_old_fs_versions
build/
.git/
.vscode/
.idea/
cmake-build-*/
*.o
*.a
*.so
GKFS_DATA/
GKFS_METADATA/
builds/
.gitlab-ci-local/
install/
gkfs
ci_output.txt
log/
logs/
.cache/
+1 −0
Original line number Diff line number Diff line
@@ -27,6 +27,7 @@ to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
    - Dirents buffer size control (`LIBGKFS_DIRENTS_BUFF_SIZE`).
    - New sfind filtering in the server side
  - Added new tests (and enabling failing ones) to increase coverage
  - Added docker image (release) for 0.9.6 ([!279](https://storage.bsc.es/gitlab/hpc/gekkofs/-/merge_requests/279))


### Changed 
+13 −0
Original line number Diff line number Diff line
@@ -182,6 +182,19 @@ endif ()
if (GKFS_ENABLE_ROCKSDB)
    message(STATUS "[${PROJECT_NAME}] Checking for RocksDB")
    add_compile_definitions(GKFS_ENABLE_ROCKSDB)

    # If liburing is available in the system, RocksDB will have been built
    # with liburing support. If so, its native CMake configuration will
    # expect a uring::uring target.
    # Since liburing exports a pkg-config .pc file, we can use it
    # to retrieve its details and create the target if it's missing.
    find_package(PkgConfig REQUIRED)
    pkg_check_modules(liburing IMPORTED_TARGET liburing)
    if (liburing_FOUND AND NOT TARGET uring::uring)
        add_library(uring::uring INTERFACE IMPORTED)
        target_link_libraries(uring::uring INTERFACE PkgConfig::liburing)
    endif ()

    find_package(RocksDB REQUIRED)
    message(STATUS "[${PROJECT_NAME}] RocksDB version ${RocksDB_VERSION}")
    message(STATUS "[${PROJECT_NAME}] RocksDB location ${RocksDB_DIR}")
+108 −0
Original line number Diff line number Diff line
# syntax=docker/dockerfile:1

# Builder stage
FROM debian:bookworm-slim AS builder

# Install build dependencies
RUN apt-get update && apt-get install -y --no-install-recommends \
    build-essential \
    cmake \
    git \
    curl \
    ca-certificates \
    libtool \
    autoconf \
    automake \
    pkg-config \
    bison \
    flex \
    libzstd-dev \
    liblz4-dev \
    libcap-dev \
    libzmq3-dev \
    liburing-dev \
    libssl-dev \
    libcurl4-openssl-dev \
    libffi-dev \
    zlib1g-dev \
    python3 \
    perl \
    patch \
    && rm -rf /var/lib/apt/lists/*

# Set up environment variables for the build
ENV GKFS_PATH=/usr/local/gekkofs
ENV GKFS_DEPS_PATH=/usr/local/gekkofs_deps
ENV GKFS_SRC=/usr/src/gekkofs
ENV LD_LIBRARY_PATH=${GKFS_DEPS_PATH}/lib:${GKFS_DEPS_PATH}/lib64:${LD_LIBRARY_PATH:-}
ENV LIBRARY_PATH=${GKFS_DEPS_PATH}/lib:${GKFS_DEPS_PATH}/lib64:${LIBRARY_PATH:-}


# Create directories
RUN mkdir -p ${GKFS_DEPS_PATH} ${GKFS_SRC}

# Copy scripts and source
COPY scripts ${GKFS_SRC}/scripts

# Build dependencies
# We use the default profile but might need to adjust if specific versions are required.
# Assuming compile_dep.sh handles downloading/building dependencies.
WORKDIR ${GKFS_SRC}
RUN scripts/dl_dep.sh \
    -P ${GKFS_SRC}/scripts/profiles \
    -p docker:latest \
    /usr/src/gekkofs_deps_src

RUN scripts/compile_dep.sh \
    -P ${GKFS_SRC}/scripts/profiles \
    -p docker:latest \
    -j $(nproc) \
    /usr/src/gekkofs_deps_src \
    ${GKFS_DEPS_PATH}

# Copy rest of source (invalidates cache for GekkoFS build only)
COPY . ${GKFS_SRC}

# Build GekkoFS
WORKDIR ${GKFS_SRC}/build
RUN cmake \
    -DCMAKE_BUILD_TYPE=Release \
    -DCMAKE_PREFIX_PATH=${GKFS_DEPS_PATH} \
    -DCMAKE_INSTALL_PREFIX=${GKFS_PATH} \
    -DGKFS_RENAME_SUPPORT=ON \
    -DGKFS_SYMLINK_SUPPORT=ON \
    -DGKFS_ENABLE_ROCKSDB=ON \
    -DGKFS_ENABLE_PROMETHEUS=ON \
    -DGKFS_ENABLE_CLIENT_METRICS=ON \
    -DGKFS_BUILD_TESTS=OFF \
    -DGKFS_INSTALL_TESTS=OFF \
    -DGKFS_BUILD_EXAMPLES=OFF \
    .. && \
    make -j$(nproc) && \
    make install

# Runtime stage
FROM debian:bookworm-slim

# Install runtime dependencies
RUN apt-get update && apt-get install -y --no-install-recommends \
    libstdc++6 \
    libgcc-s1 \
    libcurl4 \
    liblz4-1 \
    libzstd1 \
    libcap2 \
    libzmq5 \
    liburing2 \
    && rm -rf /var/lib/apt/lists/*

# Copy GekkoFS artifacts
COPY --from=builder /usr/local/gekkofs /usr/local/gekkofs
COPY --from=builder /usr/local/gekkofs_deps/lib /usr/local/gekkofs_deps/lib

# Set up environment variables
ENV LD_LIBRARY_PATH=/usr/local/gekkofs/lib:/usr/local/gekkofs_deps/lib:/usr/local/lib
ENV PATH=/usr/local/gekkofs/bin:${PATH}

# Default command
CMD ["gkfs_daemon", "--help"]
+10 −0
Original line number Diff line number Diff line
.PHONY: all

amd64:
	docker build --platform amd64 -t gekkofs/release:0.9.6 -f Dockerfile ../../..

aarch64:
	docker build --platform aarch64 -t gekkofs/release:0.9.6 -f Dockerfile ../../..

all:
	docker build -t gekkofs/release:0.9.6 -f Dockerfile ../../..
Loading