blob: 4822f0bc0ebe259a9c80857fb750950d261b7fa6 [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Pegasus | Compile From Source</title>
<link rel="stylesheet" href="/assets/css/app.css">
<link rel="shortcut icon" href="/assets/images/favicon.ico">
<link rel="stylesheet" href="/assets/css/utilities.min.css">
<link rel="stylesheet" href="/assets/css/docsearch.v3.css">
<script src="/assets/js/jquery.min.js"></script>
<script src="/assets/js/all.min.js"></script>
<script src="/assets/js/docsearch.v3.js"></script>
<!-- Begin Jekyll SEO tag v2.8.0 -->
<title>Compile From Source | Pegasus</title>
<meta name="generator" content="Jekyll v4.3.2" />
<meta property="og:title" content="Compile From Source" />
<meta property="og:locale" content="en_US" />
<meta name="description" content="Since 2.4.0, Pegasus supports to build both on Linux and macOS. Please don’t hesitate to contact us via Github Issues when you encountered any problem." />
<meta property="og:description" content="Since 2.4.0, Pegasus supports to build both on Linux and macOS. Please don’t hesitate to contact us via Github Issues when you encountered any problem." />
<meta property="og:site_name" content="Pegasus" />
<meta property="og:type" content="article" />
<meta property="article:published_time" content="2023-11-23T14:57:08+00:00" />
<meta name="twitter:card" content="summary" />
<meta property="twitter:title" content="Compile From Source" />
<script type="application/ld+json">
{"@context":"https://schema.org","@type":"BlogPosting","dateModified":"2023-11-23T14:57:08+00:00","datePublished":"2023-11-23T14:57:08+00:00","description":"Since 2.4.0, Pegasus supports to build both on Linux and macOS. Please don’t hesitate to contact us via Github Issues when you encountered any problem.","headline":"Compile From Source","mainEntityOfPage":{"@type":"WebPage","@id":"/2.4.0/docs/build/compile-from-source/"},"url":"/2.4.0/docs/build/compile-from-source/"}</script>
<!-- End Jekyll SEO tag -->
</head>
<body>
<div class="dashboard is-full-height">
<!-- left panel -->
<div class="dashboard-panel is-medium is-hidden-mobile pl-0">
<div class="dashboard-panel-header has-text-centered">
<a href="/">
<img src="/assets/images/pegasus-logo-inv.png" style="width: 80%;">
</a>
<div class="dropdown pt-3 has-text-left">
<div class="dropdown-trigger">
<button class="button" aria-haspopup="true" aria-controls="dropdown-menu3">
<span>2.4.0</span>
<span class="icon is-small">
<i class="fas fa-angle-down" aria-hidden="true"></i>
</span>
</button>
</div>
<div class="dropdown-menu">
<div class="dropdown-content">
<!--URL of our latest version always starts without version prefixed.-->
<a href="2.4.0/docs/build/compile-from-source/" class="dropdown-item ">
master
</a>
<!--URL of our latest version always starts without version prefixed.-->
<a href="/2.4.02.4.0/docs/build/compile-from-source/" class="dropdown-item is-active">
2.4.0
</a>
<!--URL of our latest version always starts without version prefixed.-->
<a href="/2.3.02.4.0/docs/build/compile-from-source/" class="dropdown-item ">
2.3.0
</a>
<!--URL of our latest version always starts without version prefixed.-->
<a href="/2.2.02.4.0/docs/build/compile-from-source/" class="dropdown-item ">
2.2.0
</a>
<!--URL of our latest version always starts without version prefixed.-->
<a href="/2.1.02.4.0/docs/build/compile-from-source/" class="dropdown-item ">
2.1.0
</a>
<!--URL of our latest version always starts without version prefixed.-->
<a href="/2.0.02.4.0/docs/build/compile-from-source/" class="dropdown-item ">
2.0.0
</a>
<!--URL of our latest version always starts without version prefixed.-->
<a href="/1.12.32.4.0/docs/build/compile-from-source/" class="dropdown-item ">
1.12.3
</a>
<!--URL of our latest version always starts without version prefixed.-->
<a href="/1.12.02.4.0/docs/build/compile-from-source/" class="dropdown-item ">
1.12.0
</a>
<!--URL of our latest version always starts without version prefixed.-->
<a href="/1.11.62.4.0/docs/build/compile-from-source/" class="dropdown-item ">
1.11.6
</a>
<!--URL of our latest version always starts without version prefixed.-->
<a href="/1.11.32.4.0/docs/build/compile-from-source/" class="dropdown-item ">
1.11.3
</a>
<!--URL of our latest version always starts without version prefixed.-->
<a href="/1.10.02.4.0/docs/build/compile-from-source/" class="dropdown-item ">
1.10.0
</a>
<!--URL of our latest version always starts without version prefixed.-->
<a href="/1.9.02.4.0/docs/build/compile-from-source/" class="dropdown-item ">
1.9.0
</a>
</div>
</div>
</div>
</div>
<div class="dashboard-panel-main is-scrollable pl-6">
<aside class="menu">
<p class="menu-label">The Pegasus documentation</p>
<ul class="menu-list">
<li>
<a href="/docs/downloads"
class="">
Downloads
</a>
</li>
</ul>
<p class="menu-label">Building Pegasus</p>
<ul class="menu-list">
<li>
<a href="/docs/build/compile-by-docker"
class="">
Compile by docker (recommended)
</a>
</li>
<li>
<a href="/docs/build/compile-from-source"
class="">
Compile from source
</a>
</li>
</ul>
<p class="menu-label">Client Libs</p>
<ul class="menu-list">
<li>
<a href="/clients/java-client"
class="">
Java Client
</a>
</li>
<li>
<a href="/clients/cpp-client"
class="">
C++ Client
</a>
</li>
<li>
<a href="https://github.com/apache/incubator-pegasus/tree/master/go-client"
class="">
Golang Client
</a>
</li>
<li>
<a href="/clients/python-client"
class="">
Python Client
</a>
</li>
<li>
<a href="/clients/node-client"
class="">
NodeJS Client
</a>
</li>
<li>
<a href="/clients/scala-client"
class="">
Scala Client
</a>
</li>
</ul>
<p class="menu-label">Tools</p>
<ul class="menu-list">
<li>
<a href="/docs/tools/shell"
class="">
Pegasus Shell
</a>
</li>
<li>
<a href="https://github.com/pegasus-kv/admin-cli"
class="">
Admin CLI
</a>
</li>
<li>
<a href="https://github.com/pegasus-kv/pegic"
class="">
Pegasus data access CLI
</a>
</li>
</ul>
<p class="menu-label">API</p>
<ul class="menu-list">
<li>
<a href="/api/ttl"
class="">
TTL(Time To Live)
</a>
</li>
<li>
<a href="/api/single-atomic"
class="">
Single-Atomic Operations
</a>
</li>
<li>
<a href="/api/redis"
class="">
Redis Adaption
</a>
</li>
<li>
<a href="/api/geo"
class="">
GEO Support
</a>
</li>
<li>
<a href="/api/http"
class="">
HTTP API
</a>
</li>
</ul>
<p class="menu-label">Admin</p>
<ul class="menu-list">
<li>
<a href="/administration/deployment"
class="">
Deployment
</a>
</li>
<li>
<a href="/administration/config"
class="">
Configurations
</a>
</li>
<li>
<a href="/administration/rebalance"
class="">
Rebalance
</a>
</li>
<li>
<a href="/administration/monitoring"
class="">
Monitoring
</a>
</li>
<li>
<a href="/administration/rolling-update"
class="">
Rolling-Update
</a>
</li>
<li>
<a href="/administration/scale-in-out"
class="">
Scale-in and Scale-out
</a>
</li>
<li>
<a href="/administration/resource-management"
class="">
Resource Management
</a>
</li>
<li>
<a href="/administration/cold-backup"
class="">
Cold Backup
</a>
</li>
<li>
<a href="/administration/meta-recovery"
class="">
Metadata Recovery
</a>
</li>
<li>
<a href="/administration/replica-recovery"
class="">
Replica Data Recovery
</a>
</li>
<li>
<a href="/administration/zk-migration"
class="">
Zookeeper Migration
</a>
</li>
<li>
<a href="/administration/table-migration"
class="">
Table Migration
</a>
</li>
<li>
<a href="/administration/table-soft-delete"
class="">
Table Soft-Delete
</a>
</li>
<li>
<a href="/administration/table-env"
class="">
Table Environment Variables
</a>
</li>
<li>
<a href="/administration/remote-commands"
class="">
Remote Command
</a>
</li>
<li>
<a href="/administration/partition-split"
class="">
Partition-Split
</a>
</li>
<li>
<a href="/administration/duplication"
class="">
Duplication
</a>
</li>
<li>
<a href="/administration/compression"
class="">
Data Compression
</a>
</li>
<li>
<a href="/administration/throttling"
class="">
Throttling
</a>
</li>
<li>
<a href="/administration/experiences"
class="">
Experiences
</a>
</li>
<li>
<a href="/administration/manual-compact"
class="">
Manual Compact
</a>
</li>
<li>
<a href="/administration/usage-scenario"
class="">
Usage Scenario
</a>
</li>
<li>
<a href="/administration/bad-disk"
class="">
Bad Disk Repair
</a>
</li>
<li>
<a href="/administration/whitelist"
class="">
Whitelist
</a>
</li>
<li>
<a href="/administration/backup-request"
class="">
Backup Request
</a>
</li>
<li>
<a href="/administration/hotspot-detection"
class="">
Hotspot Detection
</a>
</li>
</ul>
</aside>
</div>
</div>
<!-- main section -->
<div class="dashboard-main is-scrollable">
<nav class="navbar is-hidden-desktop">
<div class="navbar-brand">
<a href="/" class="navbar-item">
<!-- Pegasus Icon -->
<img src="/assets/images/pegasus-square.png">
</a>
<div class="navbar-item">
<!--A simple language switch button that only supports zh and en.-->
<!--IF its language is zh, then switches to en.-->
<a class="button is-light is-outlined is-inverted" href="/zh/2.4.0/docs/build/compile-from-source/"><strong></strong></a>
</div>
<a role="button" class="navbar-burger burger" aria-label="menu" aria-expanded="false" data-target="navMenu">
<!-- Appears in mobile mode only -->
<span aria-hidden="true"></span>
<span aria-hidden="true"></span>
<span aria-hidden="true"></span>
</a>
</div>
<div class="navbar-menu" id="navMenu">
<div class="navbar-end">
<!--dropdown-->
<div class="navbar-item has-dropdown is-hoverable">
<a href=""
class="navbar-link ">
<span>
The Pegasus documentation
</span>
</a>
<div class="navbar-dropdown">
<a href="/docs/downloads"
class="navbar-item ">
Downloads
</a>
</div>
</div>
<!--dropdown-->
<div class="navbar-item has-dropdown is-hoverable">
<a href=""
class="navbar-link ">
<span>
Building Pegasus
</span>
</a>
<div class="navbar-dropdown">
<a href="/docs/build/compile-by-docker"
class="navbar-item ">
Compile by docker (recommended)
</a>
<a href="/docs/build/compile-from-source"
class="navbar-item ">
Compile from source
</a>
</div>
</div>
<!--dropdown-->
<div class="navbar-item has-dropdown is-hoverable">
<a href=""
class="navbar-link ">
<span>
Client Libs
</span>
</a>
<div class="navbar-dropdown">
<a href="/clients/java-client"
class="navbar-item ">
Java Client
</a>
<a href="/clients/cpp-client"
class="navbar-item ">
C++ Client
</a>
<a href="https://github.com/apache/incubator-pegasus/tree/master/go-client"
class="navbar-item ">
Golang Client
</a>
<a href="/clients/python-client"
class="navbar-item ">
Python Client
</a>
<a href="/clients/node-client"
class="navbar-item ">
NodeJS Client
</a>
<a href="/clients/scala-client"
class="navbar-item ">
Scala Client
</a>
</div>
</div>
<!--dropdown-->
<div class="navbar-item has-dropdown is-hoverable">
<a href=""
class="navbar-link ">
<span>
Tools
</span>
</a>
<div class="navbar-dropdown">
<a href="/docs/tools/shell"
class="navbar-item ">
Pegasus Shell
</a>
<a href="https://github.com/pegasus-kv/admin-cli"
class="navbar-item ">
Admin CLI
</a>
<a href="https://github.com/pegasus-kv/pegic"
class="navbar-item ">
Pegasus data access CLI
</a>
</div>
</div>
<!--dropdown-->
<div class="navbar-item has-dropdown is-hoverable">
<a href=""
class="navbar-link ">
<span>
API
</span>
</a>
<div class="navbar-dropdown">
<a href="/api/ttl"
class="navbar-item ">
TTL(Time To Live)
</a>
<a href="/api/single-atomic"
class="navbar-item ">
Single-Atomic Operations
</a>
<a href="/api/redis"
class="navbar-item ">
Redis Adaption
</a>
<a href="/api/geo"
class="navbar-item ">
GEO Support
</a>
<a href="/api/http"
class="navbar-item ">
HTTP API
</a>
</div>
</div>
<!--dropdown-->
<div class="navbar-item has-dropdown is-hoverable">
<a href=""
class="navbar-link ">
<span>
Admin
</span>
</a>
<div class="navbar-dropdown">
<a href="/administration/deployment"
class="navbar-item ">
Deployment
</a>
<a href="/administration/config"
class="navbar-item ">
Configurations
</a>
<a href="/administration/rebalance"
class="navbar-item ">
Rebalance
</a>
<a href="/administration/monitoring"
class="navbar-item ">
Monitoring
</a>
<a href="/administration/rolling-update"
class="navbar-item ">
Rolling-Update
</a>
<a href="/administration/scale-in-out"
class="navbar-item ">
Scale-in and Scale-out
</a>
<a href="/administration/resource-management"
class="navbar-item ">
Resource Management
</a>
<a href="/administration/cold-backup"
class="navbar-item ">
Cold Backup
</a>
<a href="/administration/meta-recovery"
class="navbar-item ">
Metadata Recovery
</a>
<a href="/administration/replica-recovery"
class="navbar-item ">
Replica Data Recovery
</a>
<a href="/administration/zk-migration"
class="navbar-item ">
Zookeeper Migration
</a>
<a href="/administration/table-migration"
class="navbar-item ">
Table Migration
</a>
<a href="/administration/table-soft-delete"
class="navbar-item ">
Table Soft-Delete
</a>
<a href="/administration/table-env"
class="navbar-item ">
Table Environment Variables
</a>
<a href="/administration/remote-commands"
class="navbar-item ">
Remote Command
</a>
<a href="/administration/partition-split"
class="navbar-item ">
Partition-Split
</a>
<a href="/administration/duplication"
class="navbar-item ">
Duplication
</a>
<a href="/administration/compression"
class="navbar-item ">
Data Compression
</a>
<a href="/administration/throttling"
class="navbar-item ">
Throttling
</a>
<a href="/administration/experiences"
class="navbar-item ">
Experiences
</a>
<a href="/administration/manual-compact"
class="navbar-item ">
Manual Compact
</a>
<a href="/administration/usage-scenario"
class="navbar-item ">
Usage Scenario
</a>
<a href="/administration/bad-disk"
class="navbar-item ">
Bad Disk Repair
</a>
<a href="/administration/whitelist"
class="navbar-item ">
Whitelist
</a>
<a href="/administration/backup-request"
class="navbar-item ">
Backup Request
</a>
<a href="/administration/hotspot-detection"
class="navbar-item ">
Hotspot Detection
</a>
</div>
</div>
</div>
</div>
</nav>
<nav class="navbar is-hidden-mobile">
<div class="navbar-start w-full">
<div class="navbar-item pl-0 w-full">
<!--TODO(wutao): Given the limitation of docsearch that couldn't handle multiple input,
I make searchbox only shown in desktop. Fix this issue when docsearch.js v3 released.
Related issue: https://github.com/algolia/docsearch/issues/230-->
<div id="docsearch"></div>
</div>
</div>
<div class="navbar-end">
<div class="navbar-item">
<!--A simple language switch button that only supports zh and en.-->
<!--IF its language is zh, then switches to en.-->
<a class="button is-light is-outlined is-inverted" href="/zh/2.4.0/docs/build/compile-from-source/"><strong></strong></a>
</div>
</div>
</nav>
<section class="hero is-info lg:mr-3">
<div class="hero-body">
<p class="title is-size-2 is-centered">Compile from source</p>
</div>
</section>
<section class="section" style="padding-top: 2rem;">
<div class="content">
<p>Since 2.4.0, Pegasus supports to build both on Linux and macOS. Please don’t hesitate to contact us via <a href="https://github.com/apache/incubator-pegasus/issues">Github Issues</a> when you encountered any problem.</p>
<h2 id="requirements">Requirements</h2>
<ul>
<li>GCC 5+</li>
<li>CMake 3.11+</li>
</ul>
<h2 id="ubuntu-environment">Ubuntu environment</h2>
<p>You can refer to the docker image <a href="https://github.com/apache/incubator-pegasus/blob/v2.4/docker/pegasus-build-env/ubuntu2004/Dockerfile">pegasus-build-dev/ubuntu20.04</a> to install all dependencies.</p>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>apt-get update <span class="nt">-y</span><span class="p">;</span> <span class="se">\</span>
apt-get <span class="nb">install</span> <span class="nt">-y</span> <span class="nt">--no-install-recommends</span> <span class="se">\</span>
build-essential <span class="se">\</span>
software-properties-common <span class="se">\</span>
clang-10 <span class="se">\</span>
openjdk-8-jdk <span class="se">\</span>
python3-pip <span class="se">\</span>
libaio-dev <span class="se">\</span>
libsnappy-dev <span class="se">\</span>
libbz2-dev <span class="se">\</span>
libzstd-dev <span class="se">\</span>
liblz4-dev <span class="se">\</span>
zlib1g <span class="se">\</span>
zlib1g.dev <span class="se">\</span>
patch <span class="se">\</span>
netcat <span class="se">\</span>
wget <span class="se">\</span>
ccache <span class="se">\</span>
git <span class="se">\</span>
curl <span class="se">\</span>
zip <span class="se">\</span>
unzip <span class="se">\</span>
gdb <span class="se">\</span>
vim <span class="se">\</span>
automake <span class="se">\</span>
libtool <span class="se">\</span>
libssl-dev <span class="se">\</span>
bison <span class="se">\</span>
maven <span class="se">\</span>
flex<span class="p">;</span>
pip3 <span class="nb">install</span> <span class="nt">--no-cache-dir</span> cmake
</code></pre></div></div>
<h2 id="centos-environment">CentOS environment</h2>
<p>You can refer to the docker image <a href="https://github.com/apache/incubator-pegasus/blob/v2.4/docker/pegasus-build-env/centos7/Dockerfile">pegasus-build-dev/centos7</a> to install all dependencies.</p>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>yum <span class="nt">-y</span> <span class="nb">install </span>centos-release-scl <span class="se">\</span>
scl-utils <span class="se">\</span>
epel-release<span class="p">;</span> <span class="se">\</span>
yum <span class="nt">-y</span> <span class="nb">install </span>devtoolset-7-gcc <span class="se">\</span>
devtoolset-7-gcc-c++ <span class="se">\</span>
java-1.8.0-openjdk-devel.x86_64 <span class="se">\</span>
python3 <span class="se">\</span>
automake <span class="se">\</span>
autoconf <span class="se">\</span>
make <span class="se">\</span>
libtool <span class="se">\</span>
git <span class="se">\</span>
file <span class="se">\</span>
wget <span class="se">\</span>
ccache <span class="se">\</span>
nmap-ncat <span class="se">\</span>
zip <span class="se">\</span>
gdb <span class="se">\</span>
vim <span class="se">\</span>
unzip <span class="se">\</span>
which <span class="se">\</span>
openssl-devel <span class="se">\</span>
libaio-devel <span class="se">\</span>
snappy-devel <span class="se">\</span>
bzip2-devel <span class="se">\</span>
zlib <span class="se">\</span>
zlib-devel <span class="se">\</span>
libzstd-devel <span class="se">\</span>
lz4-devel <span class="se">\</span>
bison <span class="se">\</span>
flex <span class="se">\</span>
patch<span class="p">;</span>
pip3 <span class="nb">install</span> <span class="nt">--no-cache-dir</span> cmake
</code></pre></div></div>
<h2 id="compilation">Compilation</h2>
<p>Firstly, make sure:</p>
<ul>
<li><code class="language-plaintext highlighter-rouge">maven</code> has been installed correctly and added to <code class="language-plaintext highlighter-rouge">PATH</code></li>
<li><code class="language-plaintext highlighter-rouge">devtoolset-7</code> has been added to <code class="language-plaintext highlighter-rouge">PATH</code></li>
<li><code class="language-plaintext highlighter-rouge">JAVA_HOME</code> has been set correctly</li>
</ul>
<p>Please refer to <a href="/docs/downloads">Downloads</a> to fetch the sources。</p>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>./run.sh build <span class="nt">-c</span>
</code></pre></div></div>
<p>The output of compilation will be placed under <code class="language-plaintext highlighter-rouge">DSN_ROOT</code> of the source directory. It includes <code class="language-plaintext highlighter-rouge">bin</code>, <code class="language-plaintext highlighter-rouge">include</code> and <code class="language-plaintext highlighter-rouge">lib</code>.</p>
<h2 id="packaging">Packaging</h2>
<p>Package server binaries for deployment:</p>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>./run.sh pack_server
</code></pre></div></div>
<p>Package client libraries for C/C++ development:</p>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>./run.sh pack_client
</code></pre></div></div>
<p>Package toolset which includes various tools (shell, bench):</p>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>./run.sh pack_tools
</code></pre></div></div>
<p>If this is your first time compiling Pegasus, it’s recommended to try <a href="/overview/onebox">onebox</a>.</p>
</div>
</section>
<footer class="footer">
<div class="container">
<div class="content is-small has-text-centered">
<div style="margin-bottom: 20px;">
<a href="http://incubator.apache.org">
<img src="/assets/images/egg-logo.png"
width="15%"
alt="Apache Incubator"/>
</a>
</div>
Copyright &copy; 2023 <a href="http://www.apache.org">The Apache Software Foundation</a>.
Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version
2.0</a>.
<br><br>
Apache Pegasus is an effort undergoing incubation at The Apache Software Foundation (ASF),
sponsored by the Apache Incubator. Incubation is required of all newly accepted projects
until a further review indicates that the infrastructure, communications, and decision making process
have stabilized in a manner consistent with other successful ASF projects. While incubation status is
not necessarily a reflection of the completeness or stability of the code, it does indicate that the
project has yet to be fully endorsed by the ASF.
<br><br>
Apache Pegasus, Pegasus, Apache, the Apache feather logo, and the Apache Pegasus project logo are either
registered trademarks or trademarks of The Apache Software Foundation in the United States and other
countries.
</div>
</div>
</footer>
</div>
<!-- right panel -->
<div class="dashboard-panel is-small is-scrollable is-hidden-mobile">
<p class="menu-label">
<span class="icon">
<i class="fa fa-bars" aria-hidden="true"></i>
</span>
Table of contents
</p>
<ul class="menu-list">
<li><a href="#requirements">Requirements</a></li>
<li><a href="#ubuntu-environment">Ubuntu environment</a></li>
<li><a href="#centos-environment">CentOS environment</a></li>
<li><a href="#compilation">Compilation</a></li>
<li><a href="#packaging">Packaging</a></li>
</ul>
</div>
</div>
<script src="/assets/js/app.js" type="text/javascript"></script>
<script>
docsearch({
container: '#docsearch',
appId: 'QRN30RBW0S',
indexName: 'pegasus-apache',
apiKey: 'd3a3252fa344359766707a106c4ed88f',
debug: true
});
</script>
</body>
</html>