Compile and Build Kmesh

The Kmesh needs to be compiled and built in the Linux environment with the Kmesh kernel enhancement feature. Currently, Kmesh can be compiled and run in multiple OS versions, and the specific OS versions can see Kmesh support system.

Build

Prerequisite

  • install docker-engine

    sudo apt-get update
    (optional)sudo apt-get remove docker docker-engine docker.io
    sudo apt install docker.io
    

    You can check the docker version to make sure that docker is installed.

    docker version 
    Client: Docker Engine - Community
    Version:           26.0.1
    API version:       1.45
    Go version:        go1.21.9
    Git commit:        d260a54
    Built:             Thu Apr 11 10:53:21 2024
    OS/Arch:           linux/amd64
    Context:           default
    
    Server: Docker Engine - Community
    Engine:
      Version:          26.0.1
      API version:      1.45 (minimum version 1.24)
      Go version:       go1.21.9
      Git commit:       60b9add
      Built:            Thu Apr 11 10:53:21 2024
      OS/Arch:          linux/amd64
      Experimental:     false
    containerd:
      Version:          1.6.31
      GitCommit:        e377cd56a71523140ca6ae87e30244719194a521
    runc:
      Version:          1.1.12
      GitCommit:        v1.1.12-0-g51d5e94
    docker-init:
      Version:          0.19.0
      GitCommit:        de40ad0
    
  • Download Kmesh-build image

    To compile the Kmesh image, you need to prepare the Kmesh source code and the Kmesh-build image. The image can be obtained using the following command:

    docker pull ghcr.io/kmesh-net/kmesh-build-x86:latest
    

    Note: The Kmesh-build image needs to match the version of the source code.

Build Kmesh from Source

Clong the source code from github.

git clone https://github.com/kmesh-net/kmesh.git

Code compilation

  • Compile Kmesh through build-image

    cd kmesh/
    make build
    
  • Compile Kmesh through script

    Kmesh also provides a way to compile through scripts

    [root@dev] ./kmesh_compile.sh
    

    Note that if you use script to compile, you need to make sure that your os system version is one that Kmesh supports system!

When Kmesh compilation is finish, the build artifacts will be output to the out directory.

ls out/amd64/
kmesh-daemon       libbpf.so    libbpf.so.0.8.1       libkmesh_deserial.so  libprotobuf-c.so.1      mdacore
kmesh-cni  libboundscheck.so  libbpf.so.0  libkmesh_api_v2_c.so  libprotobuf-c.so      libprotobuf-c.so.1.0.0

Build Docker Image

Execute make docker in the Kmesh source code directory.

Users can specify parameters for building, as shown in the example below:

User-defined HUB, TARGET, TAG values. If not specified, default values will be used.
HUB=ghcr.io/kmesh-net
TARGET=kmesh
TAG= #git sha

[root@dev docker] make docker
...
Successfully tagged ghcr.io/kmesh-net/kmesh:b68790eb07830e757f4ce6d1c478d0046ee79730

[root@dev docker] make docker HUB=ghcr.io/kmesh-net TARGET=kmesh TAG=latest
...
Successfully tagged ghcr.io/kmesh-net/kmesh:latest

Check the existing Kmesh image in the local image repository:

[root@dev docker]# docker images ls
REPOSITORY                          TAG                                        IMAGE ID            CREATED             SIZE
ghcr.io/kmesh-net/kmesh             latest                                     71aec5898c44        About an hour ago   506MB

Compilation Cleanup

You can use the following command to clean up the binaries.

[root@dev] make clean