Eve
EVE is Edge Virtualization Engine
Install / Use
/learn @lf-edge/EveREADME
EVE is Edge Virtualization Engine
EVE aims to develop an open, agnostic and standardized architecture unifying the approach to developing and orchestrating cloud-native applications across the enterprise on-premises edge. It offers users new levels of control through hardware-assisted virtualization of on-prem edge devices. Once installed, EVE has direct access to and control of underlying resources and provides standard APIs that allow more efficient use of resources and can effectively partition hardware to increase workload consolidation and application multi-tenancy.
EVE supports both ARM and Intel architectures and requires hardware-assisted virtualization. While EVE can run on a board as small as a $20 Orange Pi, the sweet spot for its deployment are IoT Gateways and Industrial PCs.
To get its job done, EVE leverages a lot of great open source projects: Xen Project, Linuxkit and Alpine Linux just to name a few. All of that functionality is being orchestrated by the Go microservices available under pkg/pillar. Why pillar? Well, because pillar is the kind of a monolith we need to break out into true, individual microservices under pkg/.
Download EVE
EVE LTS: Download latest LTS
How to use EVE with a controller (recommended)
EVE-OS can be used with the opensource Adam controller by following the instructions at Eden.
There are also ongoing development of EVE-OS tutorials.
How to use/build EVE-OS by itself
You will need QEMU 3.x+, Docker, Make and go 1.13+ installed in your system.
Use pre-built release binaries
EVE is an agile software project with bi-weekly release schedule. Each release gets tagged
with x.y.z version in Git and a corresponding build is published on DockerHUB.
As is common with Docker releases, EVE also uses version latest to designate the latest
official release and snapshot to designate the latest build off of master branch.
Since EVE is not just an application, but a compute engine that expects to be deployed
on real (or virtualized) hardware, you can't simply do docker run to give it a try.
Instead, you need to use eve Docker container to produce one of the artifacts that
you can then either run on bare metal hardware or deploy on virtualized infrastructure
such as Google Compute Platform (GCP).
EVE Docker container lfedge/eve:<version> is used to produce these deployment artifacts.
Try running docker run lfedge/eve to get the most up-to-date help message.
The versions in the tag of lfedge/eve:<version> contain information as to which hypervisor and target architecture they
support. The options are:
- architecture:
amd64,arm64,riscv64 - hypervisor:
kvm,xen,mini
Note that not all hypervisors are supported on all architectures.
For example:
docker run lfedge/eve:8.11.0-kvm-arm64 <command>: installer for 8.11.0 using kvm on arm64docker run lfedge/eve:8.11.0-xen-arm64 <command>: installer for 8.11.0 using xen on arm64docker run lfedge/eve:8.11.0-xen-amd64 <command>: installer for 8.11.0 using xen on amd64docker run lfedge/eve:8.11.0-mini-riscv64 <command>: installer for 8.11.0 using mini on riscv64
Note that <command> is the appropriate command to run; leave it blank to get the help message.
If you leave off the architecture it will default to whatever architecture you are running on.
If you just use snapshot or latest, it will default to the architecture you are running on and the kvm hypervisor.
For example:
docker run lfedge/eve:8.11.0-kvm <command>: installer for 8.11.0 using kvm on your architecturedocker run lfedge/eve:latest <command>: installer for latest image using kvm on your architecture
Note that each docker image is built for the architecture for which it runs. Thus lfedge/eve:8.11.0-kvm-arm64 not only
installs an arm64 EVE image, but the docker image is intended to be run on arm64. If you are running on arm64, e.g. Mac M1,
this works fine. If you are running on an amd64 architecture, docker normally will determine the right architecture.
However, you should indicate to docker your target platform via --platform:
docker run --platform=linux/arm64 lfedge/eve:8.11.0-kvm-arm64
or
docker run --platform=linux/amd64 lfedge/eve:8.11.0-kvm-amd64
The above is unnecessary, but does not hurt, if you already are running on the target architecture.
Install Dependencies
The following steps are required to build and run EVE from source:
Get Go
https://golang.org/dl/
Get Docker
https://docs.docker.com/engine/install/
Make sure that Docker is up and running on your system. On MacOS just start a docker Application, on Linux make sure docker service is running. Regardless of how you start Docker you can make sure that it is ready for you by running the following command and making sure that it returns both a version of the client AND a version of the server:
docker version
Get system dependencies (git, make, qemu, jq, gnu-sed)
On OSX (using Brew)
$ brew install git make jq qemu gnu-sed
NOTE: (M1 Macs)
qemumay also requirepython3 nettle ninja gnu-tarto install properly, that is:$ brew install git make jq python3 nettle ninja qemu gnu-sed gnu-tar
On Ubuntu Linux
$ sudo apt-get install -y git make jq qemu binfmt-support qemu-user-static \
qemu-utils qemu-system-x86 qemu-system-aarch64
Setup Docker
Enable execution of different multi-architecture containers
This step is required on Linux and is required to create eve bootable images with a different architecture than the host architecture.
$ docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
NOTE: Should a cross build fail:
For docker to emulate a chip architecture different from the build host, perform this additional step:
$ docker run --privileged --rm tonistiigi/binfmt --install allThis provides the appropriate
binfmt-supportcontainers supporting cross execution. See the reddit article, docker hub, private project page, or the source.
Get Project EVE
EVE requires being built in a Git repository (the tools keep looking up git commit IDs). The easiest way is to clone EVE repository from GitHub:
git clone https://github.com/lf-edge/eve.git
cd eve
Build Project EVE
Build both the build-tools as well as the live image in the source directory:
make build-tools
make live
This will download the relevant docker images from docker hub and create a bootable
image dist/<ARCH>/current/live.img.
Since almost all developer workflow is driven by the Makefile, it may be useful
to familiarize yourself with various Makefile targets that Project EVE offers.
A short summary of those is available by simply running make without any arguments
make and a more detailed explanation is available as part of our documentation
NOTE: Since the initial build fetches a LOT of bits over the network it may occasionally time out and fail. Typically re-running
makefixes the issue. If it doesn't you can attempt a local build of all the required EVE packages first by runningmake pkgsNOTE: use make parameter "-j" edit number of threads to build faster. set number of threads suggestions CPU*2. on OSX show number of CPU :
sysctl hw.ncpu; on Ubuntu Linux show number of CPU :nproc;
Proxies
Building of the various images may require downloading packages from the Internet. If you have direct Internet access, everything will "just work". On the other hand, if you need to run behind a proxy, you may run into issues downloading. These manifest in two key areas:
- docker: docker needs to download images from the image registries. Configuring your local installation of docker is beyond the scope of this document, please see here.
- packages: the package updates inside the images running in docker may need to use http/s proxies.
To configure your build process to use proxies, you can set the following environment variables. They will be picked up automatically when running
any make commands and used within the building containers. If they are not set, no proxy is set:
- `HTTP_P
