ci: build RocksDB 8.9.1 from source (Ubuntu 22.04 ships 6.11.4)
PR #10 added a configure-time FATAL_ERROR for RocksDB < 7.4.0 because the v5.9.24 daemon on DNS2 was built against librocksdb 6.11 and can't read smsgDB SST files written by newer RocksDB (XXH3 per-block checksum). The check worked — but it immediately failed CI, because GitHub's ubuntu-22.04 runners also ship librocksdb-dev 6.11.4. This is the same drift class the original patch was meant to prevent. Fix: build RocksDB from source in CI, pinned to 8.9.1 (matching DNS2's system version). Add scripts/ci/build-rocksdb.sh as a reusable helper and call it from each of the four Linux jobs (test-linux-unit, test-linux-sanitizers, build-linux-daemon, build-linux-qt). Drop librocksdb-dev from the apt-get install (otherwise find_library would pick up /usr/lib/librocksdb.so.6.11.4 first) and add libsnappy-dev / libzstd-dev / liblz4-dev (compression libs RocksDB optionally links against). MacOS was already passing — Homebrew's rocksdb is current. Windows was already passing — MSYS2's mingw-w64-rocksdb is at 9.x. Also fix a cosmetic CMake bug: the version-detect function was setting RocksDB_VERSION with PARENT_SCOPE only, so the 'Detected RocksDB version from version.h:' message printed an empty value. Set the local variable too so the STATUS message reflects the real value.
This commit is contained in:
@@ -22,7 +22,15 @@ jobs:
|
|||||||
sudo apt-get update
|
sudo apt-get update
|
||||||
sudo apt-get install -y build-essential cmake ninja-build \
|
sudo apt-get install -y build-essential cmake ninja-build \
|
||||||
libboost-all-dev libssl-dev libdb++-dev libleveldb-dev \
|
libboost-all-dev libssl-dev libdb++-dev libleveldb-dev \
|
||||||
librocksdb-dev libevent-dev libminiupnpc-dev zlib1g-dev
|
libevent-dev libminiupnpc-dev zlib1g-dev \
|
||||||
|
libsnappy-dev liblz4-dev libzstd-dev
|
||||||
|
|
||||||
|
- name: Build RocksDB from source
|
||||||
|
# Ubuntu 22.04's librocksdb-dev is 6.11.4 which CMakeLists.txt now
|
||||||
|
# refuses to configure against (need >= 7.4 for XXH3 per-block
|
||||||
|
# checksum). Build 8.9.1 from source — same version DNS2 ships —
|
||||||
|
# into /usr/local so CMake's find_library picks it up first.
|
||||||
|
run: sudo bash scripts/ci/build-rocksdb.sh
|
||||||
|
|
||||||
- name: Configure
|
- name: Configure
|
||||||
run: |
|
run: |
|
||||||
@@ -104,7 +112,11 @@ jobs:
|
|||||||
sudo apt-get update
|
sudo apt-get update
|
||||||
sudo apt-get install -y build-essential cmake ninja-build \
|
sudo apt-get install -y build-essential cmake ninja-build \
|
||||||
libboost-all-dev libssl-dev libdb++-dev libleveldb-dev \
|
libboost-all-dev libssl-dev libdb++-dev libleveldb-dev \
|
||||||
librocksdb-dev libevent-dev libminiupnpc-dev zlib1g-dev
|
libevent-dev libminiupnpc-dev zlib1g-dev \
|
||||||
|
libsnappy-dev liblz4-dev libzstd-dev
|
||||||
|
|
||||||
|
- name: Build RocksDB from source
|
||||||
|
run: sudo bash scripts/ci/build-rocksdb.sh
|
||||||
|
|
||||||
- name: Configure with sanitizers
|
- name: Configure with sanitizers
|
||||||
run: |
|
run: |
|
||||||
@@ -389,7 +401,11 @@ jobs:
|
|||||||
sudo apt-get install -y build-essential cmake ninja-build \
|
sudo apt-get install -y build-essential cmake ninja-build \
|
||||||
qtbase5-dev qttools5-dev-tools \
|
qtbase5-dev qttools5-dev-tools \
|
||||||
libboost-all-dev libssl-dev libdb++-dev \
|
libboost-all-dev libssl-dev libdb++-dev \
|
||||||
libleveldb-dev librocksdb-dev libevent-dev libminiupnpc-dev zlib1g-dev
|
libleveldb-dev libevent-dev libminiupnpc-dev zlib1g-dev \
|
||||||
|
libsnappy-dev liblz4-dev libzstd-dev
|
||||||
|
|
||||||
|
- name: Build RocksDB from source
|
||||||
|
run: sudo bash scripts/ci/build-rocksdb.sh
|
||||||
|
|
||||||
- name: Configure
|
- name: Configure
|
||||||
run: |
|
run: |
|
||||||
@@ -516,7 +532,11 @@ jobs:
|
|||||||
sudo apt-get update
|
sudo apt-get update
|
||||||
sudo apt-get install -y build-essential cmake ninja-build \
|
sudo apt-get install -y build-essential cmake ninja-build \
|
||||||
libboost-all-dev libssl-dev libdb++-dev libleveldb-dev \
|
libboost-all-dev libssl-dev libdb++-dev libleveldb-dev \
|
||||||
librocksdb-dev libevent-dev libminiupnpc-dev zlib1g-dev
|
libevent-dev libminiupnpc-dev zlib1g-dev \
|
||||||
|
libsnappy-dev liblz4-dev libzstd-dev
|
||||||
|
|
||||||
|
- name: Build RocksDB from source
|
||||||
|
run: sudo bash scripts/ci/build-rocksdb.sh
|
||||||
|
|
||||||
- name: Configure
|
- name: Configure
|
||||||
run: |
|
run: |
|
||||||
|
|||||||
@@ -165,6 +165,7 @@ function(_tri_detect_rocksdb_version_from_header)
|
|||||||
string(REGEX MATCH "[0-9]+" _maj "${_maj}")
|
string(REGEX MATCH "[0-9]+" _maj "${_maj}")
|
||||||
string(REGEX MATCH "[0-9]+" _min "${_min}")
|
string(REGEX MATCH "[0-9]+" _min "${_min}")
|
||||||
string(REGEX MATCH "[0-9]+" _pat "${_pat}")
|
string(REGEX MATCH "[0-9]+" _pat "${_pat}")
|
||||||
|
set(RocksDB_VERSION "${_maj}.${_min}.${_pat}")
|
||||||
set(RocksDB_VERSION "${_maj}.${_min}.${_pat}" PARENT_SCOPE)
|
set(RocksDB_VERSION "${_maj}.${_min}.${_pat}" PARENT_SCOPE)
|
||||||
message(STATUS "Detected RocksDB version from version.h: ${RocksDB_VERSION}")
|
message(STATUS "Detected RocksDB version from version.h: ${RocksDB_VERSION}")
|
||||||
return()
|
return()
|
||||||
|
|||||||
Executable
+56
@@ -0,0 +1,56 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
#
|
||||||
|
# build-rocksdb.sh — Build and install a pinned RocksDB version for CI.
|
||||||
|
#
|
||||||
|
# Ubuntu 22.04's librocksdb-dev is 6.11.4 (the same version that bit
|
||||||
|
# DNS2 — see PR #10). Triangles requires RocksDB >= 7.4.0 for the XXH3
|
||||||
|
# per-block checksum used in modern smsgDB SST files; src/smessage.cpp's
|
||||||
|
# SecMsgDB::Open has a runtime quarantine fallback, but the build-time
|
||||||
|
# check in CMakeLists.txt refuses to configure against < 7.4.
|
||||||
|
#
|
||||||
|
# This script clones RocksDB at a pinned tag, builds only the shared
|
||||||
|
# library (fast), installs to /usr/local, and refreshes ldconfig.
|
||||||
|
# Triangles' CMake find_library probes /usr/local before /usr/lib so
|
||||||
|
# the just-built copy is picked up first.
|
||||||
|
#
|
||||||
|
# Pinned version matches DNS2's system librocksdb (8.9.1) so test
|
||||||
|
# coverage matches production.
|
||||||
|
#
|
||||||
|
# Usage: sudo ./scripts/ci/build-rocksdb.sh
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
ROCKSDB_VERSION="${ROCKSDB_VERSION:-8.9.1}"
|
||||||
|
ROCKSDB_TAG="v${ROCKSDB_VERSION}"
|
||||||
|
INSTALL_PREFIX="${INSTALL_PREFIX:-/usr/local}"
|
||||||
|
JOBS="${JOBS:-$(nproc)}"
|
||||||
|
|
||||||
|
WORKDIR="$(mktemp -d)"
|
||||||
|
trap 'rm -rf "$WORKDIR"' EXIT
|
||||||
|
|
||||||
|
echo ">>> Building RocksDB ${ROCKSDB_TAG} (${JOBS} jobs) into ${INSTALL_PREFIX}"
|
||||||
|
|
||||||
|
git clone --depth 1 --branch "${ROCKSDB_TAG}" \
|
||||||
|
https://github.com/facebook/rocksdb.git "${WORKDIR}/rocksdb"
|
||||||
|
|
||||||
|
cd "${WORKDIR}/rocksdb"
|
||||||
|
|
||||||
|
# Shared library only — Triangles links dynamically. Statically linking
|
||||||
|
# rocksdb.a would also work but balloons the daemon binary by ~50 MB.
|
||||||
|
make -j"${JOBS}" shared_lib PORTABLE=1 USE_RTTI=1 \
|
||||||
|
EXTRA_CXXFLAGS="-Wno-error=deprecated-declarations"
|
||||||
|
|
||||||
|
make install-shared PREFIX="${INSTALL_PREFIX}"
|
||||||
|
|
||||||
|
ldconfig
|
||||||
|
|
||||||
|
# Sanity: installed library should be loadable and export the version
|
||||||
|
# macros we look for at configure time.
|
||||||
|
if ! ldconfig -p | grep -q "librocksdb.so.${ROCKSDB_VERSION}"; then
|
||||||
|
echo "!!! ldconfig did not pick up librocksdb.so.${ROCKSDB_VERSION}" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ">>> RocksDB ${ROCKSDB_TAG} installed to ${INSTALL_PREFIX}"
|
||||||
|
echo ">>> - library: ${INSTALL_PREFIX}/lib/librocksdb.so.${ROCKSDB_VERSION}"
|
||||||
|
echo ">>> - headers: ${INSTALL_PREFIX}/include/rocksdb/version.h"
|
||||||
|
ls -l "${INSTALL_PREFIX}/lib/librocksdb.so"* "${INSTALL_PREFIX}/include/rocksdb/version.h"
|
||||||
Reference in New Issue
Block a user