docs/content/stable/contribute/core-database/build-from-src-ubuntu.md
{{< note title="Note" >}}
AlmaLinux 8 is the recommended Linux development platform for YugabyteDB.
{{< /note >}}
The following instructions are for Ubuntu 20.04 and 22.04.
{{% readfile "includes/tldr.md" %}}
# Modify to your preference:
shellrc=~/.bashrc
source <(cat /etc/os-release | grep '^VERSION_ID=')
case "$VERSION_ID" in
20.04)
gcc_version=10
# 20.04 needs deadsnakes repo for python3.11 installed below
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt update
;;
22.04)
gcc_version=11
;;
*)
echo "Unknown version $VERSION_ID"
exit 1
esac
sudo apt update
DEBIAN_FRONTEND=noninteractive sudo apt upgrade -y
packages=(
autoconf
build-essential
ccache
curl
file
g++-"$gcc_version"
gcc-"$gcc_version"
gettext
git
golang-1.20
libffi-dev
locales
maven
ninja-build
npm
patchelf
pkg-config
python3.11
python3.11-dev
python3.11-venv
rsync
)
# Avoid tzdata package configuration prompt.
if [ ! -e /etc/localtime ]; then
sudo ln -s /usr/share/zoneinfo/Etc/UTC /etc/localtime
fi
DEBIAN_FRONTEND=noninteractive sudo apt install -y "${packages[@]}"
sudo locale-gen en_US.UTF-8
sudo mkdir /opt/yb-build
# If you'd like to use an unprivileged user for development, manually
# run/modify instructions from here onwards (change $USER, make sure shell
# variables are set appropriately when switching users).
sudo chown "$USER" /opt/yb-build
mkdir ~/tools
curl -L "https://github.com/Kitware/CMake/releases/download/v3.31.0/cmake-3.31.0-linux-x86_64.tar.gz" | tar xzC ~/tools
source <(echo 'export PATH="$HOME/tools/cmake-3.31.0-linux-x86_64/bin:$PATH"' \
| tee -a "$shellrc")
source <(echo 'export PATH="/usr/lib/go-1.20/bin:$PATH"' \
| tee -a "$shellrc")
source <(echo 'export YB_CCACHE_DIR="$HOME/.cache/yb_ccache"' \
| tee -a "$shellrc")
git clone https://github.com/yugabyte/yugabyte-db
cd yugabyte-db
case "$VERSION_ID" in
20.04)
./yb_release --build_args=--clang16
;;
22.04)
./yb_release --build_args=--clang17
;;
esac
Update and install basic development packages as follows:
sudo apt update
sudo apt upgrade -y
packages=(
autoconf
build-essential
curl
gettext
git
locales
pkg-config
rsync
)
sudo apt install -y "${packages[@]}"
sudo locale-gen en_US.UTF-8
{{% readfile "includes/opt-yb-build.md" %}}
{{% readfile "includes/python.md" %}}
# 20.04 needs deadsnakes repo for python3.11 installed below.
if grep -q '20.04' /etc/os-release; then
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt update
fi
sudo apt install -y libffi-dev python3.11 python3.11-dev python3.11-venv
{{% readfile "includes/cmake.md" %}}
{{% readfile "includes/java.md" %}}
Install the following package to satisfy the preceding requirements:
sudo apt install -y maven
{{% readfile "includes/yugabyted-ui.md" %}}
sudo apt install -y npm golang-1.20
# Also add the following line to your .bashrc or equivalent.
export PATH="/usr/lib/go-1.20/bin:$PATH"
{{% readfile "includes/ninja.md" %}}
sudo apt install -y ninja-build
{{% readfile "includes/ccache.md" %}}
sudo apt install -y ccache
# Also add the following line to your .bashrc or equivalent.
export YB_CCACHE_DIR="$HOME/.cache/yb_ccache"
To compile with GCC, install the following packages, and adjust the version numbers to match the GCC version you plan to use.
sudo apt install -y gcc-13 g++-13
{{% readfile "includes/build-the-code.md" %}}
Perform the following steps to build a release package:
Install additional packages using the following command:
sudo apt install -y file patchelf
Run the yb_release script using the following command:
./yb_release
......
2023-02-17 01:26:37,156 [yb_release.py:299 INFO] Generated a package at '/home/user/code/yugabyte-db/build/yugabyte-2.17.2.0-ede2a2619ea8470064a5a2c0d7fa510dbee3ce81-release-clang15-ubuntu20-x86_64.tar.gz'
{{% readfile "includes/ulimit.md" %}}