### What this PR does / why we need it? This patch aims to integrate the mooncake [v0.3.7.2.post2](https://github.com/kvcache-ai/Mooncake/releases/tag/v0.3.7.post2) to vllm-ascend images Signed-off-by: wangli <wangli858794774@gmail.com>
This commit is contained in:
21
Dockerfile
21
Dockerfile
@@ -19,20 +19,29 @@ FROM quay.io/ascend/cann:8.3.rc2-910b-ubuntu22.04-py3.11
|
|||||||
|
|
||||||
ARG PIP_INDEX_URL="https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple"
|
ARG PIP_INDEX_URL="https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple"
|
||||||
ARG COMPILE_CUSTOM_KERNELS=1
|
ARG COMPILE_CUSTOM_KERNELS=1
|
||||||
|
ARG MOONCAKE_TAG="v0.3.7.post2"
|
||||||
|
|
||||||
# Define environments
|
# Define environments
|
||||||
ENV DEBIAN_FRONTEND=noninteractive
|
ENV DEBIAN_FRONTEND=noninteractive
|
||||||
ENV COMPILE_CUSTOM_KERNELS=${COMPILE_CUSTOM_KERNELS}
|
ENV COMPILE_CUSTOM_KERNELS=${COMPILE_CUSTOM_KERNELS}
|
||||||
|
|
||||||
RUN apt-get update -y && \
|
|
||||||
apt-get install -y python3-pip git vim wget net-tools gcc g++ cmake libnuma-dev && \
|
|
||||||
rm -rf /var/cache/apt/* && \
|
|
||||||
rm -rf /var/lib/apt/lists/*
|
|
||||||
|
|
||||||
WORKDIR /workspace
|
WORKDIR /workspace
|
||||||
|
|
||||||
COPY . /vllm-workspace/vllm-ascend/
|
COPY . /vllm-workspace/vllm-ascend/
|
||||||
|
|
||||||
|
# Install Mooncake dependencies
|
||||||
|
RUN apt-get update -y && \
|
||||||
|
apt-get install -y git vim wget net-tools gcc g++ cmake libnuma-dev && \
|
||||||
|
git clone --depth 1 --branch ${MOONCAKE_TAG} https://github.com/kvcache-ai/Mooncake /vllm-workspace/Mooncake && \
|
||||||
|
cp /vllm-workspace/vllm-ascend/tools/mooncake_installer.sh /vllm-workspace/Mooncake/ && \
|
||||||
|
cd /vllm-workspace/Mooncake && bash mooncake_installer.sh -y && \
|
||||||
|
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/Ascend/ascend-toolkit/latest/`uname -i`-linux/lib64 && \
|
||||||
|
mkdir -p build && cd build && cmake .. -DUSE_ASCEND_DIRECT=ON && \
|
||||||
|
make -j$(nproc) && make install && \
|
||||||
|
rm -fr /vllm-workspace/Mooncake/build && \
|
||||||
|
rm -rf /var/cache/apt/* && \
|
||||||
|
rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
RUN pip config set global.index-url ${PIP_INDEX_URL}
|
RUN pip config set global.index-url ${PIP_INDEX_URL}
|
||||||
|
|
||||||
# Install vLLM
|
# Install vLLM
|
||||||
@@ -54,7 +63,7 @@ RUN export PIP_EXTRA_INDEX_URL=https://mirrors.huaweicloud.com/ascend/repos/pypi
|
|||||||
python3 -m pip cache purge
|
python3 -m pip cache purge
|
||||||
|
|
||||||
# Install modelscope (for fast download) and ray (for multinode)
|
# Install modelscope (for fast download) and ray (for multinode)
|
||||||
RUN python3 -m pip install modelscope 'ray>=2.47.1' 'protobuf>3.20.0' && \
|
RUN python3 -m pip install modelscope 'ray>=2.47.1,<=2.48.0' 'protobuf>3.20.0' && \
|
||||||
python3 -m pip cache purge
|
python3 -m pip cache purge
|
||||||
|
|
||||||
CMD ["/bin/bash"]
|
CMD ["/bin/bash"]
|
||||||
|
|||||||
@@ -19,21 +19,29 @@ FROM quay.io/ascend/cann:8.3.rc2-a3-ubuntu22.04-py3.11
|
|||||||
|
|
||||||
ARG PIP_INDEX_URL="https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple"
|
ARG PIP_INDEX_URL="https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple"
|
||||||
ARG COMPILE_CUSTOM_KERNELS=1
|
ARG COMPILE_CUSTOM_KERNELS=1
|
||||||
|
ARG MOONCAKE_TAG=v0.3.7.post2
|
||||||
|
|
||||||
|
COPY . /vllm-workspace/vllm-ascend/
|
||||||
# Define environments
|
# Define environments
|
||||||
ENV DEBIAN_FRONTEND=noninteractive
|
ENV DEBIAN_FRONTEND=noninteractive
|
||||||
ENV COMPILE_CUSTOM_KERNELS=${COMPILE_CUSTOM_KERNELS}
|
ENV COMPILE_CUSTOM_KERNELS=${COMPILE_CUSTOM_KERNELS}
|
||||||
|
|
||||||
RUN apt-get update -y && \
|
RUN pip config set global.index-url ${PIP_INDEX_URL}
|
||||||
apt-get install -y python3-pip git vim wget net-tools gcc g++ cmake libnuma-dev && \
|
|
||||||
rm -rf /var/cache/apt/* && \
|
|
||||||
rm -rf /var/lib/apt/lists/*
|
|
||||||
|
|
||||||
WORKDIR /workspace
|
WORKDIR /workspace
|
||||||
|
|
||||||
COPY . /vllm-workspace/vllm-ascend/
|
# Install Mooncake dependencies
|
||||||
|
RUN apt-get update -y && \
|
||||||
RUN pip config set global.index-url ${PIP_INDEX_URL}
|
apt-get install -y git vim wget net-tools gcc g++ cmake libnuma-dev && \
|
||||||
|
git clone --depth 1 --branch ${MOONCAKE_TAG} https://github.com/kvcache-ai/Mooncake /vllm-workspace/Mooncake && \
|
||||||
|
cp /vllm-workspace/vllm-ascend/tools/mooncake_installer.sh /vllm-workspace/Mooncake/ && \
|
||||||
|
cd /vllm-workspace/Mooncake && bash mooncake_installer.sh -y && \
|
||||||
|
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/Ascend/ascend-toolkit/latest/`uname -i`-linux/lib64 && \
|
||||||
|
mkdir -p build && cd build && cmake .. -DUSE_ASCEND_DIRECT=ON && \
|
||||||
|
make -j$(nproc) && make install && \
|
||||||
|
rm -fr /vllm-workspace/Mooncake/build && \
|
||||||
|
rm -rf /var/cache/apt/* && \
|
||||||
|
rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
# Install vLLM
|
# Install vLLM
|
||||||
ARG VLLM_REPO=https://github.com/vllm-project/vllm.git
|
ARG VLLM_REPO=https://github.com/vllm-project/vllm.git
|
||||||
@@ -54,7 +62,7 @@ RUN export PIP_EXTRA_INDEX_URL=https://mirrors.huaweicloud.com/ascend/repos/pypi
|
|||||||
python3 -m pip cache purge
|
python3 -m pip cache purge
|
||||||
|
|
||||||
# Install modelscope (for fast download) and ray (for multinode)
|
# Install modelscope (for fast download) and ray (for multinode)
|
||||||
RUN python3 -m pip install modelscope 'ray>=2.47.1' 'protobuf>3.20.0' && \
|
RUN python3 -m pip install modelscope 'ray>=2.47.1,<=2.48.0' 'protobuf>3.20.0' && \
|
||||||
python3 -m pip cache purge
|
python3 -m pip cache purge
|
||||||
|
|
||||||
CMD ["/bin/bash"]
|
CMD ["/bin/bash"]
|
||||||
|
|||||||
@@ -19,23 +19,36 @@ FROM quay.io/ascend/cann:8.3.rc2-a3-openeuler24.03-py3.11
|
|||||||
|
|
||||||
ARG PIP_INDEX_URL="https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple"
|
ARG PIP_INDEX_URL="https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple"
|
||||||
ARG COMPILE_CUSTOM_KERNELS=1
|
ARG COMPILE_CUSTOM_KERNELS=1
|
||||||
|
ARG MOONCAKE_TAG="v0.3.7.post2"
|
||||||
|
|
||||||
ENV COMPILE_CUSTOM_KERNELS=${COMPILE_CUSTOM_KERNELS}
|
ENV COMPILE_CUSTOM_KERNELS=${COMPILE_CUSTOM_KERNELS}
|
||||||
|
|
||||||
RUN yum update -y && \
|
|
||||||
yum install -y python3-pip git vim wget net-tools gcc gcc-c++ make cmake numactl-devel && \
|
|
||||||
rm -rf /var/cache/yum
|
|
||||||
|
|
||||||
RUN pip config set global.index-url ${PIP_INDEX_URL}
|
RUN pip config set global.index-url ${PIP_INDEX_URL}
|
||||||
|
|
||||||
WORKDIR /workspace
|
WORKDIR /workspace
|
||||||
|
|
||||||
COPY . /vllm-workspace/vllm-ascend/
|
COPY . /vllm-workspace/vllm-ascend/
|
||||||
|
|
||||||
|
SHELL ["/bin/bash", "-c"]
|
||||||
|
|
||||||
|
RUN yum update -y && \
|
||||||
|
yum install -y git vim wget net-tools gcc gcc-c++ make cmake numactl-devel && \
|
||||||
|
git clone --depth 1 --branch ${MOONCAKE_TAG} https://github.com/kvcache-ai/Mooncake /vllm-workspace/Mooncake && \
|
||||||
|
cp /vllm-workspace/vllm-ascend/tools/mooncake_installer.sh /vllm-workspace/Mooncake/ && \
|
||||||
|
ARCH=$(uname -m) && \
|
||||||
|
source /usr/local/Ascend/ascend-toolkit/set_env.sh && \
|
||||||
|
export LD_LIBRARY_PATH=/usr/local/Ascend/ascend-toolkit/latest/${ARCH}-linux/devlib:/usr/local/Ascend/ascend-toolkit/latest/${ARCH}-linux/lib64:$LD_LIBRARY_PATH && \
|
||||||
|
export CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:/usr/include/c++/12:/usr/include/c++/12/${ARCH}-openEuler-linux && \
|
||||||
|
cd /vllm-workspace/Mooncake && \
|
||||||
|
bash mooncake_installer.sh -y && \
|
||||||
|
mkdir -p build && cd build && cmake .. -DUSE_ASCEND_DIRECT=ON && \
|
||||||
|
make -j$(nproc) && make install && \
|
||||||
|
rm -fr /vllm-workspace/Mooncake/build && \
|
||||||
|
rm -rf /var/cache/yum/*
|
||||||
|
|
||||||
# Install vLLM
|
# Install vLLM
|
||||||
ARG VLLM_REPO=https://github.com/vllm-project/vllm.git
|
ARG VLLM_REPO=https://github.com/vllm-project/vllm.git
|
||||||
ARG VLLM_TAG=v0.11.0
|
ARG VLLM_TAG=v0.11.0
|
||||||
|
|
||||||
RUN git clone --depth 1 $VLLM_REPO --branch $VLLM_TAG /vllm-workspace/vllm
|
RUN git clone --depth 1 $VLLM_REPO --branch $VLLM_TAG /vllm-workspace/vllm
|
||||||
# In x86, triton will be installed by vllm. But in Ascend, triton doesn't work correctly. we need to uninstall it.
|
# In x86, triton will be installed by vllm. But in Ascend, triton doesn't work correctly. we need to uninstall it.
|
||||||
RUN VLLM_TARGET_DEVICE="empty" python3 -m pip install -e /vllm-workspace/vllm/[audio] --extra-index https://download.pytorch.org/whl/cpu/ && \
|
RUN VLLM_TARGET_DEVICE="empty" python3 -m pip install -e /vllm-workspace/vllm/[audio] --extra-index https://download.pytorch.org/whl/cpu/ && \
|
||||||
@@ -52,7 +65,7 @@ RUN export PIP_EXTRA_INDEX_URL=https://mirrors.huaweicloud.com/ascend/repos/pypi
|
|||||||
python3 -m pip cache purge
|
python3 -m pip cache purge
|
||||||
|
|
||||||
# Install modelscope (for fast download) and ray (for multinode)
|
# Install modelscope (for fast download) and ray (for multinode)
|
||||||
RUN python3 -m pip install modelscope 'ray>=2.47.1' 'protobuf>3.20.0' && \
|
RUN python3 -m pip install modelscope 'ray>=2.47.1,<=2.48.0' 'protobuf>3.20.0' && \
|
||||||
python3 -m pip cache purge
|
python3 -m pip cache purge
|
||||||
|
|
||||||
CMD ["/bin/bash"]
|
CMD ["/bin/bash"]
|
||||||
|
|||||||
@@ -19,12 +19,10 @@ FROM quay.io/ascend/cann:8.3.rc2-910b-openeuler24.03-py3.11
|
|||||||
|
|
||||||
ARG PIP_INDEX_URL="https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple"
|
ARG PIP_INDEX_URL="https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple"
|
||||||
ARG COMPILE_CUSTOM_KERNELS=1
|
ARG COMPILE_CUSTOM_KERNELS=1
|
||||||
|
ARG MOONCAKE_TAG="v0.3.7.post2"
|
||||||
|
|
||||||
ENV COMPILE_CUSTOM_KERNELS=${COMPILE_CUSTOM_KERNELS}
|
ENV COMPILE_CUSTOM_KERNELS=${COMPILE_CUSTOM_KERNELS}
|
||||||
|
|
||||||
RUN yum update -y && \
|
|
||||||
yum install -y python3-pip git vim wget net-tools gcc gcc-c++ make cmake numactl-devel && \
|
|
||||||
rm -rf /var/cache/yum
|
|
||||||
|
|
||||||
RUN pip config set global.index-url ${PIP_INDEX_URL}
|
RUN pip config set global.index-url ${PIP_INDEX_URL}
|
||||||
|
|
||||||
@@ -32,10 +30,26 @@ WORKDIR /workspace
|
|||||||
|
|
||||||
COPY . /vllm-workspace/vllm-ascend/
|
COPY . /vllm-workspace/vllm-ascend/
|
||||||
|
|
||||||
|
SHELL ["/bin/bash", "-c"]
|
||||||
|
|
||||||
|
RUN yum update -y && \
|
||||||
|
yum install -y git vim wget net-tools gcc gcc-c++ make cmake numactl-devel && \
|
||||||
|
git clone --depth 1 --branch ${MOONCAKE_TAG} https://github.com/kvcache-ai/Mooncake /vllm-workspace/Mooncake && \
|
||||||
|
cp /vllm-workspace/vllm-ascend/tools/mooncake_installer.sh /vllm-workspace/Mooncake/ && \
|
||||||
|
ARCH=$(uname -m) && \
|
||||||
|
source /usr/local/Ascend/ascend-toolkit/set_env.sh && \
|
||||||
|
export LD_LIBRARY_PATH=/usr/local/Ascend/ascend-toolkit/latest/${ARCH}-linux/devlib:/usr/local/Ascend/ascend-toolkit/latest/${ARCH}-linux/lib64:$LD_LIBRARY_PATH && \
|
||||||
|
export CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:/usr/include/c++/12:/usr/include/c++/12/${ARCH}-openEuler-linux && \
|
||||||
|
cd /vllm-workspace/Mooncake && \
|
||||||
|
bash mooncake_installer.sh -y && \
|
||||||
|
mkdir -p build && cd build && cmake .. -DUSE_ASCEND_DIRECT=ON && \
|
||||||
|
make -j$(nproc) && make install && \
|
||||||
|
rm -fr /vllm-workspace/Mooncake/build && \
|
||||||
|
rm -rf /var/cache/yum/*
|
||||||
|
|
||||||
# Install vLLM
|
# Install vLLM
|
||||||
ARG VLLM_REPO=https://github.com/vllm-project/vllm.git
|
ARG VLLM_REPO=https://github.com/vllm-project/vllm.git
|
||||||
ARG VLLM_TAG=v0.11.0
|
ARG VLLM_TAG=v0.11.2
|
||||||
|
|
||||||
RUN git clone --depth 1 $VLLM_REPO --branch $VLLM_TAG /vllm-workspace/vllm
|
RUN git clone --depth 1 $VLLM_REPO --branch $VLLM_TAG /vllm-workspace/vllm
|
||||||
# In x86, triton will be installed by vllm. But in Ascend, triton doesn't work correctly. we need to uninstall it.
|
# In x86, triton will be installed by vllm. But in Ascend, triton doesn't work correctly. we need to uninstall it.
|
||||||
RUN VLLM_TARGET_DEVICE="empty" python3 -m pip install -e /vllm-workspace/vllm/[audio] --extra-index https://download.pytorch.org/whl/cpu/ && \
|
RUN VLLM_TARGET_DEVICE="empty" python3 -m pip install -e /vllm-workspace/vllm/[audio] --extra-index https://download.pytorch.org/whl/cpu/ && \
|
||||||
@@ -52,7 +66,7 @@ RUN export PIP_EXTRA_INDEX_URL=https://mirrors.huaweicloud.com/ascend/repos/pypi
|
|||||||
python3 -m pip cache purge
|
python3 -m pip cache purge
|
||||||
|
|
||||||
# Install modelscope (for fast download) and ray (for multinode)
|
# Install modelscope (for fast download) and ray (for multinode)
|
||||||
RUN python3 -m pip install modelscope 'ray>=2.47.1' 'protobuf>3.20.0' && \
|
RUN python3 -m pip install modelscope 'ray>=2.47.1,<=2.48.0' 'protobuf>3.20.0' && \
|
||||||
python3 -m pip cache purge
|
python3 -m pip cache purge
|
||||||
|
|
||||||
CMD ["/bin/bash"]
|
CMD ["/bin/bash"]
|
||||||
|
|||||||
331
tools/mooncake_installer.sh
Normal file
331
tools/mooncake_installer.sh
Normal file
@@ -0,0 +1,331 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
#
|
||||||
|
# Copyright (c) 2025 Huawei Technologies Co., Ltd. All Rights Reserved.
|
||||||
|
# Copyright 2023 The vLLM team.
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
# This file is a part of the vllm-ascend project.
|
||||||
|
# This is script is inspired from https://github.com/kvcache-ai/Mooncake/blob/main/dependencies.sh
|
||||||
|
#
|
||||||
|
|
||||||
|
# Color definitions
|
||||||
|
GREEN="\033[0;32m"
|
||||||
|
BLUE="\033[0;34m"
|
||||||
|
YELLOW="\033[0;33m"
|
||||||
|
RED="\033[0;31m"
|
||||||
|
NC="\033[0m" # No Color
|
||||||
|
|
||||||
|
# Configuration
|
||||||
|
REPO_ROOT=`pwd`
|
||||||
|
GITHUB_PROXY=${GITHUB_PROXY:-"https://github.com"}
|
||||||
|
GOVER=1.23.8
|
||||||
|
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
||||||
|
|
||||||
|
# Define a function to handle the git clone operation
|
||||||
|
clone_repo_if_not_exists() {
|
||||||
|
local repo_dir=$1
|
||||||
|
local repo_url=$2
|
||||||
|
|
||||||
|
if [ ! -d "$repo_dir" ]; then
|
||||||
|
git clone --depth 1 "$repo_url"
|
||||||
|
else
|
||||||
|
echo "Directory $repo_dir already exists, skipping clone."
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to print section headers
|
||||||
|
print_section() {
|
||||||
|
echo -e "\n${BLUE}=== $1 ===${NC}"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to print success messages
|
||||||
|
print_success() {
|
||||||
|
echo -e "${GREEN}✓ $1${NC}"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to print error messages and exit
|
||||||
|
print_error() {
|
||||||
|
echo -e "${RED}✗ ERROR: $1${NC}"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to check command success
|
||||||
|
check_success() {
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
print_error "$1"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
if [ $(id -u) -ne 0 ]; then
|
||||||
|
print_error "Require root permission, try sudo ./dependencies.sh"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Parse command line arguments
|
||||||
|
SKIP_CONFIRM=false
|
||||||
|
for arg in "$@"; do
|
||||||
|
case $arg in
|
||||||
|
-y|--yes)
|
||||||
|
SKIP_CONFIRM=true
|
||||||
|
;;
|
||||||
|
-h|--help)
|
||||||
|
echo -e "${YELLOW}Mooncake Dependencies Installer${NC}"
|
||||||
|
echo -e "Usage: ./dependencies.sh [OPTIONS]"
|
||||||
|
echo -e "\nOptions:"
|
||||||
|
echo -e " -y, --yes Skip confirmation and install all dependencies"
|
||||||
|
echo -e " -h, --help Show this help message and exit"
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
# Print welcome message
|
||||||
|
echo -e "${YELLOW}Mooncake Dependencies Installer${NC}"
|
||||||
|
echo -e "This script will install all required dependencies for Mooncake."
|
||||||
|
echo -e "The following components will be installed:"
|
||||||
|
echo -e " - System packages (build tools, libraries)"
|
||||||
|
echo -e " - yalantinglibs"
|
||||||
|
echo -e " - Git submodules"
|
||||||
|
echo -e " - Go $GOVER"
|
||||||
|
echo
|
||||||
|
|
||||||
|
# Ask for confirmation unless -y flag is used
|
||||||
|
if [ "$SKIP_CONFIRM" = false ]; then
|
||||||
|
read -p "Do you want to continue? [Y/n] " -n 1 -r
|
||||||
|
echo
|
||||||
|
if [[ ! $REPLY =~ ^[Yy]$ ]] && [[ ! $REPLY = "" ]]; then
|
||||||
|
echo -e "${YELLOW}Installation cancelled.${NC}"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
# Update package lists
|
||||||
|
print_section "Updating package lists"
|
||||||
|
check_success "Failed to update package lists"
|
||||||
|
|
||||||
|
# Install system packages
|
||||||
|
print_section "Installing system packages"
|
||||||
|
echo -e "${YELLOW}This may take a few minutes...${NC}"
|
||||||
|
|
||||||
|
# System detection and dependency installation
|
||||||
|
if command -v apt-get &> /dev/null; then
|
||||||
|
echo "Detected apt-get. Using Debian-based package manager."
|
||||||
|
apt-get update
|
||||||
|
apt-get install -y build-essential \
|
||||||
|
cmake \
|
||||||
|
git \
|
||||||
|
wget \
|
||||||
|
libibverbs-dev \
|
||||||
|
libgoogle-glog-dev \
|
||||||
|
libgtest-dev \
|
||||||
|
libjsoncpp-dev \
|
||||||
|
libunwind-dev \
|
||||||
|
libnuma-dev \
|
||||||
|
libpython3-dev \
|
||||||
|
libboost-all-dev \
|
||||||
|
libssl-dev \
|
||||||
|
libgrpc-dev \
|
||||||
|
libgrpc++-dev \
|
||||||
|
libprotobuf-dev \
|
||||||
|
libyaml-cpp-dev \
|
||||||
|
protobuf-compiler-grpc \
|
||||||
|
libcurl4-openssl-dev \
|
||||||
|
libhiredis-dev \
|
||||||
|
pkg-config \
|
||||||
|
patchelf \
|
||||||
|
mpich \
|
||||||
|
libmpich-dev
|
||||||
|
apt purge -y openmpi-bin libopenmpi-dev || true
|
||||||
|
elif command -v yum &> /dev/null; then
|
||||||
|
echo "Detected yum. Using Red Hat-based package manager."
|
||||||
|
yum makecache
|
||||||
|
yum install -y \
|
||||||
|
gcc \
|
||||||
|
gcc-c++ \
|
||||||
|
make \
|
||||||
|
cmake \
|
||||||
|
git \
|
||||||
|
wget \
|
||||||
|
libibverbs-devel \
|
||||||
|
numactl-devel \
|
||||||
|
gflags-devel \
|
||||||
|
glog-devel \
|
||||||
|
gtest \
|
||||||
|
gtest-devel \
|
||||||
|
jsoncpp-devel \
|
||||||
|
mpich \
|
||||||
|
mpich-devel \
|
||||||
|
boost-devel \
|
||||||
|
openssl-devel \
|
||||||
|
hiredis-devel \
|
||||||
|
python3-devel \
|
||||||
|
curl-devel \
|
||||||
|
patchelf
|
||||||
|
|
||||||
|
# install yaml-cpp
|
||||||
|
cd "${REPO_ROOT}/thirdparties"
|
||||||
|
clone_repo_if_not_exists "yaml-cpp" https://github.com/jbeder/yaml-cpp.git
|
||||||
|
cd yaml-cpp || exit
|
||||||
|
rm -rf build
|
||||||
|
mkdir -p build && cd build
|
||||||
|
cmake ..
|
||||||
|
make -j$(nproc)
|
||||||
|
make install
|
||||||
|
cd "${REPO_ROOT}"
|
||||||
|
else
|
||||||
|
echo "Unsupported package manager. Please install the dependencies manually."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
check_success "Failed to install system packages"
|
||||||
|
print_success "System packages installed successfully"
|
||||||
|
|
||||||
|
# Install yalantinglibs
|
||||||
|
print_section "Installing yalantinglibs"
|
||||||
|
|
||||||
|
# Check if thirdparties directory exists
|
||||||
|
if [ ! -d "${REPO_ROOT}/thirdparties" ]; then
|
||||||
|
mkdir -p "${REPO_ROOT}/thirdparties"
|
||||||
|
check_success "Failed to create thirdparties directory"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Change to thirdparties directory
|
||||||
|
cd "${REPO_ROOT}/thirdparties"
|
||||||
|
check_success "Failed to change to thirdparties directory"
|
||||||
|
|
||||||
|
# Check if yalantinglibs is already installed
|
||||||
|
if [ -d "yalantinglibs" ]; then
|
||||||
|
echo -e "${YELLOW}yalantinglibs directory already exists. Removing for fresh install...${NC}"
|
||||||
|
rm -rf yalantinglibs
|
||||||
|
check_success "Failed to remove existing yalantinglibs directory"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Clone yalantinglibs
|
||||||
|
echo "Cloning yalantinglibs from ${GITHUB_PROXY}/alibaba/yalantinglibs.git"
|
||||||
|
git clone -b 0.5.5 --depth 1 ${GITHUB_PROXY}/alibaba/yalantinglibs.git
|
||||||
|
check_success "Failed to clone yalantinglibs"
|
||||||
|
|
||||||
|
# Build and install yalantinglibs
|
||||||
|
cd yalantinglibs
|
||||||
|
check_success "Failed to change to yalantinglibs directory"
|
||||||
|
|
||||||
|
mkdir -p build
|
||||||
|
check_success "Failed to create build directory"
|
||||||
|
|
||||||
|
cd build
|
||||||
|
check_success "Failed to change to build directory"
|
||||||
|
|
||||||
|
echo "Configuring yalantinglibs..."
|
||||||
|
cmake .. -DBUILD_EXAMPLES=OFF -DBUILD_BENCHMARK=OFF -DBUILD_UNIT_TESTS=OFF
|
||||||
|
check_success "Failed to configure yalantinglibs"
|
||||||
|
|
||||||
|
echo "Building yalantinglibs (using $(nproc) cores)..."
|
||||||
|
cmake --build . -j$(nproc)
|
||||||
|
check_success "Failed to build yalantinglibs"
|
||||||
|
|
||||||
|
echo "Installing yalantinglibs..."
|
||||||
|
cmake --install .
|
||||||
|
check_success "Failed to install yalantinglibs"
|
||||||
|
|
||||||
|
print_success "yalantinglibs installed successfully"
|
||||||
|
|
||||||
|
# Initialize and update git submodules
|
||||||
|
print_section "Initializing Git Submodules"
|
||||||
|
|
||||||
|
# Check if .gitmodules exists
|
||||||
|
if [ -f "${REPO_ROOT}/.gitmodules" ]; then
|
||||||
|
# Check if submodules are already initialized by looking for the .git directory in the first submodule
|
||||||
|
FIRST_SUBMODULE=$(grep "path" ${REPO_ROOT}/.gitmodules | head -1 | awk '{print $3}')
|
||||||
|
|
||||||
|
echo "Enter repository root: ${REPO_ROOT}"
|
||||||
|
cd "${REPO_ROOT}"
|
||||||
|
check_success "Failed to change to repository root directory"
|
||||||
|
|
||||||
|
if [ -d "${REPO_ROOT}/${FIRST_SUBMODULE}/.git" ] || [ -f "${REPO_ROOT}/${FIRST_SUBMODULE}/.git" ]; then
|
||||||
|
echo -e "${YELLOW}Git submodules already initialized. Skipping...${NC}"
|
||||||
|
else
|
||||||
|
echo "Initializing git submodules..."
|
||||||
|
git submodule update --init
|
||||||
|
check_success "Failed to initialize git submodules"
|
||||||
|
|
||||||
|
print_success "Git submodules initialized and updated successfully"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo -e "${YELLOW}No .gitmodules file found. Skipping...${NC}"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
print_section "Installing Go $GOVER"
|
||||||
|
|
||||||
|
install_go() {
|
||||||
|
ARCH=$(uname -m)
|
||||||
|
if [ "$ARCH" = "aarch64" ]; then
|
||||||
|
ARCH="arm64"
|
||||||
|
elif [ "$ARCH" = "x86_64" ]; then
|
||||||
|
ARCH="amd64"
|
||||||
|
else
|
||||||
|
echo "Unsupported architecture: $ARCH"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
# Download Go
|
||||||
|
echo "Downloading Go $GOVER..."
|
||||||
|
wget -q --show-progress https://golang.google.cn/dl/go$GOVER.linux-$ARCH.tar.gz
|
||||||
|
check_success "Failed to download Go $GOVER"
|
||||||
|
|
||||||
|
# Install Go
|
||||||
|
echo "Installing Go $GOVER..."
|
||||||
|
tar -C /usr/local -xzf go$GOVER.linux-$ARCH.tar.gz
|
||||||
|
check_success "Failed to install Go $GOVER"
|
||||||
|
|
||||||
|
# Clean up downloaded file
|
||||||
|
rm -f go$GOVER.linux-$ARCH.tar.gz
|
||||||
|
check_success "Failed to clean up Go installation file"
|
||||||
|
|
||||||
|
print_success "Go $GOVER installed successfully"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Check if Go is already installed
|
||||||
|
if command -v go &> /dev/null; then
|
||||||
|
GO_VERSION=$(go version | awk '{print $3}')
|
||||||
|
if [[ "$GO_VERSION" == "go$GOVER" ]]; then
|
||||||
|
echo -e "${YELLOW}Go $GOVER is already installed. Skipping...${NC}"
|
||||||
|
else
|
||||||
|
echo -e "${YELLOW}Found Go $GO_VERSION. Will install Go $GOVER...${NC}"
|
||||||
|
install_go
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
install_go
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Add Go to PATH if not already there
|
||||||
|
if ! grep -q "export PATH=\$PATH:/usr/local/go/bin" ~/.bashrc; then
|
||||||
|
echo -e "${YELLOW}Adding Go to your PATH in ~/.bashrc${NC}"
|
||||||
|
echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bashrc
|
||||||
|
echo -e "${YELLOW}Please run 'source ~/.bashrc' or start a new terminal to use Go${NC}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Return to the repository root
|
||||||
|
cd "${REPO_ROOT}"
|
||||||
|
|
||||||
|
# Print summary
|
||||||
|
print_section "Installation Complete"
|
||||||
|
echo -e "${GREEN}All dependencies have been successfully installed!${NC}"
|
||||||
|
echo -e "The following components were installed:"
|
||||||
|
echo -e " ${GREEN}✓${NC} System packages"
|
||||||
|
echo -e " ${GREEN}✓${NC} yalantinglibs"
|
||||||
|
echo -e " ${GREEN}✓${NC} Git submodules"
|
||||||
|
echo -e " ${GREEN}✓${NC} Go $GOVER"
|
||||||
|
echo
|
||||||
|
echo -e "You can now build and run Mooncake."
|
||||||
|
echo -e "${YELLOW}Note: You may need to restart your terminal or run 'source ~/.bashrc' to use Go.${NC}"
|
||||||
Reference in New Issue
Block a user