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 install -y build-essential cmake ninja-build \
|
||||
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
|
||||
run: |
|
||||
@@ -104,7 +112,11 @@ jobs:
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y build-essential cmake ninja-build \
|
||||
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
|
||||
run: |
|
||||
@@ -389,7 +401,11 @@ jobs:
|
||||
sudo apt-get install -y build-essential cmake ninja-build \
|
||||
qtbase5-dev qttools5-dev-tools \
|
||||
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
|
||||
run: |
|
||||
@@ -516,7 +532,11 @@ jobs:
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y build-essential cmake ninja-build \
|
||||
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
|
||||
run: |
|
||||
|
||||
@@ -165,6 +165,7 @@ function(_tri_detect_rocksdb_version_from_header)
|
||||
string(REGEX MATCH "[0-9]+" _maj "${_maj}")
|
||||
string(REGEX MATCH "[0-9]+" _min "${_min}")
|
||||
string(REGEX MATCH "[0-9]+" _pat "${_pat}")
|
||||
set(RocksDB_VERSION "${_maj}.${_min}.${_pat}")
|
||||
set(RocksDB_VERSION "${_maj}.${_min}.${_pat}" PARENT_SCOPE)
|
||||
message(STATUS "Detected RocksDB version from version.h: ${RocksDB_VERSION}")
|
||||
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