{"id":18784012,"url":"https://github.com/u-root/u-bmc","last_synced_at":"2025-10-08T09:52:55.228Z","repository":{"id":45211211,"uuid":"148763000","full_name":"u-root/u-bmc","owner":"u-root","description":"Open-source firmware for your baseboard management controller (BMC)","archived":false,"fork":false,"pushed_at":"2023-07-05T21:08:21.000Z","size":9520,"stargazers_count":282,"open_issues_count":61,"forks_count":34,"subscribers_count":61,"default_branch":"master","last_synced_at":"2025-03-30T18:11:09.209Z","etag":null,"topics":["aspeed","bmc","embedded","firmware","grpc","linux","openmetrics"],"latest_commit_sha":null,"homepage":"https://u-bmc.readthedocs.io","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/u-root.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-09-14T08:58:10.000Z","updated_at":"2025-02-02T18:05:29.000Z","dependencies_parsed_at":"2024-06-18T21:21:00.937Z","dependency_job_id":"0b7125b1-6164-41fb-a536-e415df040a8a","html_url":"https://github.com/u-root/u-bmc","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/u-root%2Fu-bmc","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/u-root%2Fu-bmc/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/u-root%2Fu-bmc/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/u-root%2Fu-bmc/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/u-root","download_url":"https://codeload.github.com/u-root/u-bmc/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247543593,"owners_count":20955865,"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":["aspeed","bmc","embedded","firmware","grpc","linux","openmetrics"],"created_at":"2024-11-07T20:41:37.323Z","updated_at":"2025-10-08T09:52:50.202Z","avatar_url":"https://github.com/u-root.png","language":"Go","readme":"# u-bmc\n\n[![Build\nStatus](https://circleci.com/gh/u-root/u-bmc.svg?style=shield)](https://circleci.com/gh/u-root/u-bmc)\n[![Go Report\nCard](https://goreportcard.com/badge/github.com/u-root/u-bmc)](https://goreportcard.com/report/github.com/u-root/u-bmc)\n[![License](https://img.shields.io/badge/License-BSD%203--Clause-blue.svg)](https://github.com/u-root/u-bmc/blob/master/LICENSE)\n\n# Description\n\nu-bmc uses u-root to create a Linux OS distribution that is fully open-source.\n\nu-bmc borrows and contributes to [OpenBMC](https://github.com/openbmc/openbmc) which has\nsimilar high-level goals. The main difference is that u-bmc chooses to challenge the industry status quo,\ne.g. where OpenBMC uses IPMI, u-bmc uses gRPC.\n\n# Attention\n\nThis project is currently undergoing some heavy maintenance. Don't use in production yet!\n\n# Demo\n\n[![asciicast](https://asciinema.org/a/202889.png)](https://asciinema.org/a/202889)\n\n# Why?\n\nBMC software has historically been known to be insecure. There is no inherent reason for that.\nu-bmc sets out to improve this by offering an alternative built on modern technologies.\n\n# Support\n\nu-bmc is still in experimental stage and is currently only supporting\nBMCs based on ASPEED AST2400 and AST2500. Other BMC SOCs are planned, and if you want\nto contribute let us know.\n\nCurrently the supported boards are:\n- Open Compute Project: Quanta F06 Leopard DDR3\n- Aspeed AST2500 Evaluation Board\n\nPlanned boards are:\n- ASRock Rack PAUL\n- Nuvoton Poleg BMC NPCM7XX Evaluation Board\n- Open Compute Project: Quanta F20 Yosemite\n- Tyan Tempest CX S7106\n\nDo you want to become a contributor of a board? Let us know!\n\n# Roadmap\n\nTo give you some sense of what we want to create:\n\n * All function exported over gRPC like:\n   * Serial-over-LAN\n   * Sensor data\n   * iKVM\n   * Updating BIOS\n   * POST information\n * Implementation of OpenMetrics for Prometheus integration for sensors\n * Offer SSH server for on-platform debugging\n   * Support SSH CA-signed certificates to avoid having to upload a bunch of certs\n * USB device emulation\n   * Must have: USB storage from image\n   * Cool to have: USB ethernet to host, replaces KCS IPMI interface.\n   * Cool to have: USB graphics card + mouse + keyboard for KVM\n * Optional WebUI\n   * Uses the same API as the gRPC client\n   * optional so the BMC can stay lean without loosing functionality\n\n# Usage\n\nPrerequisites:\n\nu-bmc uses the Taskfile build system, install it using their [official installation guide](https://taskfile.dev/#/installation).\n\nPackages needed:\n- go (at least 1.17)\n- gcc-arm-none-eabi (for arm32)\n- gcc-aarch64-linux-gnu (for arm64)\n- mtd-utils (for targets using flash)\n- erofs-utils (for targets using block devices)\n- fakeroot\n- flex\n- bison\n- device-tree-compiler\n- bc\n- libssl-dev\n- libelf-dev\n- qemu-kvm\n\nGet them for 32bit via e.g.:\n```\nsudo apt install gcc-arm-none-eabi mtd-utils golang fakeroot flex bison device-tree-compiler bc libssl-dev libelf-dev qemu-kvm\n```\n\nWe also need both u-bmc and u-root in our GOPATH so install them with:\n```\nGO111MODULE=off go get github.com/u-root/u-root\nGO111MODULE=off go get github.com/u-root/u-bmc\n```\nOr use git clone:\n```\nmkdir $GOPATH/src/github.com/u-root\ncd $GOPATH/src/github.com/u-root\ngit clone https://github.com/u-root/u-root\ngit clone https://github.com/u-root/u-bmc\n```\n\nSetup configuration:\n```\n# SSH ECDSA public keys does not work for now\n\ncp ~/.ssh/*.pub config/ssh_keys.pub\n\n# Agree to the terms of the configured ACME server\n# By default it's just a toy ACME server so this is fine, but if you're\n# using another ACME server like Let's Encrypt (LE) ensure you agree to their terms.\n# For LE, you can find them at https://letsencrypt.org/repository/.\n\ntouch i_agree_to_the_acme_terms\ntask config:generate\n```\n\nBuild image:\n```\ncp TARGET.tmpl TARGET\n```\nthen uncomment the desired target platform e.g. qemu-virt-a72 in TARGET and run\n```\ntask build\n```\n\nSince u-bmc uses signed binaries it is important that you back up the\ncontents of build/boot/keys/ after building as u-bmc will only accept updates\nsigned with these keys.\n\n## Simulator\n\nTrying out u-bmc is easiest using the simulator.\nFirst select a Qemu target in the TARGET file then to launch it, run:\n\n```\n# Build Qemu target\n\ntask build\n\n# Launch a local ACME server in one terminal\n\ntask pebble\n\n# Launch the u-bmc simulator in another terminal\n\ntask virtual-bmc -- 64bit\n\n# (Optional, run in another terminal) Launch a local emulated BIOS to produce some data on the UART\n# Needs to have u-bmc simulator above running for it to attach correctly.\n\ntask virtual-host\n```\n\nWhen simulating the following TCP/IP ports are set up:\n\n * 6053/udp: u-bmc DNS\n * 6443/tcp: u-bmc gRPC\n * 9370/tcp: u-bmc OpenMetrics\n\nWhen the u-bmc guest tries to access 10.0.2.100 a local service called\nubmc-pebble is started which uses Let's Encrypt's pebble service to generate\nan HTTPS certificate. The CA used is located in config/sim-ca.crt.\n\nYou can interact with u-bmc running in the simulator by pressing Enter to get a shell\nor by using ubmcctl:\n\n```\ngo install github.com/u-root/u-bmc/cmd/ubmcctl\n\n# The root CA is regenerated every time pebble is started to prevent\n# testing to accidentally become production\n\ncurl https://localhost:14000/root --cacert config/sim-pebble.crt \u003e root.crt\necho '127.0.1.2\tubmc.example.com' | sudo tee -a /etc/hosts\nSSL_CERT_FILE=root.crt ubmcctl -host ubmc.example.com:6443\n```\n\nIf you restart pebble you need to update root.crt.\n\n## Testing\n\nThe easiest way to run all unit tests is to run `task test`.\n\nTo run the integration tests: `task test`.\n\nIf you're using a supported platform and want to try it on your hardware you\ncan use socflash\\_x64 provided by ASPEED like this:\n```\necho This is extremely likely to break things as u-bmc is still experimental\nsudo ./socflash_x64 of=bmc-backup.img if=flash.img lpcport=0x2e option=glc\n```\n\n## Uploading a new version\n\nIf you want to quickly upload a new build of u-bmc without updating the kernel,\nyou can use SCP like this:\n\n```\nscp build/rootfs/bin/bb my-ubmc:/bb\nscp build/rootfs/bin/bb.sig my-ubmc:/bb.sig\nssh my-ubmc\n\n# Verify that bb is sane by executing /bb\n/bb\n\n# Should return:\n# \u003ctimestmap\u003e You need to specify which command to invoke.\n# Exception: /bin/bb exited with 1\n# [tty], line 1: /bin/bb\n\nmv /bb /bin/bb\nmv /bb.sig /bin/bb.sig\n\n# Verify the signature before rebooting\n\ngpgv /etc/u-bmc.pub /bin/bb.sig /bin/bb\nsync\nshutdown -r\n```\n\n# Contributions\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md)\n\nSince this is an early experiment if this is at all interesting for you or your\ncompany, do reach out in our Slack channel:\n\n- [Slack](https://osfw.slack.com), sign up [here](http://slack.u-root.com/)\n\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fu-root%2Fu-bmc","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fu-root%2Fu-bmc","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fu-root%2Fu-bmc/lists"}