{"id":20282151,"url":"https://github.com/ubccr/grendel","last_synced_at":"2025-04-09T13:10:08.585Z","repository":{"id":45970191,"uuid":"236585397","full_name":"ubccr/grendel","owner":"ubccr","description":"Bare Metal Provisioning system for HPC Linux clusters","archived":false,"fork":false,"pushed_at":"2025-03-31T17:50:21.000Z","size":14615,"stargazers_count":60,"open_issues_count":9,"forks_count":13,"subscribers_count":7,"default_branch":"main","last_synced_at":"2025-04-02T07:53:02.953Z","etag":null,"topics":["bare-metal","hpc","provisioning","pxe-server"],"latest_commit_sha":null,"homepage":"https://grendel.readthedocs.io","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ubccr.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSES/0BSD.txt","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":"AUTHORS.md","dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-01-27T20:18:25.000Z","updated_at":"2025-03-25T00:37:00.000Z","dependencies_parsed_at":"2023-01-29T03:30:46.219Z","dependency_job_id":"cdd28cb7-74ab-4fea-ba76-3056ee0af8fd","html_url":"https://github.com/ubccr/grendel","commit_stats":{"total_commits":613,"total_committers":7,"mean_commits":87.57142857142857,"dds":"0.36867862969004894","last_synced_commit":"f308f083858f14c86682a6edc3fd2c404353e6ef"},"previous_names":[],"tags_count":16,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ubccr%2Fgrendel","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ubccr%2Fgrendel/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ubccr%2Fgrendel/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ubccr%2Fgrendel/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ubccr","download_url":"https://codeload.github.com/ubccr/grendel/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248045245,"owners_count":21038554,"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":["bare-metal","hpc","provisioning","pxe-server"],"created_at":"2024-11-14T14:08:14.642Z","updated_at":"2025-04-09T13:10:08.566Z","avatar_url":"https://github.com/ubccr.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"![Grendel](docs/pages/images/logo-lg.png)\n\n# Grendel - Bare Metal Provisioning for HPC\n\n[![Documentation Status](https://readthedocs.org/projects/grendel/badge/?version=latest)](https://grendel.readthedocs.io/en/latest/?badge=latest)\n\nGrendel is a fast, easy to use bare metal provisioning system for High\nPerformance Computing (HPC) Linux clusters. Grendel simplifies the deployment\nand administration of physical compute clusters both large and small. It's\ndeveloped by the University at Buffalo Center for Computational Research (CCR)\nwith more than 20 years of experience in HPC. Grendel is under active\ndevelopment and currently runs CCR's production HPC clusters ranging from 200\nto 1500 nodes.\n\n## Key Features\n\n* Web based frontend\n* DHCP/PXE/TFTP provisioning\n* DNS forward and reverse resolution\n* Automatic host discovery\n* Diskful and Stateless provisioning\n* BMC/iDRAC control via RedFish and IPMI\n* Authorized provisioning using [Branca](https://branca.io/) tokens\n* Rest API\n* Easy installation (single binary with no deps)\n\n## Project status\n\nGrendel is under heavy development and any API's will likely change\nconsiderably before a more stable release is available. Use at your own risk.\nFeedback and pull requests are more than welcome!\n\n## Quickstart with QEMU/KVM\n\nThe following steps will show how to PXE boot a linux virtual machine using\nQEMU/KVM and install Flatcar linux using Grendel. A demo of installing and using \nGrendel can be found [here](https://asciinema.org/a/b17YFY2uTpRotvUnXx8TVXx39).\n\n### Installation\n\nTo install Grendel download a copy of the binary [here](https://github.com/ubccr/grendel/releases).\n\n```\n$ tar xvzf grendel-0.x.x-linux-amd64.tar.gz\n$ cd grendel-0.x.x-linux-amd64/\n$ ./grendel --help\n```\n\n### Create a TAP device\n\n```\n$ sudo ip tuntap add name tap0 mode tap user ${LOGNAME}\n$ sudo ip addr add 192.168.10.254/24 dev tap0\n$ sudo ip link set up dev tap0\n```\n\nFor RedHat/CentOS\n\n```\n$ sudo firewall-cmd --zone=trusted --change-interface=tap0\n```\n\nFor Debian/Ubuntu\n\n```\n$ sudo ufw allow in on tap0\n```\n\n\n### Create a boot Image file\n\n```\n$ wget http://stable.release.flatcar-linux.net/amd64-usr/current/flatcar_production_pxe_image.cpio.gz\n$ wget http://stable.release.flatcar-linux.net/amd64-usr/current/flatcar_production_pxe.vmlinuz\n```\n\nCreate the following JSON file `image.json`:\n\n```json\n[{\n    \"name\": \"flatcar\",\n    \"kernel\": \"flatcar_production_pxe.vmlinuz\",\n    \"initrd\": [\n        \"flatcar_production_pxe_image.cpio.gz\"\n    ],\n    \"cmdline\": \"flatcar.autologin\"\n}]\n```\n\n### Create a host file\n\nCreate the following JSON file `host.json`:\n\n```json\n[{\n    \"name\": \"tux01\",\n    \"provision\": true,\n    \"boot_image\": \"flatcar\",\n    \"interfaces\": [\n        {\n            \"fqdn\": \"tux01.localhost\",\n            \"ip\": \"192.168.10.12/24\",\n            \"mac\": \"DE:AD:BE:EF:12:8C\"\n        }\n    ]\n}]\n```\n\n### Start Grendel services\n\n```\n$ sudo ./grendel --verbose serve --hosts host.json --images image.json --listen 192.168.10.254\n```\n\nNote: The serve command requires root privileges to bind to lower level ports.\nIf you don't want to run as root you can allow Grendel to bind to privileged\nwith the following command:\n\n```\n$ sudo setcap CAP_NET_BIND_SERVICE,CAP_NET_RAW=+eip /path/to/grendel\n```\n\n### PXE Boot the linux virtual machine\n\nIn another terminal window run the following commands:\n\n```\n$ qemu-system-x86_64 -m 2048 -boot n -device e1000,netdev=net0,mac=DE:AD:BE:EF:12:8C -netdev tap,id=net0,ifname=tap0,script=no\n```\n\n## Hacking\n\nBuilding Grendel requires Go v1.23 or greater. Building iPXE requires packages\nlzma-sdk-devel, xz-devel, and gcc-aarch64-linux-gnu:\n\n```\n$ git clone --recursive https://github.com/ubccr/grendel\n$ cd grendel/firmware\n$ make build\n$ make bindata\n$ cd ..\n$ go build .\n$ ./grendel help\nBare Metal Provisioning for HPC\n\nUsage:\n  grendel [command]\n\nAvailable Commands:\n  bmc         Query BMC devices\n  discover    Auto-discover commands\n  help        Help about any command\n  host        Host commands\n  image       Boot Image commands\n  serve       Run services\n\nFlags:\n  -c, --config string     config file\n      --debug             Enable debug messages\n      --endpoint string   Grendel API endpoint (default \"grendel-api.socket\")\n  -h, --help              help for grendel\n      --verbose           Enable verbose messages\n\nUse \"grendel [command] --help\" for more information about a command.\n```\n\n## Publications\n\n- Andrew E. Bruno, Salvatore J. Guercio, Doris Sajdak, Tony Kew, and Matthew D.\n  Jones. 2020. Grendel: Bare Metal Provisioning System for High Performance\n  Computing. In Practice and Experience in Advanced Research Computing (PEARC\n  ’20). Association for Computing Machinery, New York, NY, USA, 13–18.\n  DOI: https://doi.org/10.1145/3311790.3396637\n\n- PEARC ’20 Paper Presentation:\n  [video](https://www.acsu.buffalo.edu/~aebruno2/talks/grendel-pearc20.mp4) |\n  [slides](https://www.acsu.buffalo.edu/~aebruno2/talks/grendel)\n\n\n## Acknowledgments\n\nPXE booting is based on [Pixiecore](https://github.com/danderson/netboot/tree/master/pixiecore) by Dave\nAnderson. DHCP implementation makes heavy use of this excellent [packet library](https://github.com/insomniacslk/dhcp). \nDNS implementation uses [this library](https://github.com/miekg/dns). TFTP implementation uses [this\nlibrary](https://github.com/pin/tftp). Backend database runs [BuntDB](https://github.com/tidwall/buntdb) or [sqlite](https://github.com/mattn/go-sqlite3). \nNodeSet/RangeSet algorithms ported from [ClusterShell](https://github.com/cea-hpc/clustershell)\n\n## License\n\nGrendel is released under the GPLv3 license. See REUSE.toml\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fubccr%2Fgrendel","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fubccr%2Fgrendel","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fubccr%2Fgrendel/lists"}