{"id":43169478,"url":"https://github.com/chadleeshaw/ignite","last_synced_at":"2026-02-01T02:16:26.446Z","repository":{"id":278063776,"uuid":"934387104","full_name":"chadleeshaw/ignite","owner":"chadleeshaw","description":"An all-in-one Golang implementation for network booting with DHCP, TFTP, Web Server, and backend APIs.","archived":false,"fork":false,"pushed_at":"2025-09-11T02:12:18.000Z","size":1911,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-09-11T05:25:06.674Z","etag":null,"topics":["dhcp","golang","pxe","tftp"],"latest_commit_sha":null,"homepage":"","language":"Go","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/chadleeshaw.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-02-17T18:39:28.000Z","updated_at":"2025-09-11T01:56:38.000Z","dependencies_parsed_at":"2025-08-27T01:11:05.660Z","dependency_job_id":"58c9cb38-9a48-4cfe-afe4-a56a0eb6e371","html_url":"https://github.com/chadleeshaw/ignite","commit_stats":null,"previous_names":["chadleeshaw/ignite"],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/chadleeshaw/ignite","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chadleeshaw%2Fignite","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chadleeshaw%2Fignite/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chadleeshaw%2Fignite/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chadleeshaw%2Fignite/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/chadleeshaw","download_url":"https://codeload.github.com/chadleeshaw/ignite/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chadleeshaw%2Fignite/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28965045,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-01T02:14:24.993Z","status":"ssl_error","status_checked_at":"2026-02-01T02:13:55.706Z","response_time":56,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["dhcp","golang","pxe","tftp"],"created_at":"2026-02-01T02:16:24.783Z","updated_at":"2026-02-01T02:16:26.425Z","avatar_url":"https://github.com/chadleeshaw.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Ignite\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"./public/http/img/Ignite_small.png\" alt=\"Ignite\" width=\"400\"/\u003e\n\u003c/p\u003e\n\nIgnite is a powerful, all-in-one solution for network booting and server provisioning, implemented in Go. It simplifies the complexities of setting up network boot environments by integrating DHCP, TFTP, and a web-based management interface into a single, easy-to-use application.\n\n## 🏆 Quality \u0026 Testing\n\nIgnite features comprehensive test coverage across all components:\n\n- **Comprehensive Unit Tests**: All packages include extensive test suites with mock implementations\n- **Integration Testing**: VM-based testing with QEMU for end-to-end PXE boot validation  \n- **Test Coverage**: Significant coverage across core packages (osimage, syslinux, handlers, routes, vmtest)\n- **Quality Assurance**: Automated formatting (`gofmt`) and static analysis (`go vet`) validation\n\n## Overview\n\nDesigned for developers, system administrators, and hobbyists, Ignite provides a streamlined workflow for managing PXE boot environments. Whether you're deploying operating systems, running diagnostics, or managing server configurations, Ignite offers the tools you need to get the job done efficiently.\n\n## Features\n\n- **Integrated DHCP Server**: Dynamically assign IP addresses to network devices.\n- **Built-in TFTP Server**: Serve boot files (e.g., PXELinux, iPXE) to booting clients.\n- **Web-Based Management UI**: A user-friendly interface to manage DHCP leases, configure boot menus, and monitor server status.\n- **Dynamic PXE Boot Menu Templating**: Automatically generate PXE boot menus for different operating systems based on DHCP leases. Supported templates include:\n  - Ubuntu\n  - NixOS\n  - Red Hat\n- **Redfish API Integration**: Remotely manage servers and initiate PXE boot processes via the Redfish API.\n- **Cloud-Init \u0026 Kickstart Templating**: Simplify automated OS installations with dynamic templating for cloud-init and Kickstart configurations.\n- **Advanced File Management**: Template and configuration file browser with delete functionality and clear type distinction.\n- **Enhanced Security**: Path validation, input sanitization, and secure file operations throughout the application.\n- **Comprehensive Error Handling**: Detailed error messages, validation feedback, and graceful error recovery.\n\n## Screenshots\n\nHere's a comprehensive look at the Ignite web interface across all major features:\n\n### **Main Dashboard**\nThe central hub providing system overview, quick actions, and navigation to all features.\n\n![Main Dashboard](./public/http/img/main_page.png)\n\n### **DHCP Management** \nComplete DHCP server management with lease monitoring, reservations, and dynamic IP allocation.\n\n![DHCP Management](./public/http/img/dhcp_page.png)\n\n### **TFTP File Management**\nFile browser and management interface for boot files, operating system images, and PXE configurations.\n\n![TFTP File Management](./public/http/img/tftp_page.png)\n\n### **Provision Templates**\nCloud-init and Kickstart template editor with syntax highlighting, template management, file deletion, and clear distinction between templates and configs.\n\n![Provision Templates](./public/http/img/provision_page.png)\n\n### **OS Images Management**\nDownload, manage, and deploy operating system images with progress tracking and version control.\n\n![OS Images Management](./public/http/img/osimage_page.png)\n\n### **Syslinux Configuration**\nAdvanced PXE boot menu configuration and SYSLINUX management interface.\n\n![Syslinux Configuration](./public/http/img/syslinux_page.png)\n\n### **System Status**\nReal-time monitoring of server status, services, and system health indicators.\n\n![System Status](./public/http/img/status_page.png)\n\n## Getting Started\n\n### Prerequisites\n\n- **Go**: Version 1.21 or higher (tested with Go 1.23.4).\n- **Node.js \u0026 npm**: For managing frontend dependencies.\n- **Tailwind CSS**: For styling the web interface.\n- **QEMU** (optional): For running integration tests (`qemu-system-x86_64`, `qemu-img`).\n- **curl**: For API testing and health checks.\n- A basic understanding of network booting concepts (DHCP, TFTP, PXE).\n\n### Setup\n\n1. **Clone the repository**:\n\n   ```bash\n   git clone https://github.com/your-username/ignite.git\n   cd ignite\n   ```\n\n2. **Build and Run**:\n\n   The easiest way to get started is by using the provided Makefile:\n\n   ```bash\n   make run\n   ```\n\n   This command will handle installing dependencies, building the CSS, and running the application.\n\n3. **Access the Web UI**:\n\n   Once the server is running, open your browser and navigate to `http://localhost:8080`.\n\n### Development \u0026 Testing\n\n**Running Tests**:\n\n```bash\n# Run all unit tests\ngo test ./...\n\n# Run tests with coverage\ngo test -cover ./...\n\n# Run vmtest integration tests (requires QEMU)\ncd vmtest\ngo run vmtest.go 1    # Test boot files with QEMU built-in TFTP\ngo run vmtest.go 2    # Test ignite integration\ngo run vmtest.go logs # Show test logs\ngo run vmtest.go clean # Clean up test files\n```\n\n**Code Quality**:\n\n```bash\n# Format code\ngofmt -w .\n\n# Run static analysis\ngo vet ./...\n```\n\n**CLI Options**:\n\n```bash\n# Populate with mock data for testing\n./ignite -mock-data\n\n# Clear all data\n./ignite -clear-data\n```\n\n### Configuration\n\nIgnite can be configured via environment variables. Here are the available options:\n\n| Variable    | Description                                    | Default            |\n|-------------|------------------------------------------------|--------------------|\n| `DB_PATH`   | Path to store the database file.               | `./`               |\n| `DB_FILE`   | Name of the database file.                     | `ignite.db`        |\n| `DB_BUCKET` | Database bucket name.                          | `dhcp`             |\n| `TFTP_DIR`  | Directory for the TFTP server to serve files from. | `./public/tftp`   |\n| `HTTP_DIR`  | Directory for the HTTP server to serve files from. | `./public/http`   |\n| `HTTP_PORT` | Port for the HTTP server to listen on.         | `8080`             |\n| `PROV_DIR`  | Directory for provisioning templates.          | `./public/provision` |\n\n## API Reference\n\nIgnite exposes a set of RESTful APIs to control and manage the server.\n\n### GET Routes\n\n| Endpoint                | Description                              |\n|-------------------------|------------------------------------------|\n| `/`                     | Serves the main index page.              |\n| `/open_modal`           | Opens a modal dialog.                    |\n| `/close_modal`          | Closes a modal dialog.                   |\n| `/dhcp`                 | Serves the DHCP management page.         |\n| `/dhcp/servers`         | Retrieves a list of DHCP servers.        |\n| `/status`               | Serves the server status page.           |\n| `/provision`            | Serves the provisioning page.            |\n| `/tftp`                 | Serves the TFTP management page.         |\n| `/tftp/open`            | Opens a file in the TFTP directory.      |\n| `/tftp/download`        | Downloads a file from the TFTP directory.|\n| `/tftp/view`            | Views a file from the TFTP directory.    |\n| `/tftp/serve`           | Serves a file from the TFTP directory.   |\n| `/prov/gettemplates`    | Retrieves provisioning template options. |\n| `/prov/loadtemplate`    | Loads a provisioning template.           |\n| `/prov/getconfigs`      | Retrieves configuration options.         |\n| `/prov/loadconfig`      | Loads a configuration file.              |\n| `/prov/getfilename`     | Updates the filename for a template.     |\n| `/provision/load-file`  | Loads file content via API.              |\n| `/provision/gallery`    | Retrieves template gallery items.        |\n\n### POST Routes\n\n| Endpoint                  | Description                                   |\n|---------------------------|-----------------------------------------------|\n| `/dhcp/create_server`     | Creates a new DHCP server configuration.      |\n| `/dhcp/start`             | Starts a DHCP server.                         |\n| `/dhcp/stop`              | Stops a DHCP server.                          |\n| `/dhcp/delete`            | Deletes a DHCP server.                        |\n| `/dhcp/submit_dhcp`       | Submits a new DHCP server configuration.      |\n| `/dhcp/submit_reserve`    | Reserves a DHCP lease.                        |\n| `/dhcp/remove_reserve`    | Removes a DHCP lease reservation.             |\n| `/dhcp/delete_lease`      | Deletes a DHCP lease.                         |\n| `/tftp/delete_file`       | Deletes a file from the TFTP directory.       |\n| `/tftp/upload_file`       | Uploads a file to the TFTP directory.         |\n| `/pxe/submit_menu`        | Submits a new PXE boot menu.                  |\n| `/pxe/submit_ipmi`        | Submits an IPMI command.                      |\n| `/prov/newtemplate`       | Creates a new provisioning template.          |\n| `/prov/save`              | Saves a provisioning file.                    |\n| `/provision/save-file`    | Saves file content via API.                   |\n| `/provision/delete-file`  | Deletes a file from provision directories.    |\n\n## Architecture\n\nIgnite follows a clean, modular architecture with clear separation of concerns:\n\n### Core Packages\n\n- **`app/`**: Application lifecycle, dependency injection, and service orchestration\n- **`dhcp/`**: DHCP server implementation with lease management and reservation support\n- **`tftp/`**: TFTP server for serving boot files and OS images\n- **`handlers/`**: HTTP request handlers with dependency injection for web API endpoints\n- **`routes/`**: HTTP routing configuration and middleware setup\n- **`config/`**: Configuration management with environment variable support\n- **`db/`**: Database abstraction layer using BoltDB for persistent storage\n\n### Specialized Components\n\n- **`osimage/`**: OS image management with download tracking and file operations\n- **`syslinux/`**: SYSLINUX boot file management and menu generation\n- **`ipxe/`**: iPXE configuration generation and template rendering\n- **`vmtest/`**: Integration testing framework using QEMU for end-to-end PXE testing\n\n### Testing Strategy\n\n- **Unit Tests**: Comprehensive test coverage with mock implementations for all external dependencies\n- **Integration Tests**: Real-world testing using QEMU VMs to validate PXE boot workflows\n- **Mock Services**: Testify-based mocks for database operations, file system interactions, and external services\n\n## vmtest Integration Testing\n\nThe `vmtest/` package provides comprehensive integration testing capabilities:\n\n```bash\ncd vmtest\n./setup-boot-files.sh    # One-time setup: download SYSLINUX boot files\n\n# Test boot files with QEMU built-in TFTP (validates PXE menu display)\ngo run vmtest.go 1\n\n# Test full ignite integration (DHCP server, API endpoints, VM boot)\ngo run vmtest.go 2\n\n# View test results and VM serial output\ngo run vmtest.go logs\n\n# Clean up test artifacts\ngo run vmtest.go clean\n```\n\nIntegration tests validate:\n- SYSLINUX boot file functionality\n- DHCP server API endpoints\n- Ignite web interface responsiveness  \n- End-to-end PXE boot workflows\n- VM network boot scenarios\n\n## Deployment Options\n\n### **Docker Deployment (Recommended)**\n\n#### **Option 1: Pre-built Image**\n```bash\ndocker run -d \\\n  --name ignite \\\n  -p 8080:8080 \\\n  -p 69:69/udp \\\n  -v $(pwd)/data:/app/data \\\n  -v $(pwd)/public:/app/public \\\n  ghcr.io/chadleeshaw/ignite:v2.0.0\n```\n\n#### **Option 2: Build from Source**\n```bash\n# Full build (requires Go toolchain in container)\ndocker build -t ignite:local .\n\n# Quick build using release binary (faster, smaller image)\ndocker build -f Dockerfile.release -t ignite:release .\ndocker run -d --name ignite -p 8080:8080 -p 69:69/udp ignite:release\n```\n\n### **Binary Installation**\n```bash\n# Download for your platform\nwget https://github.com/chadleeshaw/ignite/releases/download/v2.0.0/ignite-linux-amd64\nchmod +x ignite-linux-amd64\n./ignite-linux-amd64\n\n# Or use the x86_64 variant\nwget https://github.com/chadleeshaw/ignite/releases/download/v2.0.0/ignite-x86_64\nchmod +x ignite-x86_64\n./ignite-x86_64\n```\n\n### **Development Setup**\n```bash\ngit clone https://github.com/chadleeshaw/ignite.git\ncd ignite\ngo mod download\ngo run . -mock-data    # Start with sample data\n```\n\n## Recent Improvements ✅\n\n- ✅ **Enhanced error handling and user feedback** - Comprehensive error messages and validation throughout the application\n- ✅ **IP address validation for DHCP configurations** - Input sanitization and validation for network configurations\n- ✅ **TFTP directory path security improvements** - Path traversal protection and secure file operations\n- ✅ **Interface standardization across services** - Consistent API patterns and dependency injection\n- ✅ **Additional OS template support** - Extended template gallery with Docker, Kubernetes, and more\n- ✅ **File management enhancements** - Delete functionality and template vs config distinction\n- ✅ **Code optimization** - Removed unused code, optimized performance, fixed deprecated functions\n\n## Security Model\n\nIgnite uses a simple, network-focused security approach suitable for lab and infrastructure environments:\n\n- **Single Admin Authentication**: Shared login credentials (`admin/admin` by default, changeable via web interface)\n- **Network-Level Security**: Designed for deployment on isolated management networks (VLANs, private networks)\n- **Session-Based Access**: Simple session management with HTTP-only cookies\n- **Path Security**: File operations restricted to designated directories with path traversal protection\n\n## Future Enhancements\n\n- **Advanced monitoring** - Metrics collection and alerting for system health\n- **API versioning** - Backward compatibility and gradual migration support\n- **Plugin architecture** - Extensible framework for custom integrations\n- **Configuration templating** - Variable substitution and environment-specific configs\n\n## Contributing\n\nContributions are welcome! Please ensure all contributions include:\n\n1. **Comprehensive tests** for new functionality\n2. **Code formatting** using `gofmt -w .`\n3. **Static analysis** compliance via `go vet ./...`\n4. **Documentation updates** for new features or API changes\n\n### Development Workflow\n\n```bash\n# Format and validate code\ngofmt -w .\ngo vet ./...\n\n# Run full test suite\ngo test ./...\n\n# Run integration tests (if QEMU available)\ncd vmtest \u0026\u0026 go test -v\n\n# Build and test the application\ngo build -o ignite .\n./ignite -mock-data  # Test with sample data\n```\n\n## License\n\nThis project is licensed under the MIT License. See the `LICENSE` file for details.\n\n## Acknowledgments\n\n- Inspired by GoPXE.\n- User interface built with Tailwind CSS and daisyUI.\n- Frontend help from Google Jules\n- Backend help from Claude","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fchadleeshaw%2Fignite","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fchadleeshaw%2Fignite","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fchadleeshaw%2Fignite/lists"}