{"id":15172927,"url":"https://github.com/frzb/coinboot","last_synced_at":"2025-04-04T21:10:28.354Z","repository":{"id":33797214,"uuid":"143865634","full_name":"frzb/coinboot","owner":"frzb","description":"A framework for diskless computing","archived":false,"fork":false,"pushed_at":"2025-01-27T12:13:19.000Z","size":32172,"stargazers_count":170,"open_issues_count":29,"forks_count":17,"subscribers_count":9,"default_branch":"main","last_synced_at":"2025-03-28T20:11:13.470Z","etag":null,"topics":["bc-250","cluster","cryptomining","diskless","diskless-gpu-clusters","in-memory","mining-farm","pxe-boot","pxe-server","raspberry-pi","rx470","rx480","rx580","vega56","vega64"],"latest_commit_sha":null,"homepage":"https://coinboot.io","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/frzb.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"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-08-07T11:47:18.000Z","updated_at":"2025-01-27T12:13:22.000Z","dependencies_parsed_at":"2024-06-21T19:14:21.453Z","dependency_job_id":"5dc4fa78-c506-4c9f-9744-a73d3708b19e","html_url":"https://github.com/frzb/coinboot","commit_stats":null,"previous_names":[],"tags_count":98,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/frzb%2Fcoinboot","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/frzb%2Fcoinboot/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/frzb%2Fcoinboot/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/frzb%2Fcoinboot/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/frzb","download_url":"https://codeload.github.com/frzb/coinboot/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247249532,"owners_count":20908212,"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":["bc-250","cluster","cryptomining","diskless","diskless-gpu-clusters","in-memory","mining-farm","pxe-boot","pxe-server","raspberry-pi","rx470","rx480","rx580","vega56","vega64"],"created_at":"2024-09-27T10:23:58.041Z","updated_at":"2025-04-04T21:10:28.333Z","avatar_url":"https://github.com/frzb.png","language":"Go","readme":"![Logo of Coinboot](img/coinboot.png)\n\n### Message from the Maintainer \nWith the [Merge](https://ethereum.org/en/roadmap/merge/) the Ethereum Mainnet switched to proof-of-stake at the 15th of September 2022 and the main use case for Coinboot went obsolete.   \nThis is a good thing because in saves 99,95% of the energy consumption. On the other site this stalls the small stream of income by freelancing for integration and support of Coinboot that enables me to develop and move Coinboot forward in a professional way.    \n\nTherefore I have to retire my work on this project for now.  \n\nCoinboot was deployed to over 35,000 nodes with 60,000 GPUs in data centers globally.  \nWhat stays is my deep confidence that [immutable infrastructure](https://glossary.cncf.io/immutable-infrastructure/) is the currently superior and most secure approach how IT infrastructure could be operated. I hope I can put some of my ideas on this topic into Coinboot in the future.\n\n## Coinboot ![Build Status](https://github.com/frzb/coinboot/workflows/build/badge.svg?branch=master)\n\nCoinboot is a framework for **diskless** computing.   \n\nCoinboot was initially made to run **GPU**-based **blockchain hashing** on mining farms with a **minimal TCO**.  \nCoinboot can also be used to run various other number crunching workloads like  \n**video rendering** or **machine learning**  with a **minimal TCO**.  \n\n\nIts core features are:\n\n* **Running Diskless**\n\n  With Coinboot there is no need to equip machines with storage media like SSDs, HDDs or USB flash drives.  \n  All machines are booting the operating system over network and run completely from memory, in-memory.\n\n\n* **Lightweight Footprint**\n\n  Coinboot has a lightweight footprint.  \n  Driven by the demand to run sufficiently on hundreds of machines with commodity 1 Gbit/s network hardware.\n\n\n* **Familiar Usability**\n\n  No bumpy ride.  \n  Coinboot feels just like every other Debian/Ubuntu-based system. \n\n\n* **Easy Expandability**\n\n  Need to expand your worker nodes with further configuration, software, libraries, proprietary drivers?  \n  By packing them as Coinboot plugin you can use them right after your machines have booted.  \n  Without the overhead caused by configuration managment or running complex orchestration infrastructure.  \n\n\n* **Insights out of the box**  \n\n  Coinboot comes with [Loki](https://grafana.com/oss/loki/) integrated for log managment.   \n  Providing the log files of your worker nodes at a glance.\n\nThis repository contains the Coinboot Server Docker container.                 \nThis container includes all services to get Coinboot up and running and boot diskless Coinboot Worker nodes over network.\n\n### Talk at All Systems Go! 2019 conference\n\n#### Coinboot - Cost effective, diskless GPU clusters for blockchain hashing and beyond\n\n[![](img/preview_talk_asg19.png)](http://www.youtube.com/watch?v=6T9pBa9I_AQ \"Coinboot - Cost effective, diskless GPU clusters for blockchain hashing and beyond\")\n\n## Requirements\n\nDocker ≥ 18.06.0-ce\n\nDocker Compose ≥ 1.25.0 \n\n## Usage\n\n### Quickstart\n\nClone this repository on the host where you want to execute the Coinboot Docker container.\n\n#### IP address and network\n\nTake care that your Docker host has assigned an IP address matching to the `dhcp-range` specified at `./conf/dnsmasq/coinboot.conf`.  \nFor example the Docker host has assigned `192.168.1.2` then a matching DHCP-range configuration is: `dhcp-range=192.168.1.10,192.168.1.100,6h`.  \nAlso verify that the network adapter you assigned this IP address on your Docker host is connected to the same L2/broadcast domain as the machines you want to boot with Coinboot.  \n\n#### Environment variables\n\nYou can hand over environment variables to the worker nodes booting with Coinboot.  \nThis way you can keep the configuration of your Coinboot Worker nodes at one point.  \nJust put these variables in a file in the directory `./conf/environment/`.  \nThese variables are added to `/etc/environment` on the worker nodes during boot and are exported and available for login shells on these nodes.  \nIf these variables are not exported and available, e.g. in Systemd units, just source the file `/etc/environment` to make them available.  \n\nThere are also mandatory environment variables which are required to be configured.\n\n#### Mandatory environment variables\n\n| Variable             | Default       | Description                                                            |\n| -------------------- |:-------------:| -----------------------------------------------------------------------|\n| `COINBOOT_SERVER_IP` | `192.168.1.2` | IP address at which the services of the Coinboot server should listen. |\n\n\n#### RootFS and Kernel\n\nThe RootFS and Kernel are downloaded autmatically when the Coinboot Server Docker container is started based on the `RELEASE`set at `./conf/environment/default.env`. Out of the box the latest available release is used.\n\nYou can **build** your own Coinboot base image using: [coinboot-debirf](https://github.com/frzb/coinboot/tree/master/debirf).   \nOr **download** a pre-build daily release at: https://github.com/frzb/coinboot/releases  \nThese builds are made daily to contain all current packages updates and security fixes.\nThe RootFS (`*initramfs*`) and Kernel (`*vmlinuz*`) you want to use are to be placed in the directory `./boot`.\n\n#### Plugins\n\nCoinboot plugins should be placed into the directory `./server/plugins`\n\nYou can create your own plugins (see below) or pick some at: [./plugins](./plugins)\n\n#### DHCP configuration\n\nPut your own `dnsmasq` DHCP server configuration in `./conf/dnsmasq/` or edit the existing configuration file `./conf/dnsmasq/coinboot.conf`.\n\nIn the most  cases you should only need  to configure: \n\n* DHCP lease range\n* DNS server\n* Default network gateway\n\n\n#### IP address and network\n\nTake care that your Docker host has assigned an IP address matching to the `dhcp-range` specified at `./conf/dnsmasq/coinboot.conf`. \n\nFor example the Docker host has assigned `192.168.1.2` then a matching DHCP-range configuration is: `dhcp-range=192.168.1.10,192.168.1.100,6h`. \n\nAlso verify that the network adapter you assigned this IP address on your Docker host is connected to the same L2/broadcast domain as the machines you want to boot with Coinboot.\n\n\n#### Configure PXE network boot on worker nodes\n\nConfigure the BIOS/Firmware of the worker nodes to boot over network with PXE.  \n\n#### Hardware without PXE support\n\nSome mainboards for blockchain hashing don't have support for PXE network booting by the BIOS/Firmware off the shelf.  \nIn this case Coinboot can be booted via chainloading of a network bootloader from a local boot drive of the worker node.  \nBoot scheme in such a scenario is:  \n\n```\nGRUB(local SSD) → iPXE(local SSD) → iPXE(Network) → Coinboot OS\n```\n\nTo setup this chainloading run `./scripts/set_up_grub_ipxe_chainloading` on the worker nodeand follow the instructions provided by the script.\n\n\n### Start the Coinboot Server Docker container\n\nJust bring the Coinboot Server Docker and Graylog containers up with `docker-compose`.\n\n```\n$ docker-compose up -d\n```\n\n### Boot your worker nodes with Coinboot\n\nStart your worker nodes.  \nAfter they have booted Coinboot over network you can login to your machines over `ssh`.  \nDefault credentials are:\n\n* login: `ubuntu`\n* password: `ubuntu`\n  \nPlease change the password via creating a Coinboot Plugin.\n\n### Logfiles\n\nTo see what's currently going on you can look at the logfiles of the Coinboot Docker container.  \nFor instance to see the DHCP lease hand-shakes happen or what plugins are delivered.\n\n```\n$ docker-compose logs -f coinboot\n```\n\n### Centralized log managment with Loki\n\nCoinboot comes with Loki as centralized log management collecting iPXE bootloader and Kernel message of all your worker nodes.  \n\n![Screenshot of Loki Logs in Grafana Explore](img/grafana_explore_loki_logs.png)\n\nLogin with your web browser at the preconfigured Grafana instance: http://\u003cyour-Docker-host-IP:3000\u003e`\n  \n* login `admin`    \n\n* password: `admin`\n\nChange the initial password as suggested by Grafana.   \n\nGet to the Explore section and select the worker node by `host` label to browse the log files of individual worker nodes.  \nFor more details about the usage of the Grafana Explore for exploring log files please refer to the [logs](https://grafana.com/docs/grafana/latest/explore/#logs-integration) section of the Grafana Explore documentation.\n\n## Test and development environment\n\nThere is Vagrant environment for developing purposes.\nIt consists of two Vagrant machines: One with the the Coinboot Server Docker container and one machine acting as worker node, which boots over PXE.\n\nTo spin up the Vagrant machines execute:\n\n```\n$ vagrant up\n```\n\n## Pack your own Coinboot plugins\n\nA Coinboot plugin is the way to go to extend the functionality of machines that boot with Coinboot.  \nBasically a Coinboot plugin is just set of file system changes that is applied at boot time.  \n\nCoinboot plugins can be created with the helper tool called [`coinbootmaker`](./coinbootmaker).\n\n## License\n\nGNU GPLv3 \n\n## Author\n\nGunter Miegel \ngm@coinboot.io\n\n## Contribution\n\nFork this repo. Use the test- and development environment provided.\nMake a pull request to this repo. \n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffrzb%2Fcoinboot","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffrzb%2Fcoinboot","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffrzb%2Fcoinboot/lists"}