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."
0 commit comments