Skip to content

Commit e559209

Browse files
authored
XDB-368 create container with jemalloc (#159)
1 parent 01184cb commit e559209

4 files changed

Lines changed: 65 additions & 5 deletions

File tree

.github/workflows/build.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,8 @@ jobs:
5050
prepare: "debian-based"
5151
build_on: linux
5252
parallel: 5
53-
image: foundationdb-build:7.4.0-1.ow.build
54-
owner: owtech
53+
image: foundationdb-build:7.4.0-2.ow.build
54+
owner: ${GITHUB_REPOSITORY_OWNER@L}
5555
runs-on: ${{ matrix.run_on }}
5656
steps:
5757
- name: Checkout

build-scripts/for-linux/prepare-debian-based-cmake.bash

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ if dpkg --compare-versions "$EXISTING_VERSION" lt "$REQUIRED_VERSION"; then
1919

2020
if dpkg --compare-versions "$AVAILABLE_APT_VERSION" lt "$REQUIRED_VERSION"; then
2121
echo "Available cmake $AVAILABLE_APT_VERSION is too old. Installing one from $CMAKE_URL."
22-
sudo DEBIAN_FRONTEND=noninteractive apt-get install -y wget
2322
TMP_DIR=`mktemp -d`
2423
wget -O $TMP_DIR/cmake.tar.gz $CMAKE_URL
2524
sudo mkdir -p /opt
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
#!/bin/bash
2+
3+
# install jemalloc with version checking and fallback to source build
4+
5+
set -euo pipefail
6+
7+
REQUIRED_VERSION="5.3.0"
8+
JEMALLOC_URL="https://github.com/jemalloc/jemalloc/releases/download/${REQUIRED_VERSION}/jemalloc-${REQUIRED_VERSION}.tar.bz2"
9+
EXPECTED_SHA256="2db82d1e7119df3e71b7640219b6dfe84789bc0537983c3b7ac4f7189aecfeaa"
10+
11+
# Check available version
12+
echo "Checking system jemalloc version..."
13+
sudo apt-get update -qq
14+
AVAILABLE_APT_VERSION=$(apt-cache policy libjemalloc-dev | awk '/Candidate:/{print $2;}')
15+
16+
if dpkg --compare-versions "$AVAILABLE_APT_VERSION" ge "$REQUIRED_VERSION"; then
17+
echo "Installing jemalloc ${AVAILABLE_APT_VERSION} from apt..."
18+
sudo DEBIAN_FRONTEND=noninteractive apt-get install -y libjemalloc-dev
19+
exit 0
20+
fi
21+
22+
echo "System jemalloc ${AVAILABLE_APT_VERSION} is too old. Building ${REQUIRED_VERSION} from source..."
23+
24+
# Setup build environment
25+
BUILD_DIR=$(mktemp -d)
26+
trap 'rm -rf "$BUILD_DIR"' EXIT # Cleanup on exit
27+
28+
cd "$BUILD_DIR"
29+
30+
# Download and verify
31+
echo "Downloading jemalloc ${REQUIRED_VERSION}..."
32+
wget --quiet "$JEMALLOC_URL"
33+
34+
echo "Verifying checksum..."
35+
CALCULATED_SHA256=$(sha256sum "jemalloc-${REQUIRED_VERSION}.tar.bz2" | awk '{print $1}')
36+
37+
if [ "$EXPECTED_SHA256" != "$CALCULATED_SHA256" ]; then
38+
echo >&2 "ERROR: Hash verification failed!"
39+
echo >&2 "Expected: $EXPECTED_SHA256"
40+
echo >&2 "Got: $CALCULATED_SHA256"
41+
exit 1
42+
fi
43+
44+
# Build and install
45+
echo "Building jemalloc..."
46+
tar -xjf "jemalloc-${REQUIRED_VERSION}.tar.bz2"
47+
cd "jemalloc-${REQUIRED_VERSION}"
48+
49+
./configure \
50+
--prefix=/usr \
51+
--enable-static \
52+
--disable-cxx \
53+
--enable-prof \
54+
--libdir=/usr/lib/x86_64-linux-gnu \
55+
CC=clang \
56+
CXX=clang++
57+
58+
make -j "$(nproc)"
59+
sudo make install
60+
61+
echo "jemalloc ${REQUIRED_VERSION} successfully installed."

build-scripts/for-linux/prepare-debian-based.bash

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ BASE_DIR=`dirname $0`
66

77
sudo apt update
88

9-
# wget is required to download cmake 3.24 if you are using Debian 12 to build.
9+
# wget is required to download cmake 3.24 and jemalloc if you are using Debian 12 to build.
1010
sudo DEBIAN_FRONTEND=noninteractive apt-get install -y wget
1111

1212
$BASE_DIR/prepare-debian-based-cmake.bash 3.24
@@ -30,9 +30,9 @@ sudo DEBIAN_FRONTEND=noninteractive apt-get install -y \
3030
rpm
3131

3232
$BASE_DIR/prepare-debian-based-swift.bash
33+
$BASE_DIR/prepare-debian-based-jemalloc.bash
3334

3435
sudo DEBIAN_FRONTEND=noninteractive apt-get install -y \
35-
libjemalloc-dev \
3636
liblz4-dev \
3737
libssl-dev
3838

0 commit comments

Comments
 (0)