Repository: netbootxyz/netboot.xyz Branch: development Commit: 971197e8aa03 Files: 170 Total size: 329.2 KB Directory structure: gitextract_zt7mag3n/ ├── .ansible-lint ├── .dockerignore ├── .github/ │ ├── FUNDING.yml │ ├── ISSUE_TEMPLATE/ │ │ ├── bug_report.md │ │ ├── config.yml │ │ └── feature_request.md │ └── workflows/ │ ├── claude.yml │ ├── development.yml │ ├── pull-requests.yml │ ├── release-candidate.yml │ ├── release.yml │ └── rolling.yml ├── AGENTS.md ├── CHANGELOG.md ├── CONTRIBUTING.md ├── Dockerfile ├── LICENSE ├── README.md ├── docker-build-root/ │ └── dumper.sh ├── endpoints.yml ├── etc/ │ └── netbootxyz/ │ └── custom/ │ ├── README.md │ └── custom.ipxe.j2 ├── renovate.json ├── roles/ │ └── netbootxyz/ │ ├── README.md │ ├── defaults/ │ │ └── main.yml │ ├── files/ │ │ ├── ipxe/ │ │ │ └── local/ │ │ │ ├── colour.h │ │ │ ├── console.h │ │ │ ├── crypto.h │ │ │ ├── general.h │ │ │ └── general.h.efi │ │ └── memdisk │ ├── meta/ │ │ └── main.yml │ ├── tasks/ │ │ ├── generate_checksums.yml │ │ ├── generate_disks.yml │ │ ├── generate_disks_arm.yml │ │ ├── generate_disks_base.yml │ │ ├── generate_disks_efi.yml │ │ ├── generate_disks_hybrid.yml │ │ ├── generate_disks_legacy.yml │ │ ├── generate_disks_linux.yml │ │ ├── generate_disks_rpi.yml │ │ ├── generate_disks_secureboot.yml │ │ ├── generate_menus.yml │ │ ├── generate_menus_custom.yml │ │ ├── generate_signatures.yml │ │ └── main.yml │ ├── templates/ │ │ ├── checksums.txt.j2 │ │ ├── disks/ │ │ │ ├── autoexec.ipxe.j2 │ │ │ ├── netboot.xyz-gce.j2 │ │ │ ├── netboot.xyz-metal.j2 │ │ │ └── netboot.xyz.j2 │ │ ├── index.html.j2 │ │ ├── local-vars.ipxe.j2 │ │ ├── menu/ │ │ │ ├── 4mlinux.ipxe.j2 │ │ │ ├── about.ipxe.j2 │ │ │ ├── almalinux.ipxe.j2 │ │ │ ├── alpinelinux.ipxe.j2 │ │ │ ├── archlinux.ipxe.j2 │ │ │ ├── blackarch.ipxe.j2 │ │ │ ├── boot.cfg.j2 │ │ │ ├── bsd.ipxe.j2 │ │ │ ├── centos.ipxe.j2 │ │ │ ├── clonezilla.ipxe.j2 │ │ │ ├── coreos.ipxe.j2 │ │ │ ├── dban.ipxe.j2 │ │ │ ├── debian.ipxe.j2 │ │ │ ├── devuan.ipxe.j2 │ │ │ ├── endeavouros.ipxe.j2 │ │ │ ├── fedora.ipxe.j2 │ │ │ ├── flatcar.ipxe.j2 │ │ │ ├── freebsd.ipxe.j2 │ │ │ ├── freedos.ipxe.j2 │ │ │ ├── gentoo.ipxe.j2 │ │ │ ├── gparted.ipxe.j2 │ │ │ ├── harvester.ipxe.j2 │ │ │ ├── ipfire.ipxe.j2 │ │ │ ├── k3os.ipxe.j2 │ │ │ ├── kairos.ipxe.j2 │ │ │ ├── kali.ipxe.j2 │ │ │ ├── kaspersky.ipxe.j2 │ │ │ ├── linux-arm.ipxe.j2 │ │ │ ├── linux-i386.ipxe.j2 │ │ │ ├── linux.ipxe.j2 │ │ │ ├── live-arm.ipxe.j2 │ │ │ ├── live-backbox.ipxe.j2 │ │ │ ├── live-bluestar.ipxe.j2 │ │ │ ├── live-bodhi.ipxe.j2 │ │ │ ├── live-cachyos.ipxe.j2 │ │ │ ├── live-debian.ipxe.j2 │ │ │ ├── live-devuan.ipxe.j2 │ │ │ ├── live-elementary.ipxe.j2 │ │ │ ├── live-endeavouros.ipxe.j2 │ │ │ ├── live-fatdog.ipxe.j2 │ │ │ ├── live-fedora.ipxe.j2 │ │ │ ├── live-feren.ipxe.j2 │ │ │ ├── live-garuda.ipxe.j2 │ │ │ ├── live-grml.ipxe.j2 │ │ │ ├── live-hrmpf.ipxe.j2 │ │ │ ├── live-k3os.ipxe.j2 │ │ │ ├── live-kali.ipxe.j2 │ │ │ ├── live-kodachi.ipxe.j2 │ │ │ ├── live-lite.ipxe.j2 │ │ │ ├── live-lxle.ipxe.j2 │ │ │ ├── live-manjaro.ipxe.j2 │ │ │ ├── live-mint.ipxe.j2 │ │ │ ├── live-neon.ipxe.j2 │ │ │ ├── live-nitrux.ipxe.j2 │ │ │ ├── live-parrot.ipxe.j2 │ │ │ ├── live-peppermint.ipxe.j2 │ │ │ ├── live-popos.ipxe.j2 │ │ │ ├── live-q4os.ipxe.j2 │ │ │ ├── live-raizo.ipxe.j2 │ │ │ ├── live-regolith.ipxe.j2 │ │ │ ├── live-septor.ipxe.j2 │ │ │ ├── live-sparky.ipxe.j2 │ │ │ ├── live-tails.ipxe.j2 │ │ │ ├── live-ubuntu.ipxe.j2 │ │ │ ├── live-vanillaos.ipxe │ │ │ ├── live-voyager.ipxe.j2 │ │ │ ├── live-zorin.ipxe.j2 │ │ │ ├── live.ipxe.j2 │ │ │ ├── lspci.ipxe.j2 │ │ │ ├── mageia.ipxe.j2 │ │ │ ├── menu.ipxe.j2 │ │ │ ├── nbxyz.ipxe.j2 │ │ │ ├── netinfo.ipxe.j2 │ │ │ ├── nixos.ipxe.j2 │ │ │ ├── openEuler.ipxe.j2 │ │ │ ├── openbsd.ipxe.j2 │ │ │ ├── opensuse.ipxe.j2 │ │ │ ├── oracle.ipxe.j2 │ │ │ ├── photon.ipxe.j2 │ │ │ ├── proxmox.ipxe.j2 │ │ │ ├── rescuezilla.ipxe.j2 │ │ │ ├── rhel.ipxe.j2 │ │ │ ├── rockylinux.ipxe.j2 │ │ │ ├── shredos.ipxe.j2 │ │ │ ├── slackware.ipxe.j2 │ │ │ ├── smartos.ipxe.j2 │ │ │ ├── systemrescue.ipxe.j2 │ │ │ ├── talos.ipxe.j2 │ │ │ ├── tinycore.ipxe.j2 │ │ │ ├── ubuntu-spins.ipxe.j2 │ │ │ ├── ubuntu.ipxe.j2 │ │ │ ├── unix.ipxe.j2 │ │ │ ├── utils-arm.ipxe.j2 │ │ │ ├── utils-efi.ipxe.j2 │ │ │ ├── utils-pcbios-32.ipxe.j2 │ │ │ ├── utils-pcbios-64.ipxe.j2 │ │ │ ├── vmware.ipxe.j2 │ │ │ ├── vyos.ipxe.j2 │ │ │ ├── windows.ipxe.j2 │ │ │ └── zeninstall.ipxe.j2 │ │ ├── pipxe/ │ │ │ ├── Makefile-rpi3.j2 │ │ │ └── Makefile-rpi4.j2 │ │ └── version.ipxe.j2 │ ├── tests/ │ │ ├── inventory │ │ └── test.yml │ └── vars/ │ ├── debian.yml │ ├── main.yml │ ├── redhat.yml │ └── ubuntu.yml ├── script/ │ ├── build_release │ ├── message │ ├── netbootxyz-overrides.yml │ ├── retrieve_certs │ └── tag ├── site.yml ├── user_overrides.yml └── version.txt ================================================ FILE CONTENTS ================================================ ================================================ FILE: .ansible-lint ================================================ # .ansible-lint skip_list: - '208' - command-instead-of-module # Using command rather than module. - command-instead-of-shell # Use shell only when shell functionality is required. - no-changed-when # Commands should not change things if nothing needs doing. - risky-shell-pipe # Shells that use pipes should set the pipefail option. - literal-compare # Don't compare to literal True/False. - var-naming[no-role-prefix] # Internal variables don't need role prefix. ================================================ FILE: .dockerignore ================================================ .git ================================================ FILE: .github/FUNDING.yml ================================================ github: netbootxyz open_collective: netbootxyz ================================================ FILE: .github/ISSUE_TEMPLATE/bug_report.md ================================================ --- name: Bug report about: Create a report to help us improve title: '' labels: 'bug' assignees: '' --- []: This bug persists when memory is increased beyond 8GB. **Describe the bug** **To Reproduce** Steps to reproduce the behavior: 1. Go to '...' **Expected behavior** **Screenshots** **Additional context** ================================================ FILE: .github/ISSUE_TEMPLATE/config.yml ================================================ blank_issues_enabled: false contact_links: - name: Ask a question in the Discussions area url: https://github.com/netbootxyz/netboot.xyz/discussions about: Recommended place for questions, operating system discussion, and ideas. - name: Ask a question on the netboot.xyz Discord Server url: https://discord.gg/An6PA2a about: Join the official netboot.xyz Discord! ================================================ FILE: .github/ISSUE_TEMPLATE/feature_request.md ================================================ --- name: Feature request about: Suggest an idea for this project title: '' labels: 'enhancement' assignees: '' --- **Is your feature request related to a problem? Please describe.** **Describe the solution you'd like** **Describe alternatives you've considered** **Additional context** ================================================ FILE: .github/workflows/claude.yml ================================================ name: Claude PR Assistant on: issue_comment: types: [created] pull_request_review_comment: types: [created] issues: types: [opened, assigned] pull_request_review: types: [submitted] jobs: claude-code-action: if: | (github.event_name == 'issue_comment' && contains(github.event.comment.body, '@claude')) || (github.event_name == 'pull_request_review_comment' && contains(github.event.comment.body, '@claude')) || (github.event_name == 'pull_request_review' && contains(github.event.review.body, '@claude')) || (github.event_name == 'issues' && contains(github.event.issue.body, '@claude')) runs-on: ubuntu-latest permissions: contents: read pull-requests: read issues: read id-token: write steps: - name: Checkout repository uses: actions/checkout@v6 with: fetch-depth: 1 - name: Run Claude PR Action uses: anthropics/claude-code-action@beta with: anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }} timeout_minutes: "60" ================================================ FILE: .github/workflows/development.yml ================================================ name: development on: push: branches: - development workflow_dispatch: env: DISCORD_HOOK_URL: ${{ secrets.DISCORD_HOOK_URL }} GITHUB_SHA: ${{ github.sha }} jobs: development-build: name: Build Development runs-on: ubuntu-latest permissions: id-token: write contents: read steps: - uses: actions/checkout@v6 with: ref: development - name: Retrieve Certs run: | ./script/retrieve_certs env: GIT_USER: ${{ secrets.GIT_USER }} GIT_AUTH: ${{ secrets.GIT_AUTH }} GIT_URL: ${{ secrets.GIT_URL }} CERTS_KEY: ${{ secrets.CERTS_KEY }} - name: Build Development Release run: | ./script/build_release dev - name: Configure AWS credentials uses: aws-actions/configure-aws-credentials@v6 with: role-to-assume: ${{ secrets.AWS_ROLE_DEV }} aws-region: ${{ secrets.AWS_ACCESS_REGION }} - name: Deploy development release to bucket/SHA run: | aws s3 sync --no-progress --acl public-read s3out s3://${{ secrets.AWS_S3_BUCKET_DEV }}/$GITHUB_SHA - name: Deploy development version file to bucket run: | aws s3 sync --no-progress --acl public-read s3outver s3://${{ secrets.AWS_S3_BUCKET_DEV }} - name: Notify Discord on failure if: failure() run: | ./script/message failure - name: Notify Discord on completion if: success() run: | ./script/message dev-push ================================================ FILE: .github/workflows/pull-requests.yml ================================================ name: pull-requests on: pull_request: branches: - development - RC - master jobs: test-pr: name: Test Pull Request runs-on: ubuntu-latest steps: - uses: actions/checkout@v6 - uses: actions/setup-python@v6 with: python-version: '3.14' # renovate: datasource=github-tags depName=python - name: Install dependencies run: | python -m pip install --upgrade pip pip install ansible==13.4.0 # renovate: datasource=pypi depName=ansible pip install ansible-lint==26.3.0 # renovate: datasource=pypi depName=ansible-lint - name: Syntax Check run: | ansible-playbook site.yml --syntax-check - name: Ansible lint run: | ansible-lint -v roles/netbootxyz/tasks build-pr: name: Build Pull Request runs-on: ubuntu-latest steps: - uses: actions/checkout@v6 - uses: actions/setup-python@v6 - name: Build PR release run: | ./script/build_release pr ================================================ FILE: .github/workflows/release-candidate.yml ================================================ name: release-candidate on: push: branches: - RC workflow_dispatch: env: DISCORD_HOOK_URL: ${{ secrets.DISCORD_HOOK_URL }} GITHUB_SHA: ${{ github.sha }} jobs: rc-build: name: Build Release Candidate runs-on: ubuntu-latest permissions: id-token: write contents: write steps: - uses: actions/checkout@v6 with: ref: RC - name: Retrieve Certs run: | ./script/retrieve_certs env: GIT_USER: ${{ secrets.GIT_USER }} GIT_AUTH: ${{ secrets.GIT_AUTH }} GIT_URL: ${{ secrets.GIT_URL }} CERTS_KEY: ${{ secrets.CERTS_KEY }} - name: Set Release Tag run: echo "release_tag=$(cat version.txt)-RC" >> $GITHUB_ENV - name: Build RC release run: | ./script/build_release rc - name: Configure AWS credentials uses: aws-actions/configure-aws-credentials@v6 with: role-to-assume: ${{ secrets.AWS_ROLE_STAGING }} aws-region: ${{ secrets.AWS_ACCESS_REGION }} - name: Deploy RC to release-candidate bucket run: | aws s3 sync --no-progress --acl public-read s3out s3://${{ secrets.AWS_S3_BUCKET_STAGING }}/${{ env.release_tag }} - name: Deploy RC to rolling bucket run: | aws s3 sync --no-progress --acl public-read s3out-latest s3://${{ secrets.AWS_S3_BUCKET_STAGING }}/rc - name: Deploy RC version file run: | aws s3 sync --no-progress --acl public-read s3outver s3://${{ secrets.AWS_S3_BUCKET_STAGING }} - name: Invalidate Cloudfront run: | aws cloudfront create-invalidation --distribution-id ${{ secrets.CLOUDFRONT_DIST_ID_STAGING }} --paths "/rc/*" "/rc/ipxe/*" "/rc/sigs/*" - name: Tag RC Release run: | ./script/tag ${{ env.release_tag }} - name: Extract release notes id: extract-release-notes uses: ffurrer2/extract-release-notes@v3 - name: Create RC Release and Upload Assets uses: svenstaro/upload-release-action@v2 with: file: githubout/* file_glob: true overwrite: true prerelease: true release_name: ${{ env.release_tag }} repo_token: ${{ secrets.GITHUB_TOKEN }} tag: ${{ env.release_tag }} body: ${{ steps.extract-release-notes.outputs.release_notes }} - name: Notify Discord on failure if: failure() run: | ./script/message failure - name: Notify Discord on completion if: success() run: | ./script/message rc-push ================================================ FILE: .github/workflows/release.yml ================================================ name: release on: push: branches: - master env: DISCORD_HOOK_URL: ${{ secrets.DISCORD_HOOK_URL }} GITHUB_SHA: ${{ github.sha }} jobs: release: name: Build Release runs-on: ubuntu-latest permissions: id-token: write contents: write steps: - uses: actions/checkout@v6 with: ref: master - name: Retrieve Certs run: | ./script/retrieve_certs env: GIT_USER: ${{ secrets.GIT_USER }} GIT_AUTH: ${{ secrets.GIT_AUTH }} GIT_URL: ${{ secrets.GIT_URL }} CERTS_KEY: ${{ secrets.CERTS_KEY }} - name: Set Release Tag run: echo "release_tag=$(cat version.txt)" >> $GITHUB_ENV - name: Build release run: | ./script/build_release release - name: Configure AWS credentials uses: aws-actions/configure-aws-credentials@v6 with: role-to-assume: ${{ secrets.AWS_ROLE_PROD }} aws-region: ${{ secrets.AWS_ACCESS_REGION }} - name: Deploy master to release bucket run: | aws s3 sync --no-progress --acl public-read s3out s3://${{ secrets.AWS_S3_BUCKET_PROD }}/${{ env.release_tag }} - name: Deploy master to rolling bucket run: | aws s3 sync --no-progress --acl public-read s3out-latest s3://${{ secrets.AWS_S3_BUCKET_PROD }} - name: Invalidate Cloudfront run: | aws cloudfront create-invalidation --distribution-id ${{ secrets.CLOUDFRONT_DIST_ID_PROD }} --paths "/*" "/ipxe/*" "/sigs/*" - name: Tag Release run: | ./script/tag ${{ env.release_tag }} - name: Extract release notes id: extract-release-notes uses: ffurrer2/extract-release-notes@v3 - name: Create Release and Upload Assets uses: svenstaro/upload-release-action@v2 with: file: githubout/* file_glob: true overwrite: true prerelease: false release_name: ${{ env.release_tag }} repo_token: ${{ secrets.GITHUB_TOKEN }} tag: ${{ env.release_tag }} body: ${{ steps.extract-release-notes.outputs.release_notes }} - name: Notify Discord on failure if: failure() run: | ./script/message failure - name: Notify Discord on completion if: success() run: | ./script/message live-push ================================================ FILE: .github/workflows/rolling.yml ================================================ name: rolling on: workflow_dispatch: # Disabled automatic rolling releases during version updates # push: # paths: # - 'endpoints.yml' # - 'roles/netbootxyz/defaults/main.yml' # branches: # - development env: DISCORD_HOOK_URL: ${{ secrets.DISCORD_HOOK_URL }} GITHUB_SHA: ${{ github.sha }} jobs: rolling: name: Build Release runs-on: ubuntu-latest permissions: id-token: write contents: write steps: - uses: actions/checkout@v6 with: ref: 'master' - name: Retrieve Certs run: | ./script/retrieve_certs env: GIT_USER: ${{ secrets.GIT_USER }} GIT_AUTH: ${{ secrets.GIT_AUTH }} GIT_URL: ${{ secrets.GIT_URL }} CERTS_KEY: ${{ secrets.CERTS_KEY }} - name: Set Release Tag run: echo "release_tag=$(cat version.txt)" >> $GITHUB_ENV - name: Download endpoints.yml and main.yml from Development run: | wget https://raw.githubusercontent.com/netbootxyz/netboot.xyz/development/endpoints.yml -O endpoints.yml wget https://raw.githubusercontent.com/netbootxyz/netboot.xyz/development/roles/netbootxyz/defaults/main.yml -O roles/netbootxyz/defaults/main.yml chmod +x script/build_release - name: Build release run: | ./script/build_release rolling - name: Configure AWS credentials uses: aws-actions/configure-aws-credentials@v6 with: role-to-assume: ${{ secrets.AWS_ROLE_ROLLING }} aws-region: ${{ secrets.AWS_ACCESS_REGION }} - name: Deploy master to rolling bucket run: | aws s3 sync --no-progress --acl public-read s3out-latest s3://${{ secrets.AWS_S3_BUCKET_PROD }} - name: Invalidate Cloudfront run: | aws cloudfront create-invalidation --distribution-id ${{ secrets.CLOUDFRONT_DIST_ID_PROD }} --paths "/*" "/ipxe/*" "/sigs/*" - name: Notify Discord on failure if: failure() run: | ./script/message failure - name: Notify Discord on completion if: success() run: | ./script/message rolling-push ================================================ FILE: AGENTS.md ================================================ # AGENTS.md Guidelines for AI coding agents working in the netboot.xyz repository. ## Project Summary netboot.xyz generates iPXE bootloaders and menus for 190+ operating systems using Ansible and Jinja2 templates. There is no application code in a traditional sense — the project produces `.ipxe` scripts and bootloader binaries. ## Build Commands ```bash # Syntax check (fast, run first) ansible-playbook site.yml --syntax-check # Lint Ansible tasks ansible-lint -v roles/netbootxyz/tasks # Full local build (generates menus + bootloaders to /var/www/html) ansible-playbook site.yml # Menu-only build (skip bootloader compilation) ansible-playbook site.yml -e "generate_disks=false generate_checksums=false generate_signatures=false" # Docker build (outputs to buildout/) docker build -t localbuild --platform=linux/amd64 -f Dockerfile . docker run --rm -it --platform=linux/amd64 -v $(pwd):/buildout localbuild # Release builds ./script/build_release dev # Development ./script/build_release pr # Pull request test ./script/build_release rc # Release candidate ./script/build_release release # Production ./script/build_release rolling # Rolling ``` ### CI Checks (what PRs must pass) 1. `ansible-playbook site.yml --syntax-check` 2. `ansible-lint -v roles/netbootxyz/tasks` 3. Full Docker build via `./script/build_release pr` ### Testing Molecule tests exist but require Docker: ```bash pip install molecule molecule-docker molecule test ``` There are no unit tests. Validation is done through syntax checks, linting, and full builds. ## Code Style ### YAML / Ansible - Start every YAML file with `---` on line 1. - Use 2-space indentation consistently. - Use **fully-qualified collection names** (FQCN) for all modules: - `ansible.builtin.template`, `ansible.builtin.set_fact`, `ansible.builtin.shell`, etc. - Never use short names like `template:` or `shell:`. - Use `snake_case` for all variable names: `boot_domain`, `generate_menus`, `netbootxyz_root`. - Guard booleans with the `| default(true) | bool` pattern: ```yaml when: - generate_menus | default(true) | bool ``` - Use `when:` as a list even for single conditions. - Use descriptive `name:` for every task. - The `.ansible-lint` config skips these rules (do not add workarounds for them): - `command-instead-of-module`, `command-instead-of-shell` - `no-changed-when`, `risky-shell-pipe` - `literal-compare`, `var-naming[no-role-prefix]` ### iPXE Templates (`.ipxe.j2` files) - Start with `#!ipxe` shebang on line 1. - Add a comment header with OS name and URL on lines 2-4. - iPXE scripts are **flat** — do not indent iPXE commands. - Use `#` for comments inside templates. - Variable conventions: - iPXE runtime variables: `${variable_name}` (evaluated at boot time) - Jinja2 template variables: `{{ variable }}` (evaluated at build time) - These are often mixed: `${live_endpoint}{{ endpoints.foo.path }}` - Labels use `:label_name` in `snake_case`. - Navigation pattern: `goto ${menu} ||` at template start. - User selection: `choose || goto `. - Exit pattern: clear menu and `exit 0`: ```ipxe :distro_exit clear menu exit 0 ``` - Error pattern: echo, prompt, return to menu: ```ipxe :error echo Error occurred, press any key to return to menu prompt goto main_menu ``` - Fallback chains: `command || goto fallback` for graceful degradation. - Architecture mapping varies by OS family: - Red Hat: `x86_64` → `x86_64`, `arm64` → `aarch64` - Debian: `x86_64` → `amd64`, `arm64` → `arm64` - Guard optional values: `isset ${variable}` in iPXE, `{% if value.field is defined %}` in Jinja2. ### Jinja2 Patterns - Loop over releases: `{% for item in releases..versions %}` - Sort by name: `{% for key, value in releases.items() | sort(attribute='1.name') %}` - Filter enabled items: `{% if value.enabled is defined and value.enabled | bool %}` - Template iteration uses `with_community.general.filetree` in tasks. ### OS Definition Schema (`defaults/main.yml`) ```yaml releases: distro_key: # lowercase, no hyphens (e.g., almalinux, rockylinux) name: "Display Name" mirror: "http://mirror.url" base_dir: "path/on/mirror" enabled: true menu: linux # one of: linux, bsd, dos, unix versions: - code_name: "version_id" name: "Display Version" ``` Optional fields: `archive_mirror`, `paths`, `flavors`, `platforms`, `version`. ### Utility Definition Schema (`defaults/main.yml`) ```yaml utilitiesefi: # or utilitiespcbios64, utilitiespcbios32, utilitiesarm utility_key: name: "Display Name" enabled: true type: direct # one of: direct, ipxemenu, memdisk, memtest, sanboot kernel: "" initrd: "" # optional ``` ## File Organization | Path | Purpose | |------|---------| | `site.yml` | Main playbook entry point | | `defaults/main.yml` | All OS/utility definitions and default config | | `endpoints.yml` | Live image endpoint URLs | | `user_overrides.yml` | Local overrides (not committed) | | `templates/menu/*.ipxe.j2` | ~100 iPXE menu templates | | `templates/disks/*.j2` | Bootloader embedded scripts | | `templates/pipxe/*.j2` | Raspberry Pi Makefile templates | | `tasks/*.yml` | 14 Ansible task files | | `vars/{debian,redhat,ubuntu}.yml` | Per-distro package lists | | `script/` | Build and release shell scripts | ## Menu Hierarchy ``` menu.ipxe (main) → linux.ipxe → ubuntu.ipxe, fedora.ipxe, ... → bsd.ipxe → freebsd.ipxe, openbsd.ipxe, ... → live.ipxe → live-ubuntu.ipxe, ... → utils-*.ipxe → windows.ipxe ``` Menus chain via `chain ${menu}.ipxe || goto error`. Signature verification gates chaining when `sigs_enabled` is true. ## Error Handling - **Ansible**: Relies on default fail-fast behavior. No `block/rescue/always`. Guard tasks with `when:` conditions. Use `| default()` to prevent undefined variable errors. - **iPXE**: Use `command || goto fallback` chains. Protocol degradation: HTTPS → HTTP → local boot. Always provide a `:error` label that prompts the user. - **Shell scripts**: Use `set -e` at the top of all scripts. ## Adding a New Operating System 1. Add entry to `releases:` in `roles/netbootxyz/defaults/main.yml`. 2. Create `roles/netbootxyz/templates/menu/.ipxe.j2` following existing templates. 3. The menu template is auto-discovered via `filetree` iteration — no registration needed. 4. Add the distro to the appropriate category menu (e.g., `linux.ipxe.j2`) if it needs a menu entry. 5. If using live images, add endpoint to `endpoints.yml`. 6. Test: `ansible-playbook site.yml --syntax-check && ansible-lint -v roles/netbootxyz/tasks` ## Key Variables - **`boot_domain`**: Target domain for generated menus. - **`boot_version`**: Version string for releases. - **`site_name`**: Custom branding (defaults to `netboot.xyz`). - **`generate_menus` / `generate_disks`**: Enable/disable build components. - **`sigs_enabled`**: Enable signature verification for menu chaining. - **`live_endpoint`**: Base URL for live/rescue images. - **Runtime variables**: `${distro}_mirror` and `${distro}_base_dir` are auto-generated from `releases:` entries in `boot.cfg.j2` and available to all menu templates at boot time. ## Git Workflow - **`development`**: Main development branch, default PR target. - **`RC`**: Release candidate staging. - **`master`**: Production releases. - Commit style: imperative mood, descriptive. Automated commits use `Version bump for ...` format. ================================================ FILE: CHANGELOG.md ================================================ # Changelog All notable changes to this project will be documented in this file. ## [3.0.0] - 2026-01-24 ### Added - Proxmox Datacenter Manager support with text and debug installation modes - Memtest86+ v8.00 series support ### Changed - **BREAKING**: Updated embedded certificates used for image signature verification in iPXE bootloaders - Users with 2.x bootloaders will be automatically upgraded to 3.x on first boot - Bumped major version to 3.x series due to code signing certificate updates requiring bootloader update - Various distribution version updates across all supported operating systems - Improved certificate retrieval script with commit SHA validation output ### Fixed - Oracle Linux menu items now properly filter by architecture (x86_64 vs aarch64) - OpenSUSE Tumbleweed ARM64 build configuration corrected to use ports mirror - Flatcar Container Linux boot redirect issue resolved ## [2.0.89] - 2025-11-08 ### Added - OpenSUSE 16.0 support with live ISO boot method - Dasharo Tools Suite updated to v2.7.0 and v2.7.1 ### Changed - Updated Ansible to v12 for improved build system - Updated ansible-lint to v24.12.2 with compatibility fixes - Various distribution version updates: - Arch Linux updated to 2025.11.01 - SmartOS updated to 20251030T000436Z - CoreOS updated to 42.20251012.3.0-stable, 43.20251024.2.0-testing, 43.20251027.1.0-next - IPFire updated to 2.29-core198 - Improved dependency tracking in GitHub workflows - Updated GitHub Actions: - actions/checkout to v5 - actions/setup-python to v6 - aws-actions/configure-aws-credentials to v5 ### Fixed - OpenSUSE 16.0 boot configuration now uses live ISO method with proper root= parameter - Ansible-lint configuration updated to skip var-naming rule for internal variables - CI/CD compatibility issues resolved between Ansible and ansible-lint versions - Renovate configuration JSON syntax errors corrected ## [2.0.88] - 2025-08-09 ### Added - CachyOS live distribution with archiso boot configuration - Ubuntu Spins distribution template for Ubuntu flavor variants - Debian 13 (Trixie) net installer - Rocky Linux 10 and AlmaLinux 10 - Flatcar Container Linux ARM64 architecture support - Proxmox VE 9.0 - Dasharo Tools Suite updated to v2.6.0 - SystemRescue archiso_pxe_http initrd support ### Changed - FreeDOS updated to v1.4 with corrected URLs - Various distribution version updates and endpoint refreshes - Improved MAC address handling in TFTP boot configuration ### Fixed - Fedora CoreOS kernel filename format corrected ### Removed - Deepin distribution completely removed from the system ## [2.0.87] - 2025-05-08 ### Added - Fedora Onyx build - Kali arm64 Added ### Changed - Various version updates - Cleanup of older distros from endpoints ## [2.0.86] - 2025-03-13 ### Added - Support for Kairos - Enabled NFS support in iPXE ## [2.0.85] - 2025-02-23 ### Changed - Various version updates - Checks for boot timeout from local-vars.ipxe ## [2.0.84] - 2025-01-04 ### Added - UEFI Shell available under utilities for x86/ARM UEFI mode - Floppy boot images for UEFI - Dasharo Tools Suite - Latest GRML added with ARM support ### Changed - Moves win_base_url and rhel_base_url out of boot.cfg to local-vars.ipxe as they are user defined variables. - Adds a check in boot.cfg to see if live_endpoint is set from local-vars.ipxe. This will allow the user to set their overrides locally on their network. ## [2.0.83] - 2024-11-07 ### Changed - Various version updates ## [2.0.82] - 2024-09-18 ### Changed - Various version updates ## [2.0.81] - 2024-08-10 ### Added - Added ZFSBootMenu - Added VanillaOS - Added Super Grub2 Disk for EFI ### Fixed - Slowness with Ubuntu 24.04 net install getting stuck on Cloud Init - Removed hard coded console on VyOS to fix on Equinix Metal ## [2.0.80] - 2024-07-17 ### Added - Adds option for setting System Resuce password ### Removed - Scientific Linux (EOL) ## [2.0.79] - 2024-05-25 ### Added - Added Talos to arm64 menu - Ubuntu 24.04 LTS, Fedora 40, and many other version updates ### Changed - Dropped newer Ubuntu Live Image versions as they don't properly work anymore ## [2.0.78] - 2024-03-30 ### Fixed - Resolves an issue with the generated index having incorrect naming on the links due to a previous variable name change on the index template - Proxmox iso names are corrected for backup and mailgateway ## [2.0.77] - 2024-02-24 ### Fixed - Talos menu fixed ### Changed - Use bootloader_filename instead of site_name for bootloader filenames ## [2.0.76] - 2023-12-31 ### Added - Memtest86+ 6.20 for EFI and Legacy x86_64 modes, leaves 5.01 for Legacy purposes as some issues were noticed loading 6.20 Legacy on KVM where it hangs on loading but works fine using VMware. - ARM ISO and USB Images added - Tunable make_num_jobs for compiling in parallel ## [2.0.75] - 2023-12-03 ### Fixed - Updated CentOS to be able to pull arm64 images - Updates to images that may have been missing curl in the initrd for booting ### Changed - Uses exit 1 on local boot now to allow for it to roll over to next device in UEFI (Issue #1276) - Switches to using proxmox iso from asset releases so that it can also be installed via local assets (Issue #1350) ## [2.0.74] - 2023-11-14 ### Changed - Update rescue flag to include inst. prefix on RHEL based distros ### Fixed - Minor bugs in Fedora menu - CAINE booting ### Removed - Anarchy Linux ## [2.0.73] - 2023-10-13 ### Added - Fedora 39 stubbed out for release later this month - Ubuntu 23.10 - Text UI support for Proxmox Distros ### Fixed - Fixed an issue with Fedora would error with "Could not boot" ### Removed - Remove AVG as it's no longer maintained ## [2.0.72] - 2023-09-15 ### Fixed - Fixed an issue where Proxmox/QEMU users using Legacy mode would hang or reboot when loading an OS. Would have affected 2.0.70 and 2.0.71 releases. ## [2.0.71] - 2023-09-09 ### Added - Added NixOS option for ARM ### Changed - Adjusted bootloader logic for detecting v6 and v6 scenarios ### Fixed - Kickstart URLs were broken on RHEL based distros if text install was being used. ## [2.0.70] - 2023-07-03 ### Added - Enabled CERT_CMD in iPXE - Added Debian 12 - Disable pci scan option when loaded on ARM/EFI as command isn't supported - Building snp and snponly builds for Equinix Metal ### Changed - Changed default Equinix Metal builds to use snp to ensure more stable start - Changed CentOS 9 Stream mirror due to it no longer working with iPXE ## [2.0.69] - 2023-05-07 ### Added - Ubuntu 23.04 (Lunar) - Fedora 38 - Added multiarch combined ISO and IMG file for x86_64 and arm64 ## [2.0.68] - 2023-04-02 ### Changed - Various versions updated, no major changes ## [2.0.67] - 2023-02-18 ### Added - Enabled Link Layer Discovery Protocol (LLDP) - OpenSUSE ARM Support ## [2.0.66] - 2022-12-28 ### Fixed - Adjusted Mint menu generation for minor releases to fix rolling ## [2.0.65] - 2022-12-03 ### Fixed - Removed deprecated arg from Ansible playbook to fix dev and rolling ## [2.0.64] - 2022-11-23 ### Removed - Removed RancherOS ## [2.0.63] - 2022-10-23 ### Added - Fedora 37 (to be released) - Ubuntu 20.10 (Kinetic Kudu) ## [2.0.62] - 2022-09-13 ### Changes - Uses inst.text instead of text on redhat based distros ### Fixed - Menu was incorrect on AlmaLinux on aarch64 ## [2.0.61] - 2022-08-28 ### Added - Various version updates - Viewpoint attribute on boot.netboot.xyz index - Oracle Linux aarch64 ### Changes - Various Ansible Lint fixes ### Fixed - Ubuntu 22.04 version issues related to minor increments ## [2.0.60] - 2022-07-24 ### Added - Added Fedora Kionite ### Changes - Collapsed Dockerfiles into one - Various version updates - Cleaned up some EOL versions ## [2.0.59] - 2022-05-28 ### Added - VMware Photon 4.0 ## [2.0.58] - 2022-04-22 ### Added - Ubuntu 22.04 LTS Jammy Jellyfish - Fedora 26 Prep for release ### Changes - Disabled RPI image as it was failing, will need to revisit in future - Lint fixes ## [2.0.57] - 2022-03-21 ### Added - Proxmox Backup Server - Proxmox Mail Gateway ### Changes - Proxmox pulls ISO from upstream site now, consolidated Proxmox items to one menu ## [2.0.56] - 2022-02-26 ### Fixed - Added a ipxe_cloud_config for packet and metal for older clients ## [2.0.55] - 2022-02-12 ### Added - Slackware 15.0 ### Fixed - Hardset Flatcar Linux initrd to fix booting (`https://github.com/netbootxyz/netboot.xyz/issues/1070`) - Archlinux now sets archtecture correctly with static ips ### Changes - Changes Packet bootloaders to Equinix Metal - Switch archlinux default mirror to mirrors.edge.kernel.org to avoid redirect ## [2.0.54] - 2021-12-25 ### Added - CentOS 9 Stream hardset url - Various version updates ## [2.0.53] - 2021-11-22 ### Added - Fedora 35 - Various version updates ## [2.0.52] - 2021-10-31 ### Added - Support for ProxyDHCP environments ## [2.0.51] - 2021-10-15 ### Added - Fedora CoreOS - aarch64 support - Garuda Linux Live builds - Ubuntu 21.10 live builds and installers - Added Padded Floppy builds for tooling sensitive to size of disk - Added logic for building iPXE linux binaries ### Fixed - Manjaro builds working again ## [2.0.50] - 2021-10-03 ### Added - Added Clonezilla 32-bit ### Changed - Proper rolling for boot.netboot.xyz implemented, endpoints.yml and defaults are now pushed to boot.netboot.xyz upon update in development branch to ensure version updates can be consumed as identified. Allows for new versions to be available before a release. ## [2.0.49] - 2021-09-29 ### Added - Support for Ubuntu 20.04 Subiquity and up on arm64 - Added Archlinux 32-bit - Added shredos for 32-bit - Added systemrescue for 32-bit - Added Fedora 35 Beta - Added Ubuntu 21.10 Impish Indri Beta ### Fixed - Corrected architecture naming on k3os ### Changed - Split pcbios utilities menu into 32-bit and 64-bit options - utilitiespcbios is now utilitiespcbios64 and utilitiespcbios32 for overrides - Renamed ubuntu netboot assets to align better with existing branches ## [2.0.48] - 2021-09-17 ### Added - Support for Harvester - Support for Tails - Support for Kali 32-bit net installer - Support for hrmpf - Support for Gentoo 32-bit and arm64 installers - Added EFI support for OpenBSD using sanboot - Adds additional options for arm64 iPXE binary downloads ## [2.0.47] - 2021-08-30 ### Fixed - Corrects an issue with loading 32-bit linux menu on 64-bit platforms (https://github.com/netbootxyz/netboot.xyz/issues/978) ## [2.0.46] - 2021-08-29 ### Fixed - Fix incorrect arch introduced on Ubuntu ## [2.0.45] - 2021-08-29 ### Added - Created a seperate menu for supported 32-bit Operating Systems - Enables utility menu for Packet non EFI - Updated arm menu ### Fixed - Refactor of architecture checks, better support for i386 and arch distros - Arm64 and i386 options work now - Added kernel_params for console overrides to utility images ### Changed - Dropped some older EOL distros ## [2.0.44] - 2021-08-24 ### Added - Enables utility menu for Packet EFI - Added Debian 11 Live Builds - Adds Param command to iPXE builds - Adds next-server and version info when booted locally ### Fixed - Fixes console issues for Ubuntu and Debian on Packet ### Changes - Updates to Voyager menu to let it be more dynamic ## [2.0.43] - 2021-08-19 ### Added - Adds Proxmox VE - Adds Zorin 16 - Adds Elementary OS 6 - Enables ability to add custom commands early in menu load with early_menu_* - Adds ability to change install priority on Ubuntu Legacy - Adds a toggle for enabling local-vars.ipxe ### Fixed - Adjustments to index.html template, adds description - Readme tweaks for new site ## [2.0.42] - 2021-08-01 ### Added - Debian 11 (Bullseye) ahead of release ### Fixed - Gentoo more reliable, switches to initrd.magic to avoid modifying initrd - Fixes to Mint menu to populate options correctly - Cosmetic fixes to index.html.j2 tables ## [2.0.41] - 2021-07-08 ### Added - Adds support for openEuler - Adds ping command to iPXE build ### Fixed - NixOS working again, using images and iPXE configs that are generated upstream ### Changes - Use non https repo for almalinux - Switch to using initrd.magic (`https://github.com/ipxe/ipxe/commit/e5f02551735922eb235388bff08249a6f31ded3d`) - Moves initrd= and cmdline values to single kernel parameter in Ansible ## [2.0.40] - 2021-06-12 ### Added - Adds support for VMware ESXi with user supplied media ## [2.0.39] - 2021-05-15 ### Added - Enabled gzip and zlib support on iPXE binaries ### Fixed - Check for legacy undionly filename if running menu locally ## [2.0.38] - 2021-05-02 ### Added - Fedora 34 and Live Versions - Redo Rescue - Rescuezilla - Rocky Linux ### Changed - Switched to using upstream genfsimg for building hybrid images - Merged Legacy and EFI disks into single image for USB and ISOs - Can now use autoexec.ipxe on the root of a USB key to inject variables or modify the starting bootloader - Renamed USB disk from .usb to .img ## [2.0.37] - 2021-04-25 ### Added - Ubuntu 21.04 Installer and Live Versions ### Fixed - Version number variable tweaks ## [2.0.36] - 2021-04-18 ### Added - Support for ShredOS ## [2.0.35] - 2021-04-02 ### Added - Support for EndeavourOS ## [2.0.34] - 2021-03-13 ### Added - Support for AlmaLinux ### Fixed - Updated Debian Kernel for Live images, transitioned over to Actions from Travis ## [2.0.33] - 2021-03-06 ### Removed - Parrot NetInstall images are no longer maintained - Removed Velt as it appears deprecated ## [2.0.32] - 2021-02-09 ### Fixed - Update to latest Ubuntu maintenance release ### Changed - Disabled Unix Menu on EFI as SmartOS not working in that mode and was the only option on EFI - Various version updates ## [2.0.31] - 2021-01-18 ### Fixed - Fixes results too large bug introduced on Ubuntu menu ### Changed - Change priority to low on Ubuntu Legacy installer ## [2.0.30] - 2021-01-17 ### Added - Can now download hybrid bootloaders that contain x86_64 Legacy and EFI builds in one image. Enables the user to use one ISO or USB key for multiple scenarios. - Ability to use custom URLs for menus instead of just relying on Github netboot.xyz-custom repo. ### Changed - Added the legacy installer back for Ubuntu 20.04 (Focal). 20.04 will be the last version to support legacy Debian Installer with autoinstall being the new Ubuntu standard going foward. - Various version updates ## [2.0.29] - 2020-12-28 ### Changed - Various version updates - Switched asset builders from Github to Travis - Introduced changelog ## [2.0.28] - 2020-12-09 ### Added - VyOS Support ### Changed - Switches to GitHub Actions from Travis CI for primary repo automation ## [2.0.27] - 2020-11-20 ### Changed - Change builder image name - Remove older Kali images, fix menu for latest version - Switch to inst.repo for Red Hat based OS - Allow for static assigned networking to work on Ubuntu builds ## [2.0.26] - 2020-11-18 ### Added - Adds a hook in the bootloader that checks for local-vars.ipxe from a local tftp server, useful for loading up variables before loading the menu. Can be used to ensure github user is set by default for custom menus. ### Changed - Switches builder to netbootxyz docker image on Github Container Registry - Simplfied Fedora Live menu ### Fixed - Bugfix on NixOS menu ## [2.0.25] - 2020-11-07 ### Added - Initial support for Raspberry Pi iPXE bootloader which allows you to boot using SD Card or USB key. (Experimental) - Ubuntu 20.10 Grovvy Live Images - Added support for Ubuntu 20.04/20.10 Subiquity Server installers - Added Fedora 33 net installer and live images ### Changed - Fedora Core build version is now updated automatically. ## [2.0.24] - 2020-10-28 ### Fixed - Fixed github releases ## [2.0.23] - 2020-10-27 ### Added - Ubuntu 20.10 Groovy Gorilla - Live CD install only - Fedora 33 - OpenBSD 6.8 ## [2.0.22] - 2020-10-11 ### Fixed - Fixed Anarchy Linux ### Changed - Pin builders to Ansible 2.10 ## [2.0.21] - 2020-09-13 ### Changed - Version updates ## [2.0.20] - 2020-08-28 ### Fixed - Archlinux url fixes ## [2.0.19] - 2020-08-12 ### Added - Adds ability to add custom kernel command line parameters ### Fixed - Sets proper RELEASE Tag when creating a Github Release ## [2.0.18] - 2020-07-24 ### Fixed - Fixed Fedora CoreOS build - Various unnamed bugs ## [2.0.17] - 2020-06-30 ### Added - CentOS 8.2 - Mint 20 - OpenSUSE Leap 15.2 ### Changed - Changes to K3OS deployments - Tweaks to ARM64 menus, added ARM placeholders for Utility menu ## [2.0.16] - 2020-06-09 ### Added - Adds Devuan back in with latest Beowulf ### Fixed - Corrects issue with Fedora and text mode ## [2.0.15] - 2020-05-20 ### Added - Backbox 7 ### Fixed - CentOS path fixes ## [2.0.14] - 2020-05-06 ### Added - Fedora 32 and Ubuntu 20.04 live assets - PopOS 20.04 - Parrot 4.9 ### Changed - Bump to CentOS 7.8 - Moved NixOS to hosted live assets ## [2.0.13] - 2020-04-24 ### Changed - Ubuntu 20.04 url - NixOS 20.03 ## [2.0.12] - 2020-04-23 ### Added - Ubuntu 20.04 LTS added and 20.04 stock live builds updated ### Changed - Fedora 32 added and 29 dropped ### Removed - Removed test forked or branched code from github as it no longer works ## [2.0.11] - 2020-04-01 ### Added - Clonezilla Testing/Stable - Gentoo instlaler LiveCD - Nitrux Stable - System Rescue CD - Zorin Linux - Manjaro Live CDs - KDE-neon - Sparky Linux Rolling and Stable - 4mLinux core and SSS - SmartOS version tags - BlueStart Linux - Parrot Linux installer - Bodhi 5 standard and app pack - Linux Mint Debian Edition ### Fixed - Fixed CentOS kickstart url ### Removed - Dropped tails support ## [2.0.10] - 2020-03-07 ### Changed - Various version updates ## [2.0.9] - 2020-02-16 ### Changed - Various version updates ## [2.0.8] - 2020-02-06 ### Added - SmartOS - 4MLinux - BakAndImgCD - The Smallest Server Suite ### Fixed - Various bug fixes ## [2.0.7] - 2020-01-25 ### Added - CentOS 8.1 - Gentoo (working now) - Fatdog - Kaspersky Rescue Disk - LXLE - Live Raise - Septor - Tiny Core Linux using kernels instead of memdisk ## [2.0.6] - 2020-01-19 ### Added - Oracle Linux - Anarchy Installer - Bluestart Live - Zen Graphical Installer for Arch - Kodachi Linux - Bohdi Linux - Boot Repair CD - Devuan Live - gparted Live - grml Live - Parrot Live - Rescatux - System Rescue CD - CAINE - Nitrux - Velt Live - Fedora CoreOS back in ### Removed - Security Menu and merges those options into Linux and Live menus - Unused external signature checking code ## [2.0.5] - 2020-01-11 ### Added - SparkyLinux - K3OS - RHEL menu option back to Linux Menu - Support for text mode on RHEL/Fedora - netboot.xyz endpoints menu under Utilities for testing Dev/Staging/Prod endpoints - Enables auto login for Rancher ## [2.0.4] - 2020-01-06 ### Added - PCI Device List - VLAN Tagging Support in Manual Configuration - DBAN - Clonezilla - Breakin - FerenOS - Q4OS 3.10 ### Fixed - FreeBSD working - Captures upstream iPXE version as ipxe_version - Fixes Packet and GCE Versioning ## [2.0.3] - 2020-01-02 ### Fixed - Fixes for Live CD and Menus ## [2.0.2] - 2019-12-31 ### Fixed - Windows fixes, timeout for version checking - Fixes for Deepin and Elementary ## [2.0.1] - 2019-12-27 ### Fixed - Fixes some index.html issues so that iPXE clients exit properly - Change flags on genisoimage reflect el-torito options - Move generate_signatures to end of playbook - Moves retrieval of latest menu version from about to menu to ensure variable is always loaded - Generates the version file for netboot.xyz site - Enable epel for packages like figlet - Fixes some discord messaging ## [2.0.0] - 2019-12-26 ### Changes - Switches primary boot.netboot.xyz to deploy deployed with Ansible and sets up 2.x rolling release series ## [1.9.9] - 2019-12-13 ### Deprecated - Pre 2.x series before being deployed with Ansible ================================================ FILE: CONTRIBUTING.md ================================================ # Contributing to netboot.xyz First of all, thank you for supporting the netboot.xyz community and for considering contributing to the project! ## How to Contribute Because netboot.xyz supports many different operating systems and utilities, it takes work and time to keep the many options updated. Distributions may add a new version of the operating system, locations of files can change, and versions might go end of life and drop off the mirrors. The end goal is to support as many operating systems as possible so that it's really easy to go explore new operating systems and tools from one location. ## What can I do to help? ### Help keep netboot.xyz updated If you noticed one of your favorite operating system or tool has been updated, feel free to open a [Pull Request] to get the operating system updated. It will be reviewed and merged once validated. ### Add support for new OS and Utilities Do you have a favorite utility that you use often but isn't on netboot.xyz? Feel free to request it being added or submit a [Pull Request]. ### Ask your distribution to become netboot friendly If you don't see support for your favorite distribution in netboot.xyz, please open up an [issue] with netboot.xyz and if possible, open up an issue with the distribution. Ask for the distribution to provide a way to load installer kernels from their mirror directly or provide key files from their release ISO somewhere that is accessible over HTTP. This usually might be a `vmlinuz`, an `initrd`, and potentially a `rootfs` and could be extracted and hosted on the mirror when the release is generated. Providing these allows not only netboot.xyz to load the installer from a supported and trusted location but also users to do the same from their own PXE servers. In this day and age as physical media is less necessary, having the option to pull files as needed is much more efficient especially when you may have limited bandwidth. ### Improve the documentation and knowledgebase We are trying to make netboot.xyz a place to come to learn about infrastructure automation so creating good docs on not only the project but how other distributions automation works is important. A lot of the logic on booting is currently in code but getting those into site documentation as well helps them to be better searchable by search engines. If you are a technical writer, feel free to contribute docs that would enable others to learn and grow. ### Submit ideas We are always looking for new ideas to make the tool more useful, if you have an idea, feel free to open up a Github [issue] or open up a [Pull Request]. ### Communication Channels * [Discord](https://discord.gg/An6PA2a) Chat Server for netboot.xyz discussions, questions, and development * Follow us on [Twitter](https://twitter.com/netbootxyz) at [@netbootxyz](https://twitter.com/netbootxyz) for the latest updates * Start a [discussion](https://github.com/netbootxyz/netboot.xyz/discussions) or share something cool you have done with the project. ### Donate We have set up an [Open Collective](https://opencollective.com/netbootxyz) and [Github Sponsors](https://github.com/sponsors/netbootxyz) to open the project up to those who wish to donate to help out the project. This may cover hosting and domain fees, hardware for validation testing, or anything else that comes up in maintaining a project like this. Every little bit will help! If you enjoy the work we do, please support us! ## Enjoy and have fun! [issue]: https://github.com/netbootxyz/netboot.xyz/issues/new [Pull Request]: https://github.com/netbootxyz/netboot.xyz/pulls ================================================ FILE: Dockerfile ================================================ ARG NBXYZ_OVERRIDES=default FROM ghcr.io/netbootxyz/builder:latest AS builder # repo for build COPY . /ansible FROM builder AS netbootxyz-default ENV EXTRA_VARS="" FROM builder AS netbootxyz-production ENV EXTRA_VARS="--extra-vars @script/netbootxyz-overrides.yml" FROM netbootxyz-${NBXYZ_OVERRIDES} AS final RUN \ echo "**** running ansible ****" && \ cd /ansible && \ ansible-playbook site.yml ${EXTRA_VARS} # runtime stage FROM alpine:latest COPY --from=final /var/www/html/ /mnt/ COPY docker-build-root/ / ENTRYPOINT [ "/dumper.sh" ] ================================================ FILE: LICENSE ================================================ Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. ================================================ FILE: README.md ================================================ ## netboot.xyz [![Tweet](https://img.shields.io/twitter/url/http/shields.io.svg?style=social)](https://twitter.com/intent/tweet?text=Your%20favorite%20operating%20systems%20in%20one%20place!&url=https://netboot.xyz&hashtags=netbootxyz,ipxe,pxe,linux,tech,code) Your favorite operating systems in one place! [![Build Status](https://github.com/netbootxyz/netboot.xyz/workflows/release/badge.svg)](https://github.com/netbootxyz/netboot.xyz/actions?query=workflow%3Arelease) [![Discord](https://img.shields.io/discord/425186187368595466)](https://discord.gg/An6PA2a) [![Release](https://img.shields.io/github/v/release/netbootxyz/netboot.xyz?color=hunter%20green)](https://github.com/netbootxyz/netboot.xyz/releases/latest) ![GitHub all releases](https://img.shields.io/github/downloads/netbootxyz/netboot.xyz/total) ![netboot.xyz menu](https://netboot.xyz/images/netboot.xyz.gif) ### Bootloader Downloads #### Combined Legacy and UEFI iPXE Bootloaders | Type | Bootloader | Description | |------|------------|-------------| |ISO| [netboot.xyz.iso](https://boot.netboot.xyz/ipxe/netboot.xyz.iso)| Used for CD/DVD, Virtual CDs, DRAC/iLO, VMware, Virtual Box | |USB| [netboot.xyz.img](https://boot.netboot.xyz/ipxe/netboot.xyz.img)| Used for creation of USB Keys| #### Legacy (PCBIOS) iPXE Bootloaders | Type | Bootloader | Description | |------|------------|-------------| |Kernel| [netboot.xyz.lkrn](https://boot.netboot.xyz/ipxe/netboot.xyz.lkrn)|Used for booting from GRUB/EXTLINUX| |Floppy| [netboot.xyz.dsk](https://boot.netboot.xyz/ipxe/netboot.xyz.dsk)| Virtual floppy disk for DRAC/iLO, VMware, Virtual Box, etc| |Padded Floppy| [netboot.xyz.pdsk](https://boot.netboot.xyz/ipxe/netboot.xyz.pdsk)| Padded Virtual floppy disk for DRAC/iLO, VMware, Virtual Box, etc| |DHCP| [netboot.xyz.kpxe](https://boot.netboot.xyz/ipxe/netboot.xyz.kpxe)| DHCP boot image file, uses built-in iPXE NIC drivers| |DHCP-undionly| [netboot.xyz-undionly.kpxe](https://boot.netboot.xyz/ipxe/netboot.xyz-undionly.kpxe)| DHCP boot image file, use if you have NIC issues| #### UEFI iPXE Bootloaders | Type | Bootloader | Description | |------|------------|-------------| |DHCP| [netboot.xyz.efi](https://boot.netboot.xyz/ipxe/netboot.xyz.efi)| DHCP boot image file, uses built-in iPXE NIC drivers| |DHCP-snp| [netboot.xyz-snp.efi](https://boot.netboot.xyz/ipxe/netboot.xyz-snp.efi)| EFI w/ Simple Network Protocol, attempts to boot all net devices| |DHCP-snponly| [netboot.xyz-snponly.efi](https://boot.netboot.xyz/ipxe/netboot.xyz-snponly.efi)| EFI w/ Simple Network Protocol, only boots from device chained from| #### ARM64 iPXE Bootloaders | Type | Bootloader | Description | |------|------------|-------------| |DHCP| [netboot.xyz-arm64.efi](https://boot.netboot.xyz/ipxe/netboot.xyz-arm64.efi)| DHCP boot image file, uses built-in iPXE NIC drivers| |DHCP-snp| [netboot.xyz-arm64-snp.efi](https://boot.netboot.xyz/ipxe/netboot.xyz-arm64-snp.efi)| EFI w/ Simple Network Protocol, attempts to boot all net devices| |DHCP-snponly| [netboot.xyz-arm64-snponly.efi](https://boot.netboot.xyz/ipxe/netboot.xyz-arm64-snponly.efi)| EFI w/ Simple Network Protocol, only boots from device chained from| #### Raspberry Pi iPXE Bootloaders | Type | Bootloader | Description | |------|------------|-------------| |USB/SD Card| [netboot.xyz-rpi4-sdcard.img](https://boot.netboot.xyz/ipxe/netboot.xyz-rpi4-sdcard.img)| Raspberry Pi 4 - USB/SD Card Image| |DHCP-snp| [netboot.xyz-rpi4-snp.efi](https://boot.netboot.xyz/ipxe/netboot.xyz-rpi4-snp.efi)| Raspberry Pi 4 - EFI Image| SHA256 checksums are generated during each build of iPXE and are located [here](https://boot.netboot.xyz/ipxe/netboot.xyz-sha256-checksums.txt). You can also view the scripts that are embedded into the images [here](https://github.com/netbootxyz/netboot.xyz/tree/master/ipxe/disks). ### What is netboot.xyz? [netboot.xyz](http://www.netboot.xyz) is a convenient place to boot into any type of operating system or utility disk without the need of having to go spend time retrieving the ISO just to run it. [iPXE](http://ipxe.org/) is used to provide a user friendly menu from within the BIOS that lets you easily choose the operating system you want along with any specific types of versions or bootable flags. If you already have iPXE up and running on the network, you can hit netboot.xyz at anytime by typing for Legacy (PCBIOS) mode: chain --autofree http://boot.netboot.xyz/ipxe/netboot.xyz.lkrn or when in UEFI mode: chain --autofree http://boot.netboot.xyz/ipxe/netboot.xyz.efi You can also load using HTTPS, but by default builds of iPXE do not have HTTPS support compiled in. This will load the appropriate netboot.xyz kernel with all of the proper options enabled. ### Documentation See [netboot.xyz](https://netboot.xyz) for all documentation. Some links to get started with are: * [Downloads](https://netboot.xyz/downloads/) * [Self Hosting](https://netboot.xyz/docs/selfhosting/) * [Booting Methods](https://netboot.xyz/docs/booting/ipxe) * [FAQ](https://netboot.xyz/docs/faq) * [Blog](https://netboot.xyz/blog) If you'd like to contribute to the documentation, the netboot.xyz documentation is located at [netboot.xyz-docs](https://github.com/netbootxyz/netboot.xyz-docs). ### Self Hosting netboot.xyz For those users who want to deploy their own netboot.xyz environment, you can leverage the same scripts that are used to deploy the hosted environment. The source scripts are all Ansible templates and can be generated and customized to your preference. Please see the [self-hosting docs](https://netboot.xyz/docs/selfhosting/) for more information but in short: #### Deploying using Ansible To generate, run: ``` ansible-playbook site.yml ``` The build output will be located in /var/www/html by default. #### Deploying with Docker ``` docker build -t localbuild --platform=linux/amd64 -f Dockerfile . docker run --rm -it --platform=linux/amd64 -v $(pwd):/buildout localbuild ``` The build output will be in the generated folder `buildout` #### Local Overrides Ansible will handle source generation as well as iPXE disk generation with your settings. It will generate Legacy (PCBIOS) and UEFI iPXE disks that can be used to load into your netboot.xyz environment. If you want to override the defaults, you can put overrides in user_overrides.yml. See `user_overrides.yml` for examples. Using the overrides file, you can override all of the settings from the defaults/main.yml so that you can easily change the boot mirror URLs when the menus are rendered. If you prefer to do this after the fact, you can also edit the boot.cfg to make changes, but keep in mind those changes will not be saved when you redeploy the menu. #### Self Hosted Custom Options In addition to being able to host netboot.xyz locally, you can also create your own custom templates for custom menus within netboot.xyz. Please see [Custom User Menus](etc/netbootxyz/custom/README.md) for more information. ### What Operating Systems are currently available on netboot.xyz? #### Operating Systems | Name | URL | Installer Kernel | Live OS | |------------|-----------------|------------------|---------------| | AlmaLinux | https://almalinux.org/ | Yes | No | | Alpine Linux | https://alpinelinux.org | Yes | No | | Arch Linux | https://www.archlinux.org | Yes | No | | Backbox | https://www.backbox.org | No | Yes | | BlackArch Linux | https://blackarch.org | Yes | Yes | | Bluestar Linux | https://sourceforge.net/projects/bluestarlinux | No | Yes | | Bodhi Linux | https://www.bodhilinux.com | No | Yes | | CachyOS | https://cachyos.org | No | Yes | | CentOS | https://centos.org | Yes | No | | Debian | https://debian.org | Yes | Yes| | Devuan | https://devuan.org | Yes | No | | Elementary OS | https://elementary.io | No | Yes | | EndeavourOS | https://endeavouros.com | No | Yes | | Fatdog64 | https://distro.ibiblio.org/fatdog/web/ | No | Yes | | Fedora | https://fedoraproject.org | Yes | Yes | | Fedora CoreOS | https://getfedora.org/en/coreos?stream=stable | Yes | No | | Feren OS | https://ferenos.weebly.com/ | Yes | No | | Flatcar Container Linux | https://www.flatcar.org | Yes | No | | FreeBSD | https://freebsd.org | Yes, disk image | No | | FreeDOS | https://www.freedos.org | ISO - Memdisk| No | | Garuda Linux | https://garudalinux.org/ | No | Yes | | Gentoo | https://gentoo.org | Yes | Yes | | Harvester | https://harvesterhci.io | Yes | No | | hrmpf | https://github.com/leahneukirchen/hrmpf/ | No | Yes | | IPFire | https://www.ipfire.org | Yes | No | | K3OS | https://k3os.io/ | Yes | Yes | | Kairos | https://kairos.io/ | Yes | No | | Kali Linux | https://www.kali.org | Yes | Yes | | KDE Neon | https://neon.kde.org | No | Yes | | Kodachi | https://www.digi77.com/linux-kodachi/ | No | Yes | | Linux Lite | https://www.linuxliteos.com | No | Yes | | LXLE | https://lxle.net/ | No | Yes | | Mageia | https://www.mageia.org | Yes | No | | Manjaro | https://manjaro.org | No | Yes | | Mint | https://linuxmint.com | No | Yes | | Microsoft Windows | https://www.microsoft.com | User supplied media | No | | MirOS | http://www.mirbsd.org | Yes | No | | Nitrux | https://nxos.org/ | No | Yes | | NixOS | https://nixos.org | Yes | No | | OpenBSD | https://openbsd.org | Yes | No | | openEuler | https://openeuler.org | Yes | No | | openSUSE | https://opensuse.org | Yes | No | | Oracle Linux | https://www.oracle.com/linux/ | Yes | Installer | | Parrot Security | https://www.parrotsec.org | No | Yes | | Peppermint | https://peppermintos.com | No | Yes | | Pop OS |https://system76.com/pop| No | Yes | | Proxmox Open Source Products | https://www.proxmox.com/ | Yes | No | | Q4OS | https://q4os.org | No | Yes | | Raizo | https://sourceforge.net/projects/live-raizo/ | No | Yes | | Red Hat Enterprise Linux | https://www.redhat.com | User supplied media | No | | Regolith | https://regolith-linux.org | No | Yes | | Rocky Linux | https://rockylinux.org/ | Yes | No | | Septor | https://septor.sourceforge.io | No | Yes | | Slackware | https://www.slackware.com | Yes | No | | SmartOS | https://www.smartos.org/ | Yes | No | | SparkyLinux | https://sparkylinux.org/ | No | Yes | | Tails | https://tails.net | No | Yes | | Talos | https://www.talos.dev/ | Yes | No | | Tiny Core Linux | https://tinycorelinux.net | Yes | Yes | | Ubuntu | https://www.ubuntu.com | Yes | Yes | | VMware | https://www.vmware.com | User supplied media | No | | VMware Photon | https://vmware.github.io/photon/ | Yes | No | | Vanilla OS | https://vanillaos.org | No | Yes | | Voyager | https://voyagerlive.org | No | Yes | | VyOS | https://vyos.io | Yes | No | | Zen Installer | https://sourceforge.net/projects/revenge-installer | Yes | No | | Zorin OS | https://zorin.com | No | Yes | ### Utilities | Name | URL | Type | |------------|-------------------------|------| | 4MLinux | https://4mlinux.com/ | Kernel/Initrd | | Boot Repair CD | https://sourceforge.net/projects/boot-repair-cd/ | LiveCD | | Breakin | https://www.advancedclustering.com/products/software/breakin/ | Kernel/Initrd | | CAINE | https://www.caine-live.net/ | LiveCD | | Clonezilla | https://www.clonezilla.org/ | LiveCD | | DBAN | https://www.dban.org/ | Kernel | | GParted | https://gparted.org | LiveCD | | Grml | https://grml.org | LiveCD | | Kaspersky Rescue Disk | https://support.kaspersky.com/krd18 | LiveCD | | Memtest | https://www.memtest.org/ | Kernel | | MemTest86 Free | https://www.memtest86.com | USB Img | | Redo Rescue | http://redorescue.com/ | LiveCD | | Rescatux | https://www.supergrubdisk.org/rescatux/ | LiveCD | | Rescuezilla | https://rescuezilla.com/ | LiveCD | | ShredOS | https://github.com/PartialVolume/shredos.x86_64 | Kernel | | Super Grub2 Disk | https://www.supergrubdisk.org | ISO - Memdisk | | System Rescue | https://system-rescue.org/ | LiveCD | | Ultimate Boot CD | https://www.ultimatebootcd.com | ISO - Memdisk | | ZFSBootMenu | https://docs.zfsbootmenu.org/ | Kernel | ### Stargazers over time [![Stargazers over time](https://starchart.cc/netbootxyz/netboot.xyz.svg)](https://starchart.cc/netbootxyz/netboot.xyz) ### Feedback Feel free to open up an [issue](https://github.com/netbootxyz/netboot.xyz/issues) on Github or ping us on [Discord](https://discord.gg/An6PA2a). Follow us on [Twitter](https://twitter.com/netbootxyz) and like us on [Facebook](https://www.facebook.com/netboot.xyz)! ================================================ FILE: docker-build-root/dumper.sh ================================================ #! /bin/sh # check for dump dir if [ -d /buildout ]; then # if there are no files in that directory use 777 perms as root if [ `find /buildout -prune -empty 2>/dev/null` ]; then /bin/mkdir -p /buildout/buildout /bin/cp -r /mnt/* /buildout/buildout/ /bin/chmod 777 -R /buildout/buildout # match the ownership of the first file we see else PERMS=`/usr/bin/find /buildout/* -print -quit |xargs stat -c "%u:%g"` /bin/mkdir -p /buildout/buildout /bin/cp -r /mnt/* /buildout/buildout/ /bin/chown $PERMS -R /buildout/buildout fi else /bin/echo "/buildout not found exiting" exit 1 fi ================================================ FILE: endpoints.yml ================================================ endpoints: kali-xfce-squash: path: /debian-squash/releases/download/2025.4-f03c4b56/ files: - filesystem.squashfs - initrd - vmlinuz os: kali version: '2025.4' flavor: xfce kernel: kali-xfce-squash kde-neon-user: path: /ubuntu-squash/releases/download/20260312-0746-88395a11/ files: - vmlinuz - filesystem.squashfs - initrd.lz os: neon version: 20260312-0746 flavor: user kernel: kde-neon-user regolith-current: path: /ubuntu-squash/releases/download/1.2-e7db33e3/ files: - initrd - vmlinuz - filesystem.squashfs os: regolith version: current flavor: ubuntu kernel: regolith-current breakin: path: /asset-mirror/releases/download/4.26.1-f22abf78/ files: - vmlinuz - initrd os: breakin version: 4.26.1 dban: path: /asset-mirror/releases/download/2.3.0-dca9acb4/ files: - DBAN.BZI os: dban version: 2.3.0 sparky-stable-mingui: path: /debian-squash/releases/download/8.2-d8df60d4/ files: - filesystem.squashfs - initrd - vmlinuz os: sparky version: stable flavor: xfce-min kernel: sparky-stable-mingui sparky-stable-gui: path: /debian-squash/releases/download/8.2-28fbf253/ files: - filesystem.squashfs - initrd - vmlinuz os: sparky version: stable flavor: xfce kernel: sparky-stable-gui sparky-stable-lxqt: path: /debian-squash/releases/download/8.2-16df4761/ files: - filesystem.squashfs - initrd - vmlinuz os: sparky version: stable flavor: lxqt kernel: sparky-stable-lxqt sparky-rolling-mingui: path: /debian-squash/releases/download/2026.03-8a7a4cf8/ files: - filesystem.squashfs - initrd - vmlinuz os: sparky version: rolling flavor: xfce-min kernel: sparky-rolling-mingui sparky-rolling-gui: path: /debian-squash/releases/download/2026.03-314f0a50/ files: - filesystem.squashfs - initrd - vmlinuz os: sparky version: rolling flavor: xfce kernel: sparky-rolling-gui sparky-rolling-lxqt: path: /debian-squash/releases/download/2026.03-1a7f6c6a/ files: - filesystem.squashfs - initrd - vmlinuz os: sparky version: rolling flavor: lxqt kernel: sparky-rolling-lxqt oracle-8: path: /asset-mirror/releases/download/6-c7882e2d/ files: - vmlinuz - initrd - squashfs.img os: oracle version: '8' arch: x86_64 kodachi-6: path: /ubuntu-squash/releases/download/6.2-2a23039c/ files: - filesystem.squashfs - initrd - vmlinuz os: kodachi version: '6' devuan-ascii: path: /debian-squash/releases/download/2.1-c1f637a9/ files: - filesystem.squashfs - initrd - vmlinuz os: devuan version: '2' flavor: ascii gparted-stable: path: /debian-squash/releases/download/1.8.0-2-5616e296/ files: - filesystem.squashfs - initrd - vmlinuz os: gparted version: stable rescatux: path: /debian-squash/releases/download/0.72-beta8-55ca0efd/ files: - filesystem.squashfs - initrd - vmlinuz os: rescatux version: current caine: path: /ubuntu-squash/releases/download/13.0-4216585a/ files: - filesystem.squashfs - initrd - vmlinuz os: caine version: '13.0' dts: path: /dts/v2.7.1 files: - initrd - vmlinuz os: dts version: 2.7.1 bootrepair: path: /ubuntu-squash/releases/download/current-e035b00c/ files: - filesystem.squashfs - initrd - vmlinuz os: bootrepair version: current blackarch-installer: path: /asset-mirror/releases/download/2023.04.01-cfc58a6d/ files: - initrd - vmlinuz - airootfs.sfs os: blackarch version: current bluestar: path: /asset-mirror/releases/download/6.7.8-2024.03.04-d4e083fc/ files: - initrd - vmlinuz - airootfs.sfs os: bluestar version: current zeninstall: path: /asset-mirror/releases/download/2020.05.27-b25da634/ files: - initrd - vmlinuz - airootfs.sfs os: zeninstall version: current lxle: path: /ubuntu-squash/releases/download/18.04.3-83291c4b/ files: - filesystem.squashfs - initrd - vmlinuz os: lxle version: current kaspersky-rescue: path: /asset-mirror/releases/download/18-7f6056db/ files: - initrd.xz - initrd - vmlinuz - kernel.dat - 000-core.srm - 001-xorg.srm - 002-xfce.srm - 003-kl.srm - 004-krt.srm - 005-bases.srm - 008-firefox.srm os: kaspersky version: '18' septor: path: /debian-squash/releases/download/2022-32f07395/ files: - filesystem.squashfs - initrd - vmlinuz os: septor version: current manjaro-xfce-current: path: /manjaro-squash/releases/download/26.0.3-260228-linux618-93c4b57e/ files: - livefs.sfs - rootfs.sfs - mhwdfs.sfs - desktopfs.sfs - initrd - vmlinuz os: manjaro version: current flavor: xfce kernel: manjaro-xfce-current manjaro-gnome-current: path: /manjaro-squash/releases/download/26.0.3-260228-linux618-917f9a0a/ files: - livefs.sfs - rootfs.sfs - mhwdfs.sfs - desktopfs.sfs - initrd - vmlinuz os: manjaro version: current flavor: gnome kernel: manjaro-gnome-current manjaro-kde-current: path: /manjaro-squash/releases/download/26.0.3-260228-linux618-df3b24fa/ files: - livefs.sfs - rootfs.sfs - mhwdfs.sfs - desktopfs.sfs - initrd - vmlinuz os: manjaro version: current flavor: kde kernel: manjaro-kde-current fatdog: path: /asset-mirror/releases/download/903-eefda31d/ files: - vmlinuz - initrd os: fatdog version: current raizo: path: /debian-squash/releases/download/v17.26.01.25i-5c171de0/ files: - filesystem.squashfs - initrd - vmlinuz os: raizo version: current 4mlinux: path: /asset-mirror/releases/download/50.1-fcaac630/ files: - initrd - vmlinuz os: 4mlinux version: current flavor: full 4mlinux-thesss: path: /asset-mirror/releases/download/51.0-bb45ecde/ files: - initrd - vmlinuz os: 4mlinux version: current flavor: TheSSS 4mlinux-bakandimg: path: /asset-mirror/releases/download/51.0-978b0518/ files: - initrd - vmlinuz os: 4mlinux version: current flavor: BakAndImg 4mlinux-antivirus: path: /asset-mirror/releases/download/51.0-1.5.1-6a1b14f1/ files: - initrd - vmlinuz os: 4mlinux version: current flavor: AntivirusLiveCD ubuntu-20.04-default-squash: path: /ubuntu-squash/releases/download/20.04.6-edcc76af/ files: - filesystem.squashfs - initrd - vmlinuz os: ubuntu version: '20.04' flavor: GNOME kernel: ubuntu-20.04-default-squash ubuntu-20.04-KDE-squash: path: /ubuntu-squash/releases/download/20.04.6-de797e6a/ files: - filesystem.squashfs - initrd - vmlinuz os: ubuntu version: '20.04' flavor: KDE kernel: ubuntu-20.04-KDE-squash ubuntu-20.04-XFCE-squash: path: /ubuntu-squash/releases/download/20.04.6-ecac5789/ files: - filesystem.squashfs - initrd - vmlinuz os: ubuntu version: '20.04' flavor: XFCE kernel: ubuntu-20.04-XFCE-squash ubuntu-20.04-Budgie-squash: path: /ubuntu-squash/releases/download/20.04.6-4901a824/ files: - filesystem.squashfs - initrd - vmlinuz os: ubuntu version: '20.04' flavor: Budgie kernel: ubuntu-20.04-Budgie-squash ubuntu-20.04-MATE-squash: path: /ubuntu-squash/releases/download/20.04.6-b988c78f/ files: - filesystem.squashfs - initrd - vmlinuz os: ubuntu version: '20.04' flavor: MATE kernel: ubuntu-20.04-MATE-squash ubuntu-20.04-kylin-squash: path: /ubuntu-squash/releases/download/20.04.6-fe97e81a/ files: - filesystem.squashfs - initrd - vmlinuz os: ubuntu version: '20.04' flavor: kylin kernel: ubuntu-20.04-kylin-squash voyager-focal-squash: path: /ubuntu-squash/releases/download/focal-594b12a7/ files: - filesystem.squashfs - initrd - vmlinuz os: Voyager version: focal flavor: focal kernel: voyager-focal-squash pop-20.04-default-squash: path: /ubuntu-squash/releases/download/5-66b7e861/ files: - filesystem.squashfs - initrd - vmlinuz os: pop version: '20.04' flavor: intel-amd kernel: pop-20.04-default-squash pop-20.04-nvidia-squash: path: /ubuntu-squash/releases/download/5-6efd1d75/ files: - filesystem.squashfs - initrd - vmlinuz os: pop version: '20.04' flavor: nvidia kernel: pop-20.04-nvidia-squash nixos-20.03: path: /asset-mirror/releases/download/124244129-bd20f138/ files: - bzImage - initrd - netboot.ipxe os: nixos version: '20.03' kodachi-7: path: /ubuntu-squash/releases/download/7.6-5b1ead62/ files: - filesystem.squashfs - initrd - vmlinuz os: kodachi version: '7' linux-lite-5-squash: path: /ubuntu-squash/releases/download/5.8-75cb937c/ files: - filesystem.squashfs - initrd - vmlinuz os: lite version: 5.8 kernel: linux-lite-5-squash vyos-rolling: path: /debian-squash/releases/download/2026.03.19-0028-rolling-bf6bd56c/ files: - filesystem.squashfs - initrd - vmlinuz os: vyos version: rolling flavor: rolling kernel: vyos-rolling pureos-gnome: path: /ubuntu-squash/releases/download/2020-08-06-83257efc/ files: - filesystem.squashfs - initrd - vmlinuz os: pureos version: current flavor: gnome kernel: pureos-gnome rescuezilla: path: /asset-mirror/releases/download/2.6.1-123ed276/ files: - filesystem.squashfs - initrd - vmlinuz os: rescuezilla version: 2.6.1 nitrux-release: path: /ubuntu-squash/releases/download/2022.02.28-e364d0a5/ files: - initrd - vmlinuz - filesystem.squashfs os: nitrux version: 2022.02.28 endeavouros: path: /asset-mirror/releases/download/Neo-2026.01.12-a0604436/ files: - airootfs.sfs - initrd - vmlinuz os: endeavouros version: Neo-2026.01.12 kodachi-8: path: /ubuntu-squash/releases/download/8.2-625e11fa/ files: - filesystem.squashfs - initrd - vmlinuz os: kodachi version: '8' redorescue: path: /asset-mirror/releases/download/4.0.0-000d2575/ files: - filesystem.squashfs - initrd - vmlinuz os: redorescue version: 4.0.0 elementaryos-6-default-squash: path: /ubuntu-squash/releases/download/6-3e90a5ea/ files: - initrd - vmlinuz - filesystem.squashfs os: elementary-os version: '6' kernel: elementaryos-6-default-squash voyager-bullseye-squash: path: /debian-squash/releases/download/bullseye-a59d37d9/ files: - filesystem.squashfs - initrd - vmlinuz os: Voyager version: bullseye flavor: bullseye kernel: voyager-bullseye-squash memtest86: path: /asset-mirror/releases/download/11.6-e4a137e7/ files: - memtest86-usb.img os: memtest86-free version: '11.6' gentoo-x86: path: /asset-mirror/releases/download/20241209T170323Z-4e10abc5/ files: - image.squashfs - initrd - vmlinuz os: gentoo version: 20241209T170323Z arch: x86 gentoo-arm64: path: /asset-mirror/releases/download/20260113T194558Z-3c528165/ files: - image.squashfs - initrd - vmlinuz os: gentoo version: 20260113T194558Z arch: arm64 gentoo-amd64: path: /asset-mirror/releases/download/20260125T170113Z-9aa997ef/ files: - image.squashfs - initrd - vmlinuz os: gentoo version: 20260125T170113Z arch: amd64 tails: path: /asset-mirror/releases/download/7.5-17629562/ files: - vmlinuz - initrd.img - 9990-misc-helpers.sh - tails-amd64.iso os: tails version: '7.5' arch: amd64 hrmpf: path: /asset-mirror/releases/download/20231124-1008bb6d/ files: - vmlinuz - initrd - squashfs.img os: hrmpf version: '20231124' ubuntu-netboot-20.04-arm64: path: /ubuntu-squash/releases/download/20.04.5-bb142c3d/ files: - initrd - vmlinuz os: ubuntu version: 20.04.5 codename: focal flavor: netboot kernel: ubuntu-netboot-20.04-arm64 arch: arm64 ubuntu-netboot-20.04-amd64: path: /ubuntu-squash/releases/download/20.04.6-b13ed0a8/ files: - initrd - vmlinuz os: ubuntu version: 20.04.6 codename: focal flavor: netboot kernel: ubuntu-netboot-20.04-amd64 arch: amd64 systemrescue-i686: path: /asset-mirror/releases/download/9.03-0f19cc5c/ files: - airootfs.sfs - initrd - vmlinuz os: systemrescue version: 9.03 arch: i686 systemrescue-amd64: path: /asset-mirror/releases/download/12.03-d20a63ac/ files: - airootfs.sfs - initrd - vmlinuz - archiso_pxe_http os: systemrescue version: 12.03 arch: amd64 shredos-i686: path: /asset-mirror/releases/download/0.34_32-bit_20221231-c4450e3a/ files: - shredos os: shredos version: 0.34_32-bit_20221231 arch: i686 shredos-x86_64: path: /asset-mirror/releases/download/2025.11_28_x86-64_0.40-bf7a6bdf/ files: - shredos os: shredos version: 2025.11_28_x86-64_0.40 arch: x86_64 archlinux-32: path: /asset-mirror/releases/download/2024.07.10-2797a944/ files: - airootfs.sfs - initramfs-linux.img - vmlinuz-linux os: archlinux version: 2024.07.10 arch: i686 clonezilla-debian-stable-amd64: path: /debian-squash/releases/download/3.3.1-35-1a41a72c/ files: - filesystem.squashfs - initrd - vmlinuz os: clonezilla version: 3.3.1-35 flavor: stable kernel: clonezilla-debian-stable-amd64 arch: amd64 clonezilla-ubuntu-stable-amd64: path: /ubuntu-squash/releases/download/20260220-questing-b835723b/ files: - filesystem.squashfs - initrd - vmlinuz os: clonezilla version: 20260220-questing flavor: stable kernel: clonezilla-ubuntu-stable-amd64 arch: amd64 clonezilla-debian-testing-amd64: path: /debian-squash/releases/download/3.3.2-8-8db01622/ files: - filesystem.squashfs - initrd - vmlinuz os: clonezilla version: 3.3.2-8 flavor: testing kernel: clonezilla-debian-testing-amd64 arch: amd64 clonezilla-ubuntu-testing-amd64: path: /ubuntu-squash/releases/download/20260318-resolute-bea81d96/ files: - filesystem.squashfs - initrd - vmlinuz os: clonezilla version: 20260318-resolute flavor: testing kernel: clonezilla-ubuntu-testing-amd64 arch: amd64 garuda-dr460nized-gaming: path: /asset-mirror/releases/download/250801-a96201bb/ files: - amd_ucode.img - desktopfs.sfs - intel_ucode.img - livefs.sfs - initramfs.img - mhwdfs.sfs - rootfs.sfs - vmlinuz os: garuda flavor: dr460nized-gaming version: 250801 garuda-dr460nized: path: /asset-mirror/releases/download/250801-f610be58/ files: - amd_ucode.img - desktopfs.sfs - intel_ucode.img - livefs.sfs - initramfs.img - mhwdfs.sfs - rootfs.sfs - vmlinuz os: garuda flavor: dr460nized version: 250801 garuda-xfce: path: /asset-mirror/releases/download/250801-c866e6bf/ files: - amd_ucode.img - desktopfs.sfs - intel_ucode.img - livefs.sfs - initramfs.img - mhwdfs.sfs - rootfs.sfs - vmlinuz os: garuda flavor: xfce version: 250801 garuda-gnome: path: /asset-mirror/releases/download/250801-c80a21be/ files: - amd_ucode.img - desktopfs.sfs - intel_ucode.img - livefs.sfs - initramfs.img - mhwdfs.sfs - rootfs.sfs - vmlinuz os: garuda flavor: gnome version: 250801 garuda-lxqt-kwin: path: /asset-mirror/releases/download/230501-f13b4b24/ files: - amd_ucode.img - desktopfs.sfs - intel_ucode.img - livefs.sfs - initramfs.img - mhwdfs.sfs - rootfs.sfs - vmlinuz os: garuda flavor: lxqt-kwin version: 230501 garuda-wayfire: path: /asset-mirror/releases/download/230501-61b681d1/ files: - amd_ucode.img - desktopfs.sfs - intel_ucode.img - livefs.sfs - initramfs.img - mhwdfs.sfs - rootfs.sfs - vmlinuz os: garuda flavor: wayfire version: 230501 garuda-qtile: path: /asset-mirror/releases/download/231029-9dfb930b/ files: - amd_ucode.img - desktopfs.sfs - intel_ucode.img - livefs.sfs - initramfs.img - mhwdfs.sfs - rootfs.sfs - vmlinuz os: garuda flavor: qtile version: 231029 garuda-i3wm: path: /asset-mirror/releases/download/250801-d48b8f05/ files: - amd_ucode.img - desktopfs.sfs - intel_ucode.img - livefs.sfs - initramfs.img - mhwdfs.sfs - rootfs.sfs - vmlinuz os: garuda flavor: i3wm version: 250801 garuda-sway: path: /asset-mirror/releases/download/250801-8d451890/ files: - amd_ucode.img - desktopfs.sfs - intel_ucode.img - livefs.sfs - initramfs.img - mhwdfs.sfs - rootfs.sfs - vmlinuz os: garuda flavor: sway version: 250801 garuda-mate: path: /asset-mirror/releases/download/230501-3af08aa6/ files: - amd_ucode.img - desktopfs.sfs - intel_ucode.img - livefs.sfs - initramfs.img - mhwdfs.sfs - rootfs.sfs - vmlinuz os: garuda flavor: mate version: 230501 garuda-kde-barebones: path: /asset-mirror/releases/download/220329-198784ed/ files: - amd_ucode.img - desktopfs.sfs - intel_ucode.img - livefs.sfs - initramfs.img - mhwdfs.sfs - rootfs.sfs - vmlinuz os: garuda flavor: kde-barebones version: 220329 proxmox-backup-server: path: /asset-mirror/releases/download/4.1-1-6f50261b/ files: - initrd - vmlinuz - proxmox.iso os: proxmox-backup-server version: 4.1-1 proxmox-ve: path: /asset-mirror/releases/download/9.1-1-1d6923a5/ files: - initrd - proxmox.iso - vmlinuz os: proxmox-ve version: 9.1-1 proxmox-mailgateway: path: /asset-mirror/releases/download/9.0-1-ded4eba1/ files: - initrd - vmlinuz - proxmox.iso os: proxmox-mailgateway version: 9.0-1 ubuntu-netboot-22.04-amd64: path: /ubuntu-squash/releases/download/22.04.5-be230164/ files: - initrd - vmlinuz os: ubuntu version: 22.04.5 codename: jammy flavor: netboot kernel: ubuntu-netboot-22.04-amd64 arch: amd64 ubuntu-netboot-22.04-arm64: path: /ubuntu-squash/releases/download/22.04.5-9d9df014/ files: - initrd - vmlinuz os: ubuntu version: 22.04.5 codename: jammy flavor: netboot kernel: ubuntu-netboot-22.04-arm64 arch: arm64 ubuntu-22.04-default-squash: path: /ubuntu-squash/releases/download/22.04.5-9d09e9e2/ files: - filesystem.squashfs - initrd - vmlinuz os: ubuntu version: '22.04' flavor: GNOME kernel: ubuntu-22.04-default-squash ubuntu-22.04-XFCE-squash: path: /ubuntu-squash/releases/download/22.04.5-f1d182b7/ files: - filesystem.squashfs - initrd - vmlinuz os: ubuntu version: '22.04' flavor: XFCE kernel: ubuntu-22.04-XFCE-squash ubuntu-22.04-MATE-squash: path: /ubuntu-squash/releases/download/22.04.5-96688be7/ files: - filesystem.squashfs - initrd - vmlinuz os: ubuntu version: '22.04' flavor: MATE kernel: ubuntu-22.04-MATE-squash ubuntu-22.04-Budgie-squash: path: /ubuntu-squash/releases/download/22.04.5-a893fa5a/ files: - filesystem.squashfs - initrd - vmlinuz os: ubuntu version: '22.04' flavor: Budgie kernel: ubuntu-22.04-Budgie-squash ubuntu-22.04-KDE-squash: path: /ubuntu-squash/releases/download/22.04.5-45d5c769/ files: - filesystem.squashfs - initrd - vmlinuz os: ubuntu version: '22.04' flavor: KDE kernel: ubuntu-22.04-KDE-squash ubuntu-22.04-kylin-squash: path: /ubuntu-squash/releases/download/22.04.5-943f61f5/ files: - filesystem.squashfs - initrd - vmlinuz os: ubuntu version: '22.04' flavor: kylin kernel: ubuntu-22.04-kylin-squash voyager-jammy-squash: path: /ubuntu-squash/releases/download/jammy-e9ee9abe/ files: - filesystem.squashfs - initrd - vmlinuz os: Voyager version: jammy flavor: jammy kernel: voyager-jammy-squash pop-22.04-default-squash: path: /ubuntu-squash/releases/download/21-31dbd35b/ files: - filesystem.squashfs - initrd - vmlinuz os: pop version: '22.04' flavor: intel-amd kernel: pop-22.04-default-squash vmware-photon-x86_64: path: /asset-mirror/releases/download/4.0-febcf67e/ files: - initrd.img - vmlinuz os: vmware-photon version: '4.0' arch: x86_64 vmware-photon-aarch64: path: /asset-mirror/releases/download/4.0-ed208546/ files: - initrd.img - vmlinuz os: vmware-photon version: '4.0' arch: aarch64 harvester: path: /asset-mirror/releases/download/v1.7.1-fcf0fd7f/ files: - harvester-vmlinuz-amd64 - harvester-initrd-amd64 - harvester-rootfs-amd64.squashfs - harvester-amd64.sha512 - version.yaml os: harvester version: v1.7.1 linux-lite-6-squash: path: /ubuntu-squash/releases/download/6.4-2550834c/ files: - filesystem.squashfs - initrd - vmlinuz os: lite version: 6.4 kernel: linux-lite-6-squash mint-21-cinnamon-squash: path: /ubuntu-squash/releases/download/21-32bd7a0e/ files: - initrd - vmlinuz - filesystem.squashfs os: mint version: '21' flavor: Cinnamon kernel: mint-21-cinnamon-squash mint-21-mate-squash: path: /ubuntu-squash/releases/download/21-f0dbd590/ files: - initrd - vmlinuz - filesystem.squashfs os: mint version: '21' flavor: mate kernel: mint-21-mate-squash mint-21-xfce-squash: path: /ubuntu-squash/releases/download/21-48716442/ files: - initrd - vmlinuz - filesystem.squashfs os: mint version: '21' flavor: xfce kernel: mint-21-xfce-squash oracle-9-x86_64: path: /asset-mirror/releases/download/U1-23c7d963/ files: - vmlinuz - initrd - squashfs.img os: oracle version: '9' arch: x86_64 oracle-9-aarch64: path: /asset-mirror/releases/download/U1-f576e989/ files: - vmlinuz - initrd - squashfs.img os: oracle version: '9' arch: aarch64 parrot-home: path: /debian-squash/releases/download/6.3.2-27d6d20b/ files: - filesystem.squashfs - initrd - vmlinuz os: parrot version: 6.3.2 flavor: home parrot-security: path: /debian-squash/releases/download/6.3.2-b763048a/ files: - filesystem.squashfs - initrd - vmlinuz os: parrot version: 6.3.2 flavor: security xcp-ng: path: /asset-mirror/releases/download/8.3-55521b28/ files: - xen.gz - vmlinuz - install.img os: xcp-ng version: '8.2' garuda-cinnamon: path: /asset-mirror/releases/download/250801-0b360492/ files: - amd_ucode.img - desktopfs.sfs - intel_ucode.img - livefs.sfs - initramfs.img - mhwdfs.sfs - rootfs.sfs - vmlinuz os: garuda flavor: cinnamon version: 250801 elementaryos-7-default-squash: path: /ubuntu-squash/releases/download/7-82f69428/ files: - initrd - vmlinuz - filesystem.squashfs os: elementary-os version: '7' kernel: elementaryos-7-default-squash ubuntu-20.04-LXQT-squash: path: /ubuntu-squash/releases/download/20.04.5-07228691/ files: - filesystem.squashfs - initrd - vmlinuz os: ubuntu version: '20.04' flavor: LXQT kernel: ubuntu-20.04-LXQT-squash ubuntu-22.04-LXQT-squash: path: /ubuntu-squash/releases/download/22.04.5-81dbf90b/ files: - filesystem.squashfs - initrd - vmlinuz os: ubuntu version: '22.04' flavor: LXQT kernel: ubuntu-22.04-LXQT-squash backbox-default-squash: path: /ubuntu-squash/releases/download/8.1-c2287989/ files: - initrd - vmlinuz - filesystem.squashfs os: BackBox version: '8.1' flavor: desktop kernel: backbox-default-squash bodhi-standard: path: /ubuntu-squash/releases/download/7.0.0-f22738f2/ files: - filesystem.squashfs - initrd - vmlinuz os: bodhi version: 7.0.0 flavor: standard bodhi-apppack: path: /ubuntu-squash/releases/download/7.0.0-b588d8e1/ files: - filesystem.squashfs - initrd - vmlinuz os: bodhi version: 7.0.0 flavor: apppack mfsbsd-14: path: /asset-mirror/releases/download/14.2-f360f980/ files: - default.img - special-edition.img os: freebsd version: '14' zorin-core-squash: path: /ubuntu-squash/releases/download/17.3-a87e018b/ files: - filesystem.squashfs - initrd - vmlinuz os: zorin version: '17.3' flavor: Core kernel: zorin-core-squash q4os-plasma-squash: path: /debian-squash/releases/download/6.6-65fa9dd9/ files: - filesystem.squashfs os: Q4OS version: '6.6' flavor: plasma kernel: q4os-default-squash q4os-default-squash: path: /debian-squash/releases/download/6.6-5d30850e/ files: - filesystem.squashfs - initrd - vmlinuz os: Q4OS version: '6.6' flavor: trinity kernel: q4os-default-squash memtest86plus: path: /asset-mirror/releases/download/8.00-32a14678/ files: - memtest32.bin - memtest32.efi - memtest64.bin - memtest64.efi - mt86p_i586 - mt86p_la64 - mt86p_x86_64 os: memtest86-plus version: '8.00' ubuntu-netboot-24.04-arm64: path: /ubuntu-squash/releases/download/24.04.4-b13d6c2e/ files: - initrd - vmlinuz os: ubuntu version: 24.04.4 codename: noble flavor: netboot kernel: ubuntu-netboot-24.04-arm64 arch: arm64 ubuntu-netboot-24.04-amd64: path: /ubuntu-squash/releases/download/24.04.4-717d3a1a/ files: - initrd - vmlinuz os: ubuntu version: 24.04.4 codename: noble flavor: netboot kernel: ubuntu-netboot-24.04-amd64 arch: amd64 fedora-40-gnome: path: /fedora-assets/releases/download/1.14-aefc8f89/ files: - vmlinuz - initrd - squashfs.img os: fedora version: 40 flavor: GNOME ubuntu-24.04-default-squash: path: /ubuntu-squash/releases/download/24.04.4-315cc059/ files: - filesystem.squashfs - initrd - vmlinuz - minimal.standard.live.squashfs - minimal.standard.squashfs - minimal.squashfs os: ubuntu version: '24.04' flavor: GNOME kernel: ubuntu-24.04-default-squash vanilla-os: path: /asset-mirror/releases/download/20240728-32e3ebb7/ files: - initrd - filesystem.squashfs - vmlinuz os: vanilla-os version: 2-20240728 zfsbootmenu: path: /asset-mirror/releases/download/3.1.0-1620b6a3/ files: - zfsbootmenu-recovery-x86_64.efi os: zfsbootmenu version: 3.1.0 supergrubdisk: path: /asset-mirror/releases/download/2.06s4-30515aca/ files: - supergrub2-classic-x86_64.efi os: supergrubdisk version: 2.06s4 mint-22-xfce-squash: path: /ubuntu-squash/releases/download/22-e45bc094/ files: - initrd - vmlinuz - filesystem.squashfs os: mint version: '22' flavor: xfce kernel: mint-22-xfce-squash mint-22-cinnamon-squash: path: /ubuntu-squash/releases/download/22-14b93ac4/ files: - initrd - vmlinuz - filesystem.squashfs os: mint version: '22' flavor: Cinnamon kernel: mint-22-cinnamon-squash mint-22-mate-squash: path: /ubuntu-squash/releases/download/22-482b71dc/ files: - initrd - vmlinuz - filesystem.squashfs os: mint version: '22' flavor: mate kernel: mint-22-mate-squash ubuntu-netboot-24.10-amd64: path: /ubuntu-squash/releases/download/24.10-01d20dde/ files: - initrd - vmlinuz os: ubuntu version: '24.10' codename: oracular flavor: netboot kernel: ubuntu-netboot-24.10-amd64 arch: amd64 ubuntu-netboot-24.10-arm64: path: /ubuntu-squash/releases/download/24.10-f22a7742/ files: - initrd - vmlinuz os: ubuntu version: '24.10' codename: oracular flavor: netboot kernel: ubuntu-netboot-24.10-arm64 arch: arm64 grml-small-amd64: path: /debian-squash/releases/download/2025.12-ca5dc013/ files: - filesystem.squashfs - initrd - vmlinuz os: grml version: '2025.12' flavor: small arch: amd64 grml-full-amd64: path: /debian-squash/releases/download/2025.12-ee78df85/ files: - filesystem.squashfs - initrd - vmlinuz os: grml version: '2025.12' flavor: full arch: amd64 grml-full-arm64: path: /debian-squash/releases/download/2025.12-f76c469c/ files: - filesystem.squashfs - initrd - vmlinuz os: grml version: '2025.12' flavor: full arch: arm64 grml-small-arm64: path: /debian-squash/releases/download/2025.12-d7d97ac4/ files: - filesystem.squashfs - initrd - vmlinuz os: grml version: '2025.12' flavor: small arch: arm64 uefishell: path: /asset-mirror/releases/download/edk2-stable202002-a6917535/ files: - uefi-shell-x64.efi - uefi-shell-aarch64.efi - uefi-shell-arm.efi os: uefi-shell version: edk2-stable202002 uefi-shell-x64: path: /asset-mirror/releases/download/edk2-stable202002-a9ce7096/ files: - uefi-shell-x64.efi os: uefi-shell-x64 version: edk2-stable202002 ubuntu-netboot-25.04-amd64: path: /ubuntu-squash/releases/download/25.04-fa10ffe9/ files: - initrd - vmlinuz os: ubuntu version: '25.04' codename: plucky flavor: netboot kernel: ubuntu-netboot-25.04-amd64 arch: amd64 ubuntu-netboot-25.04-arm64: path: /ubuntu-squash/releases/download/25.04-63097bc7/ files: - initrd - vmlinuz os: ubuntu version: '25.04' codename: plucky flavor: netboot kernel: ubuntu-netboot-25.04-arm64 arch: arm64 mint-20-xfce-squash: path: /ubuntu-squash/releases/download/20.3-af4b8d97/ files: - initrd - vmlinuz - filesystem.squashfs os: mint version: '20.3' flavor: xfce kernel: mint-20-xfce-squash mint-20-cinnamon-squash: path: /ubuntu-squash/releases/download/20.3-33df4cad/ files: - initrd - vmlinuz - filesystem.squashfs os: mint version: '20.3' flavor: Cinnamon kernel: mint-20-cinnamon-squash mint-20-mate-squash: path: /ubuntu-squash/releases/download/20.3-7b17290c/ files: - initrd - vmlinuz - filesystem.squashfs os: mint version: '20.3' flavor: mate kernel: mint-20-mate-squash mint-lmde-cinnamon-squash: path: /debian-squash/releases/download/6-1834227b/ files: - filesystem.squashfs - initrd - vmlinuz os: mint version: '6' flavor: Cinnamon kernel: mint-lmde-cinnamon-squash ubuntu-spins: path: /asset-mirror/releases/download/0.0.3-d0cf8373/ files: - vmlinuz - initrd os: ubuntu-spins version: 0.0.3 cachyos: path: /asset-mirror/releases/download/260308-b5de98b7/ files: - airootfs.sfs - initrd - vmlinuz - archiso_pxe_http os: cachyos version: '260308' deepin-20-squash: path: /debian-squash/releases/download/20.9-a4ce5fe4/ files: - filesystem.squashfs - initrd - vmlinuz os: Deepin version: '20.9' kernel: deepin-20-squash debian-13-live-kernel: path: /debian-core-13/releases/download/13.3.0-0a426450/ files: - initrd - vmlinuz os: debian version: '13' debian-13-default-squash: path: /debian-squash/releases/download/13.4.0-9d9b777e/ files: - filesystem.squashfs os: debian version: 13.4.0 flavor: core kernel: debian-13-live-kernel debian-13-lxde-squash: path: /debian-squash/releases/download/13.4.0-98209c44/ files: - filesystem.squashfs os: debian version: 13.4.0 flavor: lxde kernel: debian-13-live-kernel debian-13-kde-squash: path: /debian-squash/releases/download/13.4.0-c5f83616/ files: - filesystem.squashfs os: debian version: 13.4.0 flavor: kde kernel: debian-13-live-kernel debian-13-gnome-squash: path: /debian-squash/releases/download/13.4.0-0aea8fe2/ files: - filesystem.squashfs os: debian version: 13.4.0 flavor: gnome kernel: debian-13-live-kernel debian-13-lxqt-squash: path: /debian-squash/releases/download/13.4.0-6936b7a0/ files: - filesystem.squashfs os: debian version: 13.4.0 flavor: lxqt kernel: debian-13-live-kernel debian-13-mate-squash: path: /debian-squash/releases/download/13.4.0-f3c0e3ad/ files: - filesystem.squashfs os: debian version: 13.4.0 flavor: mate kernel: debian-13-live-kernel ubuntu-netboot-25.10-amd64: path: /ubuntu-squash/releases/download/25.10-64f54a86/ files: - initrd - vmlinuz os: ubuntu version: '25.10' codename: questing flavor: netboot kernel: ubuntu-netboot-25.10-amd64 arch: amd64 ubuntu-netboot-25.10-arm64: path: /ubuntu-squash/releases/download/25.10-9fc235de/ files: - initrd - vmlinuz os: ubuntu version: '25.10' codename: questing flavor: netboot kernel: ubuntu-netboot-25.10-arm64 arch: arm64 debian-13-cinnamon-squash: path: /debian-squash/releases/download/13.4.0-bcf1dab7/ files: - filesystem.squashfs os: debian version: 13.4.0 flavor: cinnamon kernel: debian-13-live-kernel debian-13-xfce-squash: path: /debian-squash/releases/download/13.4.0-5048a26b/ files: - filesystem.squashfs os: debian version: 13.4.0 flavor: xfce kernel: debian-13-live-kernel proxmox-datacenter-manager: path: /asset-mirror/releases/download/1.0-2-6fa12487/ files: - initrd - proxmox.iso - vmlinuz os: proxmox-datacenter-manager version: 1.0-2 ubuntu-netboot-hwe-24.04-amd64: path: /ubuntu-squash/releases/download/24.04.4-5d65e4e9/ files: - initrd - vmlinuz os: ubuntu version: 24.04.4 codename: noble flavor: netboot-hwe kernel: ubuntu-netboot-hwe-24.04-amd64 arch: amd64 ubuntu-netboot-hwe-24.04-arm64: path: /ubuntu-squash/releases/download/24.04.4-940f2f1c/ files: - initrd - vmlinuz os: ubuntu version: 24.04.4 codename: noble flavor: netboot-hwe kernel: ubuntu-netboot-hwe-24.04-arm64 arch: arm64 ================================================ FILE: etc/netbootxyz/custom/README.md ================================================ # Custom Menus for Self Hosted netboot.xyz This directory contains custom iPXE files that are rendered during menu generation and available from the main menu via the custom menu option. When these options are set: ``` custom_generate_menus: true custom_templates_dir: "{{ netbootxyz_conf_dir }}/custom" ``` the menu will add an option for custom menus and attempt to load into custom/custom.ipxe. From there custom options can be built and maintained seperately from the netboot.xyz source tree so that both menus can be updated independently. A sample menu is provided to demonstrate how to configure and set up a menu. You can copy the custom directory from the repo: ``` cp -r etc/netbootxyz/custom /etc/netbootxyz/custom ``` If you are building via Docker, you can create a `custom` folder in the root source directory and then set the variable like so: ``` custom_generate_menus: true custom_templates_dir: "/ansible/custom" ``` ================================================ FILE: etc/netbootxyz/custom/custom.ipxe.j2 ================================================ #!ipxe ### ### {{ site_name }} custom menu example ### :custom clear custom_choice menu This is a Test Menu item --gap This is the first sub menu item option_one ${space} Loading a kernel and initrd item option_two ${space} Loading an ISO item --gap This is a second sub menu item option_three ${space} Loads another custom sub menu item option_four ${space} This is option four choose custom_choice || goto custom_exit echo ${cls} goto ${custom_choice} goto custom_exit :option_one kernel http://path.to/vmlinuz initrd http://path.to/initrd imgargs vmlinuz put_kernel_img_args_here boot || goto custom_exit :option_two kernel {{ memdisk_location }} raw iso initrd http://path.to/iso boot || goto custom_exit :option_three echo Chains into another menu... chain custom1.ipxe || goto custom :custom_exit exit ================================================ FILE: renovate.json ================================================ { "extends": [ "config:recommended" ], "regexManagers": [ { "fileMatch": ["^\\.github\\/workflows\\/.*\\.ya?ml$"], "matchStrings": [ "pip(?:3)?\\s+install(?:\\s+(?:-U|--upgrade))?\\s+(?[A-Za-z0-9_.+-]+(?:\\[[^\\]]+\\])?)==(?\\d+(?:\\.\\d+)*)" ], "datasourceTemplate": "pypi" } ] } ================================================ FILE: roles/netbootxyz/README.md ================================================ Ansible role: netbootxyz ======================== Uses Ansible to generate a self hosted environment of netboot.xyz for use anywhere Requirements ------------ Any pre-requisites that may not be covered by Ansible itself or the role should be mentioned here. For instance, if the role uses the EC2 module, it may be a good idea to mention in this section that the boto package is required. Role Variables -------------- A description of the settable variables for this role should go here, including any variables that are in defaults/main.yml, vars/main.yml, and any variables that can/should be set via parameters to the role. Any variables that are read from other roles and/or the global scope (ie. hostvars, group vars, etc.) should be mentioned here as well. Dependencies ------------ A list of other roles hosted on Galaxy should go here, plus any details in regards to parameters that may need to be set for other roles, or variables that are used from other roles. Example Playbook ---------------- Including an example of how to use your role (for instance, with variables passed in as parameters) is always nice for users too: - hosts: servers roles: - { role: username.rolename, x: 42 } License ------- Apache Author Information ------------------ Website: https://netboot.xyz Author: Antony Messerli ================================================ FILE: roles/netbootxyz/defaults/main.yml ================================================ boot_domain: boot.netboot.xyz boot_timeout: 300000 boot_version: 3.x bootloader_disks: - netboot.xyz bootloader_http_enabled: true bootloader_https_enabled: true bootloaders: arm: - desc: Used for CD/DVD, Virtual CDs, DRAC/iLO, VMware, Virtual Box ipxe_bin: ipxe.iso output_bin: -arm64.iso type: ISO - desc: Used for creation of USB Keys ipxe_bin: ipxe.img output_bin: -arm64.img type: IMG - desc: DHCP EFI boot image file, uses built-in iPXE NIC drivers ipxe_bin: ipxe.efi output_bin: -arm64.efi type: DHCP - desc: EFI w/ Simple Network Protocol, attempts to boot all net devices ipxe_bin: snp.efi output_bin: -arm64-snp.efi type: DHCP-snp - desc: EFI w/ Simple Network Protocol, only boots from device chained from ipxe_bin: snponly.efi output_bin: -arm64-snponly.efi type: DHCP-snponly hybrid: - desc: Used for CD/DVD, Virtual CDs, DRAC/iLO, VMware, Virtual Box ipxe_bin: ipxe.iso output_bin: .iso type: ISO - desc: Used for creation of USB Keys ipxe_bin: ipxe.img output_bin: .img type: IMG legacy: - desc: Used for booting from GRUB/EXTLINUX ipxe_bin: ipxe.lkrn output_bin: .lkrn type: Kernel - desc: Virtual floppy disk for DRAC/iLO, VMware, Virtual Box, etc ipxe_bin: ipxe.dsk output_bin: .dsk type: Floppy - desc: Padded Virtual floppy disk for DRAC/iLO, VMware, Virtual Box, etc ipxe_bin: ipxe.pdsk output_bin: .pdsk type: Floppy - desc: DHCP boot image file, uses built-in iPXE NIC drivers ipxe_bin: ipxe.kpxe output_bin: .kpxe type: DHCP - desc: DHCP boot image file, use if you have NIC issues ipxe_bin: undionly.kpxe output_bin: -undionly.kpxe type: DHCP-undionly multiarch: - desc: Used for CD/DVD, Virtual CDs, DRAC/iLO, VMware, Virtual Box ipxe_bin: ipxe.iso output_bin: -multiarch.iso type: ISO - desc: Used for creation of USB Keys ipxe_bin: ipxe.img output_bin: -multiarch.img type: IMG rpi: - desc: Raspberry Pi 4 - USB/SD Card Image ipxe_bin: rpi4-sdcard.img output_bin: -rpi4-sdcard.img type: USB/SD Card - desc: Raspberry Pi 4 - EFI Image ipxe_bin: snp.efi output_bin: -rpi4-snp.efi type: DHCP-snp secureboot_arm64: - desc: Secure Boot ARM64 ISO for CD/DVD/Virtual Media output_bin: -sb-arm64.iso type: ISO - desc: Secure Boot ARM64 USB image output_bin: -sb-arm64.img type: IMG secureboot_x86_64: - desc: Secure Boot x86_64 ISO for CD/DVD/Virtual Media output_bin: -sb.iso type: ISO - desc: Secure Boot x86_64 USB image output_bin: -sb.img type: IMG uefi: - desc: DHCP EFI boot image file, uses built-in iPXE NIC drivers ipxe_bin: ipxe.efi output_bin: .efi type: DHCP - desc: EFI w/ Simple Network Protocol, attempts to boot all net devices ipxe_bin: snp.efi output_bin: -snp.efi type: DHCP-snp - desc: EFI w/ Simple Network Protocol, only boots from device chained from ipxe_bin: snponly.efi output_bin: -snponly.efi type: DHCP-snponly - desc: DHCP EFI Floppy boot image file, uses built-in iPXE NIC drivers ipxe_bin: ipxe.efi.dsk output_bin: .efi.dsk type: Floppy - desc: EFI Floppy image w/ Simple Network Protocol, attempts to boot all net devices ipxe_bin: snp.efi.dsk output_bin: -snp.efi.dsk type: Floppy-snp cert_dir: /etc/netbootxyz/certs cert_file_filename: ca-netboot-xyz.crt checksums_filename: '{{ site_name }}-sha256-checksums.txt' codesign_cert_filename: codesign.crt codesign_key_filename: codesign.key custom_generate_menus: false custom_github_menus: true custom_templates_dir: '{{ netbootxyz_conf_dir }}/custom' custom_url_menus: true early_menu_contents: '### put early ipxe settings here' early_menu_enabled: false generate_checksums: true generate_disks: true generate_disks_arm: false generate_disks_efi: true generate_disks_hybrid: false generate_disks_legacy: true generate_disks_linux: false generate_disks_rpi: false generate_disks_secureboot: false generate_local_vars: true generate_menus: true generate_signatures: false generate_version_file: true ipxe_branch: master ipxe_ca_filename: ca-ipxe-org.crt ipxe_ca_url: http://ca.ipxe.org/ca.crt ipxe_debug_enabled: false ipxe_debug_options: httpcore,tls ipxe_repo: https://github.com/ipxe/ipxe ipxe_secureboot_archive_url: https://github.com/ipxe/ipxe/releases/download/{{ ipxe_secureboot_version }}/ipxeboot.tar.gz ipxe_secureboot_version: v2.0.0 ipxe_source_dir: /usr/src/ipxe kernel_params: initrd=initrd.magic ${cmdline} live_endpoint: https://github.com/netbootxyz make_num_jobs: 1 memdisk_location: http://${boot_domain}/memdisk netbootxyz_conf_dir: /etc/netbootxyz netbootxyz_root: /var/www/html pciids_url: https://raw.githubusercontent.com/netbootxyz/pciids/master/pciids.ipxe pipxe_branch: master pipxe_repo: https://github.com/netbootxyz/pipxe pipxe_source_dir: /usr/src/pipxe releases: almalinux: base_dir: almalinux enabled: true menu: linux mirror: http://repo.almalinux.org name: AlmaLinux versions: - code_name: 10 name: 10 (Latest) - code_name: 9 name: 9 (Latest) - code_name: 8 name: 8 (Latest) alpinelinux: base_dir: alpine enabled: true menu: linux mirror: http://dl-cdn.alpinelinux.org name: Alpine Linux versions: - code_name: v3.23 name: '3.23' - code_name: edge name: Edge (development) archlinux: base_dir: archlinux enabled: true menu: linux mirror: mirrors.kernel.org name: Arch Linux versions: - code_name: 2026.03.01 name: 2026.03.01 blackarch: enabled: true menu: linux name: BlackArch versions: - code_name: current name: current centos: base_dir: null enabled: true menu: linux mirror: https://mirror.stream.centos.org name: CentOS Stream versions: - code_name: 10-stream name: 10.0 Stream - code_name: 9-stream name: 9.0 Stream coreos: base_dir: prod/streams enabled: true menu: linux mirror: https://builds.coreos.fedoraproject.org name: Fedora CoreOS versions: - code_name: 43.20260301.3.1 name: stable - code_name: 43.20260316.2.1 name: testing - code_name: 44.20260316.1.1 name: next debian: archive_mirror: http://archive.debian.org base_dir: debian enabled: true menu: linux mirror: http://deb.debian.org name: Debian versions: stable: - code_name: trixie name: 13.0 (trixie) - code_name: bookworm name: 12.0 (bookworm) testing: - code_name: forky name: forky (testing) - code_name: sid name: sid (unstable) devuan: base_dir: devuan enabled: true menu: linux mirror: http://deb.devuan.org name: Devuan versions: stable: - code_name: daedalus name: 5.0 Daedalus (stable) - code_name: chimaera name: 4.0 Chimaera (oldstable) - code_name: beowulf name: 3.1 Beowulf (oldoldstable) testing: - code_name: excalibur name: Excalibur (testing) fedora: base_dir: fedora enabled: true menu: linux mirror: http://mirrors.kernel.org name: Fedora versions: - code_name: 43 name: 43 - code_name: 42 name: 42 flatcar: enabled: true menu: linux mirror: '' name: Flatcar Container Linux versions: - code_name: stable name: Stable Channel - code_name: beta name: Beta Channel - code_name: alpha name: Alpha Channel - code_name: edge name: Edge Channel freebsd: enabled: true menu: bsd name: FreeBSD freedos: base_dir: pub/micro/pc-stuff/freedos/files/distributions/1.4 enabled: true menu: dos mirror: http://www.ibiblio.org name: FreeDOS versions: - code_name: FD14-FullUSB name: 1.4 Full Installer - code_name: FD14-LiteUSB name: 1.4 Lite Installer gentoo: enabled: true menu: linux name: Gentoo harvester: enabled: true menu: linux name: Harvester ipfire: base_dir: releases/ipfire-2.x enabled: true menu: linux mirror: https://downloads.ipfire.org name: IPFire versions: - code_name: 2.29-core200 name: 2.29 Core200 k3os: enabled: true menu: linux mirror: https://github.com/rancher/k3os/releases name: k3OS kairos: enabled: true flavors: - key: core name: Core - key: k3sv1.30.11-k3s1 name: k3s v1.30.11-k3s1 (Standard) - key: k3sv1.31.7-k3s1 name: k3s v1.31.7-k3s1 (Standard) - key: k3sv1.32.3-k3s1 name: k3s v1.32.3-k3s1 (Standard) menu: linux mirror: https://github.com/kairos-io/kairos/releases name: Kairos platforms: - key: alpine-3.21 name: Alpine Linux 3.21 - key: debian-12 name: Debian 12 - key: fedora-40 name: Fedora 40 - key: opensuse-leap-15.6 name: openSUSE Leap 15.6 - key: opensuse-tumbleweed name: openSUSE Tumbleweed - key: rockylinux-9 name: Rocky Linux 9 - key: ubuntu-22.04 name: Ubuntu 22.04 - key: ubuntu-24.04 name: Ubuntu 24.04 - key: ubuntu-24.10 name: Ubuntu 24.10 version: v3.5.3 kali: base_dir: kali enabled: true menu: linux mirror: http://http.kali.org name: Kali Linux versions: - code_name: rolling name: Rolling Edition mageia: base_dir: mageia enabled: true menu: linux mirror: http://mirrors.kernel.org name: Mageia versions: - code_name: '8' name: '8' - code_name: cauldron name: cauldron nixos: base_dir: nixos enabled: true menu: linux name: NixOS versions: - code_name: nixos-25.11 name: nixos-25.11 - code_name: nixos-25.05 name: nixos-25.05 - code_name: nixos-24.11 name: nixos-24.11 - code_name: nixos-24.05 name: nixos-24.05 - code_name: nixos-23.11 name: nixos-23.11 - code_name: nixos-23.05 name: nixos-23.05 - code_name: nixos-22.11 name: nixos-22.11 - code_name: nixos-22.05 name: nixos-22.05 - code_name: nixos-21.11 name: nixos-21.11 - code_name: nixos-21.05 name: nixos-21.05 - code_name: nixos-20.09 name: nixos-20.09 openEuler: base_dir: null enabled: true menu: linux mirror: http://repo.openeuler.org name: openEuler versions: - code_name: openEuler-24.09 name: openEuler-24.09 - code_name: openEuler-24.03-LTS-SP1 name: openEuler-24.03-LTS-SP1 - code_name: openEuler-20.03-LTS-SP3 name: openEuler-20.03-LTS-SP3 - code_name: openEuler-22.03-LTS name: openEuler-22.03-LTS - code_name: openEuler-22.03-LTS-SP1 name: openEuler-22.03-LTS-SP1 - code_name: openEuler-22.03-LTS-SP2 name: openEuler-22.03-LTS-SP2 openbsd: base_dir: pub/OpenBSD enabled: true menu: bsd mirror: http://cdn.openbsd.org name: OpenBSD versions: - code_name: snapshots image_ver: '78' name: 7.8 Latest Snapshot - code_name: '7.8' image_ver: '78' name: '7.8' - code_name: '7.7' image_ver: '77' name: '7.7' opensuse: base_dir: distribution/leap enabled: true menu: linux mirror: http://download.opensuse.org name: openSUSE versions: - code_name: '16.0' name: openSUSE Leap 16.0 - code_name: '15.6' name: openSUSE Leap 15.6 - code_name: tumbleweed name: openSUSE tumbleweed oracle: enabled: true menu: linux mirror: https://yum.oracle.com name: Oracle Linux paths: 8: /repo/OracleLinux/OL8/baseos/latest 9: /repo/OracleLinux/OL9/baseos/latest photon: enabled: true menu: linux name: VMware Photon proxmox: enabled: true menu: linux name: Proxmox rhel: enabled: true menu: linux name: Red Hat Enterprise Linux rockylinux: base_dir: pub/rocky enabled: true menu: linux mirror: http://download.rockylinux.org name: Rocky Linux versions: - code_name: 10 name: 10 (Latest) - code_name: 9 name: 9 (Latest) - code_name: 8 name: 8 (Latest) slackware: base_dir: slackware enabled: true menu: linux mirror: http://mirrors.kernel.org name: Slackware versions: - code_name: current name: Current - code_name: '14.2' name: '14.2' - code_name: '14.1' name: '14.1' - code_name: '15.0' name: '15.0' smartos: base_dir: /platform/i86pc/ enabled: true menu: unix mirror: https://netboot.smartos.org/os/ name: SmartOS versions: - code_name: 20260319T000507Z name: 20260319T000507Z - code_name: 20260306T044811Z name: 20260306T044811Z - code_name: 20260305T000543Z name: 20260305T000543Z - code_name: 20260219T015737Z name: 20260219T015737Z talos: enabled: true menu: linux mirror: https://github.com/siderolabs/talos/releases name: Talos platforms: - key: metal name: Bare Metal - key: aws name: AWS - key: azure name: Azure - key: digitalocean name: Digital Ocean - key: equinixMetal name: Equinix Metal - key: gcp name: GCP - key: hcloud name: Hetzner Cloud - key: nocloud name: Nocloud - key: openstack name: Openstack - key: oracle name: oracle - key: scaleway name: Scaleway - key: upcloud name: Upcloud - key: vmware name: VMware - key: vultr name: Vultr tinycore: enabled: true menu: linux mirror: http://distro.ibiblio.org/tinycorelinux name: Tiny Core Linux versions: - arch: x86 code_name: core initrd: /17.x/x86/release/distribution_files/core.gz kernel: /17.x/x86/release/distribution_files/vmlinuz name: Core - arch: x86_64 code_name: corepure initrd: /17.x/x86_64/release/distribution_files/corepure64.gz kernel: /17.x/x86_64/release/distribution_files/vmlinuz64 name: CorePure - arch: x86 code_name: dcorebionic initrd: /dCore/x86/release/dCore-bionic/dCore-bionic.gz kernel: /dCore/x86/release/dCore-bionic/vmlinuz-bionic name: dCore Bionic - arch: x86 code_name: dcorebionicplus initrd: /dCore/x86/release/dCore-bionic/dCorePlus-bionic.gz kernel: /dCore/x86/release/dCore-bionic/vmlinuz-bionic name: dCore Bionic Plus - arch: x86 code_name: dcorejessie initrd: /dCore/x86/release/dCore-jessie/dCore-jessie.gz kernel: /dCore/x86/release/dCore-jessie/vmlinuz-jessie name: dCore Jessie - arch: x86 code_name: dcorejessieplus initrd: /dCore/x86/release/dCore-jessie/dCorePlus-jessie.gz kernel: /dCore/x86/release/dCore-jessie/vmlinuz-jessie name: dCore Jessie Plus - arch: x86 code_name: dcorestretch initrd: /dCore/x86/release/dCore-stretch/dCore-stretch.gz kernel: /dCore/x86/release/dCore-stretch/vmlinuz-stretch name: dCore Stretch - arch: x86 code_name: dcorestretchplus initrd: /dCore/x86/release/dCore-stretch/dCorePlus-stretch.gz kernel: /dCore/x86/release/dCore-stretch/vmlinuz-stretch name: dCore Stretch Plus - arch: x86 code_name: dcoretrusty initrd: /dCore/x86/release/dCore-trusty/dCore-trusty.gz kernel: /dCore/x86/release/dCore-trusty/vmlinuz-trusty name: dCore Trusty - arch: x86 code_name: dcoretrustyplus initrd: /dCore/x86/release/dCore-trusty/dCorePlus-trusty.gz kernel: /dCore/x86/release/dCore-trusty/vmlinuz-trusty name: dCore Trusty Plus - arch: x86 code_name: dcorewheezy initrd: /dCore/x86/release/dCore-wheezy/dCore-wheezy.gz kernel: /dCore/x86/release/dCore-wheezy/vmlinuz-wheezy name: dCore Wheezy - arch: x86 code_name: dcorewheezyplus initrd: /dCore/x86/release/dCore-wheezy/dCorePlus-wheezy.gz kernel: /dCore/x86/release/dCore-wheezy/vmlinuz-wheezy name: dCore Wheezy Plus - arch: x86 code_name: dcorexenial initrd: /dCore/x86/release/dCore-xenial/dCore-xenial.gz kernel: /dCore/x86/release/dCore-xenial/vmlinuz-xenial name: dCore Xenial - arch: x86 code_name: dcorexenialplus initrd: /dCore/x86/release/dCore-xenial/dCorePlus-xenial.gz kernel: /dCore/x86/release/dCore-xenial/vmlinuz-xenial name: dCore Xenial Plus - arch: x86_64 code_name: dcore64bionic initrd: /dCore/x86_64/release/dCore-bionic64/dCore-bionic64.gz kernel: /dCore/x86_64/release/dCore-bionic64/vmlinuz-bionic64 name: dCore64 Bionic - arch: x86_64 code_name: dcore64bionicplus initrd: /dCore/x86_64/release/dCore-bionic64/dCorePlus-bionic64.gz kernel: /dCore/x86_64/release/dCore-bionic64/vmlinuz-bionic64 name: dCore64 Bionic Plus - arch: x86_64 code_name: dcore64buster initrd: /dCore/x86_64/release/dCore-buster64/dCore-buster64.gz kernel: /dCore/x86_64/release/dCore-buster64/vmlinuz-buster64 name: dCore64 Buster - arch: x86_64 code_name: dcore64busterplus initrd: /dCore/x86_64/release/dCore-buster64/dCorePlus-buster64.gz kernel: /dCore/x86_64/release/dCore-buster64/vmlinuz-buster64 name: dCore64 Buster Plus - arch: x86_64 code_name: dcore64stretch initrd: /dCore/x86_64/release/dCore-stretch64/dCore-stretch64.gz kernel: /dCore/x86_64/release/dCore-stretch64/vmlinuz-stretch64 name: dCore64 Stretch - arch: x86_64 code_name: dcore64stretchplus initrd: /dCore/x86_64/release/dCore-stretch64/dCorePlus-stretch64.gz kernel: /dCore/x86_64/release/dCore-stretch64/vmlinuz-stretch64 name: dCore Stretch Plus ubuntu: archive_mirror: http://old-releases.ubuntu.com base_dir: ubuntu enabled: true menu: linux mirror: http://archive.ubuntu.com name: Ubuntu versions: - code_name: questing name: 25.10 Questing Quokka - code_name: plucky name: 25.04 Plucky Puffin - code_name: oracular name: 24.10 Oracular Oriole - code_name: noble name: 24.04 LTS Noble Numbat - code_name: jammy name: 22.04 LTS Jammy Jellyfish - code_name: focal name: 20.04 LTS Focal Fossa (Subiquity) - code_name: focal-legacy name: 20.04 LTS Focal Fossa (Legacy) - code_name: bionic name: 18.04 LTS Bionic Beaver - code_name: xenial name: 16.04 LTS Xenial Xerus vmware: enabled: true menu: linux name: VMware ESXi vyos: enabled: true menu: linux name: VyOS versions: - code_name: rolling name: 1.5 rolling zeninstall: enabled: true menu: linux name: Zen Installer Arch versions: - code_name: current name: current sigs_dir: '{{ netbootxyz_root }}/sigs' sigs_enabled: false sigs_location: http://${boot_domain}/sigs/ sigs_menu: false site_name: netboot.xyz time_server: 0.pool.ntp.org utilitiesarm: memtest86: enabled: false kernel: ${live_endpoint}{{ endpoints.memtest86.path }}memtest86-usb.img name: Memtest86 Free - {{ endpoints.memtest86.version }} type: sanboot uefishell: enabled: true kernel: ${live_endpoint}{{ endpoints.uefishell.path }}uefi-shell-aarch64.efi name: UEFI Shell type: direct utilitiesefi: 4mlinux: enabled: true name: 4MLinux type: ipxemenu bootrepair: enabled: true initrd: ${live_endpoint}{{ endpoints.bootrepair.path }}initrd kernel: ${live_endpoint}{{ endpoints.bootrepair.path }}vmlinuz ip=dhcp boot=casper netboot=http fetch=${live_endpoint}{{ endpoints.bootrepair.path }}filesystem.squashfs {{ kernel_params }} name: Boot Repair CD type: direct caine: enabled: true initrd: ${live_endpoint}{{ endpoints.caine.path }}initrd kernel: ${live_endpoint}{{ endpoints.caine.path }}vmlinuz ip=dhcp boot=casper netboot=url url=${live_endpoint}{{ endpoints.caine.path }}filesystem.squashfs {{ kernel_params }} name: CAINE type: direct clonezilla: enabled: true name: Clonezilla type: ipxemenu dts: enabled: true initrd: https://boot.dasharo.com{{ endpoints.dts.path }}/dts-base-image-v{{ endpoints.dts.version }}.cpio.gz kernel: https://boot.dasharo.com{{ endpoints.dts.path }}/bzImage-v{{ endpoints.dts.version }} name: Dasharo Tools Suite type: direct gparted: enabled: true name: GParted type: ipxemenu kaspersky: enabled: true name: Kaspersky Rescue Disk type: ipxemenu memtest86plus: enabled: true name: Memtest86+ {{ endpoints.memtest86plus.version }} type: memtest util_path: ${live_endpoint}{{ endpoints.memtest86plus.path }}mt86p_x86_64 version: '{{ endpoints.memtest86plus.version }}' redorescue: enabled: true initrd: ${live_endpoint}{{ endpoints.redorescue.path }}initrd kernel: ${live_endpoint}{{ endpoints.redorescue.path }}vmlinuz boot=live noprompt nocomponents setkmap=us fetch=${live_endpoint}{{ endpoints.redorescue.path }}filesystem.squashfs {{ kernel_params }} name: RedoRescue type: direct rescatux: enabled: true initrd: ${live_endpoint}{{ endpoints.rescatux.path }}initrd kernel: ${live_endpoint}{{ endpoints.rescatux.path }}vmlinuz boot=live fetch=${live_endpoint}{{ endpoints.rescatux.path }}filesystem.squashfs selinux=1 security=selinux enforcing=0 {{ kernel_params }} name: Rescatux type: direct rescuezilla: enabled: true name: Rescuezilla type: ipxemenu shredos: enabled: true name: ShredOS type: ipxemenu supergrubdisk: enabled: true kernel: ${live_endpoint}{{ endpoints.supergrubdisk.path }}supergrub2-classic-x86_64.efi name: Super Grub2 Disk type: direct systemrescue: enabled: true name: System Rescue CD type: ipxemenu uefishell: enabled: true kernel: ${live_endpoint}{{ endpoints.uefishell.path }}uefi-shell-x64.efi name: UEFI Shell type: direct zfsbootmenu: enabled: true kernel: ${live_endpoint}{{ endpoints.zfsbootmenu.path }}zfsbootmenu-recovery-x86_64.efi name: ZFSBootMenu type: direct utilitiespcbios32: clonezilla: enabled: true name: Clonezilla type: ipxemenu memtest86legacy: enabled: true name: Memtest86+ 5.01.0 type: memtest util_path: https://boot.netboot.xyz/utils/memtest86-5.01.0 version: 5.01.0 memtest86plus: enabled: true name: Memtest86+ {{ endpoints.memtest86plus.version }} type: memtest util_path: ${live_endpoint}{{ endpoints.memtest86plus.path }}mt86p_i586 version: '{{ endpoints.memtest86plus.version }}' shredos: enabled: true name: ShredOS type: ipxemenu systemrescue: enabled: true name: System Rescue CD type: ipxemenu utilitiespcbios64: 4mlinux: enabled: true name: 4MLinux type: ipxemenu bootrepair: enabled: true initrd: ${live_endpoint}{{ endpoints.bootrepair.path }}initrd kernel: ${live_endpoint}{{ endpoints.bootrepair.path }}vmlinuz ip=dhcp boot=casper netboot=http fetch=${live_endpoint}{{ endpoints.bootrepair.path }}filesystem.squashfs {{ kernel_params }} name: Boot Repair CD type: direct breakin: enabled: true initrd: ${live_endpoint}{{ endpoints.breakin.path }}initrd kernel: ${live_endpoint}{{ endpoints.breakin.path }}vmlinuz sshpasswd=breakin startup=breakin {{ kernel_params }} name: Breakin type: direct caine: enabled: true initrd: ${live_endpoint}{{ endpoints.caine.path }}initrd kernel: ${live_endpoint}{{ endpoints.caine.path }}vmlinuz ip=dhcp boot=casper netboot=http fetch=${live_endpoint}{{ endpoints.caine.path }}filesystem.squashfs {{ kernel_params }} name: CAINE type: direct clonezilla: enabled: true name: Clonezilla type: ipxemenu dban: enabled: true name: DBAN type: ipxemenu dts: enabled: true initrd: https://boot.dasharo.com{{ endpoints.dts.path }}/dts-base-image-v{{ endpoints.dts.version }}.cpio.gz kernel: https://boot.dasharo.com{{ endpoints.dts.path }}/bzImage-v{{ endpoints.dts.version }} name: Dasharo Tools Suite type: direct gparted: enabled: true name: GParted type: ipxemenu kaspersky: enabled: true name: Kaspersky Rescue Disk type: ipxemenu memtest86legacy: enabled: true name: Memtest86+ 5.01.0 type: memtest util_path: https://boot.netboot.xyz/utils/memtest86-5.01.0 version: 5.01.0 memtest86plus: enabled: true name: Memtest86+ {{ endpoints.memtest86plus.version }} type: memtest util_path: ${live_endpoint}{{ endpoints.memtest86plus.path }}mt86p_x86_64 version: '{{ endpoints.memtest86plus.version }}' redorescue: enabled: true initrd: ${live_endpoint}{{ endpoints.redorescue.path }}initrd kernel: ${live_endpoint}{{ endpoints.redorescue.path }}vmlinuz boot=live noprompt nocomponents setkmap=us fetch=${live_endpoint}{{ endpoints.redorescue.path }}filesystem.squashfs {{ kernel_params }} name: RedoRescue type: direct rescatux: enabled: true initrd: ${live_endpoint}{{ endpoints.rescatux.path }}initrd kernel: ${live_endpoint}{{ endpoints.rescatux.path }}vmlinuz boot=live fetch=${live_endpoint}{{ endpoints.rescatux.path }}filesystem.squashfs selinux=1 security=selinux enforcing=0 {{ kernel_params }} name: Rescatux type: direct rescuezilla: enabled: true name: Rescuezilla type: ipxemenu shredos: enabled: true name: ShredOS type: ipxemenu supergrub: enabled: true name: Super GRUB2 Disk type: memdisk util_path: http://master.dl.sourceforge.net/project/supergrub2/2.04s1/super_grub2_disk_2.04s1/super_grub2_disk_hybrid_2.04s1.iso version: 2.04s1 systemrescue: enabled: true name: System Rescue CD type: ipxemenu ubcd: enabled: true name: Ultimate Boot CD (UBCD) type: memdisk util_path: https://mirror.sysadminguide.net/ubcd/ubcd539.iso version: '539' wimboot_location: http://${boot_domain}/wimboot wimboot_upstream_url: https://github.com/ipxe/wimboot/releases/latest/download/wimboot ================================================ FILE: roles/netbootxyz/files/ipxe/local/colour.h ================================================ #undef COLOR_NORMAL_FG #undef COLOR_NORMAL_BG #undef COLOR_SELECT_FG #undef COLOR_SELECT_BG #undef COLOR_SEPARATOR_FG #undef COLOR_SEPARATOR_BG #undef COLOR_EDIT_FG #undef COLOR_EDIT_BG #undef COLOR_ALERT_FG #undef COLOR_ALERT_BG #undef COLOR_URL_FG #undef COLOR_URL_BG #undef COLOR_PXE_FG #undef COLOR_PXE_BG #define COLOR_NORMAL_FG COLOR_CYAN #define COLOR_NORMAL_BG COLOR_BLACK #define COLOR_SELECT_FG COLOR_WHITE #define COLOR_SELECT_BG COLOR_BLUE #define COLOR_SEPARATOR_FG COLOR_WHITE #define COLOR_SEPARATOR_BG COLOR_BLACK #define COLOR_EDIT_FG COLOR_BLACK #define COLOR_EDIT_BG COLOR_CYAN #define COLOR_ALERT_FG COLOR_WHITE #define COLOR_ALERT_BG COLOR_RED #define COLOR_URL_FG COLOR_CYAN #define COLOR_URL_BG COLOR_BLUE #define COLOR_PXE_FG COLOR_BLACK #define COLOR_PXE_BG COLOR_WHITE ================================================ FILE: roles/netbootxyz/files/ipxe/local/console.h ================================================ #define CONSOLE_FRAMEBUFFER /* Graphical framebuffer console */ ================================================ FILE: roles/netbootxyz/files/ipxe/local/crypto.h ================================================ #undef OCSP_CHECK ================================================ FILE: roles/netbootxyz/files/ipxe/local/general.h ================================================ #define CERT_CMD /* Certificate management commands */ #define CONSOLE_CMD /* Console command */ #define DIGEST_CMD /* Image crypto digest commands */ #define DOWNLOAD_PROTO_HTTPS /* Secure Hypertext Transfer Protocol */ #define DOWNLOAD_PROTO_NFS /* NFS */ #define IMAGE_COMBOOT /* COMBOOT */ #define IMAGE_TRUST_CMD /* Image trust management commands */ #define IMAGE_GZIP /* GZIP image support */ #define IMAGE_PNG /* PNG image support */ #define IMAGE_ZLIB /* ZLIB image support */ #define NET_PROTO_IPV6 /* IPv6 protocol */ #define NET_PROTO_LLDP /* Link Layer Discovery protocol */ #define NSLOOKUP_CMD /* DNS resolving command */ #define NTP_CMD /* NTP commands */ #define PARAM_CMD /* Form parameter commands */ #define PCI_CMD /* PCI commands */ #define PING_CMD /* Ping command */ #define POWEROFF_CMD /* Power off commands */ #define REBOOT_CMD /* Reboot command */ #define TIME_CMD /* Time commands */ #define VLAN_CMD /* VLAN commands */ ================================================ FILE: roles/netbootxyz/files/ipxe/local/general.h.efi ================================================ #define CERT_CMD /* Certificate management commands */ #define CONSOLE_CMD /* Console command */ #define DIGEST_CMD /* Image crypto digest commands */ #define DOWNLOAD_PROTO_HTTPS /* Secure Hypertext Transfer Protocol */ #define DOWNLOAD_PROTO_NFS /* NFS */ #define IMAGE_TRUST_CMD /* Image trust management commands */ #define IMAGE_GZIP /* GZIP image support */ #define IMAGE_PNG /* PNG image support */ #define IMAGE_ZLIB /* ZLIB image support */ #define NET_PROTO_IPV6 /* IPv6 protocol */ #define NET_PROTO_LLDP /* Link Layer Discovery protocol */ #define NSLOOKUP_CMD /* DNS resolving command */ #define NTP_CMD /* NTP commands */ #define PARAM_CMD /* Form parameter commands */ #define PCI_CMD /* PCI commands */ #define PING_CMD /* Ping command */ #define POWEROFF_CMD /* Power off commands */ #define REBOOT_CMD /* Reboot command */ #define TIME_CMD /* Time commands */ #define VLAN_CMD /* VLAN commands */ ================================================ FILE: roles/netbootxyz/meta/main.yml ================================================ galaxy_info: author: Antony Messerli description: Installs a self hosted version of netboot.xyz license: Apache-2.0 min_ansible_version: 2.7 platforms: - name: Ubuntu versions: - all - name: Centos versions: - all galaxy_tags: - system dependencies: [] ================================================ FILE: roles/netbootxyz/tasks/generate_checksums.yml ================================================ --- - name: Register a listing of all created iPXE bootloaders ansible.builtin.shell: ls -p -I {{ checksums_filename }} {{ netbootxyz_root }}/ipxe/ | grep -v / register: netboot_disks - name: Generate date ansible.builtin.command: date register: current_date - name: Gather stat listing of directory ansible.builtin.command: sha256sum -b {{ item }} with_items: - "{{ netboot_disks.stdout_lines }}" args: chdir: "{{ netbootxyz_root }}/ipxe/" register: netboot_disks_stat - name: Generate ipxe disk checksums ansible.builtin.template: src: checksums.txt.j2 dest: "{{ netbootxyz_root }}/ipxe/{{ checksums_filename }}" - name: Generate site name banner for index ansible.builtin.shell: toilet -f standard {{ site_name | quote }} --html | grep span register: index_title when: ansible_facts['os_family'] == "Debian" - name: Reset bootloader filename to first in list ansible.builtin.set_fact: bootloader_filename: "{{ bootloader_disks | first }}" - name: Generate netboot.xyz index template ansible.builtin.template: src: index.html.j2 dest: "{{ netbootxyz_root }}/index.html" ================================================ FILE: roles/netbootxyz/tasks/generate_disks.yml ================================================ --- - name: Set up iPXE build environment ansible.builtin.include_tasks: generate_disks_base.yml - name: Generate legacy iPXE bootloaders ansible.builtin.include_tasks: generate_disks_legacy.yml when: - generate_disks_legacy | default(true) | bool - name: Generate linux iPXE bootloader ansible.builtin.include_tasks: generate_disks_linux.yml when: - generate_disks_linux | default(false) | bool - name: Generate EFI iPXE bootloaders ansible.builtin.include_tasks: generate_disks_efi.yml when: - generate_disks_efi | default(true) | bool - name: Generate ARM iPXE bootloaders ansible.builtin.include_tasks: generate_disks_arm.yml when: - generate_disks_arm | default(false) | bool - name: Generate RPI iPXE bootloaders ansible.builtin.include_tasks: generate_disks_rpi.yml when: - generate_disks_rpi | default(false) | bool - bootloader_filename == "netboot.xyz" - name: Generate hybrid iPXE bootloaders ansible.builtin.include_tasks: generate_disks_hybrid.yml when: - generate_disks_hybrid | default(false) | bool - bootloader_filename == "netboot.xyz" - name: Generate Secure Boot iPXE bootloaders ansible.builtin.include_tasks: generate_disks_secureboot.yml when: - generate_disks_secureboot | default(false) | bool - bootloader_filename == "netboot.xyz" - name: Remove stale autoexec.ipxe when Secure Boot is disabled ansible.builtin.file: path: "{{ netbootxyz_root }}/ipxe/autoexec.ipxe" state: absent when: - not (generate_disks_secureboot | default(false) | bool) ================================================ FILE: roles/netbootxyz/tasks/generate_disks_arm.yml ================================================ --- - name: Copy netboot.xyz local EFI iPXE configs ansible.builtin.copy: src: "ipxe/local/{{ item }}" dest: "{{ ipxe_source_dir }}/src/config/local/{{ item }}" with_items: - colour.h - console.h - crypto.h - name: Copy netboot.xyz general.h.efi iPXE config ansible.builtin.copy: src: "ipxe/local/general.h.efi" dest: "{{ ipxe_source_dir }}/src/config/local/general.h" - name: Set trust file to ipxe ca ansible.builtin.set_fact: trust_files: "{{ cert_dir }}/{{ ipxe_ca_filename }}" when: not generate_signatures - name: Combine trust files if set ansible.builtin.set_fact: trust_files: "{{ cert_dir }}/{{ ipxe_ca_filename }},{{ cert_dir }}/{{ cert_file_filename }}" when: generate_signatures | bool # iPXE workaround # http://lists.ipxe.org/pipermail/ipxe-devel/2018-August/006254.html # apply patch to fix arm64 builds on amd64 builds - name: Workaround in iPXE for arm ansible.builtin.shell: sed -i '/WORKAROUND_CFLAGS/d' arch/arm64/Makefile args: chdir: "{{ ipxe_source_dir }}/src" - name: Compile iPXE bootloaders for EFI arm64 ansible.builtin.shell: | make clean make -j{{ make_num_jobs }} \ CROSS_COMPILE=aarch64-linux-gnu- \ ARCH=arm64 \ EMBED={{ bootloader_filename }} \ TRUST={{ trust_files }} \ bin-arm64-efi/ipxe.efi \ bin-arm64-efi/snp.efi \ bin-arm64-efi/snponly.efi args: chdir: "{{ ipxe_source_dir }}/src" when: ipxe_debug_enabled | bool == false - name: Compile iPXE bootloader for EFI arm64 with debug flags ansible.builtin.shell: | make clean make -j{{ make_num_jobs }} \ CROSS_COMPILE=aarch64-linux-gnu- \ ARCH=arm64 \ DEBUG={{ ipxe_debug_options }} \ EMBED={{ bootloader_filename }} \ TRUST={{ trust_files }} \ bin-arm64-efi/snp.efi args: chdir: "{{ ipxe_source_dir }}/src" when: ipxe_debug_enabled | bool - name: Copy iPXE arm64 EFI builds to http directory ansible.builtin.copy: src: "{{ ipxe_source_dir }}/src/{{ item.src }}" dest: "{{ netbootxyz_root }}/ipxe/{{ item.dest }}" remote_src: true with_items: - {src: "bin-arm64-efi/ipxe.efi", dest: "{{ bootloader_filename }}-arm64.efi"} - {src: "bin-arm64-efi/snp.efi", dest: "{{ bootloader_filename }}-arm64-snp.efi"} - {src: "bin-arm64-efi/snponly.efi", dest: "{{ bootloader_filename }}-arm64-snponly.efi"} ================================================ FILE: roles/netbootxyz/tasks/generate_disks_base.yml ================================================ --- - name: Gathering facts ansible.builtin.setup: - name: Gather variables for each operating system ansible.builtin.include_vars: "{{ item }}" with_first_found: - "{{ ansible_facts['distribution'] | lower }}-{{ ansible_facts['distribution_version'] | lower }}.yml" - "{{ ansible_facts['distribution'] | lower }}-{{ ansible_facts['distribution_major_version'] | lower }}.yml" - "{{ ansible_facts['os_family'] | lower }}-{{ ansible_facts['distribution_major_version'] | lower }}.yml" - "{{ ansible_facts['distribution'] | lower }}.yml" - "{{ ansible_facts['os_family'] | lower }}.yml" - name: Ensure EPEL is enabled ansible.builtin.dnf: name: epel-release state: present when: - ansible_facts['distribution'] == "CentOS" - name: Set var to bootloader of loop ansible.builtin.set_fact: bootloader_filename: "{{ bootloader_file }}" - name: Create iPXE file directories ansible.builtin.file: path: "{{ item }}" state: directory with_items: - "{{ netbootxyz_root }}/ipxe" - "{{ cert_dir }}" - name: Retrieve latest wimboot ansible.builtin.get_url: url: "{{ wimboot_upstream_url }}" dest: "{{ netbootxyz_root }}/wimboot" - name: Copy helper apps ansible.builtin.copy: src: "{{ item }}" dest: "{{ netbootxyz_root }}" with_items: - memdisk - name: Install required packages ansible.builtin.package: name: "{{ item }}" state: present with_items: "{{ netbootxyz_packages }}" - name: Check out latest iPXE sources ansible.builtin.git: repo: "{{ ipxe_repo }}" dest: "{{ ipxe_source_dir }}" version: "{{ ipxe_branch }}" force: true register: ipxe_git_checkout - name: Copy iPXE Bootloader template to iPXE source directory ansible.builtin.template: src: "disks/{{ bootloader_filename }}.j2" dest: "{{ ipxe_source_dir }}/src/{{ bootloader_filename }}" - name: Touch iPXE config local files ansible.builtin.file: path: "{{ ipxe_source_dir }}/{{ item }}" state: touch with_items: - src/config/local/umalloc.h - src/config/local/nap.h - src/config/local/timer.h - src/config/local/branding.h - src/config/local/serial.h - src/config/local/reboot.h - src/config/local/sanboot.h - src/config/local/fault.h - src/config/local/dhcp.h - src/config/local/sideband.h - src/config/local/entropy.h - src/config/local/crypto.h - src/config/local/usb.h - src/config/local/settings.h - src/config/local/isa.h - name: Retrieve iPXE CA ansible.builtin.get_url: url: "{{ ipxe_ca_url }}" dest: "{{ cert_dir }}/{{ ipxe_ca_filename }}" ================================================ FILE: roles/netbootxyz/tasks/generate_disks_efi.yml ================================================ --- - name: Copy netboot.xyz local EFI iPXE configs ansible.builtin.copy: src: "ipxe/local/{{ item }}" dest: "{{ ipxe_source_dir }}/src/config/local/{{ item }}" with_items: - colour.h - console.h - crypto.h - name: Copy netboot.xyz general.h.efi iPXE config ansible.builtin.copy: src: "ipxe/local/general.h.efi" dest: "{{ ipxe_source_dir }}/src/config/local/general.h" - name: Set trust file to ipxe ca ansible.builtin.set_fact: trust_files: "{{ cert_dir }}/{{ ipxe_ca_filename }}" when: not generate_signatures - name: Combine trust files if set ansible.builtin.set_fact: trust_files: "{{ cert_dir }}/{{ ipxe_ca_filename }},{{ cert_dir }}/{{ cert_file_filename }}" when: generate_signatures | bool - name: Compile iPXE bootloader for EFI ansible.builtin.shell: | make clean make -j{{ make_num_jobs }} \ EMBED={{ bootloader_filename }} \ TRUST={{ trust_files }} \ bin-x86_64-efi/ipxe.efi \ bin-x86_64-efi/snp.efi \ bin-x86_64-efi/snponly.efi args: chdir: "{{ ipxe_source_dir }}/src" when: ipxe_debug_enabled | bool == false - name: Compile iPXE bootloader for EFI with debug flags ansible.builtin.shell: | make clean make -j{{ make_num_jobs }} \ EMBED={{ bootloader_filename }} \ DEBUG={{ ipxe_debug_options }} \ TRUST={{ trust_files }} \ bin-x86_64-efi/ipxe.efi \ bin-x86_64-efi/snp.efi \ bin-x86_64-efi/snponly.efi args: chdir: "{{ ipxe_source_dir }}/src" when: ipxe_debug_enabled | bool - name: Generate iPXE floppy images for EFI ansible.builtin.shell: | truncate -s 1440k bin-x86_64-efi/ipxe.efi.dsk mformat -i bin-x86_64-efi/ipxe.efi.dsk -f 1440 :: mmd -i bin-x86_64-efi/ipxe.efi.dsk ::EFI mmd -i bin-x86_64-efi/ipxe.efi.dsk ::EFI/BOOT cp bin-x86_64-efi/ipxe.efi.dsk bin-x86_64-efi/snp.efi.dsk mcopy -i bin-x86_64-efi/ipxe.efi.dsk bin-x86_64-efi/ipxe.efi ::EFI/BOOT/BOOTX64.EFI mcopy -i bin-x86_64-efi/snp.efi.dsk bin-x86_64-efi/snp.efi ::EFI/BOOT/BOOTX64.EFI args: chdir: "{{ ipxe_source_dir }}/src" - name: Copy iPXE EFI builds to http directory ansible.builtin.copy: src: "{{ ipxe_source_dir }}/src/{{ item.src }}" dest: "{{ netbootxyz_root }}/ipxe/{{ item.dest }}" remote_src: true with_items: - {src: "bin-x86_64-efi/ipxe.efi", dest: "{{ bootloader_filename }}.efi"} - {src: "bin-x86_64-efi/snp.efi", dest: "{{ bootloader_filename }}-snp.efi"} - {src: "bin-x86_64-efi/snponly.efi", dest: "{{ bootloader_filename }}-snponly.efi"} - {src: "bin-x86_64-efi/ipxe.efi.dsk", dest: "{{ bootloader_filename }}.efi.dsk"} - {src: "bin-x86_64-efi/snp.efi.dsk", dest: "{{ bootloader_filename }}-snp.efi.dsk"} ================================================ FILE: roles/netbootxyz/tasks/generate_disks_hybrid.yml ================================================ --- - name: Generate hybrid ISO x86_64 image ansible.builtin.shell: | ./util/genfsimg -o {{ netbootxyz_root }}/ipxe/{{ bootloader_filename }}.iso \ -s {{ bootloader_filename }} \ {{ netbootxyz_root }}/ipxe/{{ bootloader_filename }}.efi \ {{ netbootxyz_root }}/ipxe/{{ bootloader_filename }}.lkrn args: chdir: "{{ ipxe_source_dir }}/src" when: - generate_disks_hybrid | default(false) | bool - generate_disks_legacy | default(true) | bool - generate_disks_efi | default(true) | bool - name: Generate hybrid ISO multiarch image ansible.builtin.shell: | ./util/genfsimg -o {{ netbootxyz_root }}/ipxe/{{ bootloader_filename }}-multiarch.iso \ -s {{ bootloader_filename }} \ {{ netbootxyz_root }}/ipxe/{{ bootloader_filename }}.efi \ {{ netbootxyz_root }}/ipxe/{{ bootloader_filename }}.lkrn \ {{ netbootxyz_root }}/ipxe/{{ bootloader_filename }}-arm64.efi args: chdir: "{{ ipxe_source_dir }}/src" when: - generate_disks_hybrid | default(false) | bool - generate_disks_legacy | default(true) | bool - generate_disks_arm | default(false) | bool - generate_disks_efi | default(true) | bool - name: Generate hybrid ISO arm64 image ansible.builtin.shell: | ./util/genfsimg -o {{ netbootxyz_root }}/ipxe/{{ bootloader_filename }}-arm64.iso \ -s {{ bootloader_filename }} \ {{ netbootxyz_root }}/ipxe/{{ bootloader_filename }}-arm64.efi args: chdir: "{{ ipxe_source_dir }}/src" when: - generate_disks_hybrid | default(false) | bool - generate_disks_arm | default(false) | bool - name: Generate hybrid USB x86_64 image ansible.builtin.shell: | ./util/genfsimg -o {{ netbootxyz_root }}/ipxe/{{ bootloader_filename }}.img \ -s {{ bootloader_filename }} \ {{ netbootxyz_root }}/ipxe/{{ bootloader_filename }}.efi \ {{ netbootxyz_root }}/ipxe/{{ bootloader_filename }}.lkrn args: chdir: "{{ ipxe_source_dir }}/src" when: - generate_disks_hybrid | default(false) | bool - generate_disks_legacy | default(true) | bool - generate_disks_efi | default(true) | bool - name: Generate hybrid USB multiarch image ansible.builtin.shell: | ./util/genfsimg -o {{ netbootxyz_root }}/ipxe/{{ bootloader_filename }}-multiarch.img \ -s {{ bootloader_filename }} \ {{ netbootxyz_root }}/ipxe/{{ bootloader_filename }}.efi \ {{ netbootxyz_root }}/ipxe/{{ bootloader_filename }}.lkrn \ {{ netbootxyz_root }}/ipxe/{{ bootloader_filename }}-arm64.efi args: chdir: "{{ ipxe_source_dir }}/src" when: - generate_disks_hybrid | default(false) | bool - generate_disks_legacy | default(true) | bool - generate_disks_arm | default(false) | bool - generate_disks_efi | default(true) | bool - name: Generate hybrid USB arm64 image ansible.builtin.shell: | ./util/genfsimg -o {{ netbootxyz_root }}/ipxe/{{ bootloader_filename }}-arm64.img \ -s {{ bootloader_filename }} \ {{ netbootxyz_root }}/ipxe/{{ bootloader_filename }}-arm64.efi args: chdir: "{{ ipxe_source_dir }}/src" when: - generate_disks_hybrid | default(false) | bool - generate_disks_arm | default(false) | bool ================================================ FILE: roles/netbootxyz/tasks/generate_disks_legacy.yml ================================================ --- - name: Copy netboot.xyz local legacy iPXE configs ansible.builtin.copy: src: "ipxe/local/{{ item }}" dest: "{{ ipxe_source_dir }}/src/config/local/{{ item }}" with_items: - colour.h - console.h - crypto.h - general.h - name: Set trust file to ipxe ca ansible.builtin.set_fact: trust_files: "{{ cert_dir }}/{{ ipxe_ca_filename }}" when: not generate_signatures - name: Combine trust args if set ansible.builtin.set_fact: trust_files: "{{ cert_dir }}/{{ ipxe_ca_filename }},{{ cert_dir }}/{{ cert_file_filename }}" when: generate_signatures | bool - name: Compile iPXE bootloader for Legacy BIOS ansible.builtin.shell: | make clean make -j{{ make_num_jobs }} \ EMBED={{ bootloader_filename }} \ TRUST={{ trust_files }} \ bin/ipxe.dsk \ bin/ipxe.pdsk \ bin/ipxe.lkrn \ bin/ipxe.kpxe \ bin/undionly.kpxe args: chdir: "{{ ipxe_source_dir }}/src" when: ipxe_debug_enabled | bool == false - name: Compile iPXE bootloader for Legacy BIOS with debug flags ansible.builtin.shell: | make clean make -j{{ make_num_jobs }} \ EMBED={{ bootloader_filename }} \ DEBUG={{ ipxe_debug_options }} \ TRUST={{ trust_files }} \ bin/ipxe.dsk \ bin/ipxe.pdsk \ bin/ipxe.lkrn \ bin/ipxe.kpxe \ bin/undionly.kpxe args: chdir: "{{ ipxe_source_dir }}/src" when: ipxe_debug_enabled | bool - name: Copy iPXE files for Legacy BIOS to http directory ansible.builtin.copy: src: "{{ ipxe_source_dir }}/src/bin/ipxe{{ item }}" dest: "{{ netbootxyz_root }}/ipxe/{{ bootloader_filename }}{{ item }}" remote_src: true with_items: - ".pdsk" - ".dsk" - ".lkrn" - ".kpxe" when: bootloader_filename != "netboot.xyz-metal" - name: Copy iPXE files for Legacy BIOS to http directory ansible.builtin.copy: src: "{{ ipxe_source_dir }}/src/bin/ipxe{{ item }}" dest: "{{ netbootxyz_root }}/ipxe/{{ bootloader_filename }}{{ item }}" remote_src: true with_items: - ".kpxe" when: bootloader_filename == "netboot.xyz-metal" - name: Copy undionly.kpxe for Legacy BIOS to http directory ansible.builtin.copy: src: "{{ ipxe_source_dir }}/src/bin/undionly.kpxe" dest: "{{ netbootxyz_root }}/ipxe/{{ bootloader_filename }}-undionly.kpxe" remote_src: true when: bootloader_filename != "netboot.xyz-metal" ================================================ FILE: roles/netbootxyz/tasks/generate_disks_linux.yml ================================================ --- - name: Copy netboot.xyz local legacy iPXE configs ansible.builtin.copy: src: "ipxe/local/{{ item }}" dest: "{{ ipxe_source_dir }}/src/config/local/{{ item }}" with_items: - colour.h - console.h - crypto.h - name: Copy netboot.xyz general.h.efi iPXE config ansible.builtin.copy: src: "ipxe/local/general.h.efi" dest: "{{ ipxe_source_dir }}/src/config/local/general.h" - name: Set trust file to ipxe ca ansible.builtin.set_fact: trust_files: "{{ cert_dir }}/{{ ipxe_ca_filename }}" when: not generate_signatures - name: Combine trust args if set ansible.builtin.set_fact: trust_files: "{{ cert_dir }}/{{ ipxe_ca_filename }},{{ cert_dir }}/{{ cert_file_filename }}" when: generate_signatures | bool - name: Compile iPXE Linux bootloader for Legacy BIOS ansible.builtin.shell: | make clean make -j{{ make_num_jobs }} \ EMBED={{ bootloader_filename }} \ TRUST={{ trust_files }} \ bin-x86_64-linux/slirp.linux args: chdir: "{{ ipxe_source_dir }}/src" when: ipxe_debug_enabled | bool == false - name: Compile iPXE Linux bootloader for Legacy BIOS with debug flags ansible.builtin.shell: | make clean make -j{{ make_num_jobs }} \ EMBED={{ bootloader_filename }} \ DEBUG={{ ipxe_debug_options }} \ TRUST={{ trust_files }} \ bin-x86_64-linux/slirp.linux args: chdir: "{{ ipxe_source_dir }}/src" when: ipxe_debug_enabled | bool - name: Copy iPXE linux binary for Legacy BIOS to http directory ansible.builtin.copy: src: "{{ ipxe_source_dir }}/src/bin-x86_64-linux/slirp.linux" dest: "{{ netbootxyz_root }}/ipxe/{{ bootloader_filename }}-linux.bin" remote_src: true when: bootloader_filename != "netboot.xyz-metal" ================================================ FILE: roles/netbootxyz/tasks/generate_disks_rpi.yml ================================================ --- - name: Install required packages ansible.builtin.package: name: "{{ item }}" state: present with_items: "{{ pipxe_packages }}" - name: Check out latest pipxe sources ansible.builtin.git: repo: "{{ pipxe_repo }}" dest: "{{ pipxe_source_dir }}" version: "{{ pipxe_branch }}" force: true recursive: true register: pipxe_git_checkout - name: Copy iPXE Bootloader template to iPXE source directory ansible.builtin.template: src: "disks/{{ bootloader_filename }}.j2" dest: "{{ pipxe_source_dir }}/ipxe/src/{{ bootloader_filename }}" - name: Copy netboot.xyz local EFI iPXE configs ansible.builtin.copy: src: "ipxe/local/{{ item }}" dest: "{{ pipxe_source_dir }}/ipxe/src/config/local/{{ item }}" with_items: - colour.h - console.h - crypto.h - name: Copy netboot.xyz general.h.efi iPXE config ansible.builtin.copy: src: "ipxe/local/general.h.efi" dest: "{{ pipxe_source_dir }}/ipxe/src/config/local/general.h" - name: Set trust file to ipxe ca ansible.builtin.set_fact: trust_files: "{{ cert_dir }}/{{ ipxe_ca_filename }}" when: not generate_signatures - name: Combine trust files if set ansible.builtin.set_fact: trust_files: "{{ cert_dir }}/{{ ipxe_ca_filename }},{{ cert_dir }}/{{ cert_file_filename }}" when: generate_signatures | bool - name: Copy Makefile template into pipxe ansible.builtin.template: src: pipxe/Makefile-rpi4.j2 dest: "{{ pipxe_source_dir }}/Makefile" - name: Compile iPXE bootloader for RPI build ansible.builtin.shell: | make -j{{ make_num_jobs }} args: chdir: "{{ pipxe_source_dir }}" - name: Copy iPXE RPI builds to http directory ansible.builtin.copy: src: "{{ pipxe_source_dir }}/{{ item.src }}" dest: "{{ netbootxyz_root }}/ipxe/{{ item.dest }}" remote_src: true with_items: - {src: "sdcard.img", dest: "{{ bootloader_filename }}-rpi4-sdcard.img"} - {src: "ipxe/src/bin-arm64-efi/snp.efi", dest: "{{ bootloader_filename }}-rpi4-snp.efi"} ================================================ FILE: roles/netbootxyz/tasks/generate_disks_secureboot.yml ================================================ --- - name: Create Secure Boot output directories ansible.builtin.file: path: "{{ item }}" state: directory with_items: - "{{ netbootxyz_root }}/ipxe/secureboot-x86_64" - "{{ netbootxyz_root }}/ipxe/secureboot-arm64" - name: Download iPXE Secure Boot archive ansible.builtin.get_url: url: "{{ ipxe_secureboot_archive_url }}" dest: "/tmp/ipxeboot.tar.gz" - name: Extract iPXE Secure Boot archive ansible.builtin.unarchive: src: "/tmp/ipxeboot.tar.gz" dest: "/tmp" remote_src: true - name: Copy x86_64 Secure Boot binaries to output directory ansible.builtin.copy: src: "/tmp/ipxeboot/x86_64-sb/{{ item }}" dest: "{{ netbootxyz_root }}/ipxe/secureboot-x86_64/{{ item }}" remote_src: true with_items: - ipxe.efi - ipxe-shim.efi - shimx64.efi - snponly.efi - snponly-shim.efi - name: Copy ARM64 Secure Boot binaries to output directory ansible.builtin.copy: src: "/tmp/ipxeboot/arm64-sb/{{ item }}" dest: "{{ netbootxyz_root }}/ipxe/secureboot-arm64/{{ item }}" remote_src: true with_items: - ipxe.efi - ipxe-shim.efi - shimaa64.efi - snponly.efi - snponly-shim.efi when: generate_disks_arm | default(false) | bool - name: Template autoexec.ipxe for x86_64 Secure Boot ansible.builtin.template: src: "disks/autoexec.ipxe.j2" dest: "{{ netbootxyz_root }}/ipxe/secureboot-x86_64/autoexec.ipxe" - name: Template autoexec.ipxe for ARM64 Secure Boot ansible.builtin.template: src: "disks/autoexec.ipxe.j2" dest: "{{ netbootxyz_root }}/ipxe/secureboot-arm64/autoexec.ipxe" when: generate_disks_arm | default(false) | bool - name: Generate Secure Boot x86_64 ISO image ansible.builtin.shell: | ./util/genfsimg \ -o {{ netbootxyz_root }}/ipxe/{{ bootloader_filename }}-sb.iso \ -s {{ netbootxyz_root }}/ipxe/secureboot-x86_64/autoexec.ipxe \ -e /tmp/ipxeboot/x86_64-sb/shimx64.efi \ /tmp/ipxeboot/x86_64-sb/ipxe.efi args: chdir: "{{ ipxe_source_dir }}/src" - name: Generate Secure Boot x86_64 USB image ansible.builtin.shell: | ./util/genfsimg \ -o {{ netbootxyz_root }}/ipxe/{{ bootloader_filename }}-sb.img \ -s {{ netbootxyz_root }}/ipxe/secureboot-x86_64/autoexec.ipxe \ -e /tmp/ipxeboot/x86_64-sb/shimx64.efi \ /tmp/ipxeboot/x86_64-sb/ipxe.efi args: chdir: "{{ ipxe_source_dir }}/src" - name: Generate Secure Boot ARM64 ISO image ansible.builtin.shell: | ./util/genfsimg \ -o {{ netbootxyz_root }}/ipxe/{{ bootloader_filename }}-sb-arm64.iso \ -s {{ netbootxyz_root }}/ipxe/secureboot-arm64/autoexec.ipxe \ -e /tmp/ipxeboot/arm64-sb/shimaa64.efi \ /tmp/ipxeboot/arm64-sb/ipxe.efi args: chdir: "{{ ipxe_source_dir }}/src" when: generate_disks_arm | default(false) | bool - name: Generate Secure Boot ARM64 USB image ansible.builtin.shell: | ./util/genfsimg \ -o {{ netbootxyz_root }}/ipxe/{{ bootloader_filename }}-sb-arm64.img \ -s {{ netbootxyz_root }}/ipxe/secureboot-arm64/autoexec.ipxe \ -e /tmp/ipxeboot/arm64-sb/shimaa64.efi \ /tmp/ipxeboot/arm64-sb/ipxe.efi args: chdir: "{{ ipxe_source_dir }}/src" when: generate_disks_arm | default(false) | bool - name: Copy autoexec.ipxe to ipxe root as standalone release asset ansible.builtin.copy: src: "{{ netbootxyz_root }}/ipxe/secureboot-x86_64/autoexec.ipxe" dest: "{{ netbootxyz_root }}/ipxe/autoexec.ipxe" remote_src: true - name: Remove Secure Boot directories after ISO/USB generation ansible.builtin.file: path: "{{ item }}" state: absent with_items: - "{{ netbootxyz_root }}/ipxe/secureboot-x86_64" - "{{ netbootxyz_root }}/ipxe/secureboot-arm64" - name: Clean up Secure Boot archive ansible.builtin.file: path: "{{ item }}" state: absent with_items: - "/tmp/ipxeboot.tar.gz" - "/tmp/ipxeboot" ================================================ FILE: roles/netbootxyz/tasks/generate_menus.yml ================================================ --- - name: Combine overrides with release defaults ansible.builtin.set_fact: _releases: "{{ releases | combine(release_overrides, recursive=True) }}" when: release_overrides is defined - name: Set releases with user overrides ansible.builtin.set_fact: releases: "{{ _releases }}" when: release_overrides is defined # PC BIOS utilities - name: Combine overrides with utilitiespcbios64 defaults ansible.builtin.set_fact: _utilitiespcbios64: "{{ utilitiespcbios64 | combine(utilitiespcbios64_overrides, recursive=True) }}" when: utilitiespcbios64_overrides is defined - name: Set utilitypcbios64 with user overrides ansible.builtin.set_fact: utilitiespcbios64: "{{ _utilitiespcbios64 }}" when: utilitiespcbios64_overrides is defined - name: Combine overrides with utilitiespcbios32 defaults ansible.builtin.set_fact: _utilitiespcbios32: "{{ utilitiespcbios32 | combine(utilitiespcbios32_overrides, recursive=True) }}" when: utilitiespcbios32_overrides is defined - name: Set utilitypcbios32 with user overrides ansible.builtin.set_fact: utilitiespcbios32: "{{ _utilitiespcbios32 }}" when: utilitiespcbios32_overrides is defined # EFI utilities - name: Combine overrides with utilitiesefi defaults ansible.builtin.set_fact: _utilitiesefi: "{{ utilitiesefi | combine(utilitiesefi_overrides, recursive=True) }}" when: utilitiesefi_overrides is defined - name: Set utilityefi with user overrides ansible.builtin.set_fact: utilitiesefi: "{{ _utilitiesefi }}" when: utilitiesefi_overrides is defined - name: Generate directories ansible.builtin.file: path: "{{ netbootxyz_root }}" state: directory - name: Set menu version ansible.builtin.set_fact: upstream_version: "{{ boot_version }}" when: - generate_version_file | bool - name: Generate version.ipxe for upstream ansible.builtin.template: src: "version.ipxe.j2" dest: "{{ netbootxyz_root }}/version.ipxe" when: - generate_version_file | bool - name: Generate netboot.xyz source files templates ansible.builtin.template: src: "{{ item.src }}" dest: "{{ netbootxyz_root }}/{{ item.path | regex_replace('.j2', '') }}" with_community.general.filetree: "{{ 'templates/menu/' }}" when: item.state == "file" - name: Generate local-vars.ipxe if enabled ansible.builtin.template: src: "local-vars.ipxe.j2" dest: "{{ netbootxyz_root }}/local-vars.ipxe" when: - generate_local_vars | bool - name: Retrieve pciids.ipxe ansible.builtin.get_url: url: "{{ pciids_url }}" dest: "{{ netbootxyz_root }}/pciids.ipxe" ================================================ FILE: roles/netbootxyz/tasks/generate_menus_custom.yml ================================================ --- - name: Generate directories ansible.builtin.file: path: "{{ item }}" state: directory with_items: - "{{ custom_templates_dir }}" - "{{ netbootxyz_root }}/custom" - name: Generate custom user menu templates ansible.builtin.template: src: "{{ item.src }}" dest: "{{ netbootxyz_root }}/custom/{{ item.path | regex_replace('.j2', '') }}" with_community.general.filetree: "{{ custom_templates_dir }}" when: item.state == "file" ================================================ FILE: roles/netbootxyz/tasks/generate_signatures.yml ================================================ --- - name: Gather list of source files ansible.builtin.command: ls {{ netbootxyz_root }} register: source_files - name: Create directories for signatures ansible.builtin.file: path: "{{ item }}" state: directory with_items: - "{{ sigs_dir }}" - name: Generate signatures for source files ansible.builtin.shell: | openssl cms -sign -binary -noattr -in {{ netbootxyz_root }}/{{ item }} \ -signer {{ codesign_cert_filename }} -inkey {{ codesign_key_filename }} -certfile {{ cert_file_filename }} -outform DER \ -out {{ sigs_dir }}/{{ item }}.sig args: chdir: "{{ cert_dir }}" with_items: - "{{ source_files.stdout_lines }}" ================================================ FILE: roles/netbootxyz/tasks/main.yml ================================================ --- - name: Print Bootloader Disks to Build ansible.builtin.debug: var: bootloader_disks - name: Generate menus ansible.builtin.include_tasks: generate_menus.yml when: - generate_menus | default(true) | bool - name: Generate custom menus ansible.builtin.include_tasks: generate_menus_custom.yml when: - custom_generate_menus | default(false) | bool - name: Generate iPXE bootloaders ansible.builtin.include_tasks: generate_disks.yml with_items: - "{{ bootloader_disks }}" loop_control: loop_var: bootloader_file when: - generate_disks | default(true) | bool - name: Generate checksums ansible.builtin.include_tasks: generate_checksums.yml when: - generate_checksums | default(true) | bool - name: Generate signatures ansible.builtin.include_tasks: generate_signatures.yml when: - generate_signatures | default(false) | bool ================================================ FILE: roles/netbootxyz/templates/checksums.txt.j2 ================================================ # {{ site_name }} bootloaders generated at {{ current_date.stdout }} # iPXE Commit: {{ ipxe_repo }}/commit/{{ ipxe_git_checkout.after }} {% for item in netboot_disks_stat.results %} {{ item.stdout }} {% endfor %} ================================================ FILE: roles/netbootxyz/templates/disks/autoexec.ipxe.j2 ================================================ #!ipxe # # {{ site_name }} - Secure Boot autoexec.ipxe # # This script is loaded automatically by iPXE v2.0.0+ Secure Boot # binaries from the same directory. It replaces the embedded script # used in self-compiled netboot.xyz bootloaders. # set esc:hex 1b set bold ${esc:string}[1m set boldoff ${esc:string}[22m set fg_gre ${esc:string}[32m set fg_cya ${esc:string}[36m set fg_whi ${esc:string}[37m set HTTPS_ERR HTTPS appears to have failed... attempting HTTP set HTTP_ERR HTTP has failed, localbooting... set site_name {{ site_name }} set boot_domain {{ boot_domain }} set ipxe_version ${version} set version {{ boot_version }} set conn_type https :start echo ${bold}${fg_gre}${site_name} - ${fg_whi}v${version} (Secure Boot)${boldoff} iseq ${site_name} netboot.xyz || echo ${bold}${fg_whi}Powered by ${fg_gre}netboot.xyz${fg_whi}${boldoff} prompt --key m --timeout 4000 Hit the ${bold}m${boldoff} key to open failsafe menu... && goto failsafe || goto dhcp :dhcp echo dhcp || goto netconfig goto menu :failsafe menu ${boot_domain} Failsafe Menu item localboot Boot to local drive item netconfig Manual network configuration item retry Retry boot item debug iPXE Debug Shell item reboot Reboot System choose failsafe_choice || exit goto ${failsafe_choice} :netconfig echo Network Configuration: echo Available interfaces... ifstat imgfree echo -n Set network interface number [0 for net0, defaults to 0]: ${} && read net isset ${net} || set net 0 echo -n IP: && read net${net}/ip echo -n Subnet mask: && read net${net}/netmask echo -n Gateway: && read net${net}/gateway echo -n DNS: && read dns ifopen net${net} echo Attempting chainload of ${boot_domain}... goto menu || goto failsafe :menu {% if bootloader_https_enabled | bool %} :menu_https set conn_type https goto menu_start {% endif %} {% if bootloader_http_enabled | bool %} :menu_http set conn_type http goto menu_start {% endif %} :menu_start isset ${netX/dns6} && goto menu_v6 || goto menu_v4 :menu_v6 isset ${netX/dns6_bak} && set netX/dns6 ${netX/dns6_bak} || set netX/dns6_bak ${netX/dns6} echo Attempting ${conn_type} boot over IPv6... chain --autofree ${conn_type}://${boot_domain}/menu.ipxe || echo ${conn_type} IPv6 failed... attempting IPv4... clear netX/dns6 :menu_v4 echo Attempting ${conn_type} boot over IPv4... chain --autofree ${conn_type}://${boot_domain}/menu.ipxe || echo ${conn_type} IPv4 failed... iseq ${conn_type} https && goto menu_http || goto localboot :localboot exit :retry goto start :reboot reboot goto start :debug echo Type "exit" to return to menu shell goto failsafe ================================================ FILE: roles/netbootxyz/templates/disks/netboot.xyz-gce.j2 ================================================ #!ipxe set esc:hex 1b set bold ${esc:string}[1m set boldoff ${esc:string}[22m set fg_gre ${esc:string}[32m set fg_cya ${esc:string}[36m set fg_whi ${esc:string}[37m set HTTPS_ERR HTTPS appears to have failed... attempting HTTP set HTTP_ERR HTTP has failed, localbooting... set ipxe_version ${version} set version {{ boot_version }} set ipxe_cloud_config gce :start echo ${bold}${fg_gre}netboot.xyz ${fg_whi}v${version} for ${fg_cya}Google Compute Engine${boldoff} prompt --key m --timeout 4000 Hit the ${bold}m${boldoff} key to open failsafe menu... && goto failsafe || goto dhcp :dhcp echo dhcp || goto netconfig goto menu :failsafe menu netboot.xyz Failsafe Menu item localboot Boot to local drive item netconfig Manual network configuration item vlan Manual VLAN configuration item retry Retry boot item debug iPXE Debug Shell item reboot Reboot System choose failsafe_choice || exit goto ${failsafe_choice} :netconfig echo Network Configuration: echo Available interfaces... ifstat imgfree echo -n Set network interface number [0 for net0, defaults to 0]: ${} && read net isset ${net} || set net 0 echo -n IP: && read net${net}/ip echo -n Subnet mask: && read net${net}/netmask echo -n Gateway: && read net${net}/gateway echo -n DNS: && read dns ifopen net${net} echo Attempting chainload of netboot.xyz... goto menu || goto failsafe :vlan echo VLAN Configuration: echo Available interfaces... ifstat imgfree echo -n Set network interface number [0 for net0, defaults to 0]: ${} && read net isset ${net} || set net 0 echo -n Set VLAN 802.1Q tag [0 to 4094]: ${} && read vlan vcreate --tag ${vlan} net${net} ifconf --configurator dhcp net${net}-${vlan} || echo DHCP failed trying manual && goto netvlan echo Attempting chainload of ${boot_domain}... goto menu || goto failsafe :netvlan echo -n IP: && read net${net}-${vlan}/ip echo -n Subnet mask: && read net${net}-${vlan}/netmask echo -n Gateway: && read net${net}-${vlan}/gateway echo -n DNS: && read dns ifopen net${net}-${vlan} echo Attempting chainload of ${boot_domain}... goto menu || goto failsafe :menu set conn_type https chain --autofree https://boot.netboot.xyz/menu.ipxe || echo ${HTTPS_ERR} sleep 5 set conn_type http chain --autofree http://boot.netboot.xyz/menu.ipxe || echo ${HTTP_ERR} goto localboot :localboot exit :retry goto start :reboot reboot goto start :debug echo Type "exit" to return to menu shell goto failsafe ================================================ FILE: roles/netbootxyz/templates/disks/netboot.xyz-metal.j2 ================================================ #!ipxe set esc:hex 1b set bold ${esc:string}[1m set boldoff ${esc:string}[22m set fg_gre ${esc:string}[32m set fg_red ${esc:string}[31m set fg_cya ${esc:string}[36m set fg_whi ${esc:string}[37m set HTTPS_ERR HTTPS appears to have failed... attempting HTTP set HTTP_ERR HTTP has failed, localbooting... set ipxe_version ${version} set version {{ boot_version }} set ipxe_cloud_config metal :start echo ${bold}${fg_gre}netboot.xyz ${fg_whi}v${version} for ${fg_red}metal.equinix.com${fg_whi}${boldoff} prompt --key m --timeout 4000 Hit the ${bold}m${boldoff} key to open failsafe menu... && goto failsafe || goto dhcp :dhcp echo dhcp || goto netconfig goto menu :failsafe menu netboot.xyz Failsafe Menu item localboot Boot to local drive item netconfig Manual network configuration item vlan Manual VLAN configuration item retry Retry boot item debug iPXE Debug Shell item reboot Reboot System choose failsafe_choice || exit goto ${failsafe_choice} :netconfig echo Network Configuration: echo Available interfaces... ifstat imgfree echo -n Set network interface number [0 for net0, defaults to 0]: ${} && read net isset ${net} || set net 0 echo -n IP: && read net${net}/ip echo -n Subnet mask: && read net${net}/netmask echo -n Gateway: && read net${net}/gateway echo -n DNS: && read dns ifopen net${net} echo Attempting chainload of netboot.xyz... goto menu || goto failsafe :vlan echo VLAN Configuration: echo Available interfaces... ifstat imgfree echo -n Set network interface number [0 for net0, defaults to 0]: ${} && read net isset ${net} || set net 0 echo -n Set VLAN 802.1Q tag [0 to 4094]: ${} && read vlan vcreate --tag ${vlan} net${net} ifconf --configurator dhcp net${net}-${vlan} || echo DHCP failed trying manual && goto netvlan echo Attempting chainload of ${boot_domain}... goto menu || goto failsafe :netvlan echo -n IP: && read net${net}-${vlan}/ip echo -n Subnet mask: && read net${net}-${vlan}/netmask echo -n Gateway: && read net${net}-${vlan}/gateway echo -n DNS: && read dns ifopen net${net}-${vlan} echo Attempting chainload of ${boot_domain}... goto menu || goto failsafe :menu set conn_type https chain --autofree https://boot.netboot.xyz/menu.ipxe || echo ${HTTPS_ERR} sleep 5 set conn_type http chain --autofree http://boot.netboot.xyz/menu.ipxe || echo ${HTTP_ERR} goto localboot :localboot exit :retry goto start :reboot reboot goto start :debug echo Type "exit" to return to menu shell goto failsafe ================================================ FILE: roles/netbootxyz/templates/disks/netboot.xyz.j2 ================================================ #!ipxe set esc:hex 1b set bold ${esc:string}[1m set boldoff ${esc:string}[22m set fg_gre ${esc:string}[32m set fg_cya ${esc:string}[36m set fg_whi ${esc:string}[37m set VARS_ERR Local vars file not found... attempting TFTP boot... set TFTP_ERR Local TFTP failed... attempting remote HTTPS set V6_ERR IPv6 appears to have failed... attempting IPv4... set HTTPS_ERR HTTPS appears to have failed... attempting HTTP set HTTP_ERR HTTP has failed, localbooting... set site_name {{ site_name }} set boot_domain {{ boot_domain }} set ipxe_version ${version} set version {{ boot_version }} set conn_type https set tftp-root-path / :start echo ${bold}${fg_gre}${site_name} - ${fg_whi}v${version}${boldoff} iseq ${site_name} netboot.xyz || echo ${bold}${fg_whi}Powered by ${fg_gre}netboot.xyz${fg_whi}${boldoff} prompt --key m --timeout 4000 Hit the ${bold}m${boldoff} key to open failsafe menu... && goto failsafe || goto dhcp :dhcp echo dhcp || goto netconfig isset ${next-server} && isset ${proxydhcp/next-server} && goto choose-tftp || set tftp-server ${next-server} && goto load-custom-ipxe :choose-tftp # Load "proxy settings" from root server chain tftp://${next-server}/local-vars.ipxe || echo ${VARS_ERR} # Check if the proxy-dhcp-vars script has made any usable command about how to progress with a next-server and a proxy-next-server being set isset ${use_proxydhcp_settings} && iseq ${use_proxydhcp_settings} true && goto set-next-server || prompt --key p --timeout 4000 DHCP proxy detected, press ${bold}p${boldoff} to boot from ${proxydhcp/next-server}... && set use_proxydhcp_settings true || set use_proxydhcp_settings false goto set-next-server :set-next-server iseq ${use_proxydhcp_settings} true && set tftp-server ${proxydhcp/next-server} || set tftp-server ${next-server} goto load-custom-ipxe :load-custom-ipxe isset ${tftp-server} && iseq ${filename} {{ bootloader_filename }}.kpxe && goto tftpmenu || isset ${tftp-server} && iseq ${filename} {{ bootloader_filename }}-undionly.kpxe && goto tftpmenu || isset ${tftp-server} && iseq ${filename} {{ bootloader_filename }}.efi && goto tftpmenu || isset ${tftp-server} && iseq ${filename} {{ bootloader_filename }}-snp.efi && goto tftpmenu || isset ${tftp-server} && iseq ${filename} {{ bootloader_filename }}-snponly.efi && goto tftpmenu || isset ${tftp-server} && iseq ${filename} {{ bootloader_filename }}-arm64.efi && goto tftpmenu || isset ${tftp-server} && iseq ${filename} ${tftp-root-path}{{ bootloader_filename }}.kpxe && goto tftpmenu || isset ${tftp-server} && iseq ${filename} ${tftp-root-path}{{ bootloader_filename }}-undionly.kpxe && goto tftpmenu || isset ${tftp-server} && iseq ${filename} ${tftp-root-path}{{ bootloader_filename }}.efi && goto tftpmenu || isset ${tftp-server} && iseq ${filename} ${tftp-root-path}{{ bootloader_filename }}-snp.efi && goto tftpmenu || isset ${tftp-server} && iseq ${filename} ${tftp-root-path}{{ bootloader_filename }}-snponly.efi && goto tftpmenu || isset ${tftp-server} && iseq ${filename} ${tftp-root-path}{{ bootloader_filename }}-arm64.efi && goto tftpmenu || goto menu :failsafe menu ${boot_domain} Failsafe Menu item localboot Boot to local drive item netconfig Manual network configuration item vlan Manual VLAN configuration item retry Retry boot item debug iPXE Debug Shell item reboot Reboot System choose failsafe_choice || exit goto ${failsafe_choice} :netconfig echo Network Configuration: echo Available interfaces... ifstat imgfree echo -n Set network interface number [0 for net0, defaults to 0]: ${} && read net isset ${net} || set net 0 echo -n IP: && read net${net}/ip echo -n Subnet mask: && read net${net}/netmask echo -n Gateway: && read net${net}/gateway echo -n DNS: && read dns ifopen net${net} echo Attempting chainload of ${boot_domain}... goto menu || goto failsafe :vlan echo VLAN Configuration: echo Available interfaces... ifstat imgfree echo -n Set network interface number [0 for net0, defaults to 0]: ${} && read net isset ${net} || set net 0 echo -n Set VLAN 802.1Q tag [0 to 4094]: ${} && read vlan vcreate --tag ${vlan} net${net} ifconf --configurator dhcp net${net}-${vlan} || echo DHCP failed trying manual && goto netvlan echo Attempting chainload of ${boot_domain}... goto menu || goto failsafe :netvlan echo -n IP: && read net${net}-${vlan}/ip echo -n Subnet mask: && read net${net}-${vlan}/netmask echo -n Gateway: && read net${net}-${vlan}/gateway echo -n DNS: && read dns ifopen net${net}-${vlan} echo Attempting chainload of ${boot_domain}... goto menu || goto failsafe :tftpmenu chain tftp://${tftp-server}/local-vars.ipxe || echo ${VARS_ERR} isset ${hostname} && chain --autofree tftp://${tftp-server}/HOSTNAME-${hostname}.ipxe || echo Custom boot by Hostname not found trying MAC... chain --autofree tftp://${tftp-server}/MAC-${mac:hexraw}.ipxe || echo Custom boot by MAC (hexraw) not found, attempting by MAC (hexhyp)... chain --autofree tftp://${tftp-server}/MAC-${mac:hexhyp}.ipxe || echo Custom boot by MAC (hexhyp) not found, booting default... chain --autofree tftp://${tftp-server}/menu.ipxe || echo ${TFTP_ERR} && goto menu :menu {% if bootloader_https_enabled | bool %} :menu_https set conn_type https goto menu_start {% endif %} {% if bootloader_http_enabled | bool %} :menu_http set conn_type http goto menu_start {% endif %} :menu_start isset ${netX/dns6} && goto menu_v6 || goto menu_v4 :menu_v6 isset ${netX/dns6_bak} && set netX/dns6 ${netX/dns6_bak} || set netX/dns6_bak ${netX/dns6} echo Attempting ${conn_type} boot over IPv6... chain --autofree ${conn_type}://${boot_domain}/menu.ipxe || echo ${conn_type} IPv6 failed... attempting IPv4... clear netX/dns6 :menu_v4 echo Attempting ${conn_type} boot over IPv4... chain --autofree ${conn_type}://${boot_domain}/menu.ipxe || echo ${conn_type} IPv4 failed... iseq ${conn_type} https && goto menu_http || goto localboot :localboot exit :retry goto start :reboot reboot goto start :debug echo Type "exit" to return to menu shell goto failsafe ================================================ FILE: roles/netbootxyz/templates/index.html.j2 ================================================ #!ipxe #### {{ boot_domain }} initial loader #### #### see https://netboot.xyz for more information #### {% if bootloader_https_enabled | bool %} set conn_type https chain --autofree https://{{ boot_domain }}/menu.ipxe || echo HTTPS failed... attempting HTTP... {% endif %} {% if bootloader_http_enabled | bool %} set conn_type http chain --autofree http://{{ boot_domain }}/menu.ipxe || echo HTTP failed, localbooting... {% endif %} exit {{ site_name }} BootLoaders - Powered by netboot.xyz
{% if index_title.stdout is defined %} {{ index_title.stdout }} {% else %}

{{ site_name }}

{% endif %}

Version: {{ boot_version }}
Powered by netboot.xyz

{% if generate_disks_hybrid == true %}

x86_64 Legacy and EFI Combined iPXE Bootloaders

{% for item in bootloaders.hybrid %} {% endfor %}
Type Bootloader Description
{{ item.type }} {{ bootloader_filename }}{{ item.output_bin }} {{ item.desc }}

Multi-arch (x86_64 and arm64) Legacy and EFI Combined iPXE Bootloaders

{% for item in bootloaders.multiarch %} {% endfor %}
Type Bootloader Description
{{ item.type }} {{ bootloader_filename }}{{ item.output_bin }} {{ item.desc }}
{% endif %} {% if generate_disks_legacy == true %}

x86_64 Legacy (PCBIOS) iPXE Bootloaders

{% for item in bootloaders.legacy %} {% endfor %}
Type Bootloader Description
{{ item.type }} {{ bootloader_filename }}{{ item.output_bin }} {{ item.desc }}
{% endif %} {% if generate_disks_efi == true %}

x86_64 UEFI iPXE Bootloaders

{% for item in bootloaders.uefi %} {% endfor %}
Type Bootloader Description
{{ item.type }} {{ bootloader_filename }}{{ item.output_bin }} {{ item.desc }}
{% endif %} {% if generate_disks_arm == true %}

ARM64 UEFI iPXE Bootloaders

{% for item in bootloaders.arm %} {% endfor %}
Type Bootloader Description
{{ item.type }} {{ bootloader_filename }}{{ item.output_bin }} {{ item.desc }}
{% endif %} {% if generate_disks_secureboot == true %}

x86_64 UEFI Secure Boot iPXE Bootloaders

{% for item in bootloaders.secureboot_x86_64 %} {% endfor %}
Type Bootloader Description
{{ item.type }} {{ bootloader_filename }}{{ item.output_bin }} {{ item.desc }}
{% if generate_disks_arm == true %}

ARM64 UEFI Secure Boot iPXE Bootloaders

{% for item in bootloaders.secureboot_arm64 %} {% endfor %}
Type Bootloader Description
{{ item.type }} {{ bootloader_filename }}{{ item.output_bin }} {{ item.desc }}
{% endif %} {% endif %} {% if generate_disks_rpi == true %}

Raspberry Pi iPXE Bootloaders

{% for item in bootloaders.rpi %} {% endfor %}
Type Bootloader Description
{{ item.type }} {{ bootloader_filename }}{{ item.output_bin }} {{ item.desc }}
{% endif %}

Checksums

SHA256 checksums

================================================ FILE: roles/netbootxyz/templates/local-vars.ipxe.j2 ================================================ #!ipxe ### used for adding local variables before loading the menu ### set to enable enable github custom menu #set github_user my_github_username # If a DHCP proxy server is found and this variable is set to true, the tftp server provided by the DHCP proxy will be used instead of the tftp server provided by the root DHCP # Please note that this variable is always read from the local-vars.ipxe onb the tftp server the root DHCP provided # If the variable isn't present at runtime, the user will be queried to press a key to boot from the proxy DHCP prtovided ftfp server #set use_proxydhcp_settings true ### Media Locations for Licensed Distros #set rhel_base_url http://my_rhel_mirror/rhel/ #set win_base_url http://my_windows_mirror/windows/ ### Sets the local live endpoint for the users local installation #set live_endpoint http://my_ip_address:8080 ### Sets the default boot timeout #set boot_timeout 300000 ================================================ FILE: roles/netbootxyz/templates/menu/4mlinux.ipxe.j2 ================================================ #!ipxe goto ${menu} || :live_menu set os 4MLinux menu ${os} - Current Arch [ ${arch} ] item --gap ${os} Versions {% for key, value in endpoints.items() | sort %} {% if value.os == "4mlinux" %} item {{ value.version }}-{{ value.flavor }} ${space} ${os} {{ value.version }} {{ value.flavor }} {% endif %} {% endfor %} choose version || goto exit goto ${version} {% for key, value in endpoints.items() | sort %} {% if value.os == "4mlinux" %} :{{ value.version }}-{{ value.flavor }} set url ${live_endpoint}{{ value.path }} goto boot {% endif %} {% endfor %} :boot imgfree kernel ${url}vmlinuz root=/dev/ram0 vga=normal {{ kernel_params }} initrd ${url}initrd boot :live_exit clear menu exit 0 ================================================ FILE: roles/netbootxyz/templates/menu/about.ipxe.j2 ================================================ #!ipxe set esc:hex 1b set bold ${esc:string}[1m set ital ${esc:string}[3m set under ${esc:string}[4m set boldoff ${esc:string}[22m set italoff ${esc:string}[23m set underoff ${esc:string}[24m set fs_bla ${esc:string}[30m set fg_red ${esc:string}[31m set fg_gre ${esc:string}[32m set fg_yel ${esc:string}[33m set fg_blu ${esc:string}[34m set fg_mag ${esc:string}[35m set fg_cya ${esc:string}[36m set fg_whi ${esc:string}[37m :netabout menu ${fg_cya}${bold}About netboot.xyz ${fg_whi}(v${version}) item about item about ${fg_gre}${bold}Thanks for using netboot.xyz! We'd love to hear your feedback. item about item --gap -- ${fg_whi}${bold}--- Community -------------------------------------------------------------- item about ${fg_cya}${bold}X (Twitter): ${fg_whi}${boldoff}@netbootxyz item about ${fg_mag}${bold}Discord: ${fg_whi}${boldoff}https://discord.gg/An6PA2a item about ${fg_cya}${bold}GitHub Repo: ${fg_whi}${boldoff}https://github.com/netbootxyz/netboot.xyz item about item --gap -- ${fg_whi}${bold}--- Support the Project ---------------------------------------------------- item about ${fg_gre}${bold}Open Collective: ${fg_whi}${boldoff}https://opencollective.com/netbootxyz item about ${fg_gre}${bold}Github Sponsors: ${fg_whi}${boldoff}https://github.com/sponsors/netbootxyz item about ${fg_yel}${bold}Official Store: ${fg_whi}${boldoff}https://store.netboot.xyz isset ${upstream_version} && goto display_version || goto skip_version :display_version item about iseq ${version} ${upstream_version} || item about ${fg_yel}${bold}>>> Update available: ${fg_whi}${boldoff}${upstream_version} :skip_version item --gap -- ${fg_whi}${bold}------------------------------------------------------------------------------- item exit ${fg_cya}${bold}<-- Back to main menu choose selected || goto exit goto ${selected} :about clear menu goto netabout :exit clear menu exit ================================================ FILE: roles/netbootxyz/templates/menu/almalinux.ipxe.j2 ================================================ #!ipxe # AlmaLinux Operating System # https://almalinux.org/ isset ${dhcp-server} && set ipparam ip=dhcp || set ipparam ip=${ip}::${gateway}:${netmask}:::none nameserver=${dns} set ipparam BOOTIF=${netX/mac} ${ipparam} goto ${menu} || :almalinux clear osversion set os {{ releases.almalinux.name }} set os_arch ${arch} iseq ${os_arch} x86_64 && set os_arch x86_64 || iseq ${os_arch} arm64 && set os_arch aarch64 || menu ${os} - ${os_arch} {% for item in releases.almalinux.versions %} item {{ item.code_name }} ${space} ${os} {{ item.name }} {% endfor %} isset ${osversion} || choose osversion || goto linux_menu echo ${cls} set dir ${almalinux_base_dir}/${osversion}/BaseOS/${os_arch}/os set repo ${almalinux_mirror}/${dir} goto boottype :boottype set ova ${os} ${osversion} menu ${os} ${os_arch} boot type item graphical ${ova} graphical installer item text ${ova} text based installer item rescue ${ova} rescue item kickstart ${ova} set kickstart url [ ${ks_url} ] isset ${bt} || choose bt || goto almalinux echo ${cls} iseq ${bt} text && goto text || iseq ${bt} rescue && goto rescue || iseq ${bt} kickstart && goto kickstart || iseq ${bt} kickstart_device && goto kickstart_device || goto bootos_images :graphical set install_mode inst.graphical || goto bootos_images :text set install_mode inst.text || goto bootos_images :rescue set params inst.rescue || goto bootos_images :kickstart echo -n Specify kickstart URL for ${os} ${osversion}: && read ks_url set params inst.ks=${ks_url} || clear bt goto boottype :bootos_images imgfree kernel ${almalinux_mirror}/${dir}/images/pxeboot/vmlinuz inst.repo=${repo} ${install_mode} ${params} ${ipparam} {{ kernel_params }} initrd ${almalinux_mirror}/${dir}/images/pxeboot/initrd.img echo echo MD5sums: md5sum vmlinuz initrd.img boot goto linux_menu :linux_menu clear menu exit 0 ================================================ FILE: roles/netbootxyz/templates/menu/alpinelinux.ipxe.j2 ================================================ #!ipxe # Alpine Linux # https://alpinelinux.org isset ${dhcp-server} && set ipparam ip=dhcp || set ipparam ip=${ip}::${gateway}:${netmask}::::${dns} goto ${menu} :alpinelinux clear alpine_version set os {{ releases.alpinelinux.name }} set os_arch ${arch} iseq ${os_arch} x86_64 && set os_arch x86_64 || iseq ${os_arch} i386 && set os_arch x86 || iseq ${os_arch} arm64 && set os_arch aarch64 || menu ${os} - ${os_arch} item --gap Releases {% for item in releases.alpinelinux.versions %} item {{ item.code_name }} ${space} ${os} {{ item.name }} {% endfor %} choose alpine_version || goto alpine_exit goto boot :boot set base-url ${alpinelinux_mirror} set dir ${alpinelinux_base_dir}/${alpine_version}/releases/${os_arch}/netboot set repo-url ${alpinelinux_mirror}/${alpinelinux_base_dir}/${alpine_version}/main imgfree kernel ${base-url}/${dir}/vmlinuz-lts ${ipparam} alpine_repo=${repo-url} modules=loop,squashfs modloop=${base-url}/${dir}/modloop-lts quiet nomodeset {{ kernel_params }} initrd ${base-url}/${dir}/initramfs-lts echo echo MD5sums: md5sum vmlinuz-lts initramfs-lts boot :alpine_exit clear menu exit 0 ================================================ FILE: roles/netbootxyz/templates/menu/archlinux.ipxe.j2 ================================================ #!ipxe # Arch Linux Operating System # http://www.archlinux.org set os_arch ${arch} iseq ${os_arch} x86_64 && set os_arch x86_64 || iseq ${os_arch} i386 && set os_arch i686 || isset ${dhcp-server} || goto static_ip set ipparam BOOTIF=${netX/mac} ip=dhcp set real_archlinux_mirror ${archlinux_mirror} goto goto_menu :static_ip # Arch Linux cannot use DNS if booted with a static IP # See https://bugs.archlinux.org/task/63174 # Remove this hack when the above bug is properly resolved nslookup real_archlinux_mirror ${archlinux_mirror} set ipparam BOOTIF=${netX/mac} ip=${ip}::${gateway}:${netmask} :goto_menu goto ${menu} || :archlinux set os {{ releases.archlinux.name }} clear arch_version menu ${os} - ${arch} item --gap Latest Releases {% for item in releases.archlinux.versions %} item {{ item.code_name }} ${space} ${os} {{ item.name }} {% endfor %} choose arch_version || goto archlinux_exit iseq ${os_arch} amd64 && goto boot || iseq ${os_arch} i686 && goto boot32 || :boot imgfree set dir ${archlinux_base_dir}/iso/${arch_version}/arch/boot set params archiso_http_srv=http://${real_archlinux_mirror}/${archlinux_base_dir}/iso/${arch_version}/ archisobasedir=arch cms_verify=y ${ipparam} net.ifnames=0 {{ kernel_params }} kernel http://${archlinux_mirror}/${dir}/${os_arch}/vmlinuz-linux ${params} initrd http://${archlinux_mirror}/${dir}/${os_arch}/initramfs-linux.img echo echo MD5sums: md5sum vmlinuz-linux initramfs-linux.img boot goto archlinux_exit :boot32 {% for key, value in endpoints.items() | sort %} {% if key == "archlinux-32" %} set arch32_url ${live_endpoint}{{ value.path }} {% endif %} {% endfor %} imgfree set params archiso_http_srv=${arch32_url} archisobasedir=arch checksum=y ${ipparam} net.ifnames=0 {{ kernel_params }} kernel ${arch32_url}vmlinuz-linux ${ipparam} ${params} initrd ${arch32_url}initramfs-linux.img echo echo MD5sums: md5sum vmlinuz-linux initramfs-linux.img boot goto archlinux_exit :archlinux_exit clear menu exit 0 ================================================ FILE: roles/netbootxyz/templates/menu/blackarch.ipxe.j2 ================================================ #!ipxe # BlackArch Linux Operating System # https://blackarch.org/ goto ${menu} :blackarch set os {{ releases.blackarch.name }} set ipparam BOOTIF=${netX/mac} ip=dhcp net.ifnames=0 menu ${os} Installers item --gap The Default login is root/blackarch item --gap Run blackarch-install once logged in {% for item in releases.blackarch.versions %} item {{ item.code_name }} ${space} ${os} {{ item.name }} {% endfor %} choose blackarch_version || goto blackarch_exit goto blackarch_boot :blackarch_boot imgfree set url ${live_endpoint}{{ endpoints['blackarch-installer'].path }} kernel ${url}vmlinuz archisobasedir=blackarch ${ipparam} archiso_http_srv=${url} {{ kernel_params }} initrd ${url}initrd boot goto blackarch_exit :blackarch_exit clear menu exit 0 ================================================ FILE: roles/netbootxyz/templates/menu/boot.cfg.j2 ================================================ #!ipxe :global_vars # set site name set site_name {{ site_name }} # set boot domain set boot_domain {{ boot_domain }} # set location of memdisk set memdisk {{ memdisk_location }} # set location of custom netboot.xyz live assets, override in local-vars.ipxe isset ${live_endpoint} || set live_endpoint {{ live_endpoint }} # signature check enabled? set sigs_enabled {{ sigs_enabled | default(false) | bool | lower }} # set location of signatures for sources set sigs {{ sigs_location }} # set location of latest iPXE iseq ${platform} efi && set ipxe_disk netboot.xyz-snponly.efi || set ipxe_disk netboot.xyz-undionly.kpxe # set default boot timeout isset ${boot_timeout} || set boot_timeout {{ boot_timeout }} ################## # official mirrors ################## :mirrors {% for key, value in releases.items() | sort(attribute='1.name') %} {% if value.mirror is defined and value.base_dir is defined %} ### {{ value.name }} set {{ key }}_mirror {{ value.mirror }} set {{ key }}_base_dir {{ value.base_dir }} {% endif %} {% endfor %} ################################################# # determine architectures and enable menu options ################################################# :architectures set menu_linux 1 set menu_bsd 1 set menu_unix 1 set menu_freedos 1 set menu_live 1 set menu_pci 1 set menu_windows 1 set menu_utils 1 iseq ${arch} i386 && goto i386 || iseq ${arch} x86_64 && goto x86_64 || iseq ${arch} arm64 && goto arm64 || goto architectures_end :x86_64 set menu_linux_i386 0 iseq ${platform} efi && goto efi || goto architectures_end :i386 set menu_linux 0 set menu_linux_i386 1 set menu_bsd 1 set menu_unix 0 set menu_freedos 1 set menu_live 0 set menu_windows 0 set menu_utils 1 iseq ${platform} efi && goto efi || goto architectures_end :arm64 set menu_linux 0 set menu_linux_arm 1 set menu_unix 0 set menu_freedos 0 set menu_live 0 set menu_live_arm 1 set menu_windows 0 set menu_utils 0 set menu_utils_arm 1 set menu_pci 0 iseq ${platform} efi && goto efi || goto architectures_end :efi set menu_bsd 1 set menu_freedos 0 set menu_unix 0 set menu_pci 0 goto architectures_end :architectures_end goto clouds ################################### # set iPXE cloud provider specifics ################################### :clouds iseq ${ipxe_cloud_config} gce && goto gce || iseq ${ipxe_cloud_config} metal && goto metal || iseq ${ipxe_cloud_config} packet && goto metal || goto clouds_end :gce set cmdline console=ttyS0,115200n8 goto clouds_end :metal iseq ${arch} i386 && goto metal_x86_64 || iseq ${arch} x86_64 && goto metal_x86_64 || iseq ${arch} arm64 && goto metal_arm64 || goto clouds_end :metal_x86_64 set cmdline console=ttyS1,115200n8 iseq ${platform} efi && set ipxe_disk netboot.xyz-metal-snp.efi || set ipxe_disk netboot.xyz-metal.kpxe set menu_linux_i386 0 set menu_freedos 0 set menu_windows 0 iseq ${platform} efi && set menu_pci 0 || goto clouds_end :metal_arm64 set cmdline console=ttyAMA0,115200 set ipxe_disk netboot.xyz-metal-arm64-snp.efi set menu_bsd 1 set menu_freedos 0 set menu_live 0 set menu_windows 0 set menu_utils 0 set menu_pci 0 goto clouds_end :clouds_end goto end :end exit ================================================ FILE: roles/netbootxyz/templates/menu/bsd.ipxe.j2 ================================================ #!ipxe goto ${menu} || :bsd_menu menu BSD Installers - Current Arch [ ${arch} ] # BSD based systems item --gap BSD Based Operating Systems {% for key, value in releases.items() | sort(attribute='1.name') %} {% if value.enabled is defined and value.menu == "bsd" and value.enabled | bool %} {% if key == "freebsd" %} iseq ${platform} efi || item {{ key }} ${space} {{ value.name }} {% else %} item {{ key }} ${space} {{ value.name }} {% endif %} {% endif %} {% endfor %} choose menu || goto bsd_exit echo ${cls} goto ${menu} || iseq ${sigs_enabled} true && goto verify_sigs || goto change_menu :verify_sigs imgverify ${menu}.ipxe ${sigs}${menu}.ipxe.sig || goto error goto change_menu :change_menu chain ${menu}.ipxe || goto error goto bsd_menu :bsd_exit clear menu exit 0 ================================================ FILE: roles/netbootxyz/templates/menu/centos.ipxe.j2 ================================================ #!ipxe # CentOS Stream # http://www.centos.org isset ${dhcp-server} && set ipparam ip=dhcp || set ipparam ip=${ip}::${gateway}:${netmask}:::none nameserver=${dns} set ipparam BOOTIF=${netX/mac} ${ipparam} goto ${menu} || :centos clear osversion set os {{ releases.centos.name }} set os_arch ${arch} iseq ${os_arch} x86_64 && set os_arch x86_64 || iseq ${os_arch} arm64 && set os_arch aarch64 || menu ${os} - ${os_arch} {% for item in releases.centos.versions %} item {{ item.code_name }} ${space} ${os} {{ item.name }} {% endfor %} isset ${osversion} || choose osversion || goto linux_menu echo ${cls} set dir ${centos_base_dir}/${osversion}/BaseOS/${os_arch}/os || set repo ${centos_mirror}/${dir} goto boottype :boottype set ova ${os} ${osversion} menu ${os} ${os_arch} boot type item graphical ${ova} graphical installer item text ${ova} text based installer item rescue ${ova} rescue item kickstart ${ova} set kickstart url [ ${ks_url} ] isset ${bt} || choose bt || goto centos echo ${cls} iseq ${bt} text && goto text || iseq ${bt} rescue && goto rescue || iseq ${bt} kickstart && goto kickstart || iseq ${bt} kickstart_device && goto kickstart_device || goto bootos_images :graphical set install_mode inst.graphical || goto bootos_images :text set install_mode inst.text || goto bootos_images :rescue set params inst.rescue || goto bootos_images :kickstart echo -n Specify kickstart URL for ${os} ${osversion}: && read ks_url set params inst.ks=${ks_url} || clear bt goto boottype :bootos_images imgfree kernel ${centos_mirror}/${dir}/images/pxeboot/vmlinuz inst.repo=${repo} ${install_mode} ${params} ${ipparam} {{ kernel_params }} initrd ${centos_mirror}/${dir}/images/pxeboot/initrd.img echo echo MD5sums: md5sum vmlinuz initrd.img boot goto linux_menu :linux_menu clear menu exit 0 ================================================ FILE: roles/netbootxyz/templates/menu/clonezilla.ipxe.j2 ================================================ #!ipxe goto ${menu} || :live_menu set os_arch ${arch} iseq ${os_arch} x86_64 && set os_arch amd64 || iseq ${os_arch} i386 && set os_arch i686 || set os Clonezilla menu ${os} item --gap ${os} Versions item debian ${space} ${os} Debian Based iseq ${os_arch} amd64 && item ubuntu ${space} ${os} Ubuntu Based || choose live_version || goto live_exit menu ${os} ${live_version} - ${os_arch} item --gap ${os} Flavors goto ${live_version} :debian {% for key, value in endpoints.items() %} {% if value.os == "clonezilla" and "debian" in key %} iseq ${os_arch} {{ value.arch }} && item {{ value.path }} ${space} {{ value.os | title }} {{ value.version | title }} {{ value.flavor | title }} || {% endif %} {% endfor %} choose path || goto live_menu goto clonezilla-boot :ubuntu {% for key, value in endpoints.items() %} {% if value.os == "clonezilla" and "ubuntu" in key %} iseq ${os_arch} {{ value.arch }} && item {{ value.path }} ${space} {{ value.os | title }} {{ value.version | title }} {{ value.flavor | title }} || {% endif %} {% endfor %} choose path || goto live_menu goto clonezilla-boot :clonezilla-boot imgfree set url ${live_endpoint}${path} kernel ${url}vmlinuz boot=live username=user union=overlay config components noswap edd=on nomodeset ocs_live_run="ocs-live-general" ocs_live_batch=no net.ifnames=0 nosplash noprompt fetch=${url}filesystem.squashfs {{ kernel_params }} initrd ${url}initrd boot :live_exit clear menu exit 0 ================================================ FILE: roles/netbootxyz/templates/menu/coreos.ipxe.j2 ================================================ #!ipxe # Fedora CoreOS # https://getfedora.org/coreos/ # https://github.com/coreos/coreos-installer/blob/master/README.md#installing-from-pxe goto ${menu} :coreos set os {{ releases.coreos.name }} set os_arch ${arch} iseq ${os_arch} x86_64 && set os_arch x86_64 || iseq ${os_arch} arm64 && set os_arch aarch64 || isset ${install_device} || set install_device unset isset ${ignition_url} || set ignition_url skip menu ${os} - ${os_arch} item --gap ${os}: {% for item in releases.coreos.versions %} item {{ item.code_name }} ${space} ${os} {{ item.name }} {% endfor %} item install_dev ${space} Set install device (e.g. /dev/sda): ${install_device} item ignition_config ${space} Set ignition config url: ${ignition_url} choose --default ${core_version} core_version || goto coreos_exit echo ${cls} iseq ${core_version} ignition_config && goto ignition_config || iseq ${core_version} install_dev && goto install_dev || goto core_boot || goto coreos_exit :core_boot {% for item in releases.coreos.versions %} iseq ${core_version} {{ item.code_name }} && set coreos_channel {{ item.name }} || {% endfor %} set base_url ${coreos_mirror}/${coreos_base_dir}/${coreos_channel}/builds set build_version ${core_version} imgfree kernel ${base_url}/${build_version}/${os_arch}/fedora-coreos-${build_version}-live-kernel.${os_arch} ip=dhcp rd.neednet=1 coreos.inst.install_dev=${install_device} coreos.inst.ignition_url=${ignition_url} coreos.live.rootfs_url=${base_url}/${build_version}/${os_arch}/fedora-coreos-${build_version}-live-rootfs.${os_arch}.img {{ kernel_params }} initrd ${base_url}/${build_version}/${os_arch}/fedora-coreos-${build_version}-live-initramfs.${os_arch}.img boot goto coreos_exit :install_dev echo -n Selected install device will be overwritten, echo -n please ensure you know what are you doing... echo -n Please set desired install device: && read install_device clear menu goto coreos :ignition_config echo -n Please set Ignition Configuration URL: && read ignition_url clear menu goto coreos :coreos_exit clear menu exit 0 ================================================ FILE: roles/netbootxyz/templates/menu/dban.ipxe.j2 ================================================ #!ipxe goto ${menu} || :dban_menu menu DBAN {{ endpoints.dban.version }} (Darik's Boot and Nuke) set kernel_url ${live_endpoint}{{ endpoints.dban.path }}DBAN.BZI item --gap THIS SOFTWARE DESTROYS DATA item --gap EVERY BOOT OPTION IS DESTRUCTIVE item --gap DO NOT PROCEED IF YOU DO NOT KNOW WHAT THIS IS item dban_exit ${space} Go Back item dban_options ${space} Proceed I know what I am doing choose menu || goto dban_exit goto ${menu} :dban_options clear menu menu DBAN {{ endpoints.dban.version }} (Darik's Boot and Nuke) item --gap Choose a wipe method: item dodshort ${space} Wipe all disks with the short DoD 5220.22-M method item dod522022m ${space} Wipe all disks with the DoD 5220.22-M method item dod3pass ${space} Wipe all disks with the DoD 5220.22-M method (3 pass) item ops2 ${space} Wipe all disks with the RCMP TSSIT OPS-II method item gutmann ${space} Wipe all disks with the Gutmann method item prng ${space} Wipe all disks with the PRNG Stream method item quick ${space} Wipe all disks with the Quick Erase method choose nuke_method || goto dban_exit goto dban_boot :dban_boot imgfree kernel ${kernel_url} nuke="dwipe --autonuke --method ${nuke_method}" silent vga=785 ${cmdline} boot :dban_exit clear menu exit 0 ================================================ FILE: roles/netbootxyz/templates/menu/debian.ipxe.j2 ================================================ #!ipxe # Debian Operating System # http://www.debian.org goto ${menu} :debian set os Debian set os_arch ${arch} iseq ${os_arch} x86_64 && set os_arch amd64 || iseq ${os_arch} i386 && set os_arch i386 || iseq ${os_arch} arm64 && set os_arch arm64 || clear debian_version clear older_release menu ${os} - ${os_arch} item --gap Latest Releases {% for item in releases.debian.versions.stable %} item {{ item.code_name }} ${space} ${os} {{ item.name }} {% endfor %} item --gap Testing Releases {% for item in releases.debian.versions.testing %} item {{ item.code_name }} ${space} ${os} {{ item.name }} {% endfor %} item --gap Older Releases item older_release ${space} Set release codename... choose debian_version || goto debian_exit iseq ${debian_version} older_release && goto older_release || goto mirrorcfg :older_release set older_release true set debian_mirror {{ releases.debian.archive_mirror }} echo Setting mirror to ${debian_mirror} clear debian_version echo -n Please set enter code name of release: ${} && read debian_version set dir ${debian_base_dir}/dists/${debian_version}/main/installer-${os_arch}/current/images/netboot/ goto deb_boot_type :mirrorcfg set debian_mirror ${debian_mirror} set mirrorcfg mirror/suite=${debian_version} set dir ${debian_base_dir}/dists/${debian_version}/main/installer-${os_arch}/current/images/netboot/ goto deb_boot_type :deb_boot_type menu ${os} [${debian_version}] Installer item --gap Install types item text ${space} Text Based Install item graphical ${space} Graphical Based Install item rescue ${space} Rescue Mode item expert ${space} Expert Install item preseed ${space} Specify preseed url... choose --default ${type} type || goto debian echo ${cls} goto deb_${type} :deb_rescue set install_params rescue/enable=true goto deb_text :deb_expert set install_params priority=low goto deb_text :deb_preseed echo -n Specify preseed URL for ${os} ${debian_version}: && read preseedurl set install_params auto=true priority=critical preseed/url=${preseedurl} goto deb_text :deb_text set dir ${dir}${menu}-installer/${os_arch} goto deb_boot :deb_graphical set dir ${dir}gtk/${menu}-installer/${os_arch} set install_params vga=788 goto deb_boot :deb_boot imgfree kernel ${debian_mirror}/${dir}/linux ${install_params} ${netcfg} ${mirrorcfg} {{ kernel_params }} initrd ${debian_mirror}/${dir}/initrd.gz echo echo MD5sums: md5sum linux initrd.gz iseq ${os_arch} amd64 && shim ${debian_mirror}/${dir}/bootnetx64.efi || iseq ${os_arch} arm64 && shim ${debian_mirror}/${dir}/bootnetaa64.efi || boot :debian_exit clear menu exit 0 ================================================ FILE: roles/netbootxyz/templates/menu/devuan.ipxe.j2 ================================================ #!ipxe # Devuan Operating System # http://www.devuan.org goto ${menu} :devuan set os Devuan set os_arch ${arch} iseq ${os_arch} x86_64 && set os_arch amd64 || clear devuan_version clear older_release menu ${os} - ${os_arch} item --gap Latest Releases {% for item in releases.devuan.versions.stable %} item {{ item.code_name }} ${space} ${os} {{ item.name }} {% endfor %} item --gap Testing Releases {% for item in releases.devuan.versions.testing %} item {{ item.code_name }} ${space} ${os} {{ item.name }} {% endfor %} choose devuan_version || goto devuan_exit goto mirrorcfg :mirrorcfg set mirrorcfg mirror/suite=${devuan_version} set dir ${devuan_base_dir}/dists/${devuan_version}/main/installer-${os_arch}/current/images/netboot/ goto devuan_boot_type :devuan_boot_type menu ${os} [${devuan_version}] Installer item --gap Install types item text ${space} Text Based Install item graphical ${space} Graphical Based Install item rescue ${space} Rescue Mode item expert ${space} Expert Install item preseed ${space} Specify preseed url... choose --default ${type} type || goto devuan echo ${cls} goto devuan_${type} :devuan_rescue set install_params rescue/enable=true goto devuan_text :devuan_expert set install_params priority=low goto devuan_text :devuan_preseed echo -n Specify preseed URL for ${os} ${devuan_version}: && read preseedurl set install_params auto=true priority=critical preseed/url=${preseedurl} goto devuan_text :devuan_text set dir ${dir}debian-installer/${os_arch} goto devuan_boot :devuan_graphical set dir ${dir}gtk/debian-installer/${os_arch} set install_params vga=788 goto devuan_boot :devuan_boot imgfree echo Boot parameters: ${install_params} -- quiet ${params} kernel ${devuan_mirror}/${dir}/linux ${install_params} ${mirrorcfg} -- quiet ${params} {{ kernel_params }} initrd ${devuan_mirror}/${dir}/initrd.gz echo echo MD5sums: md5sum linux initrd.gz boot :devuan_exit clear menu exit 0 ================================================ FILE: roles/netbootxyz/templates/menu/endeavouros.ipxe.j2 ================================================ #!ipxe goto ${menu} || :live_menu set os EndeavourOS menu ${os} set ipparam BOOTIF=${netX/mac} ip=dhcp net.ifnames=0 item --gap ${os} Versions {% for key, value in endpoints.items() | sort %} {% if value.os == "endeavouros" %} item {{ value.version }} ${space} ${os} {{ value.version }} {% endif %} {% endfor %} choose live_version || goto live_exit goto ${live_version} {% for key, value in endpoints.items() | sort %} {% if value.os == "endeavouros" %} :{{ value.version }} set url ${live_endpoint}{{ value.path }} goto boot {% endif %} {% endfor %} :boot imgfree kernel ${url}vmlinuz archisobasedir=arch ${ipparam} archiso_http_srv=${url} {{ kernel_params }} initrd ${url}initrd boot :live_exit clear menu exit 0 ================================================ FILE: roles/netbootxyz/templates/menu/fedora.ipxe.j2 ================================================ #!ipxe # Fedora Operating System # https://getfedora.org/ isset ${dhcp-server} && set ipparam ip=dhcp || set ipparam ip=${ip}::${gateway}:${netmask}:::none nameserver=${dns} set ipparam BOOTIF=${netX/mac} ${ipparam} goto ${menu} || :fedora clear osversion clear sku_type clear ova clear bt set os {{ releases.fedora.name }} set os_arch ${arch} iseq ${os_arch} x86_64 && set os_arch x86_64 || iseq ${os_arch} arm64 && set os_arch aarch64 || menu ${os} - ${os_arch} item --gap Latest Releases {% for item in releases.fedora.versions %} item {{ item.code_name }} ${space} ${os} {{ item.name }} {% endfor %} iseq ${os_arch} x86_64 && item rawhide ${space} ${os} rawhide || isset ${osversion} || choose osversion || goto linux_menu set ova ${os} ${osversion} goto product_sku :product_sku menu ${os} ${os_arch} sku type item Everything ${ova} Everything item Server ${ova} Server item Kinoite ${ova} Kinoite item Onyx ${ova} Onyx item Silverblue ${ova} Silverblue item Sericea ${ova} Sericea isset ${sku_type} || choose sku_type || goto fedora set dir ${fedora_base_dir}/releases/${osversion}/${sku_type}/${os_arch}/os iseq ${osversion} rawhide && set dir ${fedora_base_dir}/development/${osversion}/${sku_type}/${os_arch}/os || set ova ${ova} ${sku_type} echo ${cls} goto boottype :boottype menu ${os} ${os_arch} boot type item graphical ${ova} graphical install item text ${ova} text install item rescue ${ova} rescue item kickstart ${ova} set kickstart url [ ${ks_url} ] isset ${bt} || choose bt || goto fedora echo ${cls} iseq ${bt} normal && goto boot || goto ${bt} :graphical set install_mode inst.graphical || goto bootos_images :text set install_mode inst.text || goto bootos_images :rescue set params inst.rescue || goto bootos_images :kickstart echo -n Specify kickstart URL for ${os} ${osversion}: && read ks_url set params inst.ks=${ks_url} || clear bt goto boottype :bootos_images imgfree kernel ${fedora_mirror}/${dir}/images/pxeboot/vmlinuz inst.repo=${fedora_mirror}/${dir} ${install_mode} ${params} ${ipparam} {{ kernel_params }} initrd ${fedora_mirror}/${dir}/images/pxeboot/initrd.img echo echo MD5sums: md5sum vmlinuz initrd.img boot goto linux_menu :linux_menu clear menu exit 0 ================================================ FILE: roles/netbootxyz/templates/menu/flatcar.ipxe.j2 ================================================ #!ipxe # Flatcar Container Linux # https://flatcar-linux.org/ # For further info on: # iPXE and flatcar Container Linux: https://www.flatcar.org/docs/latest/installing/bare-metal/booting-with-ipxe/ # Setting up Ignition: https://www.flatcar.org/docs/latest/installing/bare-metal/installing-to-disk/ # 64-bit only goto ${menu} :flatcar set os {{ releases.flatcar.name }} set os_arch ${arch} iseq ${os_arch} x86_64 && set os_arch amd64 || iseq ${os_arch} arm64 && set os_arch arm64 || menu ${os} - Current Arch [ ${os_arch} ] item --gap ${os} {% for item in releases.flatcar.versions %} item {{ item.code_name }} ${space} ${os} {{ item.name }} {% endfor %} item ignition_config ${space} Set ignition.config.url: ${ignition.config.url} choose --default ${menu} menu || goto flatcar_exit echo ${cls} goto ${menu} || goto flatcar_exit :stable :beta :alpha :edge set release ${menu} set base-url https://flatcar.cdn.cncf.io/${release}/${os_arch}-usr/current kernel ${base-url}/flatcar_production_pxe.vmlinuz ${flatcar_firstboot} ${flatcar_params} flatcar.autologin=tty1 flatcar.autologin=ttyS0 initrd=flatcar_production_pxe_image.cpio.gz ${cmdline} initrd ${base-url}/flatcar_production_pxe_image.cpio.gz boot goto flatcar_exit :ignition_config echo -n Please set Ignition URL: && read ignition.config.url set flatcar_params ignition.config.url=${ignition.config.url} set flatcar_firstboot flatcar.first_boot=1 clear menu goto flatcar :flatcar_exit clear menu exit 0 ================================================ FILE: roles/netbootxyz/templates/menu/freebsd.ipxe.j2 ================================================ #!ipxe # FreeBSD Operating System # http://www.freebsd.org :freebsd_menu set os {{ releases.freebsd.name }} menu ${os} {% for key, value in endpoints.items() | sort %} {% if value.os == "freebsd" %} item {{ value.path }} ${space} ${os} {{ value.version }} {% endif %} {% endfor %} choose ver || goto freebsd_exit goto type_select :type_select menu ${os} item default.img ${space} Default item special-edition.img ${space} Special Edition choose type || goto freebsd_exit goto boot_freebsd :boot_freebsd imgfree echo This loads an mfsbsd installer (http://mfsbsd.vx.sk/). echo Root password for all images: mfsroot echo You'll need to configure networking manually for the installer disk as echo it uses dhcp by default: echo ifconfig xn0 inet netmask 255.255.255.0 echo route delete default; route add default echo echo "nameserver x.x.x.x" > /etc/resolv.conf echo Once network is configured, you can launch the usual installer: echo bsdinstall initrd ${live_endpoint}${ver}${type} chain ${memdisk} harddisk raw exit :freebsd_exit clear menu exit 0 ================================================ FILE: roles/netbootxyz/templates/menu/freedos.ipxe.j2 ================================================ #!ipxe # FreeDOS Operating System # http://www.freedos.org :freedos_menu set os {{ releases.freedos.name }} menu ${os} item --gap ${os} {% for item in releases.freedos.versions %} item {{ item.code_name }} ${space} ${os} {{ item.name }} {% endfor %} choose freedos_version || goto freedos_exit echo ${cls} goto freedos_install || goto freedos_exit :freedos_install imgfree kernel ${memdisk} initrd ${freedos_mirror}/${freedos_base_dir}/${freedos_version}.zip boot :freedos_exit clear menu exit 0 ================================================ FILE: roles/netbootxyz/templates/menu/gentoo.ipxe.j2 ================================================ #!ipxe # Gentoo Operating System # http://www.gentoo.org :gentoo clear gentoo_version set os {{ releases.gentoo.name }} set os_arch ${arch} iseq ${os_arch} x86_64 && set os_arch amd64 || iseq ${os_arch} i386 && set os_arch x86 || iseq ${os_arch} arm64 && set os_arch arm64 || menu ${os} - Current Arch [ ${os_arch} ] item --gap ${os} Versions {% for key, value in endpoints.items() | sort %} {% if value.os == "gentoo" %} iseq ${os_arch} {{ value.arch }} && item {{ value.version }}_{{ value.arch }} ${space} ${os} {{ value.version }} - {{ value.arch }} || {% endif %} {% endfor %} choose gentoo_version || goto gentoo_exit goto ${gentoo_version} {% for key, value in endpoints.items() | sort %} {% if value.os == "gentoo" %} :{{ value.version }}_{{ value.arch }} set url ${live_endpoint}{{ value.path }} goto boot {% endif %} {% endfor %} :boot imgfree kernel ${url}vmlinuz ip=dhcp root=/dev/ram0 init=/linuxrc loop=/image.squashfs looptype=squashfs cdroot=1 {{ kernel_params }} initrd ${url}initrd initrd ${url}image.squashfs /image.squashfs boot :gentoo_exit clear menu exit 0 ================================================ FILE: roles/netbootxyz/templates/menu/gparted.ipxe.j2 ================================================ #!ipxe goto ${menu} || :live_menu set os GParted Live menu ${os} - Current Arch [ ${arch} ] item --gap ${os} Versions {% for key, value in endpoints.items() | sort %} {% if value.os == "gparted" %} item {{ value.version }} ${space} ${os} {{ value.version }} {% endif %} {% endfor %} choose live_version || goto live_exit goto ${live_version} {% for key, value in endpoints.items() | sort %} {% if value.os == "gparted" %} :{{ value.version }} set squash_url ${live_endpoint}{{ value.path }}filesystem.squashfs set kernel_url ${live_endpoint}{{ value.path }} goto boot {% endif %} {% endfor %} :boot imgfree kernel ${kernel_url}vmlinuz boot=live fetch=${squash_url} union=overlay username=user vga=788 {{ kernel_params }} initrd ${kernel_url}initrd boot :live_exit clear menu exit 0 ================================================ FILE: roles/netbootxyz/templates/menu/harvester.ipxe.j2 ================================================ #!ipxe # Harvester # https://harvesterhci.io/ # https://docs.harvesterhci.io/v1.0/install/pxe-boot-install/ goto ${menu} || :harvester set os {{ releases.harvester.name }} set os_arch ${arch} iseq ${os_arch} x86_64 && set os_arch amd64 || menu ${os} - ${os_arch} item --gap Harvester: {% for key, value in endpoints.items() | sort %} {% if value.os == "harvester" %} item harvester_url ${space} Begin install of Harvester ${os} {{ value.version }} {% endif %} {% endfor %} item --gap Parameters: item harvester_config_url ${space} Set config-create or config-join.yaml URL: ${harvester_config_url} choose --default ${menu} menu || goto harvester_exit echo ${cls} goto ${menu} || goto harvester_exit :harvester_config_url echo -n Set config.yaml URL: && read harvester_config_url clear menu goto harvester {% for key, value in endpoints.items() | sort %} {% if value.os == "harvester" %} :harvester_url set harvester_url ${live_endpoint}{{ value.path }} goto harvester_boot {% endif %} {% endfor %} :harvester_boot set install_params harvester.install.automatic=true harvester.install.config_url=${harvester_config_url} set boot_params ip=dhcp net.ifnames=1 console=ttyS0 console=tty1 rd.cos.disable root=live:${harvester_url}/harvester-rootfs-${os_arch}.squashfs rd.noverifyssl imgfree kernel ${harvester_url}/harvester-vmlinuz-${os_arch} ${install_params} ${boot_params} {{ kernel_params }} initrd ${harvester_url}/harvester-initrd-${os_arch} echo echo MD5sums: md5sum harvester-vmlinuz-${os_arch} harvester-initrd-${os_arch} boot :harvester_exit clear menu exit 0 ================================================ FILE: roles/netbootxyz/templates/menu/ipfire.ipxe.j2 ================================================ #!ipxe # IPFire # https://www.ipfire.org/ goto ${menu} || :ipfire clear osversion set os {{ releases.ipfire.name }} menu ${os} {% for item in releases.ipfire.versions %} item {{ item.code_name }} ${space} ${os} {{ item.name }} {% endfor %} isset ${osversion} || choose osversion || goto linux_menu echo ${cls} set dir ${ipfire_base_dir}/${osversion}/images/x86_64 goto ipfire_images :ipfire_images imgfree kernel ${ipfire_mirror}/${dir}/vmlinuz vga=791 {{ kernel_params }} initrd ${ipfire_mirror}/${dir}/instroot echo echo MD5sums: md5sum vmlinuz instroot boot :ipfire_exit clear menu exit 0 ================================================ FILE: roles/netbootxyz/templates/menu/k3os.ipxe.j2 ================================================ #!ipxe # k3OS by Rancher # https://k3os.io/ # https://github.com/rancher/k3os#configuration-reference goto ${menu} || :k3os set os {{ releases.k3os.name }} set os_arch ${arch} iseq ${os_arch} x86_64 && set os_arch amd64 || set k3os_mirror {{ releases.k3os.mirror }} isset ${k3os_version} || set k3os_version latest isset ${k3os_install_device} || set k3os_install_device /dev/sda menu ${os} by Rancher menu ${os} install item --gap k3OS: item k3os_boot ${space} Begin install ${os} ${k3os_version} item --gap Parameters: item k3os_version ${space} ${os} version: ${k3os_version} item k3os_install_device ${space} Set install device: ${k3os_install_device} item k3os_config_url ${space} Set config.yaml URL: ${k3os_config_url} item k3os_mirror ${space} Set mirror URL: ${k3os_mirror} choose --default ${menu} menu || goto k3os_exit echo ${cls} goto ${menu} || goto k3os_exit :k3os_version menu ${os} version item latest ${space} latest item custom ${space} Set custom version choose --default ${version} version || goto k3os_exit echo ${cls} goto k3os_version_${version} || goto k3os_exit :k3os_version_latest set k3os_version latest set k3os_base_url ${k3os_mirror}/latest/download goto k3os :k3os_version_custom clear k3os_version echo -n Please set k3OS version manually (in format vX.Y.Z): && read k3os_version set k3os_base_url ${k3os_mirror}/download/${k3os_version} clear menu goto k3os :k3os_install_device echo -n Please set desired install device: && read k3os_install_device clear menu goto k3os :k3os_mirror echo -n Set mirror URL: && read k3os_mirror clear menu goto k3os_version || goto k3os_exit :k3os_config_url echo -n Set config.yaml URL: && read k3os_config_url clear menu goto k3os :k3os_boot isset ${k3os_base_url} || set k3os_base_url ${k3os_mirror}/latest/download set install_params k3os.install.silent=true k3os.mode=install k3os.install.config_url=${k3os_config_url} k3os.install.device=${k3os_install_device} set boot_params printk.devkmsg=on k3os.install.iso_url=${k3os_base_url}/k3os-${os_arch}.iso console=ttyS0 console=tty1 imgfree kernel ${k3os_base_url}/k3os-vmlinuz-${os_arch} ${install_params} ${boot_params} {{ kernel_params }} initrd ${k3os_base_url}/k3os-initrd-${os_arch} echo echo MD5sums: md5sum k3os-vmlinuz-${os_arch} k3os-initrd-${os_arch} boot :k3os_exit clear menu exit 0 ================================================ FILE: roles/netbootxyz/templates/menu/kairos.ipxe.j2 ================================================ #!ipxe # Kairos # https://github.com/kairos-io/kairos/releases goto ${menu} || :kairos #set os {{ releases.kairos.name }} set os Kairos set os_arch ${arch} iseq ${os_arch} x86_64 && set os_arch amd64 || isset ${kairos_version} || set kairos_version {{ releases.kairos.version }} isset ${kairos_mirror} || set kairos_mirror {{ releases.kairos.mirror }} isset ${kairos_platform} || set kairos_platform {{ releases.kairos.platforms[0].key }} isset ${kairos_mode} || set kairos_mode install-mode-interactive isset ${kairos_flavor} || set kairos_flavor core menu ${os} item --gap Kairos: item kairos_boot ${space} Begin install ${os} ${kairos_version} item --gap Parameters: item kairos_version ${space} ${os} version: ${kairos_version} item kairos_mode ${space} Set install mode: ${kairos_mode} item kairos_config_url ${space} Set config file URL: ${kairos_config_url} item kairos_mirror ${space} Set mirror URL: ${kairos_mirror} item kairos_platform ${space} Set platform: ${kairos_platform} item kairos_flavor ${space} Set flavor: ${kairos_flavor} choose --default ${menu} menu || goto kairos_exit echo ${cls} goto ${menu} || goto kairos_exit :kairos_version menu ${os} version item ${kairos_version} ${space} ${kairos_version} item custom ${space} Set custom version choose --default ${version} version || goto kairos_exit echo ${cls} goto kairos_version_${version} || goto kairos_exit :kairos_mode menu ${os} Modes item --gap Set Boot Mode: item install-mode-interactive ${space} Interactive Install Mode item install-mode ${space} Regular Install Mode item kairos.remote_recovery_mode ${space} Remote Recovery Mode choose --default ${kairos_mode} kairos_mode || clear menu goto kairos :kairos_platform menu ${os} Platforms item --gap Set Platform: {% for item in releases.kairos.platforms %} item {{ item.key }} ${space} {{ item.name }} {% endfor %} choose --default ${kairos_platform} kairos_platform || clear menu goto kairos :kairos_flavor menu ${os} Flavor item --gap Set Flavor: {% for item in releases.kairos.flavors %} item {{ item.key }} ${space} {{ item.name }} {% endfor %} choose --default ${kairos_flavor} kairos_flavor || clear menu goto kairos :kairos_version_custom clear kairos_version echo -n Please set Kairos version manually (in format vX.Y.Z): && read kairos_version set kairos_base_url ${kairos_mirror}/download/${kairos_version} clear menu goto kairos :kairos_mirror echo -n Set mirror URL: && read kairos_mirror clear menu goto kairos :kairos_config_url echo -n Set config file URL: && read kairos_config_url clear menu goto kairos :kairos_boot imgfree iseq ${kairos_flavor} core && set kairos_flavor_family core || set kairos_flavor_family standard iseq ${kairos_flavor} core && set release_prefix ${kairos_mirror}/download/${kairos_version}/kairos-${kairos_platform}-${kairos_flavor_family}-${os_arch}-generic-${kairos_version} || iseq ${kairos_flavor} core || set release_prefix ${kairos_mirror}/download/${kairos_version}/kairos-${kairos_platform}-${kairos_flavor_family}-${os_arch}-generic-${kairos_version}-${kairos_flavor} set kairos_kernel_args root=live:${release_prefix}.squashfs rd.neednet=1 ip=dhcp rd.cos.disable netboot ${kairos_mode} config_url=${kairos_config_url} selinux=0 console=tty1 console=ttyS0 ${cmdline} initrd=initrd.magic kernel ${release_prefix}-kernel root=live:${release_prefix}.squashfs ${kairos_kernel_args} initrd ${release_prefix}-initrd echo echo MD5sums: md5sum kairos-${kairos_platform}-${kairos_flavor_family}-${os_arch}-generic-${kairos_version}-${kairos_flavor}-kernel kairos-${kairos_platform}-${kairos_flavor_family}-${os_arch}-generic-${kairos_version}-${kairos_flavor}-initrd boot :kairos_exit clear menu exit 0 ================================================ FILE: roles/netbootxyz/templates/menu/kali.ipxe.j2 ================================================ #!ipxe # Kali Linux # http://www.kali.org goto ${menu} || :kali set os {{ releases.kali.name }} set os_arch ${arch} iseq ${os_arch} x86_64 && set os_arch amd64 || iseq ${os_arch} i386 && set os_arch i386 || iseq ${os_arch} arm64 && set os_arch arm64 || menu ${os} - ${os_arch} {% for item in releases.kali.versions %} item {{ item.code_name }} ${space} ${os} {{ item.name }} {% endfor %} choose version || goto kali_exit :deb_boot_type set dir ${kali_base_dir}/dists/kali-${version}/main/installer-${os_arch}/current/images/netboot menu ${os} boot parameters item text ${os} text based install choose --default ${type} type || goto kali echo ${cls} goto deb_${type} :deb_text set dir ${dir}/debian-installer/${os_arch} goto deb_boot :deb_boot imgfree kernel ${kali_mirror}/${dir}/linux vga=788 -- quiet {{ kernel_params }} initrd ${kali_mirror}/${dir}/initrd.gz echo echo MD5sums: md5sum linux initrd.gz boot :kali_exit clear menu exit 0 ================================================ FILE: roles/netbootxyz/templates/menu/kaspersky.ipxe.j2 ================================================ #!ipxe goto ${menu} || :live_menu set os Kaspersky Rescue Disk menu ${os} item --gap ${os} Versions {% for key, value in endpoints.items() | sort %} {% if value.os == "kaspersky" %} item {{ value.version }} ${space} ${os} {{ value.version }} {% endif %} {% endfor %} choose live_version || goto live_exit goto ${live_version} {% for key, value in endpoints.items() | sort %} {% if value.os == "kaspersky" %} :{{ value.version }} set url ${live_endpoint}{{ value.path }} goto boot {% endif %} {% endfor %} :boot imgfree kernel ${url}vmlinuz netboot=${url} loadsrm=000-core.srm,001-xorg.srm,002-xfce.srm,003-kl.srm,004-krt.srm,005-bases.srm,008-firefox.srm net.ifnames=0 dodhcp dostartx {{ kernel_params }} initrd ${url}initrd.xz initrd ${url}initrd boot :live_exit clear menu exit 0 ================================================ FILE: roles/netbootxyz/templates/menu/linux-arm.ipxe.j2 ================================================ #!ipxe goto ${menu} || :linux_menu menu Linux Installers - Current Arch [ ${arch} ] item --gap Popular Linux Operating Systems: item almalinux ${space} AlmaLinux item alpinelinux ${space} Alpine Linux item centos ${space} CentOS item debian ${space} Debian item fedora ${space} Fedora item coreos ${space} Fedora CoreOS item flatcar ${space} Flatcar Container Linux item gentoo ${space} Gentoo item kali ${space} Kali item nixos ${space} NixOS item opensuse ${space} openSUSE item oracle ${space} Oracle Linux item rhel ${space} Red Hat Enterprise Linux item rockylinux ${space} Rocky Linux item talos ${space} Talos item ubuntu ${space} Ubuntu item photon ${space} VMware Photon choose menu || goto linux_exit echo ${cls} goto ${menu} || iseq ${sigs_enabled} true && goto verify_sigs || goto change_menu :verify_sigs imgverify ${menu}.ipxe ${sigs}${menu}.ipxe.sig || goto error goto change_menu :change_menu chain ${menu}.ipxe || goto error goto linux_menu :linux_exit clear menu exit 0 ================================================ FILE: roles/netbootxyz/templates/menu/linux-i386.ipxe.j2 ================================================ #!ipxe goto ${menu} || :linux_menu menu Linux Installers - Current Arch [ ${arch} ] item --gap Popular Linux Operating Systems: item archlinux ${space} Arch Linux item alpinelinux ${space} Alpine Linux item debian ${space} Debian item gentoo ${space} Gentoo item kali ${space} Kali Linux item opensuse ${space} openSUSE choose menu || goto linux_exit echo ${cls} goto ${menu} || iseq ${sigs_enabled} true && goto verify_sigs || goto change_menu :verify_sigs imgverify ${menu}.ipxe ${sigs}${menu}.ipxe.sig || goto error goto change_menu :change_menu chain ${menu}.ipxe || goto error goto linux_menu :linux_exit clear menu exit 0 ================================================ FILE: roles/netbootxyz/templates/menu/linux.ipxe.j2 ================================================ #!ipxe goto ${menu} || :linux_menu menu Linux Installers - Current Arch [ ${arch} ] item --gap Linux Distros: {% for key, value in releases.items() | sort(attribute='1.name') %} {% if value.enabled is defined and value.menu == "linux" and value.enabled | bool %} item {{ key }} ${space} {{ value.name }} {% endif %} {% endfor %} choose menu || goto linux_exit echo ${cls} goto ${menu} || iseq ${sigs_enabled} true && goto verify_sigs || goto change_menu :verify_sigs imgverify ${menu}.ipxe ${sigs}${menu}.ipxe.sig || goto error goto change_menu :change_menu chain ${menu}.ipxe || goto error goto linux_menu :linux_exit clear menu exit 0 ================================================ FILE: roles/netbootxyz/templates/menu/live-arm.ipxe.j2 ================================================ #!ipxe goto ${menu} || :live_menu menu Live Boot Distributions - Current Arch [ ${arch} ] item --gap Live Boot Distributions item live-fedora ${space} Fedora item live-grml ${space} Grml choose menu || goto live_exit echo ${cls} goto ${menu} || iseq ${sigs_enabled} true && goto verify_sigs || goto change_menu :verify_sigs imgverify ${menu}.ipxe ${sigs}${menu}.ipxe.sig || goto error goto change_menu :change_menu chain ${menu}.ipxe || goto error goto live_menu :live_exit clear menu exit 0 ================================================ FILE: roles/netbootxyz/templates/menu/live-backbox.ipxe.j2 ================================================ #!ipxe goto ${menu} || :live_menu set os BackBox menu ${os} item --gap ${os} Versions {% for key, value in endpoints.items() | sort %} {% if value.os == "BackBox" and 'squash' in key %} item {{ value.version }} ${space} ${os} {{ value.version }} {% endif %} {% endfor %} choose live_version || goto live_exit goto ${live_version} {% for key, value in endpoints.items() | sort %} {% if value.os == "BackBox" and 'squash' in key %} {% set kernel_name = value.kernel %} :{{ value.version }} set squash_url ${live_endpoint}{{ value.path }}filesystem.squashfs {% for key, value in endpoints.items() | sort %} {% if key == kernel_name %} set kernel_url ${live_endpoint}{{ value.path }} {% endif %} {% endfor %} goto boot-os {% endif %} {% endfor %} :boot-os imgfree kernel ${kernel_url}vmlinuz ip=dhcp boot=casper netboot=url url=${squash_url} {{ kernel_params }} initrd ${kernel_url}initrd boot :live_exit clear menu exit 0 ================================================ FILE: roles/netbootxyz/templates/menu/live-bluestar.ipxe.j2 ================================================ #!ipxe goto ${menu} || :live_menu set os Bluestar menu ${os} set ipparam BOOTIF=${netX/mac} ip=dhcp net.ifnames=0 item --gap ${os} Versions {% for key, value in endpoints.items() | sort %} {% if value.os == "bluestar" %} item {{ value.version }} ${space} ${os} {{ value.version }} {% endif %} {% endfor %} choose live_version || goto live_exit goto ${live_version} {% for key, value in endpoints.items() | sort %} {% if value.os == "bluestar" %} :{{ value.version }} set url ${live_endpoint}{{ value.path }} goto boot {% endif %} {% endfor %} :boot imgfree kernel ${url}vmlinuz archisobasedir=arch ${ipparam} archiso_http_srv=${url} cow_spacesize=30% cow_label=BSLX_PERSIST ipv6.disable=1 disablehooks=v86d,915resolution,gma3600 modprobe.blacklist=uvesafb console=tty1 {{ kernel_params }} initrd ${url}initrd boot :live_exit clear menu exit 0 ================================================ FILE: roles/netbootxyz/templates/menu/live-bodhi.ipxe.j2 ================================================ #!ipxe goto ${menu} || :live_menu set os Bodhi menu ${os} item --gap ${os} Versions {% for key, value in endpoints.items() | sort %} {% if value.os == "bodhi" %} item {{ value.version }}-{{ value.flavor }} ${space} ${os} {{ value.version }} {{ value.flavor }} {% endif %} {% endfor %} choose live_version || goto live_exit goto ${live_version} {% for key, value in endpoints.items() | sort %} {% if value.os == "bodhi" %} :{{ value.version }}-{{ value.flavor }} set squash_url ${live_endpoint}{{ value.path }}filesystem.squashfs set kernel_url ${live_endpoint}{{ value.path }} goto boot-os {% endif %} {% endfor %} :boot-os imgfree kernel ${kernel_url}vmlinuz ip=dhcp boot=casper netboot=url url=${squash_url} {{ kernel_params }} initrd ${kernel_url}initrd boot :live_exit clear menu exit 0 ================================================ FILE: roles/netbootxyz/templates/menu/live-cachyos.ipxe.j2 ================================================ #!ipxe # CachyOS Operating System # https://cachyos.org goto ${menu} || :live_menu set os CachyOS menu ${os} set ipparam BOOTIF=${netX/mac} ip=dhcp net.ifnames=0 item --gap ${os} Versions {% for key, value in endpoints.items() | sort %} {% if value.os == "cachyos" %} item {{ value.version }} ${space} ${os} {{ value.version }} {% endif %} {% endfor %} choose live_version || goto live_exit goto ${live_version} {% for key, value in endpoints.items() | sort %} {% if value.os == "cachyos" %} :{{ value.version }} set url ${live_endpoint}{{ value.path }} goto boot {% endif %} {% endfor %} :boot imgfree kernel ${url}vmlinuz ${ipparam} archiso_http_srv=${url} cow_spacesize=10G copytoram=auto module_blacklist=nvidia,nvidia_modeset,nvidia_uvm,nvidia_drm,pcspkr nouveau.modeset=1 i915.modeset=1 radeon.modeset=1 nvme_load=yes initrd=initrd.magic console=tty1 {{ kernel_params }} initrd ${url}initrd initrd ${url}archiso_pxe_http /hooks/archiso_pxe_http mode=755 boot :live_exit clear menu exit 0 ================================================ FILE: roles/netbootxyz/templates/menu/live-debian.ipxe.j2 ================================================ #!ipxe goto ${menu} || :live_menu set os Debian Live menu ${os} item --gap ${os} Versions item trixie ${space} ${os} 13 (trixie) choose live_version || goto live_exit menu ${os} ${live_version} item --gap ${os} Flavors goto ${live_version} :trixie {% for key, value in endpoints.items() | sort %} {% if value.os == "debian" and 'squash' in key and value.version == "13" %} item {{ key }} ${space} {{ value.os | title }} {{ value.version }} {{ value.flavor | title}} {% endif %} {% endfor %} goto flavor_select :flavor_select choose flavor || goto live_menu echo ${cls} goto ${flavor} || {% for key, value in endpoints.items() | sort %} {% if value.os == "debian" and 'squash' in key %} {% set kernel_name = value.kernel %} :{{ key }} set squash_url ${live_endpoint}{{ value.path }}filesystem.squashfs {% for key, value in endpoints.items() | sort %} {% if key == kernel_name %} set kernel_url ${live_endpoint}{{ value.path }} goto boot {% endif %} {% endfor %} {% endif %} {% endfor %} :boot imgfree kernel ${kernel_url}vmlinuz boot=live fetch=${squash_url} {{ kernel_params }} initrd ${kernel_url}initrd boot :live_exit clear menu exit 0 ================================================ FILE: roles/netbootxyz/templates/menu/live-devuan.ipxe.j2 ================================================ #!ipxe goto ${menu} || :live_menu set os Devuan menu ${os} item --gap ${os} Versions {% for key, value in endpoints.items() | sort %} {% if value.os == "devuan" %} item {{ value.version }}-{{ value.flavor }} ${space} ${os} {{ value.version }} {{ value.flavor }} {% endif %} {% endfor %} choose live_version || goto live_exit goto ${live_version} {% for key, value in endpoints.items() | sort %} {% if value.os == "devuan" %} :{{ value.version }}-{{ value.flavor }} set squash_url ${live_endpoint}{{ value.path }}filesystem.squashfs set kernel_url ${live_endpoint}{{ value.path }} goto boot {% endif %} {% endfor %} :boot imgfree kernel ${kernel_url}vmlinuz boot=live username=devuan fetch=${squash_url} {{ kernel_params }} initrd ${kernel_url}initrd boot :live_exit clear menu exit 0 ================================================ FILE: roles/netbootxyz/templates/menu/live-elementary.ipxe.j2 ================================================ #!ipxe goto ${menu} || :live_menu set os elementary OS menu ${os} item --gap ${os} Versions {% for key, value in endpoints.items() | sort %} {% if value.os == "elementary-os" %} item {{ key }} ${space} ${os} {{ value.version }} {% endif %} {% endfor %} choose live_version || goto live_exit goto ${live_version} {% for key, value in endpoints.items() | sort %} {% if value.os == "elementary-os" and 'squash' in key %} {% set kernel_name = value.kernel %} :{{ key }} set squash_url ${live_endpoint}{{ value.path }}filesystem.squashfs {% for key, value in endpoints.items() | sort %} {% if key == kernel_name %} set kernel_url ${live_endpoint}{{ value.path }} {% endif %} {% endfor %} goto boot {% endif %} {% endfor %} :boot imgfree kernel ${kernel_url}vmlinuz ip=dhcp boot=casper maybe-ubiquity netboot=url url=${squash_url} {{ kernel_params }} initrd ${kernel_url}initrd boot :live_exit clear menu exit 0 ================================================ FILE: roles/netbootxyz/templates/menu/live-endeavouros.ipxe.j2 ================================================ #!ipxe goto ${menu} || :live_menu set os EndeavourOS menu ${os} set ipparam BOOTIF=${netX/mac} ip=dhcp net.ifnames=0 item --gap ${os} Versions {% for key, value in endpoints.items() | sort %} {% if value.os == "endeavouros" %} item {{ value.version }} ${space} ${os} {{ value.version }} {% endif %} {% endfor %} choose live_version || goto live_exit goto ${live_version} {% for key, value in endpoints.items() | sort %} {% if value.os == "endeavouros" %} :{{ value.version }} set url ${live_endpoint}{{ value.path }} goto boot {% endif %} {% endfor %} :boot imgfree kernel ${url}vmlinuz ${ipparam} archiso_http_srv=${url} archisobasedir=arch cow_spacesize=10G earlymodules=loop modules-load=loop rd.modules-load=loop nvidia nouveau.modeset=0 nouveau.blacklist=yes modprobe.blacklist=nouveau i915.modeset=1 radeon.modeset=1 {{ kernel_params }} initrd ${url}initrd boot :live_exit clear menu exit 0 ================================================ FILE: roles/netbootxyz/templates/menu/live-fatdog.ipxe.j2 ================================================ #!ipxe goto ${menu} || :live_menu set os Fatdog64 menu ${os} item --gap ${os} Versions {% for key, value in endpoints.items() | sort %} {% if value.os == "fatdog" %} item {{ value.version }} ${space} ${os} {{ value.version }} {% endif %} {% endfor %} choose live_version || goto live_exit goto ${live_version} {% for key, value in endpoints.items() | sort %} {% if value.os == "fatdog" %} :{{ value.version }} set url ${live_endpoint}{{ value.path }} goto boot {% endif %} {% endfor %} :boot imgfree kernel ${url}vmlinuz rootfstype=ramfs {{ kernel_params }} initrd ${url}initrd boot :live_exit clear menu exit 0 ================================================ FILE: roles/netbootxyz/templates/menu/live-fedora.ipxe.j2 ================================================ #!ipxe isset ${dhcp-server} && set ipparam ip=dhcp || set ipparam ip=${ip}::${gateway}:${netmask}:::none nameserver=${dns} set ipparam BOOTIF=${netX/mac} ${ipparam} goto ${menu} || :live_menu set os Fedora Live menu ${os} item --gap ${os} Versions {% for item in releases.fedora.versions %} item {{ item.code_name }} ${space} ${os} {{ item.name }} {% endfor %} choose live_version || goto live_exit menu ${os} ${live_version} item --gap ${os} Flavors goto ${live_version} {% for item in releases.fedora.versions %} {% set version_number = item.code_name %} :{{ version_number }} {% for key, value in endpoints.items() | sort %} {% if value.os == "fedora" and value.version == version_number %} item {{ key }} ${space} {{ value.os | title }} {{ value.version }} {{ value.flavor | title }} {% endif %} {% endfor %} goto flavor_select {% endfor %} :flavor_select choose flavor || goto live_menu echo ${cls} goto ${flavor} || {% for key, value in endpoints.items() | sort %} {% if value.os == "fedora" %} :{{ key }} set live_url ${live_endpoint}{{ value.path }} goto boot {% endif %} {% endfor %} :boot imgfree kernel ${live_url}vmlinuz ${ipparam} root=live:${live_url}squashfs.img ro rd.live.image rd.lvm=0 rd.luks=0 rd.md=0 rd.dm=0 {{ kernel_params }} initrd ${live_url}initrd boot :live_exit clear menu exit 0 ================================================ FILE: roles/netbootxyz/templates/menu/live-feren.ipxe.j2 ================================================ #!ipxe goto ${menu} || :live_menu set os Feren OS Live menu ${os} item --gap ${os} Versions item current ${space} ${os} Current choose live_version || goto live_exit menu ${os} ${live_version} item --gap ${os} Flavors goto ${live_version} :current {% for key, value in endpoints.items() %} {% if value.os == "feren" %} item {{ value.path }} ${space} {{ value.os | title }} {{ value.version | title }} {% endif %} {% endfor %} choose path || goto live_menu goto feren-boot :feren-boot imgfree set squash_url ${live_endpoint}${path}filesystem.squashfs set kernel_url ${live_endpoint}${path} kernel ${kernel_url}vmlinuz ip=dhcp boot=casper netboot=http fetch=${squash_url} {{ kernel_params }} initrd ${kernel_url}initrd boot :live_exit clear menu exit 0 ================================================ FILE: roles/netbootxyz/templates/menu/live-garuda.ipxe.j2 ================================================ #!ipxe # Garuda Linux # https://garudalinux.org/ goto ${menu} || :live-garuda set os Garuda menu ${os} Live set ipparam BOOTIF=${netX/mac} ip=dhcp net.ifnames=0 item --gap ${os} Live versions {% for key, value in endpoints.items() | sort %} {% if value.os == "garuda" %} item {{ value.version }}-{{ value.flavor }} ${space} ${os} {{ value.flavor | title }} ({{ value.version }}) {% endif %} {% endfor %} choose menu || goto live_exit goto ${menu} {% for key, value in endpoints.items() | sort %} {% if value.os == "garuda" %} :{{ value.version }}-{{ value.flavor }} set fetch_url ${live_endpoint}{{ value.path }} set kernel_url ${live_endpoint}{{ value.path }} goto boot {% endif %} {% endfor %} :boot imgfree kernel ${kernel_url}vmlinuz misobasedir=garuda ${ipparam} miso_http_srv=${fetch_url} nouveau.modeset=1 i915.modeset=1 radeon.modeset=1 driver=free {{ kernel_params }} initrd ${kernel_url}initramfs.img boot :live_exit clear menu exit 0 ================================================ FILE: roles/netbootxyz/templates/menu/live-grml.ipxe.j2 ================================================ #!ipxe goto ${menu} || :live_menu set os Grml set os_arch ${arch} iseq ${os_arch} x86_64 && set os_arch amd64 || iseq ${os_arch} arm64 && set os_arch arm64 || menu ${os} - Current Arch [ ${arch} ] item --gap ${os} Versions {% for key, value in endpoints.items() | sort %} {% if value.os == "grml" %} iseq ${os_arch} {{ value.arch }} && item {{ value.version }}-{{ value.flavor }}-{{ value.arch }} ${space} ${os} {{ value.version }} {{ value.flavor }} - {{ value.arch }} || {% endif %} {% endfor %} choose live_version || goto live_exit goto ${live_version} {% for key, value in endpoints.items() | sort %} {% if value.os == "grml" %} :{{ value.version }}-{{ value.flavor }}-{{ value.arch }} set squash_url ${live_endpoint}{{ value.path }}filesystem.squashfs set kernel_url ${live_endpoint}{{ value.path }} goto boot {% endif %} {% endfor %} :boot imgfree kernel ${kernel_url}vmlinuz boot=live fetch=${squash_url} {{ kernel_params }} initrd ${kernel_url}initrd boot :live_exit clear menu exit 0 ================================================ FILE: roles/netbootxyz/templates/menu/live-hrmpf.ipxe.j2 ================================================ #!ipxe # hrmpf # https://github.com/leahneukirchen/hrmpf/ goto ${menu} || :live-hrmpf clear hrmpf_version set os hrmpf set os_arch ${arch} iseq ${os_arch} x86_64 && set os_arch amd64 || menu ${os} item --gap ${os} Versions {% for key, value in endpoints.items() | sort %} {% if value.os == "hrmpf" %} item {{ value.version }} ${space} ${os} {{ value.version }} {% endif %} {% endfor %} choose hrmpf_version || goto hrmpf_exit goto ${hrmpf_version} {% for key, value in endpoints.items() | sort %} {% if value.os == "hrmpf" %} :{{ value.version }} set kernel_url ${live_endpoint}{{ value.path }} goto boot {% endif %} {% endfor %} :boot imgfree kernel ${kernel_url}vmlinuz root=live:${kernel_url}squashfs.img ro init=/sbin/init rd.luks=0 rd.md=0 rd.dm=0 gpt add_efi_memmap vconsole.unicode=1 vconsole.keymap=us locale.LANG=en_US.UTF-8 loglevel=6 printk.time=1 consoleblank=0 net.ifnames=0 {{ kernel_params }} initrd ${kernel_url}initrd boot :hrmpf_exit clear menu exit 0 ================================================ FILE: roles/netbootxyz/templates/menu/live-k3os.ipxe.j2 ================================================ #!ipxe goto ${menu} || :live_menu set os {{ releases.k3os.name }} set os_arch ${arch} iseq ${os_arch} x86_64 && set os_arch amd64 || set k3os_mirror {{ releases.k3os.mirror }} menu ${os} by Rancher isset ${k3os_version} || set k3os_version latest menu ${os} live item --gap k3OS live version: item boot ${space} ${os} ${k3os_version} - live item --gap Parameters: item k3os_version ${space} ${os} version: ${k3os_version} item k3os_mirror ${space} Set mirror URL: ${k3os_mirror} choose --default ${menu} menu || goto live_exit echo ${cls} goto ${menu} || goto live_exit :k3os_version menu ${os} version item latest ${space} latest item custom ${space} Set custom version choose --default ${version} version || goto live_exit echo ${cls} goto k3os_version_${version} || goto live_exit :k3os_version_latest set k3os_version latest set k3os_base_url ${k3os_mirror}/latest/download goto live_menu :k3os_version_custom clear k3os_version echo -n Please set k3OS version manually (in format vX.Y.Z): && read k3os_version set k3os_base_url ${k3os_mirror}/download/${k3os_version} clear menu goto live_menu :k3os_mirror echo -n Set mirror URL: && read k3os_mirror clear menu goto k3os_version || goto live_exit :boot isset ${k3os_base_url} || set k3os_base_url ${k3os_mirror}/latest/download set install_params k3os.mode=live set boot_params printk.devkmsg=on console=ttyS0 console=tty1 imgfree kernel ${k3os_base_url}/k3os-vmlinuz-${os_arch} ${install_params} ${boot_params} {{ kernel_params }} initrd ${k3os_base_url}/k3os-initrd-${os_arch} boot :live_exit clear menu exit 0 ================================================ FILE: roles/netbootxyz/templates/menu/live-kali.ipxe.j2 ================================================ #!ipxe goto ${menu} || :live_menu set os Kali Linux menu ${os} item --gap ${os} Versions {% for key, value in endpoints.items() | sort %} {% if value.os == "kali" %} item {{ key }} ${space} ${os} {{ value.version }} {% endif %} {% endfor %} choose live_version || goto live_exit goto ${live_version} {% for key, value in endpoints.items() | sort %} {% if value.os == "kali" and 'squash' in key %} :{{ key }} set squash_url ${live_endpoint}{{ value.path }}filesystem.squashfs set kernel_url ${live_endpoint}{{ value.path }} set params components goto boot {% endif %} {% endfor %} :boot imgfree kernel ${kernel_url}vmlinuz boot=live ${params} fetch=${squash_url} {{ kernel_params }} initrd ${kernel_url}initrd boot :live_exit clear menu exit 0 ================================================ FILE: roles/netbootxyz/templates/menu/live-kodachi.ipxe.j2 ================================================ #!ipxe goto ${menu} || :live_menu set os Kodachi menu ${os} item --gap ${os} Versions {% for key, value in endpoints.items() | sort %} {% if value.os == "kodachi" %} item {{ value.version }} ${space} ${os} {{ value.version }} {% endif %} {% endfor %} choose live_version || goto live_exit goto ${live_version} {% for key, value in endpoints.items() | sort %} {% if value.os == "kodachi" %} :{{ value.version }} set squash_url ${live_endpoint}{{ value.path }}filesystem.squashfs set kernel_url ${live_endpoint}{{ value.path }} goto boot {% endif %} {% endfor %} :boot imgfree kernel ${kernel_url}vmlinuz ip=dhcp boot=casper netboot=http fetch=${squash_url} {{ kernel_params }} initrd ${kernel_url}initrd boot :live_exit clear menu exit 0 ================================================ FILE: roles/netbootxyz/templates/menu/live-lite.ipxe.j2 ================================================ #!ipxe goto ${menu} || :live_menu set os Linux Lite menu ${os} item --gap Use the username linuxlite with a blank password item --gap ${os} Versions item 5 ${space} ${os} 6 choose live_version || goto live_exit goto ${live_version} :6 set squash_url ${live_endpoint}{{ endpoints["linux-lite-5-squash"].path }}filesystem.squashfs set kernel_url ${live_endpoint}{{ endpoints["linux-lite-5-squash"].path }} goto boot-6 :boot-6 kernel ${kernel_url}vmlinuz ip=dhcp boot=casper netboot=url url=${squash_url} username=linuxlite userfullname=linuxlite {{ kernel_params }} initrd ${kernel_url}initrd boot :live_exit clear menu exit 0 ================================================ FILE: roles/netbootxyz/templates/menu/live-lxle.ipxe.j2 ================================================ #!ipxe goto ${menu} || :live_menu set os LXLE menu ${os} item --gap ${os} Versions {% for key, value in endpoints.items() | sort %} {% if value.os == "lxle" %} item {{ value.version }} ${space} ${os} {{ value.version }} {% endif %} {% endfor %} choose live_version || goto live_exit goto ${live_version} {% for key, value in endpoints.items() | sort %} {% if value.os == "lxle" %} :{{ value.version }} set squash_url ${live_endpoint}{{ value.path }}filesystem.squashfs set kernel_url ${live_endpoint}{{ value.path }} goto boot {% endif %} {% endfor %} :boot imgfree kernel ${kernel_url}vmlinuz ip=dhcp boot=casper netboot=http fetch=${squash_url} {{ kernel_params }} initrd ${kernel_url}initrd boot :live_exit clear menu exit 0 ================================================ FILE: roles/netbootxyz/templates/menu/live-manjaro.ipxe.j2 ================================================ #!ipxe :live_menu set os Manjaro menu ${os} Live set ipparam BOOTIF=${netX/mac} ip=dhcp net.ifnames=0 item --gap ${os} Live versions item current ${space} ${os} Current Stable (21.x) choose menu || goto live_exit goto ${menu} :current menu ${os} Live Current item --gap ${os} Versions {% for key, value in endpoints.items() | sort %} {% if value.os == "manjaro" and value.version == "current" %} item {{ value.version }}-{{ value.flavor }} ${space} ${os} {{ value.version }} {{ value.flavor }} {% endif %} {% endfor %} choose version || goto live_menu goto ${version} {% for key, value in endpoints.items() | sort %} {% if value.os == "manjaro" and value.version == "current" %} :{{ value.version }}-{{ value.flavor }} set fetch_url ${live_endpoint}{{ value.path }} set kernel_url ${live_endpoint}{{ value.path }} goto boot {% endif %} {% endfor %} :boot imgfree kernel ${kernel_url}vmlinuz misobasedir=manjaro ${ipparam} miso_http_srv=${fetch_url} nouveau.modeset=1 i915.modeset=1 radeon.modeset=1 driver=free tz=UTC lang=en_US keytable=us {{ kernel_params }} initrd ${kernel_url}initrd boot :live_exit clear menu exit 0 ================================================ FILE: roles/netbootxyz/templates/menu/live-mint.ipxe.j2 ================================================ #!ipxe goto ${menu} || :live_menu set os Mint Live menu ${os} item --gap ${os} Versions item 21 ${space} ${os} 21 item 20 ${space} ${os} 20 item lmde ${space} ${os} LMDE choose live_version || goto live_exit menu ${os} ${live_version} item --gap ${os} Flavors goto ${live_version} :22 {% for key, value in endpoints.items() | sort %} {% if value.os == "mint" and 'squash' in key and '22' in value.version %} item {{ key }} ${space} {{ value.os | title }} {{ value.version }} {{ value.flavor | title}} {% endif %} {% endfor %} goto flavor_select :21 {% for key, value in endpoints.items() | sort %} {% if value.os == "mint" and 'squash' in key and '21' in value.version %} item {{ key }} ${space} {{ value.os | title }} {{ value.version }} {{ value.flavor | title}} {% endif %} {% endfor %} goto flavor_select :20 {% for key, value in endpoints.items() | sort %} {% if value.os == "mint" and 'squash' in key and '20' in value.version %} item {{ key }} ${space} {{ value.os | title }} {{ value.version }} {{ value.flavor | title}} {% endif %} {% endfor %} goto flavor_select :lmde {% for key, value in endpoints.items() | sort %} {% if value.os == "mint" and 'squash' in key and value.version == "lmde" %} item {{ key }} ${space} {{ value.os | title }} {{ value.version }} {{ value.flavor | title}} {% endif %} {% endfor %} goto flavor_select :flavor_select choose flavor || goto live_menu echo ${cls} goto ${flavor} || {% for key, value in endpoints.items() | sort %} {% if value.os == "mint" and 'squash' in key %} {% set kernel_name = value.kernel %} :{{ key }} set squash_url ${live_endpoint}{{ value.path }}filesystem.squashfs {% for key, value in endpoints.items() | sort %} {% if key == kernel_name %} set kernel_url ${live_endpoint}{{ value.path }} {% endif %} {% endfor %} {% if value.version == "lmde" %} goto lmde-boot {% else %} goto {{ value.version | int }}-boot {% endif %} {% endif %} {% endfor %} :22-boot imgfree kernel ${kernel_url}vmlinuz ip=dhcp boot=casper netboot=url url=${squash_url} {{ kernel_params }} initrd ${kernel_url}initrd boot :21-boot imgfree kernel ${kernel_url}vmlinuz ip=dhcp boot=casper netboot=url url=${squash_url} {{ kernel_params }} initrd ${kernel_url}initrd boot :20-boot imgfree kernel ${kernel_url}vmlinuz ip=dhcp boot=casper netboot=url url=${squash_url} {{ kernel_params }} initrd ${kernel_url}initrd boot :lmde-boot imgfree kernel ${kernel_url}vmlinuz boot=live fetch=${squash_url} {{ kernel_params }} initrd ${kernel_url}initrd boot :live_exit clear menu exit 0 ================================================ FILE: roles/netbootxyz/templates/menu/live-neon.ipxe.j2 ================================================ #!ipxe goto ${menu} || :live_menu set os KDE Neon menu ${os} item --gap ${os} Versions item user ${space} ${os} User choose live_version || goto live_exit goto ${live_version} :user set squash_url ${live_endpoint}{{ endpoints["kde-neon-user"].path }}filesystem.squashfs set kernel_url ${live_endpoint}{{ endpoints["kde-neon-user"].path }} goto user-boot :user-boot imgfree kernel ${kernel_url}vmlinuz ip=dhcp boot=casper netboot=url url=${squash_url} {{ kernel_params }} initrd ${kernel_url}initrd.lz boot :live_exit clear menu exit 0 ================================================ FILE: roles/netbootxyz/templates/menu/live-nitrux.ipxe.j2 ================================================ #!ipxe goto ${menu} || :live_menu set os Nitrux menu ${os} item --gap ${os} Versions {% for key, value in endpoints.items() | sort %} {% if value.os == "nitrux" %} item {{ value.version }} ${space} ${os} {{ value.version }} {% endif %} {% endfor %} choose live_version || goto live_exit goto ${live_version} {% for key, value in endpoints.items() | sort %} {% if value.os == "nitrux" %} :{{ value.version }} set squash_url ${live_endpoint}{{ value.path }}filesystem.squashfs set kernel_url ${live_endpoint}{{ value.path }} goto boot {% endif %} {% endfor %} :boot imgfree kernel ${kernel_url}vmlinuz ip=dhcp boot=casper netboot=http fetch=${squash_url} {{ kernel_params }} initrd ${kernel_url}initrd boot :live_exit clear menu exit 0 ================================================ FILE: roles/netbootxyz/templates/menu/live-parrot.ipxe.j2 ================================================ #!ipxe goto ${menu} || :live_menu set os Parrot OS menu ${os} item --gap ${os} Versions {% for key, value in endpoints.items() | sort %} {% if value.os == "parrot" %} item {{ value.version }}-{{ value.flavor }} ${space} ${os} {{ value.version }} {{ value.flavor }} {% endif %} {% endfor %} choose live_version || goto live_exit goto ${live_version} {% for key, value in endpoints.items() | sort %} {% if value.os == "parrot" %} :{{ value.version }}-{{ value.flavor }} set squash_url ${live_endpoint}{{ value.path }}filesystem.squashfs set kernel_url ${live_endpoint}{{ value.path }} goto boot {% endif %} {% endfor %} :boot imgfree kernel ${kernel_url}vmlinuz boot=live fetch=${squash_url} {{ kernel_params }} initrd ${kernel_url}initrd boot :live_exit clear menu exit 0 ================================================ FILE: roles/netbootxyz/templates/menu/live-peppermint.ipxe.j2 ================================================ #!ipxe goto ${menu} || :live_menu set os Peppermint menu ${os} item --gap ${os} Versions item 10 ${space} ${os} 10 choose live_version || goto live_exit goto ${live_version} {% for key, value in endpoints.items() | sort %} {% if value.os == "peppermint" and 'squash' in key %} {% set kernel_name = value.kernel %} :{{ value.version }} set squash_url ${live_endpoint}{{ value.path }}filesystem.squashfs {% for key, value in endpoints.items() | sort %} {% if key == kernel_name %} set kernel_url ${live_endpoint}{{ value.path }} {% endif %} {% endfor %} goto {{ value.version }}-boot {% endif %} {% endfor %} :10-boot imgfree kernel ${kernel_url}vmlinuz ip=dhcp boot=casper netboot=http fetch=${squash_url} {{ kernel_params }} initrd ${kernel_url}initrd boot :live_exit clear menu exit 0 ================================================ FILE: roles/netbootxyz/templates/menu/live-popos.ipxe.j2 ================================================ #!ipxe goto ${menu} || :live_menu set os Pop os Live menu ${os} item --gap ${os} Versions item jammy ${space} ${os} 22.04 item focal ${space} ${os} 20.04 item bionic ${space} ${os} 18.04 choose live_version || goto live_exit menu ${os} ${live_version} item --gap ${os} Flavors goto ${live_version} :jammy {% for key, value in endpoints.items() | sort %} {% if value.os == "pop" and 'squash' in key and value.version == "22.04" %} item {{ key }} ${space} {{ value.os | title }} {{ value.version }} {{ value.flavor | title}} {% endif %} {% endfor %} goto flavor_select :focal {% for key, value in endpoints.items() | sort %} {% if value.os == "pop" and 'squash' in key and value.version == "20.04" %} item {{ key }} ${space} {{ value.os | title }} {{ value.version }} {{ value.flavor | title}} {% endif %} {% endfor %} goto flavor_select :bionic {% for key, value in endpoints.items() | sort %} {% if value.os == "pop" and 'squash' in key and value.version == "18.04" %} item {{ key }} ${space} {{ value.os | title }} {{ value.version }} {{ value.flavor | title}} {% endif %} {% endfor %} goto flavor_select :flavor_select choose flavor || goto live_menu echo ${cls} goto ${flavor} || {% for key, value in endpoints.items() | sort %} {% if value.os == "pop" and 'squash' in key %} {% set kernel_name = value.kernel %} :{{ key }} set squash_url ${live_endpoint}{{ value.path }}filesystem.squashfs {% for key, value in endpoints.items() | sort %} {% if key == kernel_name %} set kernel_url ${live_endpoint}{{ value.path }} {% endif %} {% endfor %} goto {{ value.version }}-boot {% endif %} {% endfor %} :18.04-boot imgfree kernel ${kernel_url}vmlinuz ip=dhcp boot=casper netboot=http fetch=${squash_url} {{ kernel_params }} initrd ${kernel_url}initrd boot :20.04-boot :22.04-boot imgfree kernel ${kernel_url}vmlinuz ip=dhcp boot=casper netboot=url url=${squash_url} {{ kernel_params }} initrd ${kernel_url}initrd boot :live_exit clear menu exit 0 ================================================ FILE: roles/netbootxyz/templates/menu/live-q4os.ipxe.j2 ================================================ #!ipxe goto ${menu} || :live_menu set os Q4OS Live menu ${os} item --gap ${os} Versions {% for key, value in endpoints.items() | sort %} {% if value.os == "Q4OS" and 'squash' in key %} item {{ value.version }} ${space} ${os} {{ value.version }} {% endif %} {% endfor %} choose live_version || goto live_exit menu ${os} ${live_version} item --gap ${os} Flavors goto ${live_version} {% for key, value in endpoints.items() | sort %} {% if value.os == "Q4OS" and 'squash' in key %} :{{ value.version }} item {{ key }} ${space} {{ value.os | title }} {{ value.version }} {{ value.flavor | title}} {% endif %} {% endfor %} goto flavor_select :flavor_select choose flavor || goto live_menu echo ${cls} goto ${flavor} || {% for key, value in endpoints.items() | sort %} {% if value.os == "Q4OS" and 'squash' in key %} {% set kernel_name = value.kernel %} :{{ key }} set squash_url ${live_endpoint}{{ value.path }}filesystem.squashfs {% for key, value in endpoints.items() | sort %} {% if key == kernel_name %} set kernel_url ${live_endpoint}{{ value.path }} {% endif %} {% endfor %} goto q4os-boot {% endif %} {% endfor %} :q4os-boot imgfree kernel ${kernel_url}vmlinuz boot=live fetch=${squash_url} {{ kernel_params }} initrd ${kernel_url}initrd boot :live_exit clear menu exit 0 ================================================ FILE: roles/netbootxyz/templates/menu/live-raizo.ipxe.j2 ================================================ #!ipxe goto ${menu} || :live_menu set os Live Raizo menu ${os} item --gap ${os} Versions {% for key, value in endpoints.items() | sort %} {% if value.os == "raizo" %} item {{ value.version }} ${space} ${os} {{ value.version }} {% endif %} {% endfor %} choose live_version || goto live_exit goto ${live_version} {% for key, value in endpoints.items() | sort %} {% if value.os == "raizo" %} :{{ value.version }} set squash_url ${live_endpoint}{{ value.path }}filesystem.squashfs set kernel_url ${live_endpoint}{{ value.path }} goto boot {% endif %} {% endfor %} :boot imgfree kernel ${kernel_url}vmlinuz boot=live fetch=${squash_url} {{ kernel_params }} initrd ${kernel_url}initrd boot :live_exit clear menu exit 0 ================================================ FILE: roles/netbootxyz/templates/menu/live-regolith.ipxe.j2 ================================================ #!ipxe goto ${menu} || :live_menu set os Regolith menu ${os} item --gap ${os} Versions item current ${space} ${os} Current choose live_version || goto live_exit goto ${live_version} :current set squash_url ${live_endpoint}{{ endpoints["regolith-current"].path }}filesystem.squashfs set kernel_url ${live_endpoint}{{ endpoints["regolith-current"].path }} goto current-boot :current-boot imgfree kernel ${kernel_url}vmlinuz ip=dhcp boot=casper netboot=http fetch=${squash_url} {{ kernel_params }} initrd ${kernel_url}initrd boot :live_exit clear menu exit 0 ================================================ FILE: roles/netbootxyz/templates/menu/live-septor.ipxe.j2 ================================================ #!ipxe goto ${menu} || :live_menu set os Septor menu ${os} item --gap ${os} Versions {% for key, value in endpoints.items() | sort %} {% if value.os == "septor" %} item {{ value.version }} ${space} ${os} {{ value.version }} {% endif %} {% endfor %} choose live_version || goto live_exit goto ${live_version} {% for key, value in endpoints.items() | sort %} {% if value.os == "septor" %} :{{ value.version }} set squash_url ${live_endpoint}{{ value.path }}filesystem.squashfs set kernel_url ${live_endpoint}{{ value.path }} goto boot {% endif %} {% endfor %} :boot imgfree kernel ${kernel_url}vmlinuz boot=live fetch=${squash_url} {{ kernel_params }} initrd ${kernel_url}initrd boot :live_exit clear menu exit 0 ================================================ FILE: roles/netbootxyz/templates/menu/live-sparky.ipxe.j2 ================================================ #!ipxe goto ${menu} || :live_menu set os SparkyLinux Live menu ${os} item --gap ${os} Versions item stable ${space} ${os} Stable item rolling ${space} ${os} Rolling choose live_version || goto live_exit menu ${os} ${live_version} item --gap ${os} Flavors goto ${live_version} :stable {% for key, value in endpoints.items() | sort %} {% if value.os == "sparky" and value.version == "stable" %} item {{ key }} ${space} {{ value.os | title }} {{ value.version }} {{ value.flavor | title}} {% endif %} {% endfor %} goto flavor_select :rolling {% for key, value in endpoints.items() | sort %} {% if value.os == "sparky" and value.version == "rolling" %} item {{ key }} ${space} {{ value.os | title }} {{ value.version }} {{ value.flavor | title}} {% endif %} {% endfor %} goto flavor_select :flavor_select choose flavor || goto live_menu echo ${cls} goto ${flavor} || {% for key, value in endpoints.items() | sort %} {% if value.os == "sparky" %} {% set kernel_name = value.kernel %} :{{ key }} set squash_url ${live_endpoint}{{ value.path }}filesystem.squashfs set kernel_url ${live_endpoint}{{ value.path }} goto boot {% endif %} {% endfor %} :boot imgfree kernel ${kernel_url}vmlinuz boot=live fetch=${squash_url} {{ kernel_params }} initrd ${kernel_url}initrd boot :live_exit clear menu exit 0 ================================================ FILE: roles/netbootxyz/templates/menu/live-tails.ipxe.j2 ================================================ #!ipxe # Tails Operating System # https://tails.boum.org/ goto ${menu} || :live-tails clear tails_version set os Tails set os_arch ${arch} iseq ${os_arch} x86_64 && set os_arch amd64 || menu ${os} item --gap ${os} Versions {% for key, value in endpoints.items() | sort %} {% if value.os == "tails" %} item tails_{{ value.version }} ${space} ${os} {{ value.version }} {% endif %} {% endfor %} choose tails_version || goto tails_exit goto ${tails_version} {% for key, value in endpoints.items() | sort %} {% if value.os == "tails" %} :tails_{{ value.version }} set kernel_url ${live_endpoint}{{ value.path }} set iso_version {{ value.version }} goto boot {% endif %} {% endfor %} :boot imgfree kernel ${kernel_url}vmlinuz boot=live fromiso=/tails.iso config nopersistence noprompt timezone=Etc/UTC splash noautologin module=Tails slab_nomerge slub_debug=FZP mce=0 vsyscall=none page_poison=1 init_on_free=1 mds=full,nosmt {{ kernel_params }} initrd ${kernel_url}initrd.img initrd ${kernel_url}9990-misc-helpers.sh /usr/lib/live/boot/9990-misc-helpers.sh initrd ${kernel_url}tails-${os_arch}.iso /tails.iso boot :tails_exit clear menu exit 0 ================================================ FILE: roles/netbootxyz/templates/menu/live-ubuntu.ipxe.j2 ================================================ #!ipxe goto ${menu} || :live_menu set os Ubuntu Live menu ${os} item --gap ${os} Versions item jammy ${space} ${os} 22.04 item focal ${space} ${os} 20.04 choose live_version || goto live_exit menu ${os} ${live_version} item --gap ${os} Flavors goto ${live_version} :jammy {% for key, value in endpoints.items() | sort %} {% if value.os == "ubuntu" and 'squash' in key and value.version == "22.04" %} item {{ key }} ${space} {{ value.os | title }} {{ value.version }} {{ value.flavor | title }} {% endif %} {% endfor %} goto flavor_select :focal {% for key, value in endpoints.items() | sort %} {% if value.os == "ubuntu" and 'squash' in key and value.version == "20.04" %} item {{ key }} ${space} {{ value.os | title }} {{ value.version }} {{ value.flavor | title }} {% endif %} {% endfor %} goto flavor_select :flavor_select choose flavor || goto live_menu echo ${cls} goto ${flavor} || {% for key, value in endpoints.items() | sort %} {% if value.os == "ubuntu" and 'squash' in key %} {% set kernel_name = value.kernel %} :{{ key }} set squash_url ${live_endpoint}{{ value.path }}filesystem.squashfs {% for key, value in endpoints.items() | sort %} {% if key == kernel_name %} set kernel_url ${live_endpoint}{{ value.path }} {% endif %} {% endfor %} goto {{ value.version }}-boot {% endif %} {% endfor %} :20.04-boot :22.04-boot imgfree kernel ${kernel_url}vmlinuz ip=dhcp boot=casper netboot=url url=${squash_url} {{ kernel_params }} initrd ${kernel_url}initrd boot :live_exit clear menu exit 0 ================================================ FILE: roles/netbootxyz/templates/menu/live-vanillaos.ipxe ================================================ #!ipxe goto ${menu} || :live_menu set os Vanilla OS menu ${os} item --gap ${os} Versions {% for key, value in endpoints.items() | sort %} {% if value.os == "vanilla-os" %} item vanilla_{{ value.version }} ${space} ${os} {{ value.version }} {% endif %} {% endfor %} choose live_version || goto live_exit goto ${live_version} {% for key, value in endpoints.items() | sort %} {% if value.os == "vanilla-os" %} :vanilla_{{ value.version }} set kernel_url ${live_endpoint}{{ value.path }} goto boot {% endif %} {% endfor %} :boot imgfree kernel ${kernel_url}vmlinuz boot=live fetch=${kernel_url}/filesystem.squashfs config username=vanilla user-fullname=Vanilla quiet splash bgrt_disable modprobe.blacklist=nouveau initrd=initrd.magic ${cmdline} initrd ${kernel_url}initrd boot :live_exit clear menu exit 0 ================================================ FILE: roles/netbootxyz/templates/menu/live-voyager.ipxe.j2 ================================================ #!ipxe goto ${menu} || :live_menu set os Voyager Live menu ${os} item --gap ${os} Versions {% for key, value in endpoints.items() | sort %} {% if value.os == "Voyager" %} item {{ value.version }} ${space} ${os} {{ value.version }} {% endif %} {% endfor %} choose live_version || goto live_exit goto ${live_version} {% for key, value in endpoints.items() | sort %} {% if value.os == "Voyager" %} :{{ value.version }} set squash_url ${live_endpoint}{{ value.path }}filesystem.squashfs set kernel_url ${live_endpoint}{{ value.path }} imgfree {% if 'ubuntu-squash' in value.path %} kernel ${kernel_url}vmlinuz ip=dhcp boot=casper netboot=url url=${squash_url} {{ kernel_params }} {% endif %} {% if 'debian-squash' in value.path %} kernel ${kernel_url}vmlinuz boot=live fetch=${squash_url} {{ kernel_params }} {% endif %} initrd ${kernel_url}initrd boot {% endif %} {% endfor %} :live_exit clear menu exit 0 ================================================ FILE: roles/netbootxyz/templates/menu/live-zorin.ipxe.j2 ================================================ #!ipxe goto ${menu} || :live_menu set os Zorin Live menu ${os} item --gap ${os} Versions {% for key, value in endpoints.items() | sort %} {% if value.os == "zorin" %} item {{ value.version }} ${space} ${os} {{ value.version }} {% endif %} {% endfor %} choose live_version || goto live_exit menu ${os} ${live_version} item --gap ${os} Flavors goto ${live_version} {% for key, value in endpoints.items() | sort %} {% if value.os == "zorin" and 'squash' in key %} :{{ value.version }} item {{ key }} ${space} {{ value.os | title }} {{ value.version }} {{ value.flavor | title}} goto flavor_select {% endif %} {% endfor %} :flavor_select choose flavor || goto live_menu echo ${cls} goto ${flavor} || {% for key, value in endpoints.items() | sort %} {% if value.os == "zorin" and 'squash' in key %} {% set kernel_name = value.kernel %} :{{ key }} set squash_url ${live_endpoint}{{ value.path }}filesystem.squashfs {% for key, value in endpoints.items() | sort %} {% if key == kernel_name %} set kernel_url ${live_endpoint}{{ value.path }} {% endif %} {% endfor %} goto boot {% endif %} {% endfor %} :boot imgfree kernel ${kernel_url}vmlinuz ip=dhcp boot=casper netboot=url url=${squash_url} {{ kernel_params }} initrd ${kernel_url}initrd boot :live_exit clear menu exit 0 ================================================ FILE: roles/netbootxyz/templates/menu/live.ipxe.j2 ================================================ #!ipxe goto ${menu} || :live_menu menu Live Boot Distributions - Current Arch [ ${arch} ] item --gap Live Boot Distributions item live-backbox ${space} BackBox item live-bluestar ${space} Bluestar Linux item live-bodhi ${space} Bodhi item live-cachyos ${space} CachyOS item live-debian ${space} Debian item live-devuan ${space} Devuan item live-elementary ${space} elementary OS item live-endeavouros ${space} EndeavourOS item live-fatdog ${space} Fatdog64 item live-fedora ${space} Fedora item live-feren ${space} Feren OS item live-garuda ${space} Garuda Linux item live-grml ${space} Grml item live-hrmpf ${space} hrmpf item live-k3os ${space} K3OS item live-kali ${space} Kali item live-kodachi ${space} Kodachi item live-neon ${space} KDE Neon item live-lite ${space} Linux Lite item live-lxle ${space} LXLE item live-manjaro ${space} Manjaro item live-mint ${space} Mint item live-nitrux ${space} Nitrux item live-parrot ${space} Parrot OS item live-peppermint ${space} Peppermint item live-popos ${space} Pop OS item live-q4os ${space} Q4OS item live-raizo ${space} Live Raizo item live-regolith ${space} Regolith item live-septor ${space} Septor item live-sparky ${space} SparkyLinux item live-tails ${space} Tails item tinycore ${space} Tiny Core Linux item live-ubuntu ${space} Ubuntu item ubuntu-spins ${space} Ubuntu Spins item live-vanillaos ${space} Vanilla OS item live-voyager ${space} Voyager item live-zorin ${space} Zorin OS choose menu || goto live_exit echo ${cls} goto ${menu} || iseq ${sigs_enabled} true && goto verify_sigs || goto change_menu :verify_sigs imgverify ${menu}.ipxe ${sigs}${menu}.ipxe.sig || goto error goto change_menu :change_menu chain ${menu}.ipxe || goto error goto live_menu :live_exit clear menu exit 0 ================================================ FILE: roles/netbootxyz/templates/menu/lspci.ipxe.j2 ================================================ #!ipxe # gather pci devices and list them clear addr pciscan addr && goto pciscan_found || echo No PCI devices found... sleep 5 exit :pciscan_found set spaces2:hex 20:20 set spaces4:hex 20:20:20:20 imgfetch pciids.ipxe iseq ${sigs_enabled} true && goto verify_sigs || goto skip_verify :verify_sigs imgverify pciids.ipxe ${sigs}pciids.ipxe.sig || :skip_verify clear addr menu PCI device list :scan pciscan addr || goto scan_done clear ven clear dev set vendor ${pci/${addr}.0.2} set device ${pci/${addr}.2.2} chain pciids.ipxe item --gap ${addr:busdevfn} ${spaces4:string} ${ven} item b${addr:busdevfn} ${spaces2:string} ${vendor}:${device} ${dev} goto scan :scan_done choose press_enter || imgfree pciids.ipxe exit ================================================ FILE: roles/netbootxyz/templates/menu/mageia.ipxe.j2 ================================================ #!ipxe # Mageia Operating System # http://www.mageia.org/ # No way to set the network interface by MAC address, let the installer ask the question isset ${dhcp-server} && set network dhcp || set network static,ip:${ip},netmask:${netmask},gateway:${gateway},dns:${dns} goto ${menu} || :mageia set os {{ releases.mageia.name }} menu ${os} - ${arch} {% for item in releases.mageia.versions %} item {{ item.code_name }} ${space} ${os} {{ item.name }} {% endfor %} choose version || goto mageia_exit goto mageia_boot :mageia_boot set dir ${mageia_base_dir}/distrib/${version}/x86_64 && set dir2 isolinux/x86_64 || iseq ${arch} i386 && set dir ${mageia_base_dir}/distrib/${version}/i586 && set dir2 isolinux/i386 || set automatic method:http,network:${network},server:${mageia_mirror},directory:/${dir} imgfree kernel ${mageia_mirror}/${dir}/${dir2}/vmlinuz automatic=${automatic} vga=788 splash=silent {{ kernel_params }} initrd ${mageia_mirror}/${dir}/${dir2}/all.rdz echo echo MD5sums: md5sum vmlinuz all.rdz boot || goto mageia :mageia_exit clear menu exit 0 ================================================ FILE: roles/netbootxyz/templates/menu/menu.ipxe.j2 ================================================ #!ipxe {% if early_menu_enabled -%} {{ early_menu_contents }} {%- endif %} :start isset ${arch} && goto skip_arch_detect || cpuid --ext 29 && set arch x86_64 || set arch i386 iseq ${buildarch} arm64 && set arch arm64 || :skip_arch_detect chain --autofree boot.cfg || echo Attempting to retrieve latest upstream version number... chain --timeout 5000 https://boot.netboot.xyz/version.ipxe || ntp {{ time_server }} || iseq ${cls} serial && goto ignore_cls || set cls:hex 1b:5b:4a # ANSI clear screen sequence - "^[[J" set cls ${cls:string} :ignore_cls {% if 'x' in boot_version %} :version_check set latest_version {{ boot_version }} echo ${cls} iseq ${version} ${latest_version} && goto version_up2date || echo echo Updated version of {{ site_name }} is available: echo echo Running version.....${version} echo Updated version.....${latest_version} echo echo Please download the latest version from {{ site_name }}. echo echo Attempting to chain to latest version... chain --autofree http://${boot_domain}/ipxe/${ipxe_disk} || :version_up2date {% endif %} isset ${menu} && goto ${menu} || isset ${ip} || dhcp :main_menu clear menu set space:hex 20:20 set space ${space:string} isset ${next-server} && menu ${site_name} v${version} - next-server: ${next-server} || menu ${site_name} item --gap Default: item local ${space} Boot from local hdd item --gap Distributions: iseq ${menu_linux} 1 && item linux ${space} Linux Network Installs (64-bit) || iseq ${menu_linux_i386} 1 && item linux-i386 ${space} Linux Network Installs (32-bit) || iseq ${menu_linux_arm} 1 && item linux-arm ${space} Linux Network Installs (arm64) || iseq ${menu_live} 1 && item live ${space} Live CDs || iseq ${menu_live_arm} 1 && item live-arm ${space} Live CDs || iseq ${menu_bsd} 1 && item bsd ${space} BSD Installs || iseq ${menu_unix} 1 && item unix ${space} Unix Network Installs || iseq ${menu_freedos} 1 && item freedos ${space} FreeDOS || iseq ${menu_windows} 1 && item windows ${space} Windows || item --gap Tools: iseq ${menu_utils} 1 && iseq ${platform} efi && item utils-efi ${space} Utilities (UEFI) || iseq ${menu_utils} 1 && iseq ${platform} pcbios && iseq ${arch} x86_64 && item utils-pcbios-64 ${space} Utilities (64-bit) || iseq ${menu_utils} 1 && iseq ${platform} pcbios && iseq ${arch} i386 && item utils-pcbios-32 ${space} Utilities (32-bit) || iseq ${menu_utils_arm} 1 && item utils-arm ${space} Utilities (arm64) || item change_arch ${space} Architecture: ${arch} item shell ${space} iPXE shell item netinfo ${space} Network card info iseq ${menu_pci} 1 && item lspci ${space} PCI Device List || item about ${space} About netboot.xyz {% if sigs_menu | bool %} item --gap Signature Checks: {% if sigs_enabled | bool %} item sig_check ${space} {{ site_name }} [ enabled: ${sigs_enabled} ] {% endif %} {% endif %} {% if custom_github_menus | bool %} isset ${github_user} && item --gap Custom Github Menu: || isset ${github_user} && item custom-github ${space} ${github_user}'s Custom Menu || {% endif %} {% if custom_url_menus | bool %} isset ${custom_url} && item --gap Custom URL Menu: || isset ${custom_url} && item custom-url ${space} Custom URL Menu || {% endif %} {% if custom_generate_menus | bool %} item --gap Custom User Menus: || item custom-user ${space} Custom User Menus {% endif %} isset ${menu} && set timeout 0 || set timeout ${boot_timeout} choose --timeout ${timeout} --default ${menu} menu || goto local echo ${cls} goto ${menu} || iseq ${sigs_enabled} true && goto verify_sigs || goto change_menu :verify_sigs imgverify ${menu}.ipxe ${sigs}${menu}.ipxe.sig || goto error goto change_menu :change_menu chain ${menu}.ipxe || goto error goto main_menu :error echo Error occurred, press any key to return to menu ... prompt goto main_menu :local echo Booting from local disks ... exit 1 :shell echo Type "exit" to return to menu. set menu main_menu shell goto main_menu :change_arch iseq ${arch} x86_64 && set arch i386 && set menu_linux_i386 1 && set menu_linux 0 && goto main_menu || iseq ${arch} i386 && set arch x86_64 && set menu_linux_i386 0 && set menu_linux 1 && goto main_menu || goto main_menu :sig_check iseq ${sigs_enabled} true && set sigs_enabled false || set sigs_enabled true goto main_menu :about chain https://boot.netboot.xyz/about.ipxe || chain about.ipxe goto main_menu :custom-github chain https://raw.githubusercontent.com/${github_user}/netboot.xyz-custom/master/custom.ipxe || goto error goto main_menu :custom-url chain ${custom_url}/custom.ipxe || goto error goto main_menu :custom-user chain custom/custom.ipxe goto main_menu ================================================ FILE: roles/netbootxyz/templates/menu/nbxyz.ipxe.j2 ================================================ #!ipxe # netboot.xyz endpoints # used for accessing the latest internet build menus goto ${menu} || :nbxyz set os netboot.xyz clear nbxyz_version menu ${os} item --gap Endpoints item nbxyz-rolling ${space} Production Rolling (boot.netboot.xyz) item nbxyz-prod ${space} Production Release (boot.netboot.xyz) item nbxyz-staging ${space} Staging (staging.boot.netboot.xyz) item nbxyz-dev ${space} Development (dev.boot.netboot.xyz) choose nbxyz_version || goto nbxyz_exit imgfree goto ${nbxyz_version} :nbxyz-rolling chain --autofree https://boot.netboot.xyz/menu.ipxe || goto nbxyz :nbxyz-prod chain https://boot.netboot.xyz/version.ipxe || chain --autofree https://boot.netboot.xyz/${upstream_version}/menu.ipxe || goto nbxyz :nbxyz-staging chain https://staging.boot.netboot.xyz/version.ipxe || chain --autofree https://staging.boot.netboot.xyz/${upstream_version}/menu.ipxe || goto nbxyz :nbxyz-dev chain https://s3.amazonaws.com/dev.boot.netboot.xyz/version.ipxe || chain --autofree https://s3.amazonaws.com/dev.boot.netboot.xyz/${upstream_version}/menu.ipxe || goto nbxyz :nbxyz_exit exit 0 ================================================ FILE: roles/netbootxyz/templates/menu/netinfo.ipxe.j2 ================================================ #!ipxe menu Network info item --gap MAC: item mac ${space} ${netX/mac} item --gap IP/mask: item ip ${space} ${netX/ip}/${netX/netmask} item --gap Gateway: item gw ${space} ${netX/gateway} item --gap Domain: item domain ${space} ${netX/domain} item --gap DNS: item dns ${space} ${netX/dns} item --gap DHCP server: item dhcpserver ${space} ${netX/dhcp-server} item --gap Next-server: item nextserver ${space} ${next-server} isset ${proxydhcp/next-server} && item --gap DHCP proxy next-server: || isset ${proxydhcp/next-server} && item proxy-nextserver ${space} ${proxydhcp/next-server} || isset ${proxydhcp/next-server} && item --gap Booted from DHCP proxy next-server: || isset ${proxydhcp/next-server} && iseq ${proxydhcp/next-server} ${tftp-server} && item bootproxy ${space} Yes || item --gap Filename: isset ${proxydhcp/next-server} && item filename ${space} ${proxydhcp/filename} || item filename ${space} ${netX/filename} choose empty || exit ================================================ FILE: roles/netbootxyz/templates/menu/nixos.ipxe.j2 ================================================ #!ipxe # NixOS # https://nixos.org/ set os {{ releases.nixos.name }} set os_arch ${arch} iseq ${os_arch} x86_64 && set os_arch x86_64 || iseq ${os_arch} arm64 && set os_arch aarch64 || menu ${os} - ${os_arch} item --gap Official Releases {% for item in releases.nixos.versions %} item {{ item.code_name }} ${space} ${os} {{ item.name }} {% endfor %} choose version || goto nixos_exit imgfree chain https://github.com/nix-community/nixos-images/releases/download/${version}/netboot-${os_arch}-linux.ipxe goto nixos_exit :nixos_exit clear menu exit 0 ================================================ FILE: roles/netbootxyz/templates/menu/openEuler.ipxe.j2 ================================================ #!ipxe # openEuler # https://openeuler.org/ isset ${dhcp-server} && set ipparam ip=dhcp || set ipparam ip=${ip}::${gateway}:${netmask}:::none nameserver=${dns} set ipparam BOOTIF=${netX/mac} ${ipparam} goto ${menu} || :openEuler clear osversion set os {{ releases.openEuler.name }} menu ${os} - ${arch} {% for item in releases.openEuler.versions %} item {{ item.code_name }} ${space} ${os} {{ item.name }} {% endfor %} isset ${osversion} || choose osversion || goto linux_menu echo ${cls} set dir ${osversion}/OS/${arch} set repo ${openEuler_mirror}/${dir} goto boottype :boottype set ova ${os} ${osversion} menu ${os} ${arch} boot type item graphical ${ova} graphical installer item text ${ova} text based installer item rescue ${ova} rescue item kickstart ${ova} set kickstart url [ ${ks_url} ] isset ${bt} || choose bt || goto openEuler echo ${cls} iseq ${bt} text && goto text || iseq ${bt} rescue && goto rescue || iseq ${bt} kickstart && goto kickstart || iseq ${bt} kickstart_device && goto kickstart_device || goto bootos_images :graphical set install_mode inst.graphical || goto bootos_images :text set install_mode inst.text || goto bootos_images :rescue set params inst.rescue || goto bootos_images :kickstart echo -n Specify kickstart URL for ${os} ${osversion}: && read ks_url set params inst.ks=${ks_url} || clear bt goto boottype :bootos_images imgfree kernel ${openEuler_mirror}/${dir}/images/pxeboot/vmlinuz inst.repo=${repo} ${install_mode} ${params} ${ipparam} {{ kernel_params }} initrd ${openEuler_mirror}/${dir}/images/pxeboot/initrd.img echo echo MD5sums: md5sum vmlinuz initrd.img boot goto linux_menu :linux_menu clear menu exit 0 ================================================ FILE: roles/netbootxyz/templates/menu/openbsd.ipxe.j2 ================================================ #!ipxe # OpenBSD Operating System # http://www.openbsd.org :openbsd_menu set os {{ releases.openbsd.name }} set os_arch ${arch} iseq ${os_arch} x86_64 && set os_arch amd64 || iseq ${os_arch} i386 && set os_arch i386 || menu ${os} {% for item in releases.openbsd.versions %} item {{ item.code_name }} ${space} ${os} {{ item.name }} {% endfor %} choose ver || goto openbsd_exit {% for item in releases.openbsd.versions %} iseq ${ver} {{ item.code_name }} && set image_ver {{ item.image_ver }} || {% endfor %} goto boot_openbsd :boot_openbsd iseq ${platform} pcbios && goto pcbios_boot || iseq ${platform} efi && goto efi_boot || :pcbios_boot set src ${openbsd_mirror}/${openbsd_base_dir}/${ver}/${os_arch}/cd${image_ver}.iso imgfree initrd ${src} chain ${memdisk} iso raw goto openbsd_menu :efi_boot set src ${openbsd_mirror}/${openbsd_base_dir}/${ver}/${os_arch}/miniroot${image_ver}.img imgfree sanboot ${src} goto openbsd_menu :openbsd_exit clear menu exit 0 ================================================ FILE: roles/netbootxyz/templates/menu/opensuse.ipxe.j2 ================================================ #!ipxe # openSUSE Operating System # http://opensuse.org isset ${dhcp-server} || goto static_ip set netsetup netsetup=dhcp goto goto_menu :static_ip # Need to convert netmask into prefix, because otherwise the installer # accepts it but configures the network with /32 prefix, which installs # fine but breaks connectivity to devices in the same network. set prefix 32 iseq ${netmask} 0.0.0.0 && set prefix 0 || iseq ${netmask} 128.0.0.0 && set prefix 1 || iseq ${netmask} 192.0.0.0 && set prefix 2 || iseq ${netmask} 224.0.0.0 && set prefix 3 || iseq ${netmask} 240.0.0.0 && set prefix 4 || iseq ${netmask} 248.0.0.0 && set prefix 5 || iseq ${netmask} 252.0.0.0 && set prefix 6 || iseq ${netmask} 254.0.0.0 && set prefix 7 || iseq ${netmask} 255.0.0.0 && set prefix 8 || iseq ${netmask} 255.128.0.0 && set prefix 9 || iseq ${netmask} 255.192.0.0 && set prefix 10 || iseq ${netmask} 255.224.0.0 && set prefix 11 || iseq ${netmask} 255.240.0.0 && set prefix 12 || iseq ${netmask} 255.248.0.0 && set prefix 13 || iseq ${netmask} 255.252.0.0 && set prefix 14 || iseq ${netmask} 255.254.0.0 && set prefix 15 || iseq ${netmask} 255.255.0.0 && set prefix 16 || iseq ${netmask} 255.255.128.0 && set prefix 17 || iseq ${netmask} 255.255.192.0 && set prefix 18 || iseq ${netmask} 255.255.224.0 && set prefix 19 || iseq ${netmask} 255.255.240.0 && set prefix 20 || iseq ${netmask} 255.255.248.0 && set prefix 21 || iseq ${netmask} 255.255.252.0 && set prefix 22 || iseq ${netmask} 255.255.254.0 && set prefix 23 || iseq ${netmask} 255.255.255.0 && set prefix 24 || iseq ${netmask} 255.255.255.128 && set prefix 25 || iseq ${netmask} 255.255.255.192 && set prefix 26 || iseq ${netmask} 255.255.255.224 && set prefix 27 || iseq ${netmask} 255.255.255.240 && set prefix 28 || iseq ${netmask} 255.255.255.248 && set prefix 29 || iseq ${netmask} 255.255.255.252 && set prefix 30 || iseq ${netmask} 255.255.255.254 && set prefix 31 || iseq ${netmask} 255.255.255.255 && set prefix 32 || set netsetup netsetup=hostip,gateway,nameserver hostip=${ip}/${prefix} gateway=${gateway} nameserver=${dns} :goto_menu set netsetup ${netsetup} BOOTIF=${netX/mac} set distro opensuse set os_arch ${arch} iseq ${os_arch} x86_64 && set os_arch x86_64 || iseq ${os_arch} i386 && set os_arch i586 || iseq ${os_arch} arm64 && set os_arch aarch64 || menu openSUSE - ${os_arch} {% for item in releases.opensuse.versions %} item {{ item.code_name }} ${space} ${os} {{ item.name }} {% endfor %} choose version || goto opensuse_exit set dir ${opensuse_base_dir}/${version}/repo/oss iseq ${version} tumbleweed && set dir ${version}/repo/oss || # Tumbleweed ARM64 uses ports mirror iseq ${version} tumbleweed && iseq ${os_arch} aarch64 && set dir ports/aarch64/${version}/repo/oss || # Check if version needs live ISO boot method (16.0 and later) iseq ${version} 16.0 && set dir distribution/leap/${version}/repo/oss && set iso_dir distribution/leap/${version}/offline && set use_live_iso true || imgfree set kernel_url boot/${os_arch}/loader iseq ${os_arch} aarch64 && set kernel_url boot/${os_arch} || # Choose boot method based on version isset ${use_live_iso} && goto opensuse_live_boot || goto opensuse_standard_boot :opensuse_live_boot kernel ${opensuse_mirror}/${dir}/${kernel_url}/linux root=live:${opensuse_mirror}/${iso_dir}/Leap-${version}-online-installer-${os_arch}.install.iso ${netsetup} ${params} {{ kernel_params }} initrd ${opensuse_mirror}/${dir}/${kernel_url}/initrd goto boot_os :opensuse_standard_boot kernel ${opensuse_mirror}/${dir}/${kernel_url}/linux ${netsetup} install=${opensuse_mirror}/${dir} ${params} {{ kernel_params }} initrd ${opensuse_mirror}/${dir}/${kernel_url}/initrd goto boot_os :boot_os echo MD5sums: md5sum linux initrd boot :opensuse_exit clear menu exit 0 ================================================ FILE: roles/netbootxyz/templates/menu/oracle.ipxe.j2 ================================================ #!ipxe isset ${dhcp-server} && set ipparam ip=dhcp || set ipparam ip=${ip}::${gateway}:${netmask}:::none nameserver=${dns} set ipparam BOOTIF=${netX/mac} ${ipparam} goto ${menu} || :oracle_menu set os Oracle Linux menu ${os} set os_arch ${arch} iseq ${os_arch} x86_64 && set os_arch x86_64 || iseq ${os_arch} arm64 && set os_arch aarch64 || item --gap ${os} Versions {% set defined_versions = {} %} {% for key, value in endpoints.items() | sort %} {% if value.os == "oracle" %} {% if value.version not in defined_versions %} {% set _ = defined_versions.update({value.version: []}) %} {% endif %} {% set _ = defined_versions[value.version].append(value.arch) %} {% endif %} {% endfor %} {% for version, archs in defined_versions.items() | sort %} {% if archs | length > 1 %} item {{ version }} ${space} ${os} {{ version }} {% else %} iseq ${os_arch} {{ archs[0] }} && item {{ version }} ${space} ${os} {{ version }} || {% endif %} {% endfor %} choose version || goto oracle_exit goto ${version} {% for version, archs in defined_versions.items() | sort %} :{{ version }} {% for arch in archs %} iseq ${os_arch} {{ arch }} && goto {{ version }}_{{ arch }} || {% endfor %} goto oracle_exit {% endfor %} {% for key, value in endpoints.items() | sort %} {% if value.os == "oracle" %} :{{ value.version }}_{{ value.arch }} set url ${live_endpoint}{{ value.path }} set repo {{ releases.oracle.mirror }}{{ releases.oracle.paths[value.version|int] }}/${os_arch} goto boot {% endif %} {% endfor %} :boot imgfree kernel ${url}vmlinuz ${ipparam} inst.repo=${repo} root=live:${url}squashfs.img ro rd.live.image rd.lvm=0 rd.luks=0 rd.md=0 rd.dm=0 {{ kernel_params }} initrd ${url}initrd boot :oracle_exit clear menu exit 0 ================================================ FILE: roles/netbootxyz/templates/menu/photon.ipxe.j2 ================================================ #!ipxe # VMware Photon # https://vmware.github.io/photon/ goto ${menu} || :photon set os {{ releases.photon.name }} set os_arch ${arch} iseq ${os_arch} x86_64 && set os_arch x86_64 || iseq ${os_arch} arm64 && set os_arch aarch64 || clear photon_choice menu ${os} {% for key, value in endpoints.items() | sort %} {% if value.os == "vmware-photon" and value.arch == "x86_64" %} item --gap ${os} Installers item photon_install ${space} ${os} {{ value.version }} Installer {% endif %} {% endfor %} choose photon_choice || goto photon_exit goto ${photon_choice} :photon_install iseq ${os_arch} x86_64 && goto x86_64 || iseq ${os_arch} aarch64 && goto aarch64 || :x86_64 {% for key, value in endpoints.items() | sort %} {% if value.os == "vmware-photon" and value.arch == "x86_64" %} set kernel_url ${live_endpoint}{{ value.path }} set photon_version {{ value.version }} {% endif %} {% endfor %} goto photon_boot :aarch64 {% for key, value in endpoints.items() | sort %} {% if value.os == "vmware-photon" and value.arch == "aarch64" %} set kernel_url ${live_endpoint}{{ value.path }} set photon_version {{ value.version }} {% endif %} {% endfor %} goto photon_boot :photon_boot imgfree kernel ${kernel_url}vmlinuz root=/dev/ram0 loglevel=3 repo=https://packages.vmware.com/photon/${photon_version}/photon_release_${photon_version}_${os_arch} {{ kernel_params }} initrd ${kernel_url}initrd.img boot goto photon :photon_exit exit 0 ================================================ FILE: roles/netbootxyz/templates/menu/proxmox.ipxe.j2 ================================================ #!ipxe # Proxmox Open Source Products # https://www.proxmox.com goto ${menu} || :proxmox clear proxmox_choice clear proxmox_version set os Proxmox menu ${os} {% for key, value in endpoints.items() | sort %} {% if value.os == "proxmox-backup-server" %} item --gap ${os} Backup Server item pbs-normal ${space} ${os} Backup Server {{ value.version }} item pbs-text ${space} ${os} Backup Server {{ value.version }} (Text) item pbs-debug ${space} ${os} Backup Server {{ value.version }} (Debug) {% endif %} {% if value.os == "proxmox-mailgateway" %} item --gap ${os} Mail Gateway item pmg-normal ${space} ${os} Mail Gateway {{ value.version }} item pmg-text ${space} ${os} Mail Gateway {{ value.version }} (Text) item pmg-debug ${space} ${os} Mail Gateway {{ value.version }} (Debug) {% endif %} {% if value.os == "proxmox-datacenter-manager" %} item --gap ${os} Datacenter Manager item pdm-normal ${space} ${os} Datacenter Manager {{ value.version }} item pdm-text ${space} ${os} Datacenter Manager {{ value.version }} (Text) item pdm-debug ${space} ${os} Datacenter Manager {{ value.version }} (Debug) {% endif %} {% if value.os == "proxmox-ve" %} item --gap ${os} VE item pve-normal ${space} ${os} VE {{ value.version }} item pve-text ${space} ${os} VE {{ value.version }} (Text) item pve-debug ${space} ${os} VE {{ value.version }} (Debug) {% endif %} {% endfor %} choose proxmox_choice || goto proxmox_exit goto ${proxmox_choice} :pdm-normal set params splash=silent goto boot-pdm :pdm-text set params splash=silent proxtui goto boot-pdm :pdm-debug set params splash=verbose proxdebug goto boot-pdm :pve-normal set params splash=silent goto boot-pve :pve-text set params splash=silent proxtui goto boot-pve :pve-debug set params splash=verbose proxdebug goto boot-pve :pmg-normal set params splash=silent goto boot-pmg :pmg-text set params splash=silent proxtui goto boot-pmg :pmg-debug set params splash=verbose proxdebug goto boot-pmg :pbs-normal set params splash=silent goto boot-pbs :pbs-text set params splash=silent proxtui goto boot-pbs :pbs-debug set params splash=verbose proxdebug goto boot-pbs :boot-pbs {% for key, value in endpoints.items() | sort %} {% if value.os == "proxmox-backup-server" %} set kernel_url ${live_endpoint}{{ value.path }} set proxmox_version {{ value.version }} {% endif %} {% endfor %} imgfree kernel ${kernel_url}vmlinuz vga=791 video=vesafb:ywrap,mtrr ramdisk_size=16777216 rw quiet ${params} {{ kernel_params }} initrd ${kernel_url}initrd initrd ${kernel_url}proxmox.iso /proxmox.iso boot :boot-pmg {% for key, value in endpoints.items() | sort %} {% if value.os == "proxmox-mailgateway" %} set kernel_url ${live_endpoint}{{ value.path }} set proxmox_version {{ value.version }} {% endif %} {% endfor %} imgfree kernel ${kernel_url}vmlinuz vga=791 video=vesafb:ywrap,mtrr ramdisk_size=16777216 rw quiet ${params} {{ kernel_params }} initrd ${kernel_url}initrd initrd ${kernel_url}proxmox.iso /proxmox.iso boot :boot-pdm {% for key, value in endpoints.items() | sort %} {% if value.os == "proxmox-datacenter-manager" %} set kernel_url ${live_endpoint}{{ value.path }} set proxmox_version {{ value.version }} {% endif %} {% endfor %} imgfree kernel ${kernel_url}vmlinuz vga=791 video=vesafb:ywrap,mtrr ramdisk_size=16777216 rw quiet ${params} {{ kernel_params }} initrd ${kernel_url}initrd initrd ${kernel_url}proxmox.iso /proxmox.iso boot :boot-pve {% for key, value in endpoints.items() | sort %} {% if value.os == "proxmox-ve" %} set kernel_url ${live_endpoint}{{ value.path }} set proxmox_version {{ value.version }} {% endif %} {% endfor %} imgfree kernel ${kernel_url}vmlinuz vga=791 video=vesafb:ywrap,mtrr ramdisk_size=16777216 rw quiet ${params} {{ kernel_params }} initrd ${kernel_url}initrd initrd ${kernel_url}proxmox.iso /proxmox.iso boot :proxmox_exit clear menu exit 0 ================================================ FILE: roles/netbootxyz/templates/menu/rescuezilla.ipxe.j2 ================================================ #!ipxe # Rescuezilla Disk imaging # https://rescuezilla.com/ :rescuezilla set os {{ utilitiesefi.rescuezilla.name }} menu ${os} Live CD {% for key, value in endpoints.items() | sort %} {% if value.os == "rescuezilla" %} item {{ value.os }}_{{ value.version }} ${space} ${os} {{ value.version }} {% endif %} {% endfor %} choose rescuezilla_version || goto rescuezilla_exit goto ${rescuezilla_version} {% for key, value in endpoints.items() | sort %} {% if value.os == "rescuezilla" %} :{{ value.os }}_{{ value.version }} set kernel_url ${live_endpoint}{{ value.path }} imgfree kernel ${kernel_url}vmlinuz ip=dhcp boot=casper netboot=url url=${kernel_url}filesystem.squashfs {{ kernel_params }} initrd ${kernel_url}initrd boot {% endif %} {% endfor %} :rescuezilla_exit clear menu exit 0 ================================================ FILE: roles/netbootxyz/templates/menu/rhel.ipxe.j2 ================================================ #!ipxe # Redhat Enterprise Linux (RHEL) # https://www.redhat.com isset ${dhcp-server} && set ipparam ip=dhcp || set ipparam ip=${ip}::${gateway}:${netmask}:::none nameserver=${dns} set ipparam BOOTIF=${netX/mac} ${ipparam} set os_arch ${arch} iseq ${os_arch} x86_64 && set os_arch x86_64 || iseq ${os_arch} arm64 && set os_arch aarch64 || goto ${menu} || :rhel set os Red Hat Enterprise Linux - ${os_arch} clear rhel_version menu ${os} item --gap Installers item rhel_install ${space} ${os} Graphical Install item rhel_install_text ${space} ${os} Text Install item --gap Options: item url_set ${space} Base URL [ ${rhel_base_url} ] choose rhel_version || goto rhel_exit goto ${rhel_version} :url_set echo Set the HTTP URL of an extracted RHEL ISO without the trailing slash: echo e.g. http://www.mydomain.com/rhel/7 echo echo -n URL: ${} && read rhel_base_url echo echo netboot.xyz will attempt to load the following files: echo ${rhel_base_url}/os/${os_arch}/images/pxeboot/vmlinuz echo ${rhel_base_url}/os/${os_arch}/images/pxeboot/initrd.img echo prompt Press any key to return to RHEL Menu... goto rhel :rhel_install_text set params inst.text goto rhel_install :rhel_install isset ${rhel_base_url} && goto boot || echo URL not set... && goto url_set goto boot :boot imgfree kernel ${rhel_base_url}/os/${os_arch}/images/pxeboot/vmlinuz inst.repo=${rhel_base_url}/os/${os_arch} ${ipparam} ${params} {{ kernel_params }} initrd ${rhel_base_url}/os/${os_arch}/images/pxeboot/initrd.img md5sum vmlinuz initrd.img boot goto rhel :rhel_exit exit 0 ================================================ FILE: roles/netbootxyz/templates/menu/rockylinux.ipxe.j2 ================================================ #!ipxe # Rocky Linux # https://rockylinux.org/ isset ${dhcp-server} && set ipparam ip=dhcp || set ipparam ip=${ip}::${gateway}:${netmask}:::none nameserver=${dns} set ipparam BOOTIF=${netX/mac} ${ipparam} goto ${menu} || :rockylinux clear osversion set os {{ releases.rockylinux.name }} set os_arch ${arch} iseq ${os_arch} x86_64 && set os_arch x86_64 || iseq ${os_arch} arm64 && set os_arch aarch64 || menu ${os} - ${os_arch} {% for item in releases.rockylinux.versions %} item {{ item.code_name }} ${space} ${os} {{ item.name }} {% endfor %} isset ${osversion} || choose osversion || goto linux_menu echo ${cls} set dir ${rockylinux_base_dir}/${osversion}/BaseOS/${os_arch}/os set repo ${rockylinux_mirror}/${dir} goto boottype :boottype set ova ${os} ${osversion} menu ${os} ${os_arch} boot type item graphical ${ova} graphical installer item text ${ova} text based installer item rescue ${ova} rescue item kickstart ${ova} set kickstart url [ ${ks_url} ] isset ${bt} || choose bt || goto rockylinux echo ${cls} iseq ${bt} text && goto text || iseq ${bt} rescue && goto rescue || iseq ${bt} kickstart && goto kickstart || goto bootos_images :graphical set install_mode inst.graphical || goto bootos_images :text set install_mode inst.text || goto bootos_images :rescue set params inst.rescue || goto bootos_images :kickstart echo -n Specify kickstart URL for ${os} ${osversion}: && read ks_url set params inst.ks=${ks_url} || clear bt goto boottype :bootos_images imgfree kernel ${rockylinux_mirror}/${dir}/images/pxeboot/vmlinuz inst.repo=${repo} ${install_mode} ${params} ${ipparam} {{ kernel_params }} initrd ${rockylinux_mirror}/${dir}/images/pxeboot/initrd.img echo echo MD5sums: md5sum vmlinuz initrd.img boot goto linux_menu :linux_menu clear menu exit 0 ================================================ FILE: roles/netbootxyz/templates/menu/shredos.ipxe.j2 ================================================ #!ipxe goto ${menu} || :shredos set os_arch ${arch} iseq ${os_arch} x86_64 && set os_arch x86_64 || iseq ${os_arch} i386 && set os_arch i686 || menu ShredOS item --gap THIS SOFTWARE DESTROYS DATA item --gap EVERY BOOT OPTION IS DESTRUCTIVE item --gap DO NOT PROCEED IF YOU DO NOT KNOW WHAT THIS IS item shredos_exit ${space} Go Back item shredos_options ${space} Proceed I know what I am doing choose menu || goto shredos_exit goto ${menu} :shredos_options clear menu clear shredos_version {% for key, value in endpoints.items() | sort %} {% if value.os == "shredos" %} iseq ${os_arch} {{ value.arch }} && set kernel_url ${live_endpoint}{{ value.path }}shredos || set shredos_version {{ value.version }} {% endif %} {% endfor %} menu ShredOS ${shredos_version} item --gap Choose a wipe method: item dodshort ${space} Wipe all disks with the short DoD 5220.22-M method item dod522022m ${space} Wipe all disks with the DoD 5220.22-M method item dod3pass ${space} Wipe all disks with the DoD 5220.22-M method (3 pass) item ops2 ${space} Wipe all disks with the RCMP TSSIT OPS-II method item gutmann ${space} Wipe all disks with the Gutmann method item prng ${space} Wipe all disks with the PRNG Stream method choose nuke_method || goto shredos_exit goto shredos_boot :shredos_boot imgfree kernel ${kernel_url} console=tty3 loglevel=3 nwipe_options="--method=${nuke_method}" ${cmdline} boot :shredos_exit clear menu exit 0 ================================================ FILE: roles/netbootxyz/templates/menu/slackware.ipxe.j2 ================================================ #!ipxe # Slackware Operating System # http://www.slackware.com goto ${menu} :slackware set os slackware iseq ${arch} x86_64 && set sbits 64 || clear sbits menu ${os} {% for item in releases.slackware.versions %} item {{ item.code_name }} ${space} ${os} {{ item.name }} {% endfor %} item --key o other Choose other version [o] choose version || exit 0 iseq ${version} other || goto skip_read_version echo ${cls} echo -n Enter version: ${} && read version :skip_read_version set dir ${slackware_base_dir}/slackware${sbits}-${version} goto boot :boot imgfree kernel ${slackware_mirror}/${dir}/kernels/huge.s/bzImage initrd ${slackware_mirror}/${dir}/isolinux/initrd.img imgargs bzImage load_ramdisk=1 prompt_ramdisk=0 rw printk.time=0 tz=localtime initrd=initrd.magic ${cmdline} isset ${debug} && prompt || boot ================================================ FILE: roles/netbootxyz/templates/menu/smartos.ipxe.j2 ================================================ #!ipxe ###################################### # SmartOS # # https://www.smartos.org/ # # Credit: https://github.com/bahamat # ###################################### :custom clear smartos_build clear kflags set noimport false set kmdb_e false set kmdb_b false goto smartos_menu :smartos_menu set os {{ releases.smartos.name }} menu ${os} item --gap Platform Images: {% for item in releases.smartos.versions %} item {{ item.code_name }} ${space} ${os} {{ item.name }} {% endfor %} item --gap Options: item toggle_pool ${space} Rescue mode: ${noimport} item toggle_kmdb_e ${space} Load Kernel Debugger: ${kmdb_e} item toggle_kmdb_b ${space} Boot Kernel Debugger First: ${kmdb_b} iseq ${noimport} true && item --gap ${space} || iseq ${noimport} true && item --gap ${space} Zpool will not be imported. Rescue mode root password can be found at || iseq ${noimport} true && item --gap ${space} https://us-central.manta.mnx.io/Joyent_Dev/public/SmartOS/smartos.html || choose smartos_build || goto smartos_exit iseq ${smartos_build} toggle_pool && goto toggle_pool || iseq ${smartos_build} toggle_kmdb_e && goto toggle_kmdb_e || iseq ${smartos_build} toggle_kmdb_b && goto toggle_kmdb_b || goto smartos_boot :smartos_boot iseq ${kmdb_e} true && set kflags:hex 2d:6b || iseq ${kmdb_b} true && set kflags:hex 2d:6b:64 || kernel ${smartos_mirror}${smartos_build}${smartos_base_dir}kernel/amd64/unix ${kflags:string} -B console=text,text-mode="115200,8,n,1,-",smartos=true,noimport=${noimport}${root_shadow:string} ${cmdline} module ${smartos_mirror}${smartos_build}${smartos_base_dir}amd64/boot_archive type=rootfs name=ramdisk || goto fail module ${smartos_mirror}${smartos_build}${smartos_base_dir}amd64/boot_archive.hash type=hash name=ramdisk || goto fail boot :toggle_pool iseq ${noimport} true && set noimport false || set noimport true iseq ${noimport} false && clear root_shadow || set root_shadow:hex 2c:72:6f:6f:74:5f:73:68:61:64:6f:77:3d:27:24:35:24:32:48:4f:48:52:6e:4b:33:24:4e:76:4c:6c:6d:2e:31:4b:51:42:62:42:30:57:6a:6f:50:37:78:63:49:77:47:6e:6c:6c:68:7a:70:32:48:6e:54:2e:6d:44:4f:37:44:70:78:59:41:27:0a goto smartos_menu :toggle_kmdb_e iseq ${kmdb_e} true && set kmdb_e false || set kmdb_e true iseq ${kmdb_e} false && set kmdb_b false || goto smartos_menu :toggle_kmdb_b iseq ${kmdb_b} true && set kmdb_b false || set kmdb_b true iseq ${kmdb_b} true && set kmdb_e true || goto smartos_menu :smartos_exit clear menu exit 0 ================================================ FILE: roles/netbootxyz/templates/menu/systemrescue.ipxe.j2 ================================================ #!ipxe goto ${menu} || :live_menu set os System Rescue set os_arch ${arch} isset ${rootpass_enabled} || set rootpass_enabled false set rootpass ${mac:hexraw} iseq ${os_arch} x86_64 && set os_arch amd64 || iseq ${os_arch} i386 && set os_arch i686 || menu ${os} set ipparam BOOTIF=${netX/mac} ip=dhcp net.ifnames=0 item --gap ${os} Versions {% for key, value in endpoints.items() | sort %} {% if value.os == "systemrescue" %} iseq ${os_arch} {{ value.arch }} && item {{ value.version }}_${os_arch} ${space} ${os} {{ value.version }} || {% endif %} {% endfor %} item rootpass_mac Enable rootpass=${rootpass} [IP:${ip}] [ enabled: ${rootpass_enabled} ] choose live_version || goto live_exit goto ${live_version} {% for key, value in endpoints.items() | sort %} {% if value.os == "systemrescue" %} :{{ value.version }}_{{ value.arch }} set url ${live_endpoint}{{ value.path }} goto boot {% endif %} {% endfor %} :rootpass_mac clear params iseq ${rootpass_enabled} true && set rootpass_enabled false || set rootpass_enabled true && set params rootpass=${rootpass} nofirewall goto live_menu :boot imgfree kernel ${url}vmlinuz archisobasedir=sysresccd ${ipparam} archiso_http_srv=${url} ${params} {{ kernel_params }} initrd ${url}initrd initrd ${url}archiso_pxe_http /hooks/archiso_pxe_http mode=755 boot :live_exit clear menu exit 0 ================================================ FILE: roles/netbootxyz/templates/menu/talos.ipxe.j2 ================================================ #!ipxe # Talos # https://github.com/siderolabs/talos/releases # https://www.talos.dev/v1.6/talos-guides/install/bare-metal-platforms/pxe goto ${menu} || :talos set os {{ releases.talos.name }} set os_arch ${arch} iseq ${os_arch} x86_64 && set os_arch amd64 || iseq ${os_arch} arm64 && set os_arch arm64 || isset ${talos_version} || set talos_version latest isset ${talos_mirror} || set talos_mirror {{ releases.talos.mirror }} isset ${talos_platform} || set talos_platform metal menu ${os} by Talos Systems menu ${os} install item --gap Talos: item talos_boot ${space} Begin install ${os} ${talos_version} item --gap Parameters: item talos_version ${space} ${os} version: ${talos_version} item talos_config_url ${space} Set userdata.yaml URL: ${talos_config_url} item talos_mirror ${space} Set mirror URL: ${talos_mirror} item talos_platform ${space} Set platform: ${talos_platform} choose --default ${menu} menu || goto talos_exit echo ${cls} goto ${menu} || goto talos_exit :talos_version menu ${os} version item latest ${space} latest item custom ${space} Set custom version choose --default ${version} version || goto talos_exit echo ${cls} goto talos_version_${version} || goto talos_exit :talos_version_latest set talos_version latest set talos_base_url ${talos_mirror}/latest/download goto talos :talos_version_custom clear talos_version echo -n Please set Talos version manually (in format vX.Y.Z): && read talos_version set talos_base_url ${talos_mirror}/download/${talos_version} clear menu goto talos :talos_mirror echo -n Set mirror URL: && read talos_mirror clear menu goto talos :talos_config_url echo -n Set userdata.yaml URL: && read talos_config_url clear menu goto talos # https://www.talos.dev/latest/reference/kernel/#talosplatform :talos_platform menu ${os} platforms {% for item in releases.talos.platforms %} item {{ item.key }} ${space} {{ item.name }} {% endfor %} choose --default ${talos_platform} talos_platform goto talos # https://www.talos.dev/latest/reference/kernel/ :talos_boot isset ${talos_base_url} || set talos_base_url ${talos_mirror}/latest/download isset ${talos_config_url} && set talos_config talos.config=${talos_config_url} || {# Edit releases.talos.custom_kernel_params in main.yml for custom kernel params #} {% if releases.talos.custom_kernel_params is defined and releases.talos.custom_kernel_params %} set boot_params {{ releases.talos.custom_kernel_params }} {% else %} set boot_params printk.devkmsg=on slab_nomerge pti=on console=ttyS0 console=tty0 init_on_alloc=1 init_on_free=1 consoleblank=0 nvme_core.io_timeout=4294967295 ima_template=ima-ng ima_appraise=fix ima_hash=sha512 talos.platform=${talos_platform} ${talos_config} initrd=initrd.magic ${cmdline} {% endif %} imgfree kernel ${talos_base_url}/vmlinuz-${os_arch} ${boot_params} initrd ${talos_base_url}/initramfs-${os_arch}.xz echo echo Booting with the following kernel args: echo ${boot_params} echo echo MD5sums: md5sum vmlinuz-${os_arch} initramfs-${os_arch}.xz boot :talos_exit clear menu exit 0 ================================================ FILE: roles/netbootxyz/templates/menu/tinycore.ipxe.j2 ================================================ #!ipxe # Tiny Core Linux # http://tinycorelinux.net/downloads.html set tinycore_mirror {{ releases.tinycore.mirror }} :arch_menu set os Tiny Core Linux menu ${os} item --gap Please choose a version below: item x86 ${space} ${os} x86 (default) item x86_64 ${space} ${os} x86_64 choose arch || goto tinycore_exit goto ${arch} :x86 menu ${os} item --gap Please choose a version below: {% for item in releases.tinycore.versions %} {% if item.arch == "x86" %} item {{ item.code_name }} ${space} ${os} {{ item.name }} {% endif %} {% endfor %} choose version || goto tinycore_exit goto ${version} :x86_64 menu ${os} item --gap Please choose a version below: {% for item in releases.tinycore.versions %} {% if item.arch == "x86_64" %} item {{ item.code_name }} ${space} ${os} {{ item.name }} {% endif %} {% endfor %} choose version || goto tinycore_exit goto ${version} {% for item in releases.tinycore.versions %} :{{ item.code_name }} set kernel_url ${tinycore_mirror}{{ item.kernel }} set initrd_url ${tinycore_mirror}{{ item.initrd }} goto boot {% endfor %} :boot imgfree kernel ${kernel_url} loglevel=3 {{ kernel_params }} initrd ${initrd_url} boot :tinycore_exit clear menu exit 0 ================================================ FILE: roles/netbootxyz/templates/menu/ubuntu-spins.ipxe.j2 ================================================ #!ipxe goto ${menu} || :live_menu set os Ubuntu Spins menu ${os} item --gap ${os} Versions {% for key, value in endpoints.items() | sort %} {% if value.os == "ubuntu-spins" %} item spins_{{ value.version }} ${space} ${os} {{ value.version }} {% endif %} {% endfor %} choose ubuntu_spins || goto live_exit menu ${os} item --gap ${os} Flavors goto ${ubuntu_spins} {% for key, value in endpoints.items() | sort %} {% if value.os == "ubuntu-spins" %} :spins_{{ value.version }} set kernel_url ${live_endpoint}{{ value.path }} goto boot {% endif %} {% endfor %} :boot imgfree kernel ${kernel_url}vmlinuz iso-chooser-menu boot=casper ip=dhcp initrd=initrd.magic ${cmdline} initrd ${kernel_url}initrd boot :live_exit clear menu exit 0 ================================================ FILE: roles/netbootxyz/templates/menu/ubuntu.ipxe.j2 ================================================ #!ipxe # Ubuntu Operating System # https://www.ubuntu.com goto ${menu} :ubuntu set os Ubuntu set os_arch ${arch} iseq ${os_arch} x86_64 && set os_arch amd64 || iseq ${os_arch} arm64 && set os_arch arm64 || clear ubuntu_version clear install_type clear older_release clear install_url clear kernel_flavor set install_type sub set install_priority critical menu ${os} - ${os_arch} item --gap Latest Releases {% for item in releases.ubuntu.versions %} item {{ item.code_name }} ${space} ${os} {{ item.name }} {% endfor %} item --gap Older Releases item older_release ${space} Set release codename... choose ubuntu_version || goto ubuntu_exit iseq ${ubuntu_version} older_release && goto older_release || iseq ${ubuntu_version} focal-legacy && set install_type deb || iseq ${ubuntu_version} focal-legacy && set ubuntu_version focal || iseq ${install_type} sub && goto kernel_type || iseq ${os_arch} arm64 && echo "arm64 not supported on legacy network installs, please use 20.04 Subiquity and up" && sleep 5 && goto ubuntu || goto mirrorcfg :kernel_type set kernel_flavor generic {% for key, value in endpoints.items() | sort %} {% if value.os == "ubuntu" and value.flavor is defined and value.flavor == "netboot-hwe" and value.codename is defined and value.arch is defined %} iseq ${ubuntu_version} {{ value.codename }} && iseq ${os_arch} {{ value.arch }} && goto kernel_type_menu || {% endif %} {% endfor %} goto boot_type :kernel_type_menu menu ${os} [${ubuntu_version}] ${os_arch} - Kernel Type item --gap Select kernel type item generic ${space} Generic Kernel (default) item hwe ${space} HWE Kernel (Hardware Enablement) choose --default ${kernel_flavor} kernel_flavor || goto ubuntu goto boot_type :older_release set older_release true set ubuntu_mirror {{ releases.ubuntu.archive_mirror }} echo Setting mirror to ${ubuntu_mirror} clear ubuntu_version echo -n Please set enter code name of release: ${} && read ubuntu_version set dir ${ubuntu_base_dir}/dists/${ubuntu_version}-updates/main/installer-${os_arch}/current/images/netboot/ goto boot_type :mirrorcfg set mirrorcfg mirror/suite=${ubuntu_version} set dir ${ubuntu_base_dir}/dists/${ubuntu_version}-updates/main/installer-${os_arch}/current/images/netboot/ iseq ${ubuntu_version} focal && set dir ${ubuntu_base_dir}/dists/${ubuntu_version}-updates/main/installer-${os_arch}/current/legacy-images/netboot/ || goto boot_type :boot_type menu ${os} [${ubuntu_version}] Installer item --gap Install types item install ${space} Install item rescue ${space} Rescue Mode item automated ${space} Specify preseed/autoinstall url... iseq ${install_type} deb && item priority ${space} Change install priority [ ${install_priority} ] || choose --default ${type} type || goto ubuntu echo ${cls} goto deb_${type} :deb_rescue iseq ${install_type} deb && set install_params rescue/enable=true || iseq ${install_type} sub && set install_params systemd.unit=rescue.target || goto deb_install :deb_priority iseq ${install_priority} critical && set install_priority low || set install_priority critical goto boot_type :deb_automated iseq ${install_type} deb && set install_name preseed || iseq ${install_type} sub && set install_name autoinstall || echo -n Specify ${install_name} URL for ${os} ${ubuntu_version}: && read install_url iseq ${install_type} deb && set install_params auto=true priority=${install_priority} preseed/url=${install_url} || iseq ${install_type} sub && set install_params autoinstall ds=nocloud-net;s=${install_url} || goto deb_install :deb_install iseq ${install_type} deb && goto deb_boot || iseq ${kernel_flavor} hwe && goto ${ubuntu_version}_${os_arch}_hwe || iseq ${install_type} sub && goto ${ubuntu_version}_${os_arch} || :deb_boot echo Loading Ubuntu PXE netboot installer set dir ${dir}ubuntu-installer/${os_arch} imgfree kernel ${ubuntu_mirror}/${dir}/linux ${install_params} ${mirrorcfg} {{ kernel_params }} initrd ${ubuntu_mirror}/${dir}/initrd.gz echo echo MD5sums: md5sum linux initrd.gz boot {% for key, value in endpoints.items() | sort %} {% if value.os == "ubuntu" and value.flavor is defined and value.flavor == "netboot" %} {% set kernel_name = value.kernel %} :{{ value.codename }}_{{ value.arch }} {% for key, value in endpoints.items() | sort %} {% if key == kernel_name %} set kernel_url ${live_endpoint}{{ value.path }} set codename {{ value.codename }} set version_number {{ value.version }} {% endif %} {% endfor %} goto sub_boot {% endif %} {% endfor %} {% for key, value in endpoints.items() | sort %} {% if value.os == "ubuntu" and value.flavor is defined and value.flavor == "netboot-hwe" %} {% set kernel_name = value.kernel %} :{{ value.codename }}_{{ value.arch }}_hwe {% for key, value in endpoints.items() | sort %} {% if key == kernel_name %} set kernel_url ${live_endpoint}{{ value.path }} set codename {{ value.codename }} set version_number {{ value.version }} {% endif %} {% endfor %} goto sub_boot {% endif %} {% endfor %} :sub_boot imgfree iseq ${os_arch} amd64 && set ubuntu_iso_url http://releases.ubuntu.com/${codename}/ubuntu-${version_number}-live-server-${os_arch}.iso || iseq ${os_arch} arm64 && set ubuntu_iso_url http://cdimage.ubuntu.com/releases/${version_number}/release/ubuntu-${version_number}-live-server-${os_arch}.iso || isset ${dhcp-server} && set netboot_params ip=dhcp url=${ubuntu_iso_url} || set netboot_params echo Loading Ubuntu Subiquity Network Installer... kernel ${kernel_url}vmlinuz root=/dev/ram0 ramdisk_size=3500000 cloud-config-url=/dev/null ${netboot_params} ${install_params} {{ kernel_params }} initrd ${kernel_url}initrd echo echo MD5sums: md5sum vmlinuz initrd boot :ubuntu_exit clear menu exit 0 ================================================ FILE: roles/netbootxyz/templates/menu/unix.ipxe.j2 ================================================ #!ipxe goto ${menu} || :unix_menu menu Unix Installers item --gap Unix Distros: {% for key, value in releases.items() | sort(attribute='1.name') %} {% if value.enabled is defined and value.menu == "unix" and value.enabled | bool %} item {{ key }} ${space} {{ value.name }} {% endif %} {% endfor %} choose menu || goto unix_exit echo ${cls} goto ${menu} || iseq ${sigs_enabled} true && goto verify_sigs || goto change_menu :verify_sigs imgverify ${menu}.ipxe ${sigs}${menu}.ipxe.sig || goto error goto change_menu :change_menu chain ${menu}.ipxe || goto error goto unix_menu :unix_exit clear menu exit 0 ================================================ FILE: roles/netbootxyz/templates/menu/utils-arm.ipxe.j2 ================================================ #!ipxe menu Utilities item --gap Utilities: {% for key, value in utilitiesarm.items() | sort(attribute='1.name') %} {% if value.enabled %} item {{ key }} ${space} {{ value.name }} {% endif %} {% endfor %} item --gap netboot.xyz tools: item nbxyz ${space} netboot.xyz endpoints choose --default ${menu} menu || goto utils_exit echo ${cls} goto ${menu} || chain ${menu}.ipxe || goto utils_exit goto utils_exit {% for key, value in utilitiesarm.items() | sort %} {% if value.enabled | bool and value.type == "direct" %} :{{ key }} imgfree kernel {{ value.kernel }} {% if value.initrd is defined and value.initrd %} initrd {{ value.initrd }} {% endif %} boot goto utils_exit {% endif %} {% endfor %} {% for key, value in utilitiesefi.items() | sort %} {% if value.enabled | bool and value.type == "sanboot" %} :{{ key }} imgfree sanboot {{ value.kernel }} goto utils_exit {% endif %} {% endfor %} :utils_exit clear menu exit 0 ================================================ FILE: roles/netbootxyz/templates/menu/utils-efi.ipxe.j2 ================================================ #!ipxe :utils_menu menu Utilities item --gap Utilities: {% for key, value in utilitiesefi.items() | sort(attribute='1.name') %} {% if value.enabled %} item {{ key }} ${space} {{ value.name }} {% endif %} {% endfor %} item --gap netboot.xyz tools: item cmdline ${space} Kernel cmdline params: [${cmdline}] item nbxyz_custom_url ${space} Set custom menu [url: ${custom_url}] item nbxyz_custom_github ${space} Set Github username [user: ${github_user}] item nbxyz ${space} netboot.xyz endpoints choose --default ${menu} menu || goto utils_exit echo ${cls} goto ${menu} || chain ${menu}.ipxe || goto utils_exit goto utils_exit {% for key, value in utilitiesefi.items() | sort %} {% if value.enabled | bool and value.type == "direct" %} :{{ key }} imgfree kernel {{ value.kernel }} {% if value.initrd is defined and value.initrd %} initrd {{ value.initrd }} {% endif %} boot goto utils_exit {% endif %} {% endfor %} {% for key, value in utilitiesefi.items() | sort %} {% if value.enabled | bool and value.type == "sanboot" %} :{{ key }} imgfree sanboot {{ value.kernel }} goto utils_exit {% endif %} {% endfor %} :cmdline echo If you want to change the default kernel command line parameters echo you can override the defaults here. echo echo Currently set to: ${cmdline} echo echo -n Enter cmdline parameters: ${} && read cmdline goto utils_menu :memtest86plus imgfree kernel {{ utilitiesefi.memtest86plus.util_path }} boot goto utils_menu :nbxyz_custom_url echo If you have a customized menu you would like to load into netboot.xyz echo set the base path url to your custom ipxe files here. echo It will look for custom.ipxe in that path as the entry point. echo echo -n Please enter your custom http url here: ${} && read custom_url goto utils_menu :nbxyz_custom_github echo Make sure you have a fork of https://github.com/netbootxyz/netboot.xyz-custom. echo You can then customize your fork as needed and set up your own custom options. echo Once your username is set, a custom option will appear on the main menu. echo echo -n Please enter your Github username: ${} && read github_user goto utils_menu :utils_exit clear menu exit 0 ================================================ FILE: roles/netbootxyz/templates/menu/utils-pcbios-32.ipxe.j2 ================================================ #!ipxe :utils_menu menu Utilities item --gap Utilities: {% for key, value in utilitiespcbios32.items() | sort(attribute='1.name') %} {% if value.enabled %} item {{ key }} ${space} {{ value.name }} {% endif %} {% endfor %} item --gap netboot.xyz tools: item cmdline ${space} Kernel cmdline params: [${cmdline}] item nbxyz_custom_url ${space} Set custom menu [url: ${custom_url}] item nbxyz_custom_github ${space} Set Github username [user: ${github_user}] item testdistro ${space} Test Distribution ISO item nbxyz ${space} netboot.xyz endpoints choose --default ${menu} menu || goto utils_exit echo ${cls} goto ${menu} || chain ${menu}.ipxe || goto utils_exit goto utils_exit {% for key, value in utilitiespcbios32.items() | sort %} {% if value.enabled | bool and value.type == "memdisk" %} :{{ key }} set util_path {{ value.util_path }} set util_file {{ value.util_path | basename }} set util_version {{ value.version }} goto boot_{{ value.type }} {% endif %} {% endfor %} {% for key, value in utilitiespcbios32.items() | sort %} {% if value.enabled | bool and value.type == "direct" %} :{{ key }} imgfree kernel {{ value.kernel }} initrd {{ value.initrd }} boot goto utils_exit {% endif %} {% endfor %} :boot_memdisk imgfree kernel ${memdisk} iso raw initrd --name ${util_file} ${util_path} echo echo MD5sums: md5sum memdisk ${util_file} boot goto utils_exit :cmdline echo If you want to change the default kernel command line parameters echo you can override the defaults here. echo echo Currently set to: ${cmdline} echo echo -n Enter cmdline parameters: ${} && read cmdline goto utils_menu :memtest86legacy imgfree kernel {{ utilitiespcbios32.memtest86legacy.util_path }} boot goto utils_menu :memtest86plus imgfree kernel {{ utilitiespcbios32.memtest86plus.util_path }} boot goto utils_menu :nbxyz_custom_url echo If you have a customized menu you would like to load into netboot.xyz echo set the base path url to your custom ipxe files here. echo It will look for custom.ipxe in that path as the entry point. echo echo -n Please enter your custom http url here: ${} && read custom_url goto utils_menu :nbxyz_custom_github echo Make sure you have a fork of https://github.com/netbootxyz/netboot.xyz-custom. echo You can then customize your fork as needed and set up your own custom options. echo Once your username is set, a custom option will appear on the main menu. echo echo -n Please enter your Github username: ${} && read github_user goto utils_menu :testdistro echo This option will allow you to test booting an ISO using memdisk. Please echo specify the URL of the ISO you want to test and it will automatically echo attempt to load the ISO using memdisk. echo -n URL: ${} && read distro_iso kernel ${memdisk} iso raw initrd ${distro_iso} boot goto utils_menu :utils_exit clear menu exit 0 ================================================ FILE: roles/netbootxyz/templates/menu/utils-pcbios-64.ipxe.j2 ================================================ #!ipxe :utils_menu menu Utilities item --gap Utilities: {% for key, value in utilitiespcbios64.items() | sort(attribute='1.name') %} {% if value.enabled %} item {{ key }} ${space} {{ value.name }} {% endif %} {% endfor %} item --gap netboot.xyz tools: item cmdline ${space} Kernel cmdline params: [${cmdline}] item nbxyz_custom_url ${space} Set custom menu [url: ${custom_url}] item nbxyz_custom_github ${space} Set Github username [user: ${github_user}] item testdistro ${space} Test Distribution ISO item nbxyz ${space} netboot.xyz endpoints choose --default ${menu} menu || goto utils_exit echo ${cls} goto ${menu} || chain ${menu}.ipxe || goto utils_exit goto utils_exit {% for key, value in utilitiespcbios64.items() | sort %} {% if value.enabled | bool and value.type == "memdisk" %} :{{ key }} set util_path {{ value.util_path }} set util_file {{ value.util_path | basename }} set util_version {{ value.version }} goto boot_{{ value.type }} {% endif %} {% endfor %} {% for key, value in utilitiespcbios64.items() | sort %} {% if value.enabled | bool and value.type == "direct" %} :{{ key }} imgfree kernel {{ value.kernel }} initrd {{ value.initrd }} boot goto utils_exit {% endif %} {% endfor %} :boot_memdisk imgfree kernel ${memdisk} iso raw initrd --name ${util_file} ${util_path} echo echo MD5sums: md5sum memdisk ${util_file} boot goto utils_exit :cmdline echo If you want to change the default kernel command line parameters echo you can override the defaults here. echo echo Currently set to: ${cmdline} echo echo -n Enter cmdline parameters: ${} && read cmdline goto utils_menu :memtest86legacy imgfree kernel {{ utilitiespcbios64.memtest86legacy.util_path }} boot goto utils_menu :memtest86plus imgfree kernel {{ utilitiespcbios64.memtest86plus.util_path }} boot goto utils_menu :nbxyz_custom_url echo If you have a customized menu you would like to load into netboot.xyz echo set the base path url to your custom ipxe files here. echo It will look for custom.ipxe in that path as the entry point. echo echo -n Please enter your custom http url here: ${} && read custom_url goto utils_menu :nbxyz_custom_github echo Make sure you have a fork of https://github.com/netbootxyz/netboot.xyz-custom. echo You can then customize your fork as needed and set up your own custom options. echo Once your username is set, a custom option will appear on the main menu. echo echo -n Please enter your Github username: ${} && read github_user goto utils_menu :testdistro echo This option will allow you to test booting an ISO using memdisk. Please echo specify the URL of the ISO you want to test and it will automatically echo attempt to load the ISO using memdisk. echo -n URL: ${} && read distro_iso kernel ${memdisk} iso raw initrd ${distro_iso} boot goto utils_menu :utils_exit clear menu exit 0 ================================================ FILE: roles/netbootxyz/templates/menu/vmware.ipxe.j2 ================================================ #!ipxe # VMware ESXi # https://www.vmware.com goto ${menu} || :vmware set os VMware ESXi clear vmware_choice menu ${os} item --gap Installers item vmware_install ${space} ${os} Install item --gap Options: item url_set ${space} Base URL [ ${vmware_base_url} ] choose vmware_choice || goto vmware_exit goto ${vmware_choice} :url_set echo Set the HTTP URL of an extracted VMware ISO without the trailing slash: echo e.g. http://www.mydomain.com/vmware/esxi7 echo echo -n URL: ${} && read vmware_base_url echo echo The following files will be loaded the following files: echo echo For Legacy: ${vmware_base_url}/mboot.c32 echo For EFI: ${vmware_base_url}/efi/boot/bootx64.efi echo echo The ESXi modules will be loaded from the following file: echo ${vmware_base_url}/boot.cfg echo echo Ensure you have edited boot.cfg to reflect the prefix of: echo echo prefix=${vmware_base_url} echo kernelopt=runweasel ks=${vmware_base_url}/ks.cfg echo echo If you aren't doing kickstart automation, you can leave off the ks option. echo echo If the filenames in the kernel= and modules= lines begin with a forward echo slash (/) character, delete those characters. echo prompt Press any key to return to VMware Menu... goto vmware :vmware_install isset ${vmware_base_url} && goto boot_check || echo URL not set... && goto url_set :boot_check iseq ${platform} efi && goto efi_boot || goto legacy_boot :efi_boot imgfree kernel ${vmware_base_url}/efi/boot/bootx64.efi -c ${vmware_base_url}/boot.cfg goto boot :legacy_boot imgfree kernel ${vmware_base_url}/mboot.c32 -c ${vmware_base_url}/boot.cfg goto boot :boot md5sum bootx64.efi boot goto vmware :vmware_exit exit 0 ================================================ FILE: roles/netbootxyz/templates/menu/vyos.ipxe.j2 ================================================ #!ipxe # VyOS # https://vyos.io goto ${menu} :vyos set os {{ releases.vyos.name }} menu ${os} Installers item --gap Official Releases {% for item in releases.vyos.versions %} item {{ item.code_name }} ${space} ${os} {{ item.name }} {% endfor %} choose vyos_version || goto vyos_exit goto vyos_boot :vyos_boot imgfree set url ${live_endpoint}{{ endpoints['vyos-rolling'].path }} kernel ${url}vmlinuz boot=live components hostname=vyos username=live nopersistence noautologin union=overlay console=tty0 net.ifnames=0 biosdevname=0 fetch=${url}filesystem.squashfs {{ kernel_params }} initrd ${url}initrd boot goto vyos_exit :vyos_exit clear menu exit 0 ================================================ FILE: roles/netbootxyz/templates/menu/windows.ipxe.j2 ================================================ #!ipxe # Microsoft Windows # https://www.microsoft.com set win_arch x64 goto ${menu} || :windows set os Microsoft Windows clear win_version menu ${os} item --gap Installers item win_install ${space} Load ${os} Installer... item --gap Options: item arch_set ${space} Architecture [ ${win_arch} ] item url_set ${space} Base URL [ ${win_base_url} ] choose win_version || goto windows_exit goto ${win_version} :arch_set iseq ${win_arch} x64 && set win_arch x86 || set win_arch x64 goto windows :url_set echo Set the HTTP URL of an extracted Windows ISO without the trailing slash: echo e.g. http://www.mydomain.com/windows echo echo -n URL: ${} && read win_base_url echo echo netboot.xyz will attempt to load the following files: echo ${win_base_url}/${win_arch}/bootmgr echo ${win_base_url}/${win_arch}/bootmgr.efi echo ${win_base_url}/${win_arch}/boot/bcd echo ${win_base_url}/${win_arch}/boot/boot.sdi echo ${win_base_url}/${win_arch}/sources/boot.wim echo prompt Press any key to return to Windows Menu... goto windows :win_install isset ${win_base_url} && goto boot || echo URL not set... && goto url_set :boot imgfree kernel {{ wimboot_location }} initrd -n bootmgr ${win_base_url}/${win_arch}/bootmgr bootmgr || initrd -n bootmgr.efi ${win_base_url}/${win_arch}/bootmgr.efi bootmgr.efi || initrd -n bcd ${win_base_url}/${win_arch}/boot/bcd bcd || initrd -n bcd ${win_base_url}/${win_arch}/Boot/BCD bcd || initrd -n boot.sdi ${win_base_url}/${win_arch}/boot/boot.sdi boot.sdi || initrd -n boot.sdi ${win_base_url}/${win_arch}/Boot/boot.sdi boot.sdi || initrd -n boot.wim ${win_base_url}/${win_arch}/sources/boot.wim boot.wim boot :windows_exit exit 0 ================================================ FILE: roles/netbootxyz/templates/menu/zeninstall.ipxe.j2 ================================================ #!ipxe # Zen Installer for Arch # https://sourceforge.net/projects/revenge-installer/ :zen set os {{ releases.zeninstall.name }} set ipparam BOOTIF=${netX/mac} ip=dhcp net.ifnames=0 menu ${os} Installers item --gap Currently during boot you need to press ctrl+d/ctrl+c item --gap repeatedly when init hangs on starting a download {% for item in releases.zeninstall.versions %} item {{ item.code_name }} ${space} ${os} {{ item.name }} {% endfor %} choose zen_version || goto zen_exit goto zen_boot :zen_boot imgfree set url ${live_endpoint}{{ endpoints.zeninstall.path }} kernel ${url}vmlinuz archisobasedir=arch ${ipparam} archiso_http_srv=${url} {{ kernel_params }} initrd ${url}initrd boot goto zen_exit :zen_exit clear menu exit 0 ================================================ FILE: roles/netbootxyz/templates/pipxe/Makefile-rpi3.j2 ================================================ FW_URL := https://github.com/raspberrypi/firmware/branches/stable/boot SHELL := /bin/bash EFI_BUILD := RELEASE EFI_ARCH := AARCH64 EFI_TOOLCHAIN := GCC5 EFI_TIMEOUT := 3 EFI_FLAGS := --pcd=PcdPlatformBootTimeOut=$(EFI_TIMEOUT) EFI_DSC := edk2-platforms/Platform/RaspberryPi/RPi3/RPi3.dsc EFI_FD := Build/RPi3/$(EFI_BUILD)_$(EFI_TOOLCHAIN)/FV/RPI_EFI.fd IPXE_CROSS := aarch64-linux-gnu- IPXE_SRC := ipxe/src IPXE_TGT := bin-arm64-efi/rpi.efi IPXE_EFI := $(IPXE_SRC)/$(IPXE_TGT) SDCARD_MB := 32 export MTOOLSRC := mtoolsrc all : sdcard sdcard.img sdcard.zip submodules : git submodule update --init --recursive firmware : if [ ! -e firmware ] ; then \ $(RM) -rf firmware-tmp ; \ svn export $(FW_URL) firmware-tmp && \ mv firmware-tmp firmware ; \ fi efi : $(EFI_FD) efi-basetools : submodules $(MAKE) -C edk2/BaseTools $(EFI_FD) : submodules efi-basetools . ./edksetup.sh && \ build -b $(EFI_BUILD) -a $(EFI_ARCH) -t $(EFI_TOOLCHAIN) \ -p $(EFI_DSC) $(EFI_FLAGS) ipxe : $(IPXE_EFI) $(IPXE_EFI) : submodules $(MAKE) -C $(IPXE_SRC) CROSS=$(IPXE_CROSS) CONFIG=rpi EMBED={{ bootloader_filename }} TRUST={{ trust_files }} $(IPXE_TGT) sdcard : firmware efi ipxe $(RM) -rf sdcard mkdir -p sdcard cp -r $(sort $(filter-out firmware/kernel%,$(wildcard firmware/*))) \ sdcard/ cp config.txt $(EFI_FD) edk2/License.txt sdcard/ mkdir -p sdcard/efi/boot cp $(IPXE_EFI) sdcard/efi/boot/bootaa64.efi cp ipxe/COPYING* sdcard/ sdcard.img : sdcard truncate -s $(SDCARD_MB)M $@ mpartition -I -c -b 32 -s 32 -h 64 -t $(SDCARD_MB) -a "z:" mformat -v "piPXE" "z:" mcopy -s sdcard/* "z:" sdcard.zip : sdcard $(RM) -f $@ ( pushd $< ; zip -q -r ../$@ * ; popd ) update: git submodule foreach git pull origin master tag : git tag v`git show -s --format='%ad' --date=short | tr -d -` .PHONY : submodules firmware efi efi-basetools $(EFI_FD) ipxe $(IPXE_EFI) \ sdcard sdcard.img clean : $(RM) -rf firmware Build sdcard sdcard.img sdcard.zip if [ -d $(IPXE_SRC) ] ; then $(MAKE) -C $(IPXE_SRC) clean ; fi ================================================ FILE: roles/netbootxyz/templates/pipxe/Makefile-rpi4.j2 ================================================ FW_URL := https://github.com/raspberrypi/firmware/branches/stable/boot SHELL := /bin/bash EFI_BUILD := RELEASE EFI_ARCH := AARCH64 EFI_TOOLCHAIN := GCC5 EFI_TIMEOUT := 3 EFI_FLAGS := --pcd=PcdPlatformBootTimeOut=$(EFI_TIMEOUT) EFI_DSC := edk2-platforms/Platform/RaspberryPi/RPi4/RPi4.dsc EFI_FD := Build/RPi4/$(EFI_BUILD)_$(EFI_TOOLCHAIN)/FV/RPI_EFI.fd IPXE_CROSS := aarch64-linux-gnu- IPXE_SRC := ipxe/src IPXE_TGT := bin-arm64-efi/snp.efi IPXE_EFI := $(IPXE_SRC)/$(IPXE_TGT) SDCARD_MB := 32 export MTOOLSRC := mtoolsrc all : sdcard sdcard.img sdcard.zip submodules : git submodule update --init --recursive firmware : if [ ! -e firmware ] ; then \ $(RM) -rf firmware-tmp ; \ svn export $(FW_URL) firmware-tmp && \ mv firmware-tmp firmware ; \ fi efi : $(EFI_FD) efi-basetools : submodules $(MAKE) -C edk2/BaseTools $(EFI_FD) : submodules efi-basetools . ./edksetup.sh && \ build -b $(EFI_BUILD) -a $(EFI_ARCH) -t $(EFI_TOOLCHAIN) \ -p $(EFI_DSC) $(EFI_FLAGS) ipxe : $(IPXE_EFI) $(IPXE_EFI) : submodules $(MAKE) -C $(IPXE_SRC) CROSS=$(IPXE_CROSS) CONFIG=rpi EMBED={{ bootloader_filename }} TRUST={{ trust_files }} $(IPXE_TGT) sdcard : firmware efi ipxe $(RM) -rf sdcard mkdir -p sdcard cp -r $(sort $(filter-out firmware/kernel%,$(wildcard firmware/*))) \ sdcard/ cp config.txt $(EFI_FD) edk2/License.txt sdcard/ mkdir -p sdcard/efi/boot cp $(IPXE_EFI) sdcard/efi/boot/bootaa64.efi cp ipxe/COPYING* sdcard/ sdcard.img : sdcard truncate -s $(SDCARD_MB)M $@ mpartition -I -c -b 32 -s 32 -h 64 -t $(SDCARD_MB) -a "z:" mformat -v "piPXE" "z:" mcopy -s sdcard/* "z:" sdcard.zip : sdcard $(RM) -f $@ ( pushd $< ; zip -q -r ../$@ * ; popd ) update: git submodule foreach git pull origin master tag : git tag v`git show -s --format='%ad' --date=short | tr -d -` .PHONY : submodules firmware efi efi-basetools $(EFI_FD) ipxe $(IPXE_EFI) \ sdcard sdcard.img clean : $(RM) -rf firmware Build sdcard sdcard.img sdcard.zip if [ -d $(IPXE_SRC) ] ; then $(MAKE) -C $(IPXE_SRC) clean ; fi ================================================ FILE: roles/netbootxyz/templates/version.ipxe.j2 ================================================ #!ipxe {% if upstream_version %} set upstream_version {{ upstream_version }} {% endif %} exit ================================================ FILE: roles/netbootxyz/tests/inventory ================================================ localhost ================================================ FILE: roles/netbootxyz/tests/test.yml ================================================ --- - hosts: localhost remote_user: root roles: - netbootxyz ================================================ FILE: roles/netbootxyz/vars/debian.yml ================================================ --- netbootxyz_packages: - apache2 - binutils-dev - binutils-aarch64-linux-gnu - dosfstools - figlet - gcc-aarch64-linux-gnu - build-essential - genisoimage - git - isolinux - liblzma-dev - libslirp-dev - syslinux - syslinux-common - toilet - mtools ================================================ FILE: roles/netbootxyz/vars/main.yml ================================================ --- ================================================ FILE: roles/netbootxyz/vars/redhat.yml ================================================ --- netbootxyz_packages: - dosfstools - figlet - gcc - genisoimage - git - httpd - libslirp-devel - minizip-devel - syslinux - xz-devel - make ================================================ FILE: roles/netbootxyz/vars/ubuntu.yml ================================================ --- netbootxyz_packages: - apache2 - binutils-dev - binutils-aarch64-linux-gnu - dosfstools - figlet - gcc-aarch64-linux-gnu - build-essential - genisoimage - git - isolinux - liblzma-dev - libslirp-dev - syslinux - syslinux-common - toilet - mtools pipxe_packages: - acpica-tools - binutils - binutils-dev - gcc - libuuid1 - make - mtools - perl - python2 - subversion - uuid - uuid-dev - virtualenv - xz-utils ================================================ FILE: script/build_release ================================================ #!/bin/bash set -e TYPE=$1 HARD_RELEASE="3.x" HARD_RC="3.x-RC" DEV_URL="dev.boot.netboot.xyz" STAGING_URL="staging.boot.netboot.xyz" PROD_URL="boot.netboot.xyz" NBXYZ_OVERRIDES=production # Set boot domain if [[ "${TYPE}" == "dev" ]]; then BOOT_DOMAIN="s3.amazonaws.com/${DEV_URL}/${GITHUB_SHA}" BOOT_VERSION="${GITHUB_SHA}" elif [[ "${TYPE}" == "pr" ]]; then BOOT_DOMAIN="test.com" BOOT_VERSION="test" NBXYZ_OVERRIDES=default elif [[ "${TYPE}" == "rc" ]]; then BOOT_VERSION=$(cat version.txt)-RC BOOT_DOMAIN="${STAGING_URL}/${BOOT_VERSION}" elif [[ "${TYPE}" == "release" ]]; then BOOT_VERSION=$(cat version.txt) BOOT_DOMAIN="${PROD_URL}/${BOOT_VERSION}" elif [[ "${TYPE}" == "rolling" ]]; then HARD_RELEASE="3.x" PROD_URL="boot.netboot.xyz" fi # build release files if ! [[ "${TYPE}" == "rolling" ]]; then sed -i \ "/^# boot_version/c\boot_version: \"${BOOT_VERSION}\"" \ user_overrides.yml sed -i \ "/^# boot_domain/c\boot_domain: ${BOOT_DOMAIN}" \ user_overrides.yml # Build release docker build -t localbuild --build-arg NBXYZ_OVERRIDES=${NBXYZ_OVERRIDES} . docker run --rm -i -v $(pwd):/buildout localbuild # Generate folder outputs mkdir -p s3out mkdir -p s3outver cp -r buildout/* s3out/ cp buildout/version.ipxe s3outver/ mkdir -p githubout mv buildout/ipxe/* githubout/ cd buildout rm -Rf ipxe tar -czf menus.tar.gz * mv menus.tar.gz ../githubout cd .. if [[ "${TYPE}" == "dev" ]]; then cp githubout/menus.tar.gz s3out/ fi fi # Latest style endpoints for RC and Live if [[ "${TYPE}" == "release" ]] || [[ "${TYPE}" == "rolling" ]] || [[ "${TYPE}" == "rc" ]]; then rm -Rf buildout/ if [[ "${TYPE}" == "release" ]] || [[ "${TYPE}" == "rolling" ]]; then sed -i \ -e "/^boot_version/c\boot_version: \"${HARD_RELEASE}\"" \ -e "/^boot_domain/c\boot_domain: ${PROD_URL}" \ user_overrides.yml docker build -t localbuild --build-arg NBXYZ_OVERRIDES=${NBXYZ_OVERRIDES} . docker run --rm -i -v $(pwd):/buildout localbuild fi if [[ "${TYPE}" == "rc" ]]; then sed -i \ -e "/^boot_version/c\boot_version: \"${HARD_RC}\"" \ -e "/^boot_domain/c\boot_domain: ${STAGING_URL}/rc" \ user_overrides.yml docker build -t localbuild --build-arg NBXYZ_OVERRIDES=${NBXYZ_OVERRIDES} . docker run --rm -i -v $(pwd):/buildout localbuild fi mkdir -p s3out-latest cp -r buildout/* s3out-latest/ fi ================================================ FILE: script/message ================================================ #!/bin/bash set -e TYPE=$1 if [ "${TYPE}" == "dev-push" ]; then BOOT_URL="https://s3.amazonaws.com/dev.boot.netboot.xyz/${GITHUB_SHA}/index.html" elif [ "${TYPE}" == "rc-push" ]; then BOOT_URL="https://staging.boot.netboot.xyz/$(cat version.txt)-RC/index.html" elif [ "${TYPE}" == "live-push" ]; then BOOT_URL="https://boot.netboot.xyz/$(cat version.txt)/index.html" elif [ "${TYPE}" == "rolling-push" ]; then BOOT_URL="https://boot.netboot.xyz/index.html" fi # send status to discord if [ "${TYPE}" == "failure" ]; then curl -X POST -H "Content-Type: application/json" --data \ '{ "avatar_url": "https://api.microlink.io/?url=https://twitter.com/github&embed=image.url", "embeds": [ { "color": 16711680, "description": "__**Failed to Build**__ \n**Build:** 'https://github.com/netbootxyz/netboot.xyz/actions/runs/${GITHUB_RUN_ID}'\n**Status:** Failure\n**Change:** https://github.com/netbootxyz/netboot.xyz/commit/'${GITHUB_SHA}'\n" } ], "username": "Github" }' \ ${DISCORD_HOOK_URL} else curl -X POST -H "Content-Type: application/json" --data \ '{ "avatar_url": "https://api.microlink.io/?url=https://twitter.com/github&embed=image.url", "embeds": [ { "color": 1681177, "description": "__**Boot Menu Published**__ \n**Files:** '${BOOT_URL}' \n**Build:** 'https://github.com/netbootxyz/netboot.xyz/actions/runs/${GITHUB_RUN_ID}'\n**Change:** https://github.com/netbootxyz/netboot.xyz/commit/'${GITHUB_SHA}'\n" } ], "username": "Github" }' \ ${DISCORD_HOOK_URL} fi ================================================ FILE: script/netbootxyz-overrides.yml ================================================ --- sigs_menu: true sigs_enabled: true generate_disks_arm: true generate_disks_hybrid: true generate_disks_linux: true generate_disks_rpi: false generate_disks_secureboot: true generate_version_file: true generate_local_vars: false make_num_jobs: 4 bootloader_multiple: true bootloader_disks: - "netboot.xyz" - "netboot.xyz-metal" generate_signatures: true sigs_dir: "{{ netbootxyz_root }}/sigs" sigs_location: "http://${boot_domain}/sigs/" cert_dir: "/ansible/certs" ipxe_branch: master ipxe_ca_url: http://ca.ipxe.org/ca.crt ipxe_ca_filename: ca-ipxe-org.crt codesign_cert_filename: codesign.crt codesign_key_filename: codesign.key cert_file_filename: ca-netboot-xyz.crt ================================================ FILE: script/retrieve_certs ================================================ #!/bin/bash set -e # retrieve certs git clone https://$GIT_USER:$GIT_AUTH@$GIT_URL certs echo "Retrieved certs from repository at commit:" git -C certs log -1 --format="SHA: %H%nAuthor: %an <%ae>%nDate: %ad" --date=short echo "" cp certs/certs.tar.enc . openssl aes-256-cbc -pass pass:$CERTS_KEY -d -salt -pbkdf2 -a -in certs.tar.enc -out certs.tar tar xf certs.tar -C certs ================================================ FILE: script/tag ================================================ #! /bin/bash # if tag exists append random string to it CODE=$(curl -s -o /dev/null -I -w "%{http_code}" https://api.github.com/repos/netbootxyz/netboot.xyz/releases/tags/"${RELEASE_TAG}") echo ${CODE} if [ "${CODE}" == "404" ]; then git tag ${RELEASE_TAG} elif [ "${CODE}" == "200" ]; then RAND=$(cat /dev/urandom | tr -dc 'A-Z0-9' | fold -w 3 | head -n 1) git tag ${RELEASE_TAG}${RAND} fi ================================================ FILE: site.yml ================================================ --- - hosts: localhost user: root roles: - netbootxyz vars_files: - endpoints.yml - user_overrides.yml ================================================ FILE: user_overrides.yml ================================================ --- # overrides defaults in netbootxyz role generate_menus: true generate_disks: true generate_checksums: true generate_local_vars: true make_num_jobs: 1 # set desired site name # site_name: mysitename.com # set desired boot domain # boot_domain: boot.mysitename.com # set boot version # boot_version: "3.x" # bootloader_tftp_enabled: false # bootloader_https_enabled: true # bootloader_http_enabled: true # set release overrides from standard netboot.xyz defaults # release_overrides: # alpinelinux: # name: "Alpine Linux" # fedora: # mirror: "mirrors.kernel.org" # set utilitiesefi_overrides from standard netboot.xyz defaults for EFI utilities # utilitiesefi_overrides: # supergrub: # enabled: false # set utilities_overrides from standard netboot.xyz defaults for PC BIOS utilities # utilitiespcbios64_overrides: # supergrub: # enabled: false early_menu_enabled: false early_menu_contents: | ### early menu overrides ### used to set early ipxe options such as custom console & logo # console --x 1024 --y 768 # console --picture https://boot.netboot.xyz/logo.png ================================================ FILE: version.txt ================================================ 3.0.0