{"id":13509603,"url":"https://github.com/lf-edge/eve","last_synced_at":"2026-01-07T05:19:30.488Z","repository":{"id":37488028,"uuid":"182198941","full_name":"lf-edge/eve","owner":"lf-edge","description":"EVE is Edge Virtualization Engine ","archived":false,"fork":false,"pushed_at":"2025-04-29T10:50:19.000Z","size":409598,"stargazers_count":505,"open_issues_count":108,"forks_count":171,"subscribers_count":34,"default_branch":"master","last_synced_at":"2025-04-29T14:19:59.919Z","etag":null,"topics":["edge","iot","linux-foundation","networking","operating-system","security","virtualization"],"latest_commit_sha":null,"homepage":"https://www.lfedge.org/projects/eve/","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lf-edge.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":".github/CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":"docs/SECURITY-HARDWARE.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2019-04-19T04:01:17.000Z","updated_at":"2025-04-29T10:50:24.000Z","dependencies_parsed_at":"2023-10-02T09:13:13.584Z","dependency_job_id":"f317b6d5-d881-482b-a891-b438481fee2a","html_url":"https://github.com/lf-edge/eve","commit_stats":{"total_commits":9494,"total_committers":119,"mean_commits":79.78151260504201,"dds":0.643143037708026,"last_synced_commit":"10c924ee953da4a5f1233bd22acf0bec02e85566"},"previous_names":[],"tags_count":312,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lf-edge%2Feve","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lf-edge%2Feve/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lf-edge%2Feve/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lf-edge%2Feve/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lf-edge","download_url":"https://codeload.github.com/lf-edge/eve/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251516953,"owners_count":21601912,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["edge","iot","linux-foundation","networking","operating-system","security","virtualization"],"created_at":"2024-08-01T02:01:10.211Z","updated_at":"2026-01-07T05:19:30.405Z","avatar_url":"https://github.com/lf-edge.png","language":"Go","funding_links":[],"categories":["Go","security"],"sub_categories":[],"readme":"# EVE is Edge Virtualization Engine\n\n[![OpenSSF Best Practices](https://bestpractices.coreinfrastructure.org/projects/4746/badge)](https://bestpractices.coreinfrastructure.org/projects/4746)\n[![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/lf-edge/eve/badge)](https://api.securityscorecards.dev/projects/github.com/lf-edge/eve)\n[![Publish](https://github.com/lf-edge/eve/actions/workflows/publish.yml/badge.svg?branch=master)](https://github.com/lf-edge/eve/actions/workflows/publish.yml)\n[![Goreport](https://goreportcard.com/badge/github.com/lf-edge/eve)](https://goreportcard.com/report/github.com/lf-edge/eve)\n[![Godoc](https://godoc.org/github.com/lf-edge/eve/pkg/pillar?status.svg)](https://godoc.org/github.com/lf-edge/eve/pkg/pillar)\n[![DockerHubPulls](https://img.shields.io/docker/pulls/lfedge/eve)](https://hub.docker.com/r/lfedge/eve)\n[![slack](https://img.shields.io/badge/slack-eve-brightgreen.svg?logo=slack)](https://lfedge.slack.com/archives/CHMEEC0MP)\n\nEVE 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.\n\nEVE 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.\n\nTo get its job done, EVE leverages a lot of great open source projects: [Xen Project](https://xenproject.org/), [Linuxkit](https://github.com/linuxkit/linuxkit) and [Alpine Linux](https://alpinelinux.org/) just to name a few. All of that functionality is being orchestrated by the Go microservices available under [pkg/pillar](pkg/pillar). Why pillar? Well, because pillar is the kind of a monolith we need to break out into true, individual microservices under [pkg/](pkg/).\n\n## Download EVE\n\nEVE LTS: [Download latest LTS](https://github.com/lf-edge/eve/releases/latest)\n\n## How to use EVE with a controller (recommended)\n\nEVE-OS can be used with the opensource [Adam controller](https://github.com/lf-edge/adam) by following the instructions at [Eden](https://github.com/lf-edge/eden).\n\nThere are also ongoing development of [EVE-OS tutorials](https://github.com/shantanoo-desai/EVE-OS-tutorials).\n\n## How to use/build EVE-OS by itself\n\nYou will need [QEMU 3.x+](https://www.qemu.org/), [Docker](https://www.docker.com), [Make](https://www.gnu.org/software/make/)\nand [go 1.13+](https://golang.org) installed in your system.\n\n### Use pre-built release binaries\n\nEVE is an agile software project with bi-weekly release schedule. Each release gets tagged\nwith x.y.z version in Git and a corresponding build is published on [DockerHUB](https://hub.docker.com/r/lfedge/eve).\nAs is common with Docker releases, EVE also uses version `latest` to designate the latest\nofficial release and `snapshot` to designate the latest build off of master branch.\n\nSince EVE is not just an application, but a compute engine that expects to be deployed\non real (or virtualized) hardware, you can't simply do `docker run` to give it a try.\nInstead, you need to use eve Docker container to produce one of the artifacts that\nyou can then either run on bare metal hardware or deploy on virtualized infrastructure\nsuch as Google Compute Platform (GCP).\n\nEVE Docker container `lfedge/eve:\u003cversion\u003e` is used to produce these deployment artifacts.\n\nTry running `docker run lfedge/eve` to get the most up-to-date help message.\n\nThe versions in the tag of `lfedge/eve:\u003cversion\u003e` contain information as to which hypervisor and target architecture they\nsupport. The options are:\n\n* architecture: `amd64`, `arm64`, `riscv64`\n* hypervisor: `kvm`, `xen`, `mini`\n\nNote that not all hypervisors are supported on all architectures.\n\nFor example:\n\n* `docker run lfedge/eve:8.11.0-kvm-arm64 \u003ccommand\u003e`: installer for 8.11.0 using kvm on arm64\n* `docker run lfedge/eve:8.11.0-xen-arm64 \u003ccommand\u003e`: installer for 8.11.0 using xen on arm64\n* `docker run lfedge/eve:8.11.0-xen-amd64 \u003ccommand\u003e`: installer for 8.11.0 using xen on amd64\n* `docker run lfedge/eve:8.11.0-mini-riscv64 \u003ccommand\u003e`: installer for 8.11.0 using mini on riscv64\n\nNote that `\u003ccommand\u003e` is the appropriate command to run; leave it blank to get the help message.\n\nIf you leave off the architecture it will default to whatever architecture you\nare running on.\n\nIf you just use `snapshot` or `latest`, it will default to the architecture you are running on and the `kvm` hypervisor.\n\nFor example:\n\n* `docker run lfedge/eve:8.11.0-kvm \u003ccommand\u003e`: installer for 8.11.0 using kvm on your architecture\n* `docker run lfedge/eve:latest \u003ccommand\u003e`: installer for latest image using kvm on your architecture\n\nNote that each docker image is built for the architecture for which it runs. Thus `lfedge/eve:8.11.0-kvm-arm64` not only\ninstalls 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,\nthis works fine. If you are running on an amd64 architecture, docker normally will determine the right architecture.\n\nHowever, you should indicate to docker your target platform via `--platform`:\n\n```sh\ndocker run --platform=linux/arm64 lfedge/eve:8.11.0-kvm-arm64\n```\n\nor\n\n```sh\ndocker run --platform=linux/amd64 lfedge/eve:8.11.0-kvm-amd64\n```\n\nThe above is unnecessary, but does not hurt, if you already are running on the target architecture.\n\n### Install Dependencies\n\nThe following steps are required to build and run EVE from source:\n\n#### Get Go\n\n```sh\nhttps://golang.org/dl/\n```\n\n#### Get Docker\n\n```sh\nhttps://docs.docker.com/engine/install/\n```\n\nMake 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:\n\n```sh\ndocker version\n```\n\n#### Get system dependencies (git, make, qemu, jq, gnu-sed)\n\n##### On OSX (using [Brew](https://brew.sh/))\n\n```sh\n$ brew install git make jq qemu gnu-sed\n```\n\n\u003e **_NOTE:_** (M1 Macs) `qemu` may also require `python3 nettle ninja gnu-tar` to install properly, that is:\n\u003e\n\u003e ```sh\n\u003e $ brew install git make jq python3 nettle ninja qemu gnu-sed gnu-tar\n\u003e ```\n\n##### On Ubuntu Linux\n\n```sh\n$ sudo apt-get install -y git make jq qemu binfmt-support qemu-user-static \\\n    qemu-utils qemu-system-x86 qemu-system-aarch64\n```\n\n#### Setup Docker\n\n##### Enable execution of different multi-architecture containers\n\nThis step is required on **Linux** and is required to create eve bootable images with a different architecture than the host architecture.\n\n```sh\n$ docker run --rm --privileged multiarch/qemu-user-static --reset -p yes\n```\n\n\u003e **_NOTE:_** Should a cross build fail:\n\u003e\n\u003e For docker to emulate a chip architecture different from the build host, perform this additional step:\n\u003e\n\u003e ```sh\n\u003e $ docker run --privileged --rm tonistiigi/binfmt --install all\n\u003e ```\n\u003e\n\u003e This provides the appropriate `binfmt-support` containers supporting cross execution.  See the [reddit article](https://www.reddit.com/r/docker/comments/ray2wc/running_linuxamd64_images_on_linuxarm64/), [docker hub](https://hub.docker.com/r/tonistiigi/binfmt), private project [page](http://binfmt-support.nongnu.org), or the [source](https://gitlab.com/cjwatson/binfmt-support).\n\n#### Get Project EVE\n\nEVE 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:\n\n```sh\ngit clone https://github.com/lf-edge/eve.git\ncd eve\n```\n\n#### Build Project EVE\n\nBuild both the build-tools as well as the live image in the source directory:\n\n```sh\nmake build-tools\nmake live\n```\n\nThis will download the relevant docker images from docker hub and create a bootable\nimage `dist/\u003cARCH\u003e/current/live.img`.\n\nSince almost all developer workflow is driven by the Makefile, it may be useful\nto familiarize yourself with various Makefile targets that Project EVE offers.\nA short summary of those is available by simply running make without any arguments\n`make` and a more detailed explanation [is available as part of our documentation](docs/BUILD.md)\n\n\u003e **_NOTE:_** Since the initial build fetches a LOT of bits\n\u003e over the network it may occasionally time out and fail. Typically\n\u003e re-running `make` fixes the issue. If it doesn't you can attempt a local\n\u003e build of all the required EVE packages first by running `make pkgs`\n\u003e\n\u003e **_NOTE:_** use make parameter \"-j\" edit number of threads to build faster.\n\u003e set number of threads suggestions CPU*2.\n\u003e on OSX show number of CPU : `sysctl hw.ncpu`;\n\u003e on Ubuntu Linux show number of CPU : `nproc`;\n\n#### Proxies\n\nBuilding of the various images may require downloading packages from the Internet. If you have direct Internet access, everything will \"just work\".\nOn the other hand, if you need to run behind a proxy, you may run into issues downloading. These manifest in two key areas:\n\n* docker: docker needs to download images from the image registries. Configuring your local installation of docker is beyond the scope of this\ndocument, please see [here](https://docs.docker.com/network/proxy/).\n* packages: the package updates _inside_ the images running in docker may need to use http/s proxies.\n\nTo configure your build process to use proxies, you can set the following environment variables. They will be picked up automatically when running\nany `make` commands and used within the building containers. If they are _not_ set, no proxy is set:\n\n* `HTTP_PROXY`\n* `HTTPS_PROXY`\n* `ALL_PROXY`\n* `NO_PROXY`\n\n#### Running in QEMU\n\nFinally run the resulting image in QEMU with some default assumptions:\n\n```sh\nmake run\n```\n\n\u003e **_NOTE:_**  The default QEMU configuration needs 4GB of memory available.\n\u003e If you get an error message about being unable to allocate memory, try freeing up some RAM.\n\u003e If you can't free up 4GB, you can reduce the memory allocation to qemu from 4096 (4GB) to 2048 (2GB).\n\u003e Running QEMU with less than 2GB of memory is not recommended. To run with a different amount of\n\u003e memory, provide the desired amount in KB as:\n\n```console\nmake run QEMU_MEMORY=2048\n```\n\n\u003e **_NOTE:_** `make run` launches qemu with the `-bios` option. On some systems, this does not work,\n\u003e and you need to run it with the `-pflash` argument (or its equivalent properly configured `-drive`\n\u003e instead). To enable pflash, run:\n\n```console\nmake run PFLASH=true\n```\n\nOnce the image boots you can interact with it either by using the console\n(right there in the terminal window from which make run was executed).\nYour shell in the console is connected to the 'host' os. Everything\ninteresting is actually happening in the pillar container. Use\n`eve enter` command to enter it (or if you're comfortable with ctr CLI\nfrom containerd - use that instead).\n\nOnce in a container you can run the usual xl commands to start VMs and\ninteract with Xen.\n\n#### Exiting\n\nTo exit out of the QEMU environment, press `Ctrl-A + C` to reach the QEMU console, then `q` to quit.\n\n##### Linux\n\n```sh\n$ exit # leave eve\n$ poweroff -f # leave qemu\n```\n\n### Customizing the Configuration\n\nAs described in [BUILD.md](./docs/BUILD.md) and [REGISTRATION.md](./docs/REGISTRATION.md), a booting EVE looks in its config partition to determine:\n\n* the URL to a Controller\n* [OPTIONAL] hostnames to add to the `/etc/hosts` file\n* certificates to trust\n* [OPTIONAL] initial device configuration (aka bootstrap) used only until device is onboarded\n\nWhen run in an emulator using `make run`, you can override the built-in `/config` partition by passing it the path of a directory to mount as that partition:\n\n```sh\nmake run CONF_PART=/path/to/partition\n```\n\nNote that the directory must exist to be mounted; if not, it will be ignored. The most common use case is a config directory output on the run of [adam](https://github.com/zededa/adam).\n\nWhile running everything on your laptop with QEMU could be fun, nothing beats real hardware. The most cost-effective option, not surprisingly, is ARM. We recommend two popular board [HiKey](http://www.lenovator.com/product/90.html) and [Raspberry Pi 4](https://www.raspberrypi.org/products/raspberry-pi-4-model-b/). The biggest difference between the two is that on Raspberry Pi (since it doesn't have any built-in flash storage) you won't be able to utilize EVE's installer and you'll have to build a live image. With HiKey you can use a standard EVE's installer. The steps to do both are outlined below:\n\n## How to use on a Raspberry Pi 4 ARM board\n\nRaspberry Pi 4 is a tiny, but capable enough ARM board that allows EVE to run with either Xen or KVM hypervisors. While EVE would run in the lowest memory configuration (1GB) if you plan to use it for actual EVE development we strongly recommend buying a 4GB RAM option.\n\nSince a full Raspberry Pi 4 support is only available in upstream Linux kernels starting from 5.6.0, you'll have to use that bleeding edge kernel for your build. Another peculiar aspect of this board is that it doesn't use a standard [bootloader (e.g. u-boot or UEFI)](https://www.raspberrypi.org/documentation/configuration/boot_folder.md) so we need to trick it into using our own u-boot as UEFI environment. Thankfully, our Makefile logic tries to automate as much of it as possible. Thus, putting it all together, here are the steps to run EVE on Raspberry Pi 4:\n\n1. Make sure you have a clean build directory (since this is a non-standard build) `rm -rf dist/arm64`\n2. Build a live image `make ZARCH=arm64 HV=kvm live-raw` (or `make ZARCH=arm64 HV=xen live-raw` if you want XEN by default)\n3. Flash the `dist/arm64/current/live.raw` live EVE image onto your SD card by [following these instructions](#how-to-write-the-eve-image-and-installer-onto-storage-media)\n\nOnce your Raspberry Pi 4 is happily running an EVE image you can start using EVE controller for further updates (so that you don't ever have to take an SD card out of your board). Build your rootfs by running `make ZARCH=arm64 HV=xen rootfs` (or `make ZARCH=arm64 HV=kvm rootfs` if you want KVM by default) and give resulting `dist/arm64/current/installer/rootfs.img` to the controller.\n\n### How to use on an Onlogic FR201 ARM device\n\nOnlogic Factor 201 (FR201) is a device based on the Raspberry Pi Compute Module 4 (CM4). To use EVE on FR201, build a live or installer image for Raspberry Pi 4, as described below and flash it on a USB stick. Then, to enable FR201's specific subdevices, the boot configuration has to be manually edited.\n\n1. To build a live raw image: `make ZARCH=arm64 HV=kvm live-raw` (Only KVM is supported)\n1. To build an installation raw image: `make ZARCH=arm64 HV=kvm installer-raw` (Only KVM is supported)\n1. Flash the `dist/arm64/current/installer.raw` install EVE image onto an USB Stick [following these instructions](../README.md#3-flash-the-image-to-the-device)\n\nEdit the file `config.txt` of the 1st partition of the live/installer image, two lines must be changed, as shown by the diff syntax below:\n\n```diff\n--- config.txt_OLD      2024-10-21 14:01:02.782670479 +0300\n+++ config.txt  2024-10-21 14:01:11.042670420 +0300\n@@ -30,7 +30,7 @@\n # but for advantech uno-220 we need to set ce to 0x00\n # https://github.com/Advantech-IIoT/UNO-220-POE-/tree/master/srcs/dtbo/tpm#notes\n # PS: Comment this line for OnLogic FR201 device\n-dtoverlay=bcm2711-spi-tpm-slb9670,ce=0x01\n+#dtoverlay=bcm2711-spi-tpm-slb9670,ce=0x01\n\n # Disable warning overlays as they don't work well together with linux's graphical output\n avoid_warnings=1\n@@ -49,4 +49,4 @@\n\n # Uncomment for the following line for OnLogic FR201\n # Please, don't forget to disable overlay bcm2711-spi-tpm-slb9670\n-#include fr201.txt\n+include fr201.txt\n```\n\nFinally, boot or install EVE, using the USB 3.0 port. The installer will install EVE on the eMMC drive, using the NVMe as the persist drive. If an OS is already present on those two drives, see the [documentation](https://support.onlogic.com/documentation/factor/?_gl=1*o7b3gz*_gcl_au*NzI0MzU3NDU5LjE3MjMxMTk0NTQ.*_ga*MTk3NjkxMzg5LjE3MjMxMTk0NDc.*_ga_SEVJD5HQBB*MTcyOTI0NTcwMS4xNC4xLjE3MjkyNDk3MTUuNTguMC4w) from Onlogic on how to erase them and be able to boot from the USB stick.\n\n### FR201 without eMMC\n\nSome variants of the FR201 don't have an internal eMMC. For these devices,\nEVE must be installed entirely in the internal NVMe. The following line\nmust be added to the `grub.cfg` file inside the CONFIG partition of the\ninstaller USB stick:\n\n```sh\nset_global dom0_platform_tweaks \"eve_install_disk=sdb rootdelay=10\"\n```\n\n## How to use on an HiKey ARM board\n\nUnlike Raspberry Pi boards, HiKey boards come with a built-in flash, so we will be using EVE's installer to install a copy of EVE onto that storage. You can follow these steps to prepare your installation media:\n\n1. Start by cloning EVE git repository `git clone https://github.com/lf-edge/eve.git`\n2. Build an installer image `cd eve ; make ZARCH=arm64 installer`\n3. Flash the `dist/arm64/current/installer.raw` onto the USB stick by [following these instructions](#how-to-write-the-eve-image-and-installer-onto-storage-media)\n\nSince by default HiKey is using WiFi for all its networking, you will also\nhave to provide SSID and password for your WiFi network. On Mac OS X you\ncan simply re-insert SD card and edit wpa_supplicant.conf that will appear\non volume called EVE.\n\nAt this point you have everything you need to permanently install onto\nHiKey's internal flash. This, of course, will mean that if you have anything\nelse installed there (like a Debian or Android OS) it will be replaced so\nmake sure to make a backup if you nee to.\n\nAdditionally, our installer will try to configure an entry point to the\ninitial boot sequence via GRUB. Since the only reliable way to do so is\nby replacing a file called fastboot.efi in the system boot partition you\nneed to make sure that you have fastboot.efi present there (since if isn't\nthere installer will refuse to proceed). The easiest way to check for\nall that is to invoke an EFI shell on HiKey. Here's how: put the SD card\ninto the KiKey, connect HiKey to your serial port, start screen, poweron\nHiKey and immediately start pressing `\u003cESC\u003e` key to trigger EFI shell:\n\n```sh\nscreen /dev/tty.usbserial-* 115200\n\n[1] fastboot\n[2] boot from eMMC\n[3] boot from SD card\n[4] Shell\n[5] Boot Manager\nStart: 4\n.....\nPress ESC in 4 seconds to skip startup.nsh or any other key to continue.\n\nShell\u003e ls fs2:\\EFI\\BOOT\\fastboot.efi\nShell\u003e setsize 1 fs2:\\EFI\\BOOT\\fastboot.efi\n```\n\nNOTE: you only need to execute the last (setsize) command if, for whatever\nreason, the previous command doesn't show fastboot.efi present on your\nsystem. Once you've either verified that there's an existing fastboot.efi\n(or created a dummy one via the setsize command) you can proceed with\nthe rest of the installation from the same EFI shell by executing:\n\n```sh\nShell\u003e fs0:\\EFI\\BOOT\\BOOTX64.EFI\n```\n\nYou will see an installation sequence scroll on screen and the output\nthat indicates a successful install will look like this:\n\n```sh\n[   85.717414]  mmcblk0: p1 p2 p3 p4 p5 p6 p7 p8 p11\n[   87.420407]  mmcblk0: p1 p2 p3 p4 p5 p6 p7 p8 p11 p12\n[  118.754353]  mmcblk0: p1 p2 p3 p4 p5 p6 p7 p8 p11 p12 p13\n[  119.801805]  mmcblk0: p1 p2 p3 p4 p5 p6 p7 p8 p11 p12 p13 p14\n[  120.992048]  mmcblk0: p1 p2 p3 p4 p5 p6 p7 p8 p11 p12 p13 p14 p19\n[  127.191119] reboot: Power down\n(XEN) Hardware Dom0 halted: halting machine\n```\n\nAt this point you should remove your SD card from HiKey's slot and reboot\nthe board. If everything went as planned you will boot right into the running\nsystem. One thing that you will notice is that a successful installation sequence\nmade a backup copy of your existing fastboot.efi under the fastboot.efi.XXX name.\nThis allows you to restore your HiKey to a pristine state without going through\na full fledged re-flashing sequence.\n\nAlternatively, if you're not quite ready to commit to replace your current OS\non the HiKey, you can try running from the SD card. For that you will have to\nput a live system on the SD card, not the installer. Here's how you can do that\non Mac OS X:\n\n```sh\nvi conf/wpa_supplicant.conf\n  # put your WIFI passwords in and/or add your own networks\nmake ZARCH=arm64 MEDIA_SIZE=8192 live\nsudo dd if=dist/arm64/current/live.raw of=/dev/rdiskXXX bs=1m\n```\n\nThen you can boot into a live system from triggering UEFI shell like shown\nabove and executing exactly the same boot command:\n\n```sh\nShell\u003e fs0:\\EFI\\BOOT\\BOOTX64.EFI\n```\n\n## How to use on a NVIDIA Jetson based device\n\nCurrently EVE supports several NVIDIA Jetson devices, see [NVIDIA.md](./docs/NVIDIA.md) for details.\n\n## How to use on a i.MX 8MQuad Evaluation Kit ARM board\n\n1. Set SW801 to 1100 for switch boot device to SD card.\n2. Build a live image `make ZARCH=arm64 HV=kvm PLATFORM=imx8mq_evk live-raw` (Only KVM is supported)\n3. Flash the `dist/arm64/current/live.raw` live EVE image onto your SD card by [following these instructions](#how-to-write-the-eve-image-and-installer-onto-storage-media)\n\n## How to use on an i.MX 8M Plus Phytec phyBOARD-Pollux board\n\n### Running from SD Card (phyBOARD-Pollux)\n\n1. Set bootmode switch (S3) to boot device from an SD card (positions 1,2,3,4 set to ON,OFF,OFF,OFF).\n2. Build a live image `make ZARCH=arm64 HV=kvm PLATFORM=imx8mp_pollux live-raw` (Only KVM is supported)\n3. Flash the `dist/arm64/current/live.raw` live EVE image onto your SD card by [following these instructions](#how-to-write-the-eve-image-and-installer-onto-storage-media)\n\n### Installing on eMMC (phyBOARD-Pollux)\n\n1. Build an installation raw image `make ZARCH=arm64 HV=kvm PLATFORM=imx8mp_pollux installer-raw` (Only KVM is supported)\n2. Flash the `dist/arm64/current/installer.raw` install EVE image onto your SD card by [following these instructions](#how-to-write-the-eve-image-and-installer-onto-storage-media)\n3. Set bootmode switch (S3) to boot device from an SD card (positions 1,2,3,4 set to ON,OFF,OFF,OFF).\n4. Boot the device from SD Card. Installation process should initialize automatically, the device will be powered off when the process is done\n5. Remove the SD Card from the device\n6. Set bootmode switch (S3) to boot device from eMMC (positions 1,2,3,4 set to OFF,OFF,OFF,OFF).\n7. Power on the device, EVE should start from eMMC\n\n## How to use on an EPC-R3720 (Advantech, based on i.MX 8M Plus)\n\nThis device, from [Advantech](https://www.advantech.com/en-eu/products/880a61e5-3fed-41f3-bf53-8be2410c0f19/epc-r3720/mod_fde326be-b36e-4044-ba9a-28c4c49a25c6), it's an Edge AI Box Computer\nbased on the NXP i.MX 8M Plus SoC. Three different models are available. EVE was tested and it supports the model EPC-R3720IQ-ALA220. The installation should be performed through the following steps\naccording to the main boot device: SD Card or eMMC.\n\n### Running from SD Card (EPC-R3720)\n\n1. Set [Boot Select switch (SW1)](http://ess-wiki.advantech.com.tw/view/File:RSB-3720_connector_location_2021-10-21_143853.jpg) to boot device from an SD card (positions 1,2,3,4 set to ON,ON,OFF,OFF).\n2. Build a live image `make ZARCH=arm64 HV=kvm PLATFORM=imx8mp_epc_r3720 live-raw` (Only KVM is supported)\n3. Flash the `dist/arm64/current/live.raw` live EVE image onto your SD card by [following these instructions](#how-to-write-the-eve-image-and-installer-onto-storage-media)\n\n### Installing on eMMC (EPC-R3720)\n\n1. Build an installation raw image `make ZARCH=arm64 HV=kvm PLATFORM=imx8mp_epc_r3720 installer-raw` (Only KVM is supported)\n2. Flash the `dist/arm64/current/installer.raw` install EVE image onto your SD card by [following these instructions](#how-to-write-the-eve-image-and-installer-onto-storage-media)\n3. Set [Boot Select switch (SW1)](http://ess-wiki.advantech.com.tw/view/File:RSB-3720_connector_location_2021-10-21_143853.jpg) to boot device from an SD card (positions 1,2,3,4 set to ON,ON,OFF,OFF).\n4. Boot the device from SD Card. Installation process should initialize automatically, the device will be powered off when the process is done\n5. Remove the SD Card from the device\n6. Set [Boot Select switch (SW1)](http://ess-wiki.advantech.com.tw/view/File:RSB-3720_connector_location_2021-10-21_143853.jpg) to boot device from eMMC (positions 1,2,3,4 set to OFF,ON,OFF,OFF).\n7. Power on the device, EVE should start from eMMC\n\n## How to use on an AMD board\n\nThe following steps have been tested on Intel UP Squared Board (AAEON UP-APL01) and the bootable USB Disk containing the installer image has been made on Ubuntu 16.04:\n\n1. Start by cloning EVE git repository `git clone https://github.com/lf-edge/eve.git`\n2. Build an installer image `cd eve ; make ZARCH=amd64 installer`\n3. Flash the `dist/amd64/current/installer.raw` onto the USB stick by [following these instructions](#how-to-write-the-eve-image-and-installer-onto-storage-media)\n4. Now plug the USB Disk on your UP Squared Board and the installer should now replace the existing OS on the UP Squared board with EVE\n\nYou will see an installation sequence scroll on screen and the output that indicates a successful install will look like this:\n\n```bash\n[10.69716164] mmcblk0:\n[11.915943]   mmcblk0: p1\n[13.606346]   mmcblk0: p1 p2\n[29.656563]   mmcblk0: p1 p2 p3\n[30.876806]   mmcblk0: p1 p2 p3 p4\n[32.156930]   mmcblk0: p1 p2 p3 p4 p9\nNOTICE: Device will now power off. Remove the USB stick and power it back on to complete the installation.\n[43.185325]   ACPI: Preparing to enter system sleep state S5\n[43.187349]   reboot: Power down\n```\n\nAt this point you should remove your USB Disk from the UP Squared Board slot and reboot the board. If everything went as planned you will boot right into the running system.\n\n## How to write the EVE image and installer onto storage media\n\nThese instructions show you how to install EVE or the installer onto an installation medium, such as disk or USB or SD card.\n\nEVE is an operating system with installer with particular requirements for the storage on which it is installed.\nIt installs to the entire medium. You must be careful to enter commands correctly and be sure the selected\ndevices are correct. If you select the wrong target device, you can completely overwrite the main storage disk and operating\nsystem system you're running on, instead of the target storage device.\n\nPROCEED AT YOUR OWN RISK\n\nTo install any binary EVE artifact, such as `installer.img`, onto an installation medium, do the following. Be sure to replace\n`installer.img` with the name of the artifact.\n\n1. Prepare the artifact.\n1. Find the target device.\n1. Flash the image to the device.\n\n### 1. Prepare the artifact\n\nPrepare the artifact, either by downloading from the [releases page](http://github.com/lf-edge/eve/releases) or running the EVE\ndocker command `docker run lfedge/eve \u003ccommand\u003e`. For example, `docker run lfedge/eve` will show the help message.\n\nIf you want a raw disk image to install, which is useful for SD cards and USB, run:\n\n```sh\ndocker run lfedge/eve installer_raw \u003e installer.img\n```\n\nFor an ISO, useful for CD/DVD:\n\n```sh\ndocker run lfedge/eve installer_iso \u003e installer.iso\n```\n\n### 2. Find the target device\n\nDiscover the target device to which you will be writing.\n\n#### Target device on Linux\n\n```bash\nfdisk -l\n```\n\n#### Target device on macOS\n\n```bash\ndiskutil list\n```\n\n### 3. Flash the image to the device\n\nFlash the disk image to the USB stick, SD card, or CD/DVD.\n\n#### Flash image on Linux\n\nIf the target device is `/dev/sdX`, where `X` is the device letter, and the image is `installer.img`, run:\n\n```bash\numount /dev/sdX\nsudo dd if=installer.img of=/dev/sdX\neject /dev/sdX\n```\n\n#### Flash image on macOS\n\nIf the target device is `/dev/disk8`, and the image is `installer.img`, run:\n\n```bash\ndiskutil unmountDisk /dev/disk8\nsudo dd if=installer.bin of=/dev/disk8\ndiskutil eject /dev/disk8\n```\n\n#### Graphical interface\n\nAlternatively, the image can be flashed with interactive graphical tools like:\n\n* [unetbootin](https://unetbootin.github.io/) - Linux, Windows, macOS\n* [imageUSB](https://www.osforensics.com/tools/write-usb-images.html) - Windows\n* [rufus](https://rufus.ie/en/) - Windows\n* [ventoy](https://www.ventoy.net/en/index.html) - Linux, Windows\n* [Disk Utility](https://support.apple.com/guide/disk-utility/welcome/mac) - macOS\n\n**Disclaimer:** The above tools are third-party software and are not maintained by the EVE project. The EVE project and lf-edge\ntake no responsibility for those tools. Evaluate and use them at your own risk.\n\n## A quick note on linuxkit\n\nYou may be wondering why do we have a container-based architecture for a Xen-centric environment. First of all, OCI containers are a key type of a workload for our platform. Which means having OCI environment to run them is a key requirement. We run them via:\n\n1. Set up the filesystem root using [containerd](https://containerd.io)\n1. Launch the domU using Xen via `xl`\n\nIn addition to that, while we plan to build a fully disaggregated system (with even device drivers running in their separate domains) right now we are just getting started and having containers as a first step towards full disaggregation seems like a very convenient stepping stone.\n\nLet us know what you think by filing GitHub [issues](https://github.com/lf-edge/eve/issues/new/choose), and feel free to send us pull requests if something doesn't quite work.\n\n## License\n\nDistributed under the Apache License 2.0. See [LICENSE.txt](https://github.com/lf-edge/eve/blob/master/LICENSE) for more information.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flf-edge%2Feve","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flf-edge%2Feve","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flf-edge%2Feve/lists"}