{"id":23579905,"url":"https://github.com/s3rj1k/libvirt-ipmi","last_synced_at":"2025-11-02T10:30:26.727Z","repository":{"id":269756189,"uuid":"894422327","full_name":"s3rj1k/libvirt-ipmi","owner":"s3rj1k","description":"IPMI server for Libvirt domains","archived":false,"fork":false,"pushed_at":"2025-02-17T18:20:17.000Z","size":37,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-02-17T18:32:45.311Z","etag":null,"topics":["bmc","ipmi","ipmitool","libvirt"],"latest_commit_sha":null,"homepage":"","language":"Python","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/s3rj1k.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":"2024-11-26T10:29:21.000Z","updated_at":"2025-02-17T18:20:21.000Z","dependencies_parsed_at":"2025-02-17T18:27:32.368Z","dependency_job_id":"400a006d-51ed-488a-9792-4b7c2198b2a3","html_url":"https://github.com/s3rj1k/libvirt-ipmi","commit_stats":null,"previous_names":["s3rj1k/libvirt-ipmi"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/s3rj1k%2Flibvirt-ipmi","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/s3rj1k%2Flibvirt-ipmi/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/s3rj1k%2Flibvirt-ipmi/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/s3rj1k%2Flibvirt-ipmi/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/s3rj1k","download_url":"https://codeload.github.com/s3rj1k/libvirt-ipmi/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239394674,"owners_count":19631117,"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":["bmc","ipmi","ipmitool","libvirt"],"created_at":"2024-12-26T23:13:31.189Z","updated_at":"2025-11-02T10:30:26.695Z","avatar_url":"https://github.com/s3rj1k.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# LibvirtIPMI\n\nLibvirtIPMI is a Python-based IPMI Baseboard Management Controller (BMC) implementation for managing Libvirt domains.\n\nThis project was influenced by the [virtualbmc](https://opendev.org/openstack/virtualbmc) project, taking a more stateless approach to configuration by mapping domain names directly to IPMI usernames and using a single password for all domains.\n\n**WARNING**: This software is intended for CI and development use only. Please do not run it in a production environment for any reason.\n\n## Features\n\nSupported `ipmitool` commands:\n```bash\nipmitool -I lanplus -H \u003chost\u003e -U \u003cdomain_name\u003e -P \u003cpass\u003e chassis bootdev pxe|disk|cdrom|floppy\nipmitool -I lanplus -H \u003chost\u003e -U \u003cdomain_name\u003e -P \u003cpass\u003e chassis bootparam get 5\nipmitool -I lanplus -H \u003chost\u003e -U \u003cdomain_name\u003e -P \u003cpass\u003e chassis power diag\nipmitool -I lanplus -H \u003chost\u003e -U \u003cdomain_name\u003e -P \u003cpass\u003e chassis power off\nipmitool -I lanplus -H \u003chost\u003e -U \u003cdomain_name\u003e -P \u003cpass\u003e chassis power on\nipmitool -I lanplus -H \u003chost\u003e -U \u003cdomain_name\u003e -P \u003cpass\u003e chassis power reset\nipmitool -I lanplus -H \u003chost\u003e -U \u003cdomain_name\u003e -P \u003cpass\u003e chassis power soft\nipmitool -I lanplus -H \u003chost\u003e -U \u003cdomain_name\u003e -P \u003cpass\u003e chassis power status\nipmitool -I lanplus -H \u003chost\u003e -U \u003cdomain_name\u003e -P \u003cpass\u003e chassis status\nipmitool -I lanplus -H \u003chost\u003e -U \u003cdomain_name\u003e -P \u003cpass\u003e mc guid\nipmitool -I lanplus -H \u003chost\u003e -U \u003cdomain_name\u003e -P \u003cpass\u003e mc info\n```\n\nAdditional features:\n- IPMI v2.0 protocol support (leverages `pyghmi`)\n- EFI/BIOS boot mode detection (according to Libvirt Domain XML)\n- Multi-domain support with concurrent access control (domain name is used as IPMI username)\n\n## Requirements\n\n- Any modern Linux distribution\n- Python 3.10+\n- libvirt-python\n- pyghmi\n- A running libvirt daemon\n\n## Installation\n\nThere are three ways to install LibvirtIPMI:\n\n1. From the repository:\n```bash\n# Clone the repository\ngit clone https://github.com/s3rj1k/libvirt-ipmi.git\ncd libvirt-ipmi\n\n# Install using pipx\npipx install .\n```\n\n2. Manual installation:\n```bash\n# Create a virtual environment\npython3.12 -m venv venv\n\n# Activate the virtual environment\nsource venv/bin/activate\n\n# Copy libvirtipmi.py to your preferred location\n# Install runtime dependencies\npip install -r requirements.txt\n\n# Run the server (while virtual environment is activated)\npython libvirtipmi.py [options]\n\n# When you're done, you can deactivate the virtual environment\ndeactivate\n```\n\n## Usage\n\n### Command Line Interface\n\nThe basic syntax for running LibvirtIPMI:\n\n```bash\nlibvirt-ipmi [options]\n```\n\nAvailable options:\n- `--address`: Address to bind the IPMI server to (default: `::`)\n- `--port`: UDP port to listen on (default: `623`)\n- `--connect`: Libvirt hypervisor connection URI (default: `qemu:///system`)\n- `--password`: Authentication password for all domains\n- `--listen-timeout`: Connection timeout in seconds (default: `30`)\n- `--log-level`: Logging level (DEBUG, INFO, WARNING, ERROR, CRITICAL)\n\n### Environment Variables\n\nAll command-line options can be configured using environment variables with the `LIBVIRT_IPMI_` prefix:\n\n- `LIBVIRT_IPMI_ADDRESS`\n- `LIBVIRT_IPMI_PORT`\n- `LIBVIRT_IPMI_CONNECT`\n- `LIBVIRT_IPMI_PASSWORD`\n- `LIBVIRT_IPMI_TIMEOUT`\n- `LIBVIRT_IPMI_LOG_LEVEL`\n\n### Libvirt Connection URIs\n\nLibvirtIPMI supports various connection URIs for different hypervisor configurations. For detailed information about Libvirt URIs, see the [Libvirt URI documentation](https://libvirt.org/uri.html).\n\n```bash\n# Local system connection\nqemu:///system\n\n# Remote SSH connection\nqemu+ssh://root@hostname/system?keyfile=/root/.ssh/id_ecdsa\u0026no_tty=1\n\n# Remote libssh connection\nqemu+libssh://root@hostname/system?keyfile=/root/.ssh/id_ecdsa\u0026known_hosts_verify=ignore\u0026sshauth=privkey\n```\n\n## Testing\n\nTesting is performed using a Docker container:\n\n```bash\n# Build the test container\ndocker build --network=host -f test.Dockerfile -t libvirtipmi.test .\n\n# Run the tests\ndocker run -it --rm --network=host --name=libvirtipmi.test libvirtipmi.test\n```\n\n## Sponsorship\n\nThis work was sponsored by, but is not an official product of, [Mirantis Inc.](https://www.mirantis.com/)\n\n## Liability\n\nAll warranty disclaimers and liability limitations for this project are governed by the Apache License 2.0 terms.\n\n## License\n\nThis project is licensed under the Apache License 2.0 - see the LICENSE file for details.\n\n## Contributing\n\nContributions are welcome! Please feel free to submit a Pull Request.\n\n## Limitations\n\n- `IPMI Username` / `Libvirt Domain name`: Must not exceed 16 bytes\n- `IPMI Password`: Must not exceed 20 bytes\n- Cipher suite `3` support only\n   - authentication – RAKP-HMAC-SHA1\n   - integrity – HMAC-SHA1-96\n   - confidentiality – AES-CBC-128\n\n## Authors\n\n- s3rj1k (evasive.gyron@gmail.com)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fs3rj1k%2Flibvirt-ipmi","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fs3rj1k%2Flibvirt-ipmi","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fs3rj1k%2Flibvirt-ipmi/lists"}