Skip to content

Instantly share code, notes, and snippets.

@clifinger
Last active October 17, 2024 13:52
Show Gist options
  • Save clifinger/b74b657b30a736c6f236bb12f2b23f81 to your computer and use it in GitHub Desktop.
Save clifinger/b74b657b30a736c6f236bb12f2b23f81 to your computer and use it in GitHub Desktop.
BedrockDb compile and cluser
#!/bin/bash
set -e
# Requires bash 4.2 or greater because of use of `-v` for testing variables being set
# Returns 1 if version doesn't match
function bashVersionCheck()
{
[ -z $BASH_VERSIO ] && return 1
# If it's set, check the version
case $BASH_VERSIO in
5.*) return 0 ;;
4.1) return 1 ;;
4.0) return 1 ;;
4.*) return 0 ;;
?) return 1;;
esac
}
if [ $(bashVersionCheck) ]; then
echo "Requires bash 4.2 or greater"
exit -1
fi
NO_ARG_PARAMS=("VERBOSE" "QUIET" "CLEAN")
ONE_ARG_PARAMS=("SERVER_HOST" "NODE_NAME" "PEER_LIST" "PRIORITY" "PLUGINS" "CACHE_SIZE" "WORKER_THREADS" "QUERY_LOG" "MAX_JOURNAL_SIZE" "SYNCHRONOUS")
function toLowerCase()
{
echo "$1" | tr '[:upper:]' '[:lower:]'
}
function toSnakeCase()
{
lowered=$(toLowerCase $1)
arr=(${lowered//_/ })
printf -v ccase %s "${arr[@]^}"
echo "${lowered:0:1}${ccase:1}"
}
PARAMS=""
# Add default database path
DB_PATH="/var/db/bedrock.db"
PARAMS="$PARAMS -db $DB_PATH -nodeHost 0.0.0.0:9000 -serverHost 0.0.0.0:8888"
for i in "${NO_ARG_PARAMS[@]}"
do
:
if [ -v "$i" ]; then
export PARAMS="$PARAMS -$(toLowerCase ${i:0:1})"
fi
done
for i in "${ONE_ARG_PARAMS[@]}"
do
:
if [ -v "$i" ]; then
export PARAMS="$PARAMS -$(toSnakeCase ${i}) ${!i}"
fi
done
exec /sbin/setuser bedrock /usr/local/bin/bedrock $PARAMS >> /var/log/bedrock.log 2>&1
services:
bedrock-node0:
build:
context: ./docker/bedrock
dockerfile: Dockerfile
container_name: bedrock-node0
ports:
- "8888:8888"
networks:
bedrock-cluster:
aliases:
- node0
volumes:
- bedrock-db-node0:/db
environment:
- NODE_NAME=node0
- PRIORITY=100
- PEER_LIST=node1:9000,node2:9000
bedrock-node1:
build:
context: ./docker/bedrock
dockerfile: Dockerfile
container_name: bedrock-node1
ports:
- "8887:8888"
networks:
bedrock-cluster:
aliases:
- node1
volumes:
- bedrock-db-node1:/db
environment:
- NODE_NAME=node1
- PRIORITY=101
- PEER_LIST=node0:9000,node2:9000
bedrock-node2:
build:
context: ./docker/bedrock
dockerfile: Dockerfile
container_name: bedrock-node2
ports:
- "8889:8888"
networks:
bedrock-cluster:
aliases:
- node2
volumes:
- bedrock-db-node2:/db
environment:
- NODE_NAME=node2
- PRIORITY=102
- PEER_LIST=node0:9000,node1:9000
networks:
bedrock-cluster:
driver: bridge
volumes:
bedrock-db-node0:
bedrock-db-node1:
bedrock-db-node2:
FROM phusion/baseimage:noble-1.0.0
ARG DEBIAN_FRONTEND=noninteractive
# Install necessary packages
RUN apt-get update && apt-get install -y software-properties-common && \
apt-get install -y build-essential libpcre++ zlib1g
COPY ./ /src
RUN cp /src/bedrock /usr/local/bin/
RUN chmod +x /usr/local/bin/bedrock
RUN mkdir -p /var/db
RUN touch /var/db/bedrock.db
EXPOSE 8888
EXPOSE 9000
RUN mkdir -p /etc/service/bedrock/
COPY bedrock.sh /etc/service/bedrock/run
RUN chmod +x /etc/service/bedrock/run
RUN adduser --disabled-password --gecos "" bedrock \
&& adduser bedrock bedrock \
&& chown -R bedrock:bedrock /db
CMD ["/sbin/my_init"]
# Utiliser une image de base Ubuntu récente
FROM ubuntu:22.04
# Éviter les interactions pendant l'installation
ENV DEBIAN_FRONTEND=noninteractive
# Installer apt-fast et les outils nécessaires
RUN apt-get update && apt-get install -y software-properties-common gnupg wget && \
add-apt-repository ppa:apt-fast/stable && \
apt-get update && apt-get -y install apt-fast
# Configurer apt-fast
RUN echo debconf apt-fast/maxdownloads string 16 | debconf-set-selections && \
echo debconf apt-fast/dlflag boolean true | debconf-set-selections && \
echo debconf apt-fast/aptmanager string apt-get | debconf-set-selections
# Ajouter les clés GPG nécessaires
RUN apt-key adv --keyserver keyserver.ubuntu.com --recv-keys BA9EF27F && \
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 4F4EA0AAE5267A6C
# Ajouter le PPA ubuntu-toolchain-r/test
RUN add-apt-repository ppa:ubuntu-toolchain-r/test
# Ajouter le dépôt LLVM
RUN wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | apt-key add - && \
echo "deb http://apt.llvm.org/jammy/ llvm-toolchain-jammy-18 main" >> /etc/apt/sources.list.d/llvm.list
# Mettre à jour et installer les dépendances
RUN apt-fast update && apt-fast install -y \
wget \
gnupg \
software-properties-common \
lsb-release \
ccache \
zlib1g-dev \
rsyslog \
cmake \
libpcre2-dev \
libpcre3-dev \
libsodium-dev \
libgpgme11-dev \
libstdc++-13-dev \
make \
linux-headers-generic \
git \
clang-18 \
lldb-18 \
lld-18 \
clangd-18 \
clang-tidy-18 \
clang-format-18 \
clang-tools-18 \
llvm-18-dev \
llvm-18-tools \
libomp-18-dev \
libc++-18-dev \
libc++abi-18-dev \
libclang-common-18-dev \
libclang-18-dev \
libclang-cpp18-dev \
libunwind-18-dev \
&& rm -rf /var/lib/apt/lists/*
# Configurer les alternatives pour utiliser Clang 18 par défaut
RUN update-alternatives --install /usr/bin/clang clang /usr/bin/clang-18 100 && \
update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-18 100
# Configurer ccache
ENV CCACHE_DIR=/ccache
RUN mkdir -p $CCACHE_DIR && chmod 777 $CCACHE_DIR
ENV PATH="/usr/lib/ccache:$PATH"
# Créer et définir le répertoire de travail
WORKDIR /app
# Copier les fichiers sources dans le conteneur
COPY ./bedrock /app/bedrock
# Compiler le projet
WORKDIR /app/bedrock
# Copier et rendre exécutable le script ci_tests.sh
COPY ./bedrock/ci_tests.sh /app/bedrock/ci_tests.sh
RUN chmod +x /app/bedrock/ci_tests.sh
ENV CC="clang-18"
ENV CXX="clang++-18"
# Exécuter le script ci_tests.sh
RUN make -j64
# Créer un répertoire pour les artefacts de build
RUN mkdir -p /output
RUN cp bedrock /output/
# Définir le volume pour partager les artefacts
VOLUME /output
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment