9 | );
10 | }
--------------------------------------------------------------------------------
/docs/community/contributing.md:
--------------------------------------------------------------------------------
1 | ---
2 | id: contributing
3 | title: Contributing
4 | description: How to contribute to the netboot.xyz project
5 | sidebar_label: Contributing
6 | hide_title: true
7 | hide_table_of_contents: true
8 | ---
9 |
10 | ```mdx-code-block
11 | import Contributing, {toc as ContributingTOC} from "@site/external/contributing.md"
12 |
13 |
14 |
15 | export const toc = ContributingTOC;
16 |
17 | ```
18 |
--------------------------------------------------------------------------------
/docs/community/build-automation.md:
--------------------------------------------------------------------------------
1 | ---
2 | id: build-automation
3 | title: Build Automation
4 | description: "Details how the netboot.xyz automated build system works"
5 | sidebar_label: Build Automation
6 | hide_table_of_contents: false
7 | hide_title: true
8 | ---
9 |
10 | ```mdx-code-block
11 | import BuildAutomation, {toc as BuildAutomationTOC} from "@site/external/build-automation.md"
12 |
13 |
14 |
15 | export const toc = BuildAutomationTOC;
16 | ```
17 |
--------------------------------------------------------------------------------
/src/components/MDXImage/index.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import OptimizedImage from '../OptimizedImage';
3 |
4 | export default function MDXImage({src, alt, title, ...props}) {
5 | // If the src is a relative path starting with ../static, convert it
6 | const imageSrc = src.startsWith('../static/')
7 | ? src.replace('../static/', '/')
8 | : src;
9 |
10 | return (
11 |
17 | );
18 | }
--------------------------------------------------------------------------------
/src/pages/index.module.css:
--------------------------------------------------------------------------------
1 | /* stylelint-disable docusaurus/copyright-header */
2 |
3 | /**
4 | * CSS files with the .module.css suffix will be treated as CSS modules
5 | * and scoped locally.
6 | */
7 |
8 | .heroBanner {
9 | padding: 4rem 0;
10 | text-align: center;
11 | position: relative;
12 | overflow: hidden;
13 | }
14 |
15 | @media screen and (max-width: 966px) {
16 | .heroBanner {
17 | padding: 2rem;
18 | }
19 | }
20 |
21 | .buttons {
22 | display: flex;
23 | align-items: center;
24 | justify-content: center;
25 | }
26 |
--------------------------------------------------------------------------------
/src/pages/styles.module.css:
--------------------------------------------------------------------------------
1 | /* stylelint-disable docusaurus/copyright-header */
2 |
3 | /**
4 | * CSS files with the .module.css suffix will be treated as CSS modules
5 | * and scoped locally.
6 | */
7 |
8 | .heroBanner {
9 | padding: 4rem 0;
10 | text-align: center;
11 | position: relative;
12 | overflow: hidden;
13 | }
14 |
15 | @media screen and (max-width: 966px) {
16 | .heroBanner {
17 | padding: 2rem;
18 | }
19 | }
20 |
21 | .buttons {
22 | display: flex;
23 | align-items: center;
24 | justify-content: center;
25 | }
26 |
27 | .features {
28 | display: flex;
29 | align-items: center;
30 | padding: 2rem 0;
31 | width: 100%;
32 | }
33 |
34 | .featureImage {
35 | height: 200px;
36 | width: 200px;
37 | }
38 |
--------------------------------------------------------------------------------
/src/components/OptimizedImage/index.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import Image from '@theme/IdealImage';
3 | import useBaseUrl from '@docusaurus/useBaseUrl';
4 |
5 | export default function OptimizedImage({src, alt, ...props}) {
6 | const imageSrc = useBaseUrl(src);
7 |
8 | // Check if the image is a GIF or SVG (don't optimize these) - case insensitive
9 | const srcLower = src.toLowerCase();
10 | if (srcLower.endsWith('.gif') || srcLower.endsWith('.svg')) {
11 | return (
12 |
18 | );
19 | }
20 |
21 | // Use IdealImage for other formats (PNG, JPG, etc.)
22 | return (
23 |
28 | );
29 | }
--------------------------------------------------------------------------------
/.eslintrc.js:
--------------------------------------------------------------------------------
1 | const { FlatCompat } = require('@eslint/eslintrc');
2 | const compat = new FlatCompat({
3 | baseDirectory: __dirname,
4 | });
5 |
6 | module.exports = [
7 | ...compat.extends('@docusaurus/eslint-plugin/recommended'),
8 | {
9 | files: ['src/**/*.{js,jsx,ts,tsx}'],
10 | languageOptions: {
11 | ecmaVersion: 2020,
12 | sourceType: 'module',
13 | parserOptions: {
14 | ecmaFeatures: {
15 | jsx: true,
16 | },
17 | },
18 | globals: {
19 | window: 'readonly',
20 | document: 'readonly',
21 | console: 'readonly',
22 | process: 'readonly',
23 | require: 'readonly',
24 | module: 'readonly',
25 | __dirname: 'readonly',
26 | },
27 | },
28 | rules: {
29 | 'react/prop-types': 'off',
30 | '@docusaurus/string-literal-i18n-messages': 'off',
31 | },
32 | },
33 | {
34 | ignores: [
35 | 'build/**',
36 | '.docusaurus/**',
37 | 'node_modules/**',
38 | ],
39 | },
40 | ];
--------------------------------------------------------------------------------
/.github/workflows/claude.yml:
--------------------------------------------------------------------------------
1 | name: Claude PR Assistant
2 |
3 | on:
4 | issue_comment:
5 | types: [created]
6 | pull_request_review_comment:
7 | types: [created]
8 | issues:
9 | types: [opened, assigned]
10 | pull_request_review:
11 | types: [submitted]
12 |
13 | jobs:
14 | claude-code-action:
15 | if: |
16 | (github.event_name == 'issue_comment' && contains(github.event.comment.body, '@claude')) ||
17 | (github.event_name == 'pull_request_review_comment' && contains(github.event.comment.body, '@claude')) ||
18 | (github.event_name == 'pull_request_review' && contains(github.event.review.body, '@claude')) ||
19 | (github.event_name == 'issues' && contains(github.event.issue.body, '@claude'))
20 | runs-on: ubuntu-latest
21 | permissions:
22 | contents: read
23 | pull-requests: read
24 | issues: read
25 | id-token: write
26 | steps:
27 | - name: Checkout repository
28 | uses: actions/checkout@v5
29 | with:
30 | fetch-depth: 1
31 |
32 | - name: Run Claude PR Action
33 | uses: anthropics/claude-code-action@beta
34 | with:
35 | anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
36 | timeout_minutes: "60"
37 |
--------------------------------------------------------------------------------
/docs/booting/ipxe.md:
--------------------------------------------------------------------------------
1 | ---
2 | id: ipxe
3 | title: Boot from iPXE
4 | sidebar_label: Boot from iPXE
5 | sidebar_position: 5
6 | description: "Details how to chainload into netboot.xyz from iPXE"
7 | hide_table_of_contents: true
8 | ---
9 |
10 | ### NIC with Embedded iPXE
11 |
12 | If you've already compiled your own iPXE, you can load up the netboot.xyz menu easily by entering CTRL-B when prompted, setting DHCP and then chainloading iPXE:
13 |
14 | ```bash
15 | dhcp
16 | chain --autofree https://boot.netboot.xyz
17 | ```
18 |
19 | If you don't have DHCP on your network, you can manually set your network information:
20 |
21 | ```bash
22 | set net0/ip
23 | set net0/netmask
24 | set net0/gateway
25 | set dns
26 | ifopen net0
27 | chain --autofree https://boot.netboot.xyz
28 | ```
29 |
30 | Some iPXE builds do not support HTTPS connections. If you get an "Operation not supported" error message, run this instead:
31 |
32 | ```bash
33 | chain --autofree http://boot.netboot.xyz
34 | ```
35 |
36 | ### KVM
37 |
38 | On VPSes that use KVM, you can usually connect to the VPS via VNC, reboot it, press escape while rebooting to get a boot menu, then select the iPXE option. Once iPXE has started, press Ctrl-B and follow the instructions above.
39 |
--------------------------------------------------------------------------------
/docs/docker/parameters.md:
--------------------------------------------------------------------------------
1 | ---
2 | title: Container Parameters
3 | sidebar_position: 3
4 | description: "netboot.xyz Docker Container Parameters"
5 | hide_table_of_contents: true
6 | ---
7 |
8 | Container images are configured using parameters passed at runtime. These parameters are separated by a colon and indicate `:` respectively. For example, `-p 8080:80` would expose port `80` from inside the container to be accessible from the host's IP on port `8080` outside the container.
9 |
10 | | Parameter | Function |
11 | | :-------: | ------- |
12 | | `-p 3000` | Web configuration interface. |
13 | | `-p 69/udp` | TFTP Port. |
14 | | `-p 80` | NGINX server for hosting assets. |
15 | | `-e WEB_APP_PORT=3000` | Specify a different port for the web configuration interface to listen on. |
16 | | `-e NGINX_PORT=80` | Specify a different port for NGINX service to listen on. |
17 | | `-e MENU_VERSION=2.0.84` | Specify a specific version of boot files you want to use from netboot.xyz (unset pulls latest) |
18 | | `-e TFTPD_OPTS='--tftp-single-port'` | Specify arguments for the TFTP server (this example makes TFTP send all data over port 69) |
19 | | `-v /config` | Storage for boot menu files and web application config |
20 | | `-v /assets` | Storage for netboot.xyz bootable assets (live CDs and other files) |
21 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # netboot.xyz documentation
2 |
3 | [](https://github.com/netbootxyz/netboot.xyz-docs/actions/workflows/deploy.yml)
4 | [](https://discord.gg/An6PA2a)
5 |
6 | This is the main documentation repository for [netboot.xyz](https://netboot.xyz) which is built upon [Docusaurus](https://docusaurus.io/), a modern static website generator.
7 |
8 | The contents of this repo are deployed automatically to netboot.xyz upon being merged.
9 |
10 | ## Development and Contributions
11 |
12 | Contributions to the documentation are always welcome. Please feel free to open pull requests to this repo if you see a bug, want to improve the existing documentation, or want to add some how-tos to help others.
13 |
14 | Ultimately this site is for helping others boot operating systems and using network booting related tools, so any documenation or articles that might be able to help others are welcome.
15 |
16 | ## Installation
17 |
18 | ```console
19 | yarn install
20 | ```
21 |
22 | ## Local Development
23 |
24 | ```console
25 | yarn start
26 | ```
27 |
28 | This command starts a local development server and open up a browser window. Most changes are reflected live without having to restart the server.
29 |
30 | ## Build
31 |
32 | ```console
33 | yarn build
34 | ```
35 |
36 | This command generates static content into the `build` directory and can be served using any static contents hosting service.
37 |
--------------------------------------------------------------------------------
/src/components/DownloadCard.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import PropTypes from 'prop-types';
3 | import clsx from 'clsx';
4 | import styles from './DownloadCard.module.css';
5 |
6 | const DownloadCard = ({
7 | title,
8 | description,
9 | url,
10 | type,
11 | isRecommended = false,
12 | icon,
13 | }) => {
14 | const handleDownload = () => {
15 | window.open(url, '_blank');
16 | };
17 |
18 | return (
19 |
22 | {isRecommended && (
23 |
Recommended
24 | )}
25 |
26 |
27 | {icon &&
{icon}
}
28 |
{title}
29 | {type}
30 |
31 |
32 |
{description}
33 |
34 |
44 |
45 | );
46 | };
47 | DownloadCard.propTypes = {
48 | title: PropTypes.string.isRequired,
49 | description: PropTypes.string.isRequired,
50 | url: PropTypes.string.isRequired,
51 | type: PropTypes.string.isRequired,
52 | isRecommended: PropTypes.bool,
53 | icon: PropTypes.node,
54 | };
55 |
56 | export default DownloadCard;
57 |
--------------------------------------------------------------------------------
/docs/booting/iso.md:
--------------------------------------------------------------------------------
1 | ---
2 | id: iso
3 | title: Boot from ISO
4 | sidebar_label: Boot from ISO
5 | sidebar_position: 2
6 | description: "How to use an ISO to boot into netboot.xyz"
7 | hide_table_of_contents: true
8 | ---
9 |
10 | ### Burning a CD/DVD
11 |
12 | To create a bootable CD-ROM/DVD, burn the ISO image [netboot.xyz.iso](https://boot.netboot.xyz/ipxe/netboot.xyz.iso) to a blank CD-ROM/DVD. Insert the media into the server, set the proper boot order and boot up.
13 |
14 | ### Virtual Machine Software
15 |
16 | You can also use these ISOs to boot any sort of VM in Citrix XenServer, Proxmox VE, VMware ESXi, VMware Fusion, VirtualBox.
17 |
18 | ### Out of Band Virtual Media
19 |
20 | The netboot.xyz ISO can be attached to remote virtual media of a server like the Dell DRAC or HP iLOs. Because the iPXE boot disk is so light weight, it is great for starting installations where there might be really low bandwidth as it will only stream the files needed for the installation.
21 |
22 | ### USB Bootable Virtual Media
23 |
24 | If you need to store a collection of ISOs, including netboot.xyz, on a single USB drive, there are some recommended devices that work well with netboot.xyz. You can copy multiple ISOs to the drive and mount them as a Virtual Disk during the boot process. This is useful not only for using netboot.xyz but also for other ISOs like Windows, Proxmox, or other media. It is a great way to have a portable collection of bootable media always ready to go!
25 |
26 | 
27 |
28 | Recommended tools include:
29 |
30 | * [IODD ST400](https://amzn.to/42vm2By)
31 | * [IODD Mini USB 3.0 256-bit Secure Encrypted SSD Drive](https://amzn.to/4haXpOZ)
32 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "netboot-xyz",
3 | "version": "0.0.1",
4 | "private": true,
5 | "scripts": {
6 | "docusaurus": "docusaurus",
7 | "start": "docusaurus start",
8 | "build": "USE_SIMPLE_CSS_MINIFIER=true docusaurus build",
9 | "swizzle": "docusaurus swizzle",
10 | "deploy": "docusaurus deploy",
11 | "serve": "docusaurus serve",
12 | "clear": "docusaurus clear",
13 | "lint": "eslint src --ext .js,.jsx,.ts,.tsx",
14 | "lint:fix": "eslint src --ext .js,.jsx,.ts,.tsx --fix",
15 | "format": "prettier --write src/**/*.{js,jsx,ts,tsx,css,md}",
16 | "format:check": "prettier --check src/**/*.{js,jsx,ts,tsx,css,md}"
17 | },
18 | "dependencies": {
19 | "@docusaurus/core": "3.9.2",
20 | "@docusaurus/plugin-ideal-image": "3.9.2",
21 | "@docusaurus/preset-classic": "3.9.2",
22 | "@docusaurus/theme-mermaid": "3.9.2",
23 | "@docusaurus/theme-search-algolia": "3.9.2",
24 | "@mdx-js/react": "3.1.1",
25 | "clsx": "2.1.1",
26 | "eslint": "^9.29.0",
27 | "prism-react-renderer": "2.4.1",
28 | "react": "19.2.0",
29 | "react-dom": "19.2.0"
30 | },
31 | "engines": {
32 | "node": ">=18.0"
33 | },
34 | "browserslist": {
35 | "production": [
36 | ">0.5%",
37 | "not dead",
38 | "not op_mini all"
39 | ],
40 | "development": [
41 | "last 1 chrome version",
42 | "last 1 firefox version",
43 | "last 1 safari version"
44 | ]
45 | },
46 | "devDependencies": {
47 | "@docusaurus/eslint-plugin": "^3.8.1",
48 | "@eslint/eslintrc": "^3.3.1",
49 | "eslint-config-prettier": "^10.1.8",
50 | "eslint-plugin-prettier": "^5.5.4",
51 | "prettier": "^3.6.2"
52 | }
53 | }
54 |
--------------------------------------------------------------------------------
/src/pages/index.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import clsx from 'clsx';
3 | import Layout from '@theme/Layout';
4 | import Link from '@docusaurus/Link';
5 | import useDocusaurusContext from '@docusaurus/useDocusaurusContext';
6 | import useBaseUrl from '@docusaurus/useBaseUrl';
7 | import ThemedImage from '@theme/ThemedImage';
8 | import styles from './index.module.css';
9 | import HomepageFeatures from '../components/HomepageFeatures';
10 |
11 | function HomepageHeader() {
12 | const {siteConfig} = useDocusaurusContext();
13 | return (
14 |
15 |
16 |
23 |
{siteConfig.tagline}
24 |
25 |
26 | Get Started
27 |
28 |
29 |
30 |
31 | );
32 | }
33 |
34 | export default function Home() {
35 | const {siteConfig} = useDocusaurusContext();
36 | return (
37 |
41 |
42 |
43 |
44 |
45 |
46 | );
47 | }
48 |
--------------------------------------------------------------------------------
/.github/workflows/deploy.yml:
--------------------------------------------------------------------------------
1 | name: deploy
2 | on:
3 | push:
4 | branches:
5 | - master
6 | repository_dispatch:
7 | types: [build]
8 | workflow_dispatch:
9 | jobs:
10 | release:
11 | name: Build and deploy site
12 | runs-on: ubuntu-latest
13 | permissions:
14 | id-token: write
15 | contents: read
16 | if: "!contains(github.event.head_commit.message, '[skip ci]')"
17 | steps:
18 | - name: Checkout
19 | uses: actions/checkout@v5
20 |
21 | - name: Download external project files
22 | run: |
23 | wget https://raw.githubusercontent.com/netbootxyz/netboot.xyz/development/CHANGELOG.md -O external/changelog.md
24 | wget https://raw.githubusercontent.com/netbootxyz/build-pipelines/master/README.md -O external/build-automation.md
25 | wget https://raw.githubusercontent.com/netbootxyz/netboot.xyz/master/CONTRIBUTING.md -O external/contributing.md
26 |
27 | - name: Setup Node.js
28 | uses: actions/setup-node@v5
29 | with:
30 | node-version: 22
31 |
32 | - name: Install dependencies
33 | run: yarn install
34 |
35 | - name: Build static site
36 | run: yarn run build
37 |
38 | - name: Configure AWS credentials
39 | uses: aws-actions/configure-aws-credentials@v5
40 | with:
41 | role-to-assume: ${{ secrets.AWS_ROLE_DOCS }}
42 | aws-region: ${{ secrets.AWS_ACCESS_REGION }}
43 |
44 | - name: Deploy site to bucket
45 | run: |
46 | aws s3 sync --no-progress --acl public-read build s3://${{ secrets.BUCKET_SITE }}
47 |
48 | - name: Invalidate Cloudfront
49 | run: |
50 | aws cloudfront create-invalidation --distribution-id ${{ secrets.CLOUDFRONT_DIST_ID_SITE }} --paths "/*"
51 |
--------------------------------------------------------------------------------
/docs/kb/pxe/almalinux.md:
--------------------------------------------------------------------------------
1 | ---
2 | id: almalinux
3 | title: PXE Booting the AlmaLinux Installer
4 | sidebar_label: AlmaLinux
5 | description: PXE Booting the AlmaLinux Installer using Kickstart
6 | hide_table_of_contents: true
7 | ---
8 |
9 | ## Installer Kernels
10 |
11 | AlmaLinux maintains installer kernels that are a lightweight way to load the installer and then stream packages over the network as needed. The installer kernels are located at:
12 |
13 | | URL | Description |
14 | | --- | ----------- |
15 | | `http://repo.almalinux.org`| Base URL for AlmaLinux mirrors |
16 | | `almalinux/${version}/BaseOS/${arch}/os/images/pxeboot/` | Directory containing the installer kernels |
17 | | `${version}` | Version (e.g., 8, 9, etc) |
18 | | `${arch}` | Architecture (e.g., x86_64, aarch64) |
19 | | `vmlinuz` | Kernel filename |
20 | | `initrd.img` | Initrd filename |
21 |
22 | In order to load them, you'll need to use a boot snippet in iPXE similar to:
23 |
24 | ```bash
25 | set install_params inst.ks=http://my.kickstart.com/ks.cfg inst.repo=http://repo.almalinux.org/almalinux/$version/BaseOS/$arch/os/
26 | set mirror http://repo.almalinux.org
27 | set base_dir almalinux
28 | set version 8
29 | set arch x86_64
30 | set dir ${mirror}/${base_dir}/${version}/BaseOS/${arch}/os/images/pxeboot
31 |
32 | kernel ${dir}/vmlinuz ${install_params} -- quiet
33 | initrd ${dir}/initrd.img
34 | boot
35 | ```
36 |
37 | If you want to use a [Kickstart](https://wiki.almalinux.org/documentation/kickstart.html) URL for automation, you can add this to the kernel line:
38 |
39 | ```bash
40 | set ksurl http://my.kickstart.com/ks.cfg
41 | inst.ks=${ksurl}
42 | ```
43 |
44 | For more examples, you can view the netboot.xyz configuration for AlmaLinux [here](https://github.com/netbootxyz/netboot.xyz/blob/master/roles/netbootxyz/templates/menu/almalinux.ipxe.j2).
45 |
--------------------------------------------------------------------------------
/blog/2021-09-04-site-updates.md:
--------------------------------------------------------------------------------
1 | ---
2 | slug: 2021/09/04/doc-site-updates
3 | title: Site Updates
4 | authors:
5 | - antonym
6 | tags: [site-updates, netboot.xyz]
7 | ---
8 |
9 | It has been a while since an update, but the main netboot.xyz site has a new look to it. I switched from using [Hugo](https://gohugo.io/) to using [Docusaurus](https://docusaurus.io/). I also moved the blog from [Ghost](https://ghost.org/) to simplify things. I started down this path a while back and recently got around to polishing it all up and pushing it out. I plan on building out more content and docs over time to make it a great resource for everything netboot related. At some point, I still would like to get some updated pictures, logos, etc as well but those are a much lower priority.
10 |
11 |
12 |
13 | I want to thank everyone who has contributed to the netboot.xyz community to this day. I originally started the project to create a quick way to install and test operating systems on VMs without having to download media and mount it everytime I needed to boot a new OS. It is great to see that it is helping out others on a day to day basis. We recently crossed 150,000 main menu loads over the past 30 days so it is great to see it being used worldwide.
14 |
15 | If you enjoy using netboot.xyz, please give us a star on [GitHub](https://github.com/netbootxyz/netboot.xyz) and follow us on [Twitter](https://twitter.com/netbootxyz). Please also consider supporting the project by donating to the [GitHub Sponsors](https://github.com/sponsors/netbootxyz) or [Open Collective](https://opencollective.com/netbootxyz). It helps us pay for infrastructure hosting and other costs like testing hardware, new architectures, and maintaining the project.
16 |
17 | We also have over 400 users in our [Discord](https://discord.gg/An6PA2a) and have a [Github Discussion Board](https://github.com/netbootxyz/netboot.xyz/discussions) where you can ask questions and discuss netboot.xyz.
18 |
19 | More to come!
20 |
--------------------------------------------------------------------------------
/src/components/DownloadSection.module.css:
--------------------------------------------------------------------------------
1 | .downloadSection {
2 | margin-bottom: 3rem;
3 | }
4 |
5 | .sectionHeader {
6 | margin-bottom: 2rem;
7 | padding-bottom: 1rem;
8 | border-bottom: 2px solid var(--ifm-color-emphasis-200);
9 | }
10 |
11 | .collapsible {
12 | cursor: pointer;
13 | display: flex;
14 | align-items: center;
15 | justify-content: space-between;
16 | padding: 1rem;
17 | border: 1px solid var(--ifm-color-emphasis-200);
18 | border-radius: 8px;
19 | background: var(--ifm-background-surface-color);
20 | transition: all 0.2s ease;
21 | }
22 |
23 | .collapsible:hover {
24 | border-color: var(--ifm-color-primary);
25 | background: var(--ifm-color-emphasis-100);
26 | }
27 |
28 | .sectionTitle {
29 | margin: 0;
30 | color: var(--ifm-color-emphasis-800);
31 | font-size: 1.5rem;
32 | font-weight: 700;
33 | }
34 |
35 | .sectionDescription {
36 | margin: 0.5rem 0 0 0;
37 | color: var(--ifm-color-emphasis-600);
38 | font-size: 1rem;
39 | line-height: 1.5;
40 | min-height: 1.5rem;
41 | }
42 |
43 | .toggleButton {
44 | background: none;
45 | border: none;
46 | cursor: pointer;
47 | padding: 4px;
48 | color: var(--ifm-color-emphasis-600);
49 | transition: color 0.2s ease;
50 | }
51 |
52 | .toggleButton:hover {
53 | color: var(--ifm-color-primary);
54 | }
55 |
56 | .chevron {
57 | transition: transform 0.2s ease;
58 | }
59 |
60 | .chevron.expanded {
61 | transform: rotate(180deg);
62 | }
63 |
64 | .cardsGrid {
65 | display: grid;
66 | grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
67 | gap: 1.5rem;
68 | margin-top: 1.5rem;
69 | }
70 |
71 | @media (max-width: 768px) {
72 | .cardsGrid {
73 | grid-template-columns: 1fr;
74 | gap: 1rem;
75 | }
76 |
77 | .sectionTitle {
78 | font-size: 1.25rem;
79 | }
80 |
81 | .collapsible {
82 | flex-direction: column;
83 | align-items: flex-start;
84 | gap: 1rem;
85 | }
86 |
87 | .toggleButton {
88 | align-self: flex-end;
89 | }
90 | }
91 |
--------------------------------------------------------------------------------
/docs/kb/pxe/rockylinux.md:
--------------------------------------------------------------------------------
1 | ---
2 | id: rockylinux
3 | title: PXE Booting the Rocky Linux Installer
4 | sidebar_label: Rocky Linux
5 | description: PXE Booting the Rocky Linux Installer using Kickstart
6 | hide_table_of_contents: true
7 | ---
8 |
9 | ## Installer Kernels
10 |
11 | Rocky Linux maintains installer kernels that are a lightweight way to load the installer and stream packages over the network as needed. Rocky Linux is a binary compatible clone of RHEL (Red Hat Enterprise Linux) and is already supported by numerous large, financially strong sponsors.
12 |
13 | The installer kernels are located at:
14 |
15 | | URL | Description |
16 | | --- | ----------- |
17 | | `http://dl.rockylinux.org` | Base URL for Rocky Linux mirrors |
18 | | `pub/rocky/${version}/BaseOS/${arch}/os/images/pxeboot/` | Directory containing the installer kernels |
19 | | `${version}` | Version (e.g., 8, 9, etc) |
20 | | `${arch}` | Architecture (e.g., x86_64, aarch64) |
21 | | `vmlinuz` | Kernel filename |
22 | | `initrd.img` | Initrd filename |
23 |
24 | In order to load them, you'll need to use a boot snippet in iPXE similar to:
25 |
26 | ```bash
27 | set install_params inst.ks=http://my.kickstart.com/ks.cfg inst.repo=http://dl.rockylinux.org/pub/rocky/${version}/BaseOS/${arch}/os
28 | set mirror http://dl.rockylinux.org
29 | set base_dir pub/rocky
30 | set version 9
31 | set arch x86_64
32 | set dir ${mirror}/${base_dir}/${version}/BaseOS/${arch}/os/images/pxeboot
33 |
34 | kernel ${dir}/vmlinuz ${install_params} -- quiet
35 | initrd ${dir}/initrd.img
36 | boot
37 | ```
38 |
39 | If you want to use a [Kickstart](https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/9/html/automatically_installing_rhel/automated-installation-workflow_rhel-installer) URL for automation, you can add this to the kernel line:
40 |
41 | ```bash
42 | set ksurl http://my.kickstart.com/ks.cfg
43 | inst.ks=${ksurl}
44 | ```
45 |
46 | For more examples, you can view the netboot.xyz configuration for Rocky Linux [here](https://github.com/netbootxyz/netboot.xyz/blob/master/roles/netbootxyz/templates/menu/rockylinux.ipxe.j2).
47 |
--------------------------------------------------------------------------------
/docs/community/nbxyz-users.md:
--------------------------------------------------------------------------------
1 | ---
2 | id: nbxyz-users
3 | title: netboot.xyz around the Internet
4 | description: News, articles, and links from around the world related to netboot.xyz
5 | sidebar_label: Users
6 | hide_title: true
7 | hide_table_of_contents: true
8 | ---
9 |
10 | # netboot.xyz around the Internet
11 |
12 | ## Hacker News
13 |
14 | - [Netboot.xyz: your favorite operating systems in one place](https://news.ycombinator.com/item?id=31814288) (2022-06-19)
15 | - [Netboot Linux over the internet](https://news.ycombinator.com/item?id=14883590) (2017-07-29)
16 | - [Netboot](https://news.ycombinator.com/item?id=10923460) (2016-01-18)
17 |
18 | ## Podcasts
19 |
20 | - [LINUX Unplugged - EP 592: Chris' Netboot Nonsense](https://www.jupiterbroadcasting.com/show/linux-unplugged/592/) (2024-12-08)
21 |
22 | ## Youtube
23 |
24 | - [TechnoTim: Meet netboot.xyz - Network Boot Any Operating System](https://youtu.be/4btW5x_clpg) (2023-11-11)
25 | - [Linus Tech Tips: Download These Handy Tools NOW! Essential USB Tools](https://youtu.be/0EtgwIajVqs?t=426) (2023-07-19)
26 |
27 | ## Hosting Providers
28 |
29 | - [1gservers](https://1gservers.com/blog/system-administration/booting-into-netboot-xyz-is-now-supported/)
30 | - [Equinix Metal](https://deploy.equinix.com/developers/docs/metal/operating-systems/custom-ipxe/)
31 | - [ExtraVM](https://extravm.com/billing/knowledgebase/39/Can-I-use-my-own-ISO-on-VPS.html)
32 | - [Leaseweb](https://kb.leaseweb.com/products/dedicated-server/installing-servers-using-your-own-pxe-boot-environment/)
33 | - [MVPS](https://www.mvps.net/docs/how-to-use-netboot-xyz-iso-to-install-other-operating-systems-on-your-vps/)
34 | - [Vultr](https://www.vultr.com/docs/ipxe-boot-feature/)
35 |
36 | ## Open Source Projects
37 |
38 | - [JetKVM - Hardware KVM with suppport for netboot.xyz](https://jetkvm.com/)
39 | - [Quickemu](https://github.com/quickemu-project/quickemu)
40 | - [Tinkerbell](https://tinkerbell.org/examples/netboot-xyz/)
41 | - [u-root](https://github.com/u-root/u-root/blob/main/cmds/exp/netbootxyz/netbootxyz.go)
42 |
43 | And many other places as well. If you find us somewhere on the net, update this page!
44 |
--------------------------------------------------------------------------------
/blog/2015-11-25-introducing-netboot-xyz.md:
--------------------------------------------------------------------------------
1 | ---
2 | slug: 2015/11/25/introducing-netboot-xyz
3 | authors:
4 | - antonym
5 | title: Introducing netboot.xyz
6 | tags: [netboot.xyz]
7 | ---
8 |
9 | My newest project on the side is [netboot.xyz](https://netboot.xyz). If you've seen [boot.rackspace.com](http://boot.rackspace.com), this should look pretty familiar to you. I ran across cheap .xyz domains from [Namecheap](https://www.namecheap.com) (one dollar at the time!), and figured the netboot.xyz name space was much easier to remember and was more neutral to the goal I was trying to accomplish. I forked boot.rackspace.com (still doing basic maintenance) and am now focusing my efforts on netboot.xyz.
10 |
11 |
12 |
13 | My goal with the project is to make it easy as possible to boot many of the popular operating systems from bare metal, virtual machines, etc without the hassle of hunting down the latest ISO for the OS you want to download. Ideally it's usable with any service provider or just someone who maintains their own servers.
14 |
15 | I usually try and use operating systems that make their boot loaders available via mirrors, although there are occasionally some exceptions. I'm also experimenting with various new builds like WinPE, Live Booted OS, and I'd like to even pursue getting some hypervisors on there as well to make it as easy as possible to install everything.
16 |
17 | It's also a great place to just let people play around with new operating systems with just a menu and learn about the many many distributions out there.
18 |
19 | Check it out when you get a chance and drop me some feedback or make a pull request if you see something I'm missing. I've added a really easy way to test your pull request from the utility menu, all you need to do is enter in your github username and branch or hash of the commit you want to test.
20 |
21 | I'm still working on a bunch of [documents](http://netbootxyz.readthedocs.org/en/latest/) for demonstrating how easy it is to plug the 1MB [iPXE](https://ipxe.org) ISO into things like VMware Fusion, Virtual Box, Openstack, so bear with me while I try and get all of those available.
22 |
23 | Enjoy!
24 |
--------------------------------------------------------------------------------
/src/components/DownloadSection.js:
--------------------------------------------------------------------------------
1 | import React, {useState} from 'react';
2 | import clsx from 'clsx';
3 | import DownloadCard from './DownloadCard';
4 | import styles from './DownloadSection.module.css';
5 | import PropTypes from 'prop-types';
6 |
7 | const DownloadSection = ({
8 | title,
9 | description,
10 | downloads,
11 | isCollapsible = false,
12 | defaultExpanded = true,
13 | }) => {
14 | const [isExpanded, setIsExpanded] = useState(defaultExpanded);
15 |
16 | const toggleExpanded = () => {
17 | if (isCollapsible) {
18 | setIsExpanded(!isExpanded);
19 | }
20 | };
21 |
22 | return (
23 |
58 | );
59 | };
60 | DownloadSection.propTypes = {
61 | title: PropTypes.string,
62 | description: PropTypes.string,
63 | downloads: PropTypes.arrayOf(PropTypes.object).isRequired,
64 | isCollapsible: PropTypes.bool,
65 | defaultExpanded: PropTypes.bool,
66 | };
67 |
68 | export default DownloadSection;
69 |
--------------------------------------------------------------------------------
/docs/booting/qemu.md:
--------------------------------------------------------------------------------
1 | ---
2 | id: qemu
3 | title: QEMU
4 | sidebar_label: Boot with QEMU
5 | sidebar_position: 6
6 | description: "Methods of booting into netboot.xyz using QEMU"
7 | hide_table_of_contents: true
8 | ---
9 | ### Overview
10 |
11 | A quick way to try out netboot.xyz without any modifications to your existing environment is to leverage QEMU. You can start up a virtual machine to evaluate what netboot.xyz is and how it works. You will need the qemu-system package for your appropriate operating system and a window manager installed. In the example below we are using Ubuntu 20.04.
12 |
13 | ### Install dependencies
14 |
15 | ```bash
16 | # install the qemu-system package
17 | sudo apt-get install -y qemu-system ovmf
18 |
19 | # download the latest combined Legacy and EFI iso
20 | wget https://boot.netboot.xyz/ipxe/netboot.xyz.iso
21 | ```
22 |
23 | If you want to write to a disk, you can set one at this point, or optionally you can boot without a disk if you want to test drive netboot.xyz:
24 |
25 | ### Create a disk (optional)
26 |
27 | ```bash
28 | qemu-img create -f raw vmdisk 8G
29 |
30 | # add the following to end of the qemu-system lines below if you want to add a disk to write to:
31 | # -drive file=vmdisk,format=raw
32 | ```
33 |
34 | ### Booting with Legacy PCBIOS
35 |
36 | ```bash
37 | qemu-system-x86_64 -cdrom netboot.xyz.iso -m 4G
38 | ```
39 |
40 | ### Booting with a UEFI BIOS
41 |
42 | ```bash
43 | qemu-system-x86_64 -bios /usr/share/ovmf/OVMF.fd -cdrom netboot.xyz.iso -m 4G
44 | ```
45 |
46 | ### Booting on MacOS Apple Silicon (M1)
47 |
48 | ```bash
49 | $ brew install qemu
50 | $ qemu-system-aarch64 --version
51 | QEMU emulator version 7.1.0
52 | $ qemu-system-aarch64 -cpu host -M virt,accel=hvf -m 4G \
53 | -drive file=/opt/homebrew/share/qemu/edk2-aarch64-code.fd,if=pflash,format=raw,readonly=on \
54 | -kernel netboot.xyz-arm64.efi \
55 | -serial stdio \
56 | -device virtio-gpu-pci \
57 | -device nec-usb-xhci -device usb-kbd
58 | ```
59 |
60 | :::note
61 | At least 4GB of memory is recommended for some of the images that are loaded into RAM. If you experience problems during initrd load, the machine usually just needs more RAM.
62 | :::
63 |
--------------------------------------------------------------------------------
/docs/kb/providers/equinixmetal.md:
--------------------------------------------------------------------------------
1 | ---
2 | id: equinixmetal
3 | title: Equinix Metal
4 | description: Using netboot.xyz with Equinix Metal bare metal servers
5 | hide_table_of_contents: true
6 | ---
7 |
8 | [Equinix Metal](https://metal.equinix.com) fully supports netboot.xyz with its Custom iPXE
9 | operating system.
10 |
11 | ### Usage
12 |
13 | Select the "Custom iPXE" operating system from the portal, or the `custom_ipxe`
14 | slug when using the API.
15 |
16 | ### Provisioning
17 |
18 | Put the netboot.xyz URL in the text field that appears in the portal, or use the
19 | `ipxe_script_url` parameter when creating the device via the API.
20 |
21 | ```
22 | https://boot.netboot.xyz
23 | ```
24 |
25 | Press "Deploy" to provision your device. It will take 2-3 minutes for the device
26 | to become active. Once it's online, connect to Equinix Metal's out-of-band
27 | serial-over-SSH service (S.O.S.) using the device's `id` and the facility where
28 | the device was deployed, e.g. `ewr1`.
29 |
30 | ```
31 | ssh {server-uuid}@sos.{facility-code}.platformequinix.com
32 | ```
33 |
34 | The current list of facilities is [here](https://metal.equinix.com/product/locations). The
35 | netboot.xyz iPXE menu will appear and you can complete installation from there.
36 |
37 | :::note
38 |
39 | By default, devices are set to boot from the local disk. During
40 | provisioning, Equinix Metal sets the next boot to PXE. This happens once, which means that
41 | if you don't install an operating system before rebooting, it won't reload the
42 | netboot.xyz menu. However, you can set your device to always boot to iPXE
43 | first by enabling that option under 'server actions' through the customer portal.
44 |
45 | :::
46 |
47 | ### Networking
48 |
49 | Devices that are provisioned via Custom iPXE will be able to DHCP for the life of
50 | the device; however, Equinix Metal recommends configuring networking statically. IP
51 | address information can be found by querying https://metadata.platformequinix.com/metadata
52 | from the host.
53 |
54 | More information on how Equinix Metal configures bonding can be found
55 | [here](https://deploy.equinix.com/developers/docs/metal/layer2-networking/overview/).
56 |
57 | Nameservers should be configured as:
58 |
59 | ```
60 | nameserver 147.75.207.207
61 | nameserver 147.75.207.208
62 | ```
63 |
--------------------------------------------------------------------------------
/docs/kb/hardware/steamdeck.md:
--------------------------------------------------------------------------------
1 | ---
2 | id: steamdeck
3 | title: PXE Booting on the Steam Deck
4 | sidebar_label: Steam Deck
5 | description: PXE Booting on the Steam Deck
6 | hide_table_of_contents: true
7 | ---
8 |
9 | ## Overview
10 |
11 | This is a guide to PXE booting the [Valve Steam Deck](https://amzn.to/4jBYBwv).
12 |
13 | ## Requirements
14 |
15 | To get the Steam Deck to PXE boot, you will need:
16 |
17 | - [USB-C Hub](https://amzn.to/3PRGzc4) that supports Ethernet and USB
18 | - USB Keyboard
19 | - Hard Wired Ethernet
20 |
21 | Connect the hub, ethernet, and power up to the Steam Deck. The first thing you will want to do is set the BIOS to allow for PXE booting.
22 |
23 | ## BIOS Configuration
24 |
25 | To bring up the Steam Deck Boot Loader menus, shutdown the Steam Deck and:
26 |
27 | - Hold down `Volume +`, while pressing the power button `on` to access the Boot Manager, Setup Utility and Boot from File Menu. (`Volume -` will bring up just the Boot Manager)
28 | - Select Setup Utility to enter into the Setup.
29 | - Move down to the Boot Tab on the left and change these settings:
30 | - Quick Boot: Disabled
31 | - Quiet Boot: Disabled
32 | - PXE Boot Capability: UEFI: IPv4 (Can change to what is appropriate for your network)
33 | - Add Boot Options: First
34 | - Select Exit and Exit Saving Changes.
35 |
36 | ## PXE Booting
37 |
38 | The Steam Deck will now reboot and you will now see the Memory test as Quiet Boot has been disabled. If your Hub is connected to the network properly, and you have DHCP on the network, you should see:
39 |
40 | ```shell
41 | >>Start PXE over IPv4...
42 | ```
43 |
44 | At this point you should be able to PXE boot a UEFI image.
45 |
46 | Use the:
47 |
48 | - [netboot.xyz UEFI kernel](https://boot.netboot.xyz/ipxe/netboot.xyz.efi)
49 | - Set DHCP [next-server](https://netboot.xyz/docs/booting/tftp) to TFTP server, and filename to the netboot.xyz UEFI image on the DHCP server
50 |
51 | If you happen to break the Steam Deck when testing Operating Systems or tinkering with it, you can follow the Steam Deck Recovery Instructions [here](https://help.steampowered.com/en/faqs/view/1B71-EDF2-EB6D-2BB3).
52 |
53 | If you want to set the BIOS back to the default settings, you can load the BIOS back up, select Restore Defaults, and Exit Saving Changes. That will return the Steam Deck back to its original behavior.
54 |
--------------------------------------------------------------------------------
/docs/kb/pxe/debian.md:
--------------------------------------------------------------------------------
1 | ---
2 | id: debian
3 | title: PXE Booting the Debian Installer
4 | sidebar_label: Debian
5 | description: PXE Booting the Debian Installer
6 | hide_table_of_contents: true
7 | ---
8 |
9 | ## Installer Kernels
10 |
11 | Debian maintains installer kernels that are a lightweight way to load the Debian installer and then stream packages over the network as needed. The installer kernels are located at:
12 |
13 | | URL | Description |
14 | | --- | ----------- |
15 | | `http://deb.debian.org` | Base URL for Debian mirrors |
16 | | `debian/dists/${version}/main/installer-${arch}/current/images/netboot/` | Directory containing the installer kernels |
17 | | `${version}` | Version (e.g., bullseye, bookworm, etc) |
18 | | `${arch}` | Architecture (e.g., amd64, arm64) |
19 | | `linux` | Kernel filename |
20 | | `initrd.gz` | Initrd filename |
21 |
22 | In order to load them, you'll need to use a boot snippet in iPXE similar to:
23 |
24 | ```bash
25 | set install_params auto=true priority=critical
26 | set mirror http://deb.debian.org
27 | set base_dir debian
28 | set debian_version bookworm
29 | set arch amd64
30 | set mirrorcfg mirror/suite=${debian_version}
31 | set dir ${mirror}/${base_dir}/dists/${version}/main/installer-${arch}/current/images/netboot/debian-installer/amd64/
32 |
33 | kernel ${dir}/linux ${install_params} ${mirrorcfg} -- quiet initrd=initrd.gz
34 | initrd ${dir}/initrd.gz
35 | boot
36 | ```
37 |
38 | If you want to use a [preseed](https://www.debian.org/releases/stable/amd64/apb.en.html) URL for automation, you can add this to the kernel line:
39 |
40 | ```bash
41 | set preseedurl http://my.preseed.com/preseed.cfg
42 | preseed/url=${preseedurl}
43 | ```
44 |
45 | For more examples, you can view the netboot.xyz configuration for Debian [here](https://github.com/netbootxyz/netboot.xyz/blob/master/roles/netbootxyz/templates/menu/debian.ipxe.j2).
46 |
47 | ## Live Boot
48 |
49 | Debian also provides a number of Live Boot ISOs that will boot an OS directly into memory and can be used immediately without doing an install or modifying the hard drive. The Live OS will also include the installer as well. These are great for evaluating other desktops that you might want to try out without doing a full install.
50 |
51 | | Distribution | Website |
52 | | :--- | :--- |
53 | | Debian Live | [https://www.debian.org/CD/live/](https://www.debian.org/CD/live/) |
54 |
--------------------------------------------------------------------------------
/docs/kb/networking/mikrotik.md:
--------------------------------------------------------------------------------
1 | ---
2 | id: mikrotik
3 | title: "Mikrotik RouterOS"
4 | description: Mikrotik RouterOS Usage
5 | hide_table_of_contents: true
6 | ---
7 |
8 | ### Assumptions
9 |
10 | - You are running RouterOS 7.12.1 or later
11 | - You have a DHCP server, whose name you will substitute in instead of DHCPSERVER
12 | - You have a DHCP address pool whose name you will substitute in instead of DHCPPOOL
13 |
14 | The steps referencing servers and pools can be repeated for as many servers and pools as you need.
15 |
16 | ### Disable BOOTP support for the server
17 |
18 | ```
19 | /ip dhcp-server/set DHCPSERVER bootp-support=none
20 | ```
21 |
22 | ### BIOS
23 |
24 | Download `netboot.xyz.kpxe` and register it to the TFTP server:
25 |
26 | ```
27 | /tool fetch url="https://boot.netboot.xyz/ipxe/netboot.xyz.kpxe"
28 | /ip tftp add req-filename=netboot.xyz.kpxe real-filename=netboot.xyz.kpxe allow=yes read-only=yes
29 | ```
30 |
31 | Add a DHCP option for the BIOS bootfile and add it to a BIOS PXE boot option set:
32 |
33 | ```
34 | /ip dhcp-server option add code=67 name=pxe-bios-netboot.xyz value="'netboot.xyz.kpxe'"
35 | /ip dhcp-server/option/sets add name="pxe-bios" options=pxe-bios-netboot.xyz
36 | ```
37 |
38 | Set the BIOS PXE boot option set as the server's option set.
39 |
40 | ```
41 | /ip dhcp-server/set DHCPSERVER dhcp-option-set=pxe-bios
42 | ```
43 |
44 | NOTE: If you have an existing option set, you should skip creating a new option set and should instead add the PXE BIOS bootfile option to your existing option set.
45 |
46 | ### UEFI
47 |
48 | Download `netboot.xyz.efi` and register it to the TFTP server:
49 |
50 | ```
51 | /tool fetch url="https://boot.netboot.xyz/ipxe/netboot.xyz.efi"
52 | /ip tftp add req-filename=netboot.xyz.efi real-filename=netboot.xyz.efi allow=yes read-only=yes
53 | ```
54 |
55 | Add a DHCP option for the UEFI bootfile and add it to a UEFI PXE boot option set:
56 |
57 | ```
58 | /ip dhcp-server option add code=67 name=pxe-uefi-netboot.xyz value="'netboot.xyz.efi'"
59 | /ip dhcp-server/option/sets add name="pxe-uefi" options=pxe-uefi-netboot.xyz
60 | ```
61 |
62 | Add a DHCP matcher that looks for the 0x0007 (x86-64 UEFI) architecture type and applies the PXE UEFI option set, overriding the default PXE BIOS options:
63 |
64 | ```
65 | /ip dhcp-server/matcher/add name="pxe-uefi-matcher" server=DHCPSERVER address-pool=DHCPPOOL option-set=pxe-uefi code=93 value="0x0007"
66 | ```
67 |
--------------------------------------------------------------------------------
/docs/kb/providers/linode.md:
--------------------------------------------------------------------------------
1 | ---
2 | id: linode
3 | title: Linode
4 | description: Using netboot.xyz on Linode
5 | hide_table_of_contents: true
6 | ---
7 |
8 | netboot.xyz can be loaded on a [Linode](https://linode.com) instance so that you can then customize the Linode as needed. For this method, we'll use the smallest Linode size running Debian.
9 |
10 | ### Create a Linode
11 |
12 | For this method, it's recommended to use an apt-based distro like Debian or Ubuntu. Start a Linode with one of those operating systems. Once it is up and running, connect to it via SSH or connect to it with the console button.
13 |
14 | ### Install GRUB Imageboot and Download ISO
15 |
16 | We will need to ensure that the GRUB menu pauses long enough for us to select the netboot.xyz option. For that we'll need to remove a timeout file and increase the timeout for GRUB. Adjust the time period as needed for your
17 | situation:
18 |
19 | ```shell
20 | # Increase grub timeout if desired
21 | sed -i 's/GRUB_TIMEOUT=5/GRUB_TIMEOUT=60/g' /etc/default/grub
22 |
23 | # Install grub-imageboot
24 | apt update
25 | apt install -y grub-imageboot
26 |
27 | # Download netboot.xyz ISO
28 | mkdir /boot/images
29 | cd /boot/images
30 | wget https://boot.netboot.xyz/ipxe/netboot.xyz.iso
31 |
32 | # Update GRUB menu to include this ISO
33 | update-grub2
34 |
35 | # reboot once you are ready, it may be good to load up the recovery console first
36 | reboot
37 | ```
38 |
39 | ### Launch LISH Console
40 |
41 | Under the Linode settings click ..., and select Launch LISH Console. For interraction with the GRUB Menu and netboot.xyz menus, you will need to click the Weblish tab. For interacting with an installer or other tool, you may need to use the Glish tab (Graphical).
42 |
43 | At this point if you are within the timeout window, you should now see the Grub menu with the following option now available which you can select to load the netwboot.xyz menu:
44 |
45 | ```bash
46 | Bootable ISO image: netboot.xyz
47 | ```
48 |
49 | ### Networking
50 |
51 | Linode uses DHCP so netboot.xyz should be able to get an IP address and load up the menu. If DHCP does not work, you may need to use the alternative failsafe menu to set up the networking for the instance manually by pressing **m** when prompted for the failsafe menu.
52 |
53 | If you do a installation, you should be able to reinstall over the existing drive at that point and customize the Linode as you see fit. Keep the networking information handy as you will need to populate that when doing an install.
54 |
55 | :::info
56 | If you run into out of memory issues running an installer, you may need a larger Linode.
57 | :::
58 |
--------------------------------------------------------------------------------
/src/pages/downloads.module.css:
--------------------------------------------------------------------------------
1 | .downloadsPage {
2 | padding: 2rem 0 4rem;
3 | min-height: calc(100vh - 200px);
4 | }
5 |
6 | .pageHeader {
7 | text-align: center;
8 | margin-bottom: 4rem;
9 | padding-bottom: 2rem;
10 | border-bottom: 3px solid var(--ifm-color-primary);
11 | }
12 |
13 | .pageHeader h1 {
14 | font-size: 3rem;
15 | font-weight: 800;
16 | color: var(--ifm-color-emphasis-800);
17 | margin-bottom: 1rem;
18 | background: linear-gradient(
19 | 135deg,
20 | var(--ifm-color-primary),
21 | var(--ifm-color-primary-dark)
22 | );
23 | background-clip: text;
24 | -webkit-background-clip: text;
25 | -webkit-text-fill-color: transparent;
26 | }
27 |
28 | .pageDescription {
29 | font-size: 1.2rem;
30 | color: var(--ifm-color-emphasis-700);
31 | max-width: 800px;
32 | margin: 0 auto 2rem;
33 | line-height: 1.6;
34 | }
35 |
36 | .infoBox {
37 | background: var(--ifm-color-info-contrast-background);
38 | border: 1px solid var(--ifm-color-info);
39 | border-radius: 8px;
40 | padding: 1rem 1.5rem;
41 | margin: 0 auto;
42 | max-width: 600px;
43 | }
44 |
45 | .infoBox p {
46 | margin: 0;
47 | color: var(--ifm-color-info-contrast-foreground);
48 | }
49 |
50 | .infoBox a {
51 | color: var(--ifm-color-info-dark);
52 | font-weight: 600;
53 | text-decoration: underline;
54 | }
55 |
56 | .infoBox a:hover {
57 | color: var(--ifm-color-info-darker);
58 | }
59 |
60 | .checksumsSection {
61 | margin-top: 4rem;
62 | padding: 2rem;
63 | background: var(--ifm-color-emphasis-100);
64 | border-radius: 12px;
65 | border-left: 4px solid var(--ifm-color-warning);
66 | }
67 |
68 | .checksumsSection h3 {
69 | margin-top: 0;
70 | color: var(--ifm-color-emphasis-800);
71 | font-size: 1.3rem;
72 | }
73 |
74 | .checksumsSection p {
75 | margin-bottom: 0;
76 | color: var(--ifm-color-emphasis-700);
77 | line-height: 1.6;
78 | }
79 |
80 | .checksumsSection a {
81 | color: var(--ifm-color-primary);
82 | font-weight: 600;
83 | }
84 |
85 | .checksumsSection a:hover {
86 | color: var(--ifm-color-primary-dark);
87 | text-decoration: underline;
88 | }
89 |
90 | @media (max-width: 768px) {
91 | .downloadsPage {
92 | padding: 1rem 0 2rem;
93 | }
94 |
95 | .pageHeader {
96 | margin-bottom: 2rem;
97 | padding-bottom: 1rem;
98 | }
99 |
100 | .pageHeader h1 {
101 | font-size: 2rem;
102 | }
103 |
104 | .pageDescription {
105 | font-size: 1rem;
106 | }
107 |
108 | .checksumsSection {
109 | margin-top: 2rem;
110 | padding: 1.5rem;
111 | }
112 | }
113 |
--------------------------------------------------------------------------------
/docs/booting/usb.md:
--------------------------------------------------------------------------------
1 | ---
2 | id: usb
3 | title: Boot from USB
4 | sidebar_label: Boot from USB
5 | sidebar_position: 1
6 | description: "How to create a USB stick capable of booting into netboot.xyz"
7 | hide_table_of_contents: true
8 | ---
9 | :::danger
10 | Backup your important data before writing the USB as it will overwrite anything on the USB key.
11 | :::
12 |
13 | To boot netboot.xyz from a [USB key](https://amzn.to/3CD0BE5), you will need to write the netboot.xyz image to the key. This enables you to boot into netboot.xyz on any machine that supports USB booting.
14 |
15 | You can download the `netboot.xyz.img` USB disk image [here](https://boot.netboot.xyz/ipxe/netboot.xyz.img).
16 |
17 | ## Creating USB Key on Linux
18 |
19 | Insert a USB key in your computer and find the device name. Then use following command:
20 |
21 | ```shell
22 | cat netboot.xyz.img > /dev/sdX
23 | ```
24 |
25 | or you can run the following command:
26 |
27 | ```shell
28 | dd if=netboot.xyz.img of=/dev/sdX
29 | ```
30 |
31 | where sdX is your usb drive. The USB key should be ready to eject once finished.
32 |
33 | ## Creating USB Key on MacOS
34 |
35 | __To get the current list of devices, run:__
36 |
37 | ```shell
38 | diskutil list
39 | ```
40 |
41 | __Insert the flash media and run once again to determine the device node assigned to your flash media (e.g. /dev/disk2):__
42 |
43 | ```shell
44 | diskutil list
45 | ```
46 |
47 | __Run the following, replacing N with the disk number from the last command (in the previous example, N would be 2):__
48 |
49 | ```shell
50 | diskutil unmountDisk /dev/diskN
51 | ```
52 |
53 | __Now write the disk image to the flash media by running:__
54 |
55 | ```shell
56 | sudo dd if=netboot.xyz.img of=/dev/rdiskN bs=1m
57 | ```
58 |
59 | * Using /dev/rdisk instead of /dev/disk may be faster
60 | * If you see the error dd: Invalid number '1m', you are using GNU dd. Use the same command but replace bs=1m with bs=1M
61 | * If you see the error dd: /dev/diskN: Resource busy, make sure the disk is not in use. Start the 'Disk Utility.app' and unmount (don't eject) the drive
62 |
63 | __Now run and remove your flash media when the command completes:__
64 |
65 | ```shell
66 | diskutil eject /dev/diskN
67 | ```
68 |
69 | ## Creating USB Key on Windows
70 |
71 | For creating a USB Key on a Windows device, you can check out [Rufus](https://rufus.akeo.ie/) to install the image file to a USB key.
72 |
73 | ## Booting from the USB Key
74 |
75 | Once you've created your key, reboot and set your BIOS to load the USB key first if it's not set for that already. You should see iPXE load up either load up netboot.xyz automatically or you will be prompted to set your networking information up.
76 |
--------------------------------------------------------------------------------
/docs/booting/tftp.md:
--------------------------------------------------------------------------------
1 | ---
2 | id: tftp
3 | title: Boot from TFTP
4 | sidebar_label: Boot from TFTP
5 | sidebar_position: 3
6 | description: "Methods of booting into netboot.xyz using TFTP and DHCP"
7 | hide_table_of_contents: true
8 | ---
9 |
10 | If you want to utilize netboot.xyz from your home or office network, it's relatively easy to set up. It will allow all of your devices on your network to have netboot.xyz available whenever you need it by just changing the boot order on your device, selecting network boot, or manually selecting the device to boot.
11 |
12 | ### DHCP Server Setup
13 |
14 | You will have to tell your DHCP server to provide a "next-server", the address of a TFTP server on your network, and a "filename", the netboot.xyz boot file (you can choose among different architecture systems [here](https://netboot.xyz/downloads/). When your clients boot up, if they are set to network boot, they'll automatically get a valid DHCP address, pull down the netboot.xyz iPXE bootloader and load up the Operating System menu.
15 |
16 | Example:
17 |
18 | ```
19 | next-server "1.2.3.4"
20 | filename "netboot.xyz.kpxe"
21 | ```
22 |
23 | If you are using [dnsmasq as your DHCP server](https://wiki.archlinux.org/index.php/dnsmasq#DHCP_server) as well as your TFTP server then setting the next-server option is as simple as adding the following line to `/etc/dnsmasq.conf`:
24 |
25 | ```
26 | dhcp-option=66,"0.0.0.0"
27 | ```
28 |
29 | `0.0.0.0` is parsed as the address of the machine running dnsmasq.
30 |
31 | ### TFTP Server Setup
32 |
33 | You will need to set up a tftp server to host the iPXE files. There are various types of TFTP servers out there and they all usually work pretty well. You can also use dnsmasq to host the files as well.
34 |
35 | If you use dnsmasq you can add this configuration to `/etc/dnsmasq.conf`:
36 |
37 | ```
38 | enable-tftp
39 | tftp-root=/var/lib/tftp
40 | dhcp-boot=netboot.xyz.kpxe
41 | ```
42 |
43 | ### Fixing the dnsmasq service
44 |
45 | If you are running systemd and you can start dnsmasq fine manually but it fails to start at boot you may need to edit the [Unit] section of `/lib/systemd/system/dnsmasq.service` by changing:
46 |
47 | ```
48 | After=network.target
49 | ```
50 |
51 | to
52 |
53 | ```
54 | After=network-online.target
55 | ```
56 |
57 | ### Regular and Undionly Boot Files
58 |
59 | If you experiencing issues with the regular [netboot.xyz.kpxe](https://boot.netboot.xyz/ipxe/netboot.xyz.kpxe) bootloader, you can try and use the [netboot.xyz-undionly.kpxe](https://boot.netboot.xyz/ipxe/netboot.xyz-undionly.kpxe) bootloader. The regular bootloader includes common NIC drivers in the iPXE image, while the undionly loader will piggyback off the NIC boot firmware.
60 |
--------------------------------------------------------------------------------
/src/components/HomepageFeatures.js:
--------------------------------------------------------------------------------
1 | import React, {Suspense, lazy} from 'react';
2 | import clsx from 'clsx';
3 | import styles from './HomepageFeatures.module.css';
4 | import useBaseUrl from '@docusaurus/useBaseUrl';
5 |
6 | const ThemedImage = lazy(() => import('@theme/ThemedImage'));
7 |
8 | // List of features to be displayed on the homepage
9 | const FeatureList = [
10 | {
11 | title: 'Simple to Use',
12 | Svg: ['./img/nbxyz-user.svg', './img/nbxyz-user.svg'],
13 | description: (
14 | <>
15 | netboot.xyz enables you to boot into many types of operating systems
16 | using lightweight tooling to get you up and running as soon as possible.
17 | >
18 | ),
19 | },
20 | {
21 | title: 'Evaluate, Install, Rescue',
22 | Svg: ['./img/nbxyz-laptop.gif', './img/nbxyz-laptop.gif'],
23 | description: (
24 | <>
25 | Discover new operating systems without having to download and rewrite
26 | media over and over again. Rescue operating systems from a single image.
27 | An essential for any sysadmin.
28 | >
29 | ),
30 | },
31 | {
32 | title: 'Powered by the iPXE project',
33 | Svg: ['./img/ipxechip.svg', './img/ipxechip.svg'],
34 | description: (
35 | <>
36 | netboot.xyz uses the iPXE project to enable you to provision, rescue or
37 | load into a live boot environment leveraging the Preboot Execution
38 | Environment (PXE) on most systems.
39 | >
40 | ),
41 | },
42 | ];
43 |
44 | // LazyImage component to lazy load images
45 | const LazyImage = ({sources, alt, className}) => (
46 | Loading...}>
47 |
48 |
49 | );
50 |
51 | // Feature component to display individual features
52 | function Feature({Svg, title, description}) {
53 | return (
54 |
83 |
84 | );
85 | }
86 |
--------------------------------------------------------------------------------
/blog/2025-03-28-10k-github-stars.md:
--------------------------------------------------------------------------------
1 | ---
2 | slug: 2025/03/28/10k-github-stars
3 | title: 10,000 GitHub Stars!
4 | authors:
5 | - antonym
6 | tags: [milestone, site-updates, netboot.xyz, ipxe, github]
7 | ---
8 |
9 | We are thrilled to announce that netboot.xyz has reached a significant milestone: **10,000 GitHub stars**! This achievement represents more than just a number - it's a testament to the incredible community support and the usefulness of the project to system administrators, developers, and technology enthusiasts worldwide.
10 |
11 |
12 |
13 | ## One Million Menu Loads Monthly
14 |
15 | Along with reaching 10k stars, we are now seeing over **1 million menu loads per month** worldwide! This level of usage demonstrates how essential netboot.xyz has become for many of you in your daily workflows - whether you're deploying operating systems, performing system recovery, or using our utilities for maintenance tasks.
16 |
17 | ## A Thank You to the iPXE Project
18 |
19 | This milestone would not have been possible without the foundation provided by the [iPXE project](https://ipxe.org/). We owe a special debt of gratitude to Michael Brown, the lead developer of iPXE, whose vision and dedication have created the robust network boot framework that powers netboot.xyz.
20 |
21 | The entire iPXE community also deserves recognition for their continuous improvements, bug fixes, and new features that enable netboot.xyz to support a wide range of hardware and boot scenarios. Their commitment to open source has directly contributed to our success.
22 |
23 | ## Looking Forward
24 |
25 | As we celebrate this milestone, we are more motivated than ever to improve netboot.xyz and add even more features that make network booting simpler and more powerful. Some of our plans include:
26 |
27 | - Continuing to add support for more operating systems and utilities
28 | - Improving the user experience for both novice and advanced users
29 | - Enhancing our documentation to help new users get started
30 | - Continuing to build out our community resources
31 |
32 | ## How You Can Help
33 |
34 | If you've found netboot.xyz useful, consider:
35 |
36 | - Contributing code, documentation, or testing new features
37 | - Sharing your use cases and success stories
38 | - Joining our [Discord community](https://discord.gg/An6PA2a) to help others
39 | - Supporting the project through [GitHub Sponsors](https://github.com/sponsors/netbootxyz) or [Open Collective](https://opencollective.com/netbootxyz)
40 |
41 | ## Thank You!
42 |
43 | Finally, a massive thank you to everyone who has used netboot.xyz, filed issues, contributed code, spread the word, or supported us in any way. This project exists because of you, and I'm excited to see where the next 10,000 stars take us!
44 |
45 | Keep on netbooting!
46 |
--------------------------------------------------------------------------------
/src/theme/CodeBlock/index.js:
--------------------------------------------------------------------------------
1 | import React, {useState} from 'react';
2 | import CodeBlock from '@theme-original/CodeBlock';
3 | import {translate} from '@docusaurus/Translate';
4 |
5 | // Helper function to extract text from React children
6 | const getTextContent = (children) => {
7 | if (typeof children === 'string') {
8 | return children;
9 | }
10 | if (Array.isArray(children)) {
11 | return children.map(getTextContent).join('');
12 | }
13 | if (children?.props?.children) {
14 | return getTextContent(children.props.children);
15 | }
16 | return String(children || '');
17 | };
18 |
19 | export default function CodeBlockWrapper(props) {
20 | const [copied, setCopied] = useState(false);
21 |
22 | const copyToClipboard = async () => {
23 | try {
24 | const textContent = getTextContent(props.children);
25 | await navigator.clipboard.writeText(textContent);
26 | setCopied(true);
27 | setTimeout(() => setCopied(false), 2000);
28 | } catch (error) {
29 | console.warn('Failed to copy to clipboard:', error);
30 | // Fallback for older browsers or when clipboard API fails
31 | try {
32 | const textArea = document.createElement('textarea');
33 | textArea.value = getTextContent(props.children);
34 | textArea.style.position = 'fixed';
35 | textArea.style.opacity = '0';
36 | document.body.appendChild(textArea);
37 | textArea.focus();
38 | textArea.select();
39 | document.execCommand('copy');
40 | document.body.removeChild(textArea);
41 | setCopied(true);
42 | setTimeout(() => setCopied(false), 2000);
43 | } catch (fallbackError) {
44 | console.error('Copy to clipboard failed:', fallbackError);
45 | }
46 | }
47 | };
48 |
49 | return (
50 |
164 | Download the latest rolling releases of netboot.xyz bootloaders.
165 | These are generated as updates occur and are the most up to date.
166 | All downloads automatically load into{' '}
167 | boot.netboot.xyz.
168 |
216 | SHA256 checksums are generated during each build and are available{' '}
217 |
222 | here
223 |
224 | . You can also view the embedded scripts{' '}
225 |
230 | on GitHub
231 |
232 | .
233 |
234 |
235 |
236 |
237 |
238 | );
239 | }
240 |
--------------------------------------------------------------------------------
/docs/kb/networking/edgerouter.md:
--------------------------------------------------------------------------------
1 | ---
2 | id: edgerouter
3 | title: "Ubiquiti EdgeRouter"
4 | description: Ubiquiti EdgeRouter Usage
5 | hide_table_of_contents: true
6 | ---
7 |
8 | This document covers how to setup netboot.xyz, a service that provides
9 | iPXE-based installation and live boot of a bunch of operating systems,
10 | on a [Ubiquiti EdgeRouter](https://amzn.to/40zL2oL).
11 |
12 | Thanks go to [Sam Kottler](https://github.com/skottler) for originally writing up this how-to. Improve setup robustness by using the embedded TFTP daemon from dnsmasq by [Yan Grunenberger](https://github.com/ravens) instead of external TFTP package.
13 |
14 | ### Assumptions
15 |
16 | I've made a few assumptions throughout this document that will probably be
17 | different for your setup:
18 |
19 | * There is a DHCP pool called `LAN`
20 | * The `LAN` pool manages `10.10.2.0/24`
21 |
22 | ### Configure tftp support in dnsmasq
23 |
24 | By default, dnsmasq is using in the Edgerouter to provide DNS services. In order to enable it :
25 |
26 | ```bash
27 | sudo mkdir /config/user-data/tftproot
28 | sudo chmod ugo+rX /config/user-data/tftproot
29 |
30 | configure
31 |
32 | set service dns forwarding options enable-tftp
33 | set service dns forwarding options tftp-root=/config/user-data/tftproot
34 |
35 | commit
36 | save
37 | ```
38 |
39 | ### Setup TFTP components
40 |
41 | Download the kpxe image for netboot.xyz and set the permissions properly:
42 |
43 | ```bash
44 | sudo curl -o /config/user-data/tftproot/netboot.xyz.kpxe https://boot.netboot.xyz/ipxe/netboot.xyz.kpxe
45 | sudo chmod ugo+r /config/user-data/tftproot/netboot.xyz.kpxe
46 | ```
47 |
48 | At this point you should be able to use a TFTP client from a client in
49 | `10.10.2.0/24` to fetch the image:
50 |
51 | ```bash
52 | $ tftp 10.10.2.1
53 | tftp> get netboot.xyz.kpxe
54 | Received 354972 bytes in 2.0 seconds
55 | ```
56 |
57 | ### Configure dhcpd
58 |
59 | We're gonna configure DHCP on the EdgeRouter to serve the right parameters to
60 | clients:
61 |
62 | ```bash
63 | configure
64 |
65 | set service dhcp-server global-parameters "option client-arch code 93 = unsigned integer 16;"
66 | edit service dhcp-server shared-network-name LAN subnet 10.10.2.0/24
67 | set bootfile-server 10.10.2.1
68 | set bootfile-name netboot.xyz.kpxe
69 |
70 | commit
71 | save
72 | ```
73 |
74 | The configuration for the `LAN` pool should now look something like the following:
75 |
76 | ```bash
77 | skottler@edge1# show service dhcp-server shared-network-name LAN
78 | authoritative enable
79 | subnet 10.10.2.0/24 {
80 | bootfile-name netboot.xyz.kpxe
81 | bootfile-server 10.10.2.1
82 | default-router 10.10.2.1
83 | dns-server 10.10.2.1
84 | lease 86400
85 | start 10.10.2.100 {
86 | stop 10.10.2.199
87 | }
88 | }
89 | [edit]
90 | ```
91 |
92 | That's it!
93 |
94 | ## The advanced setup with support for Legacy and UEFI
95 |
96 | ### Using ISC DHCP
97 |
98 | This section was written by [Skyler Mäntysaari](https://github.com/samip5).
99 |
100 | This requires that you do not use `set service dhcp-server use-dnsmasq enable`. If you do use that, it will not work.
101 |
102 | We are going to start by removing the PXE boot related things from dhcp-server options, so the commands for that are something like:
103 |
104 | ```bash
105 | delete service dhcp-server shared-network-name LAN subnet 10.10.2.0/24 bootfile-name netboot.xyz.kpxe
106 | delete service dhcp-server shared-network-name LAN subnet 10.10.2.0/24 bootfile-server 10.10.2.1
107 | ```
108 |
109 | We are now going to download the efi version of the boot file if it does not exist yet:
110 | ```
111 | sudo curl -o /config/user-data/tftproot/netboot.xyz.efi https://boot.netboot.xyz/ipxe/netboot.xyz.efi
112 | sudo chmod ugo+r /config/user-data/tftproot/netboot.xyz.efi
113 | ```
114 |
115 | Next we are going to create a scripts folder for the scripts, in persistent storage (should persist over upgrades):
116 |
117 | ```bash
118 | mkdir --parents /config/user-data/scripts/pxe/
119 | ```
120 |
121 | Next we are going to go into configure mode, and include the main pxe config file:
122 |
123 | ```bash
124 | set service dhcp-server global-parameters "deny bootp;"
125 | set service dhcp-server global-parameters "include "/config/user-data/scripts/pxe/option-space.conf";"
126 | set service dhcp-server shared-network-name LAN subnet 10.10.2.0/24 subnet-parameters "include "/config/user-data/scripts/pxe/pxe.conf";"
127 | ```
128 |
129 | IT NEEDS to be typed exactly like that, the "" part.
130 |
131 | The file /config/user-data/scripts/pxe/pxe.conf:
132 |
133 | ```bash
134 | allow booting;
135 | next-server 10.10.2.1;
136 |
137 | if option arch = 00:07 {
138 | filename "netboot.xyz.efi";
139 | } elsif option arch = 00:00 {
140 | filename "netboot.xyz.kpxe";
141 | } else {
142 | filename "netboot.xyz.efi";
143 | }
144 | ```
145 |
146 | The file /config/user-data/scripts/pxe/option-space.conf:
147 |
148 | ```bash
149 | # Declare the iPXE/gPXE/Etherboot option space
150 | option space ipxe;
151 | option ipxe-encap-opts code 175 = encapsulate ipxe;
152 |
153 | # iPXE options, can be set in DHCP response packet
154 | option ipxe.priority code 1 = signed integer 8;
155 | option ipxe.keep-san code 8 = unsigned integer 8;
156 | option ipxe.skip-san-boot code 9 = unsigned integer 8;
157 | option ipxe.syslogs code 85 = string;
158 | option ipxe.cert code 91 = string;
159 | option ipxe.privkey code 92 = string;
160 | option ipxe.crosscert code 93 = string;
161 | option ipxe.no-pxedhcp code 176 = unsigned integer 8;
162 | option ipxe.bus-id code 177 = string;
163 | option ipxe.bios-drive code 189 = unsigned integer 8;
164 | option ipxe.username code 190 = string;
165 | option ipxe.password code 191 = string;
166 | option ipxe.reverse-username code 192 = string;
167 | option ipxe.reverse-password code 193 = string;
168 | option ipxe.version code 235 = string;
169 | option iscsi-initiator-iqn code 203 = string;
170 |
171 | # iPXE feature flags, set in DHCP request packet
172 | option ipxe.pxeext code 16 = unsigned integer 8;
173 | option ipxe.iscsi code 17 = unsigned integer 8;
174 | option ipxe.aoe code 18 = unsigned integer 8;
175 | option ipxe.http code 19 = unsigned integer 8;
176 | option ipxe.https code 20 = unsigned integer 8;
177 | option ipxe.tftp code 21 = unsigned integer 8;
178 | option ipxe.ftp code 22 = unsigned integer 8;
179 | option ipxe.dns code 23 = unsigned integer 8;
180 | option ipxe.bzimage code 24 = unsigned integer 8;
181 | option ipxe.multiboot code 25 = unsigned integer 8;
182 | option ipxe.slam code 26 = unsigned integer 8;
183 | option ipxe.srp code 27 = unsigned integer 8;
184 | option ipxe.nbi code 32 = unsigned integer 8;
185 | option ipxe.pxe code 33 = unsigned integer 8;
186 | option ipxe.elf code 34 = unsigned integer 8;
187 | option ipxe.comboot code 35 = unsigned integer 8;
188 | option ipxe.efi code 36 = unsigned integer 8;
189 | option ipxe.fcoe code 37 = unsigned integer 8;
190 | option ipxe.vlan code 38 = unsigned integer 8;
191 | option ipxe.menu code 39 = unsigned integer 8;
192 | option ipxe.sdi code 40 = unsigned integer 8;
193 | option ipxe.nfs code 41 = unsigned integer 8;
194 |
195 | # Other useful general options
196 | # https://www.iana.org/assignments/dhcpv6-parameters/dhcpv6-parameters.xhtml
197 | option arch code 93 = unsigned integer 16;
198 | ```
199 |
200 | After all of that, it should be it! I hope that helps.
201 |
202 | ### Using dnsmasq
203 |
204 | This section was written by [Benjamin Reich](https://benjaminreich.de/).
205 |
206 | This Part is requierd if you using `set service dhcp-server use-dnsmasq enable`.
207 |
208 | Connect via SSH and replace `SERVERIP` with the actual IP.
209 |
210 | ```bash
211 | configure
212 | set service dhcp-server use-dnsmasq enable
213 | set service dns forwarding options "dhcp-match=set:bios,60,PXEClient:Arch:00000"
214 | set service dns forwarding options "dhcp-boot=tag:bios,netboot.xyz.kpxe,,SERVERIP"
215 | set service dns forwarding options "dhcp-match=set:efi32,60,PXEClient:Arch:00002"
216 | set service dns forwarding options "dhcp-boot=tag:efi32,netboot.xyz.efi,,SERVERIP"
217 | set service dns forwarding options "dhcp-match=set:efi32-1,60,PXEClient:Arch:00006"
218 | set service dns forwarding options "dhcp-boot=tag:efi32-1,netboot.xyz.efi,,SERVERIP"
219 | set service dns forwarding options "dhcp-match=set:efi64,60,PXEClient:Arch:00007"
220 | set service dns forwarding options "dhcp-boot=tag:efi64,netboot.xyz.efi,,SERVERIP"
221 | set service dns forwarding options "dhcp-match=set:efi64-1,60,PXEClient:Arch:00008"
222 | set service dns forwarding options "dhcp-boot=tag:efi64-1,netboot.xyz.efi,,SERVERIP"
223 | set service dns forwarding options "dhcp-match=set:efi64-2,60,PXEClient:Arch:00009"
224 | set service dns forwarding options "dhcp-boot=tag:efi64-2,netboot.xyz.efi,,SERVERIP"
225 | commit; save
226 | ```
227 |
--------------------------------------------------------------------------------
/static/img/nbxyz-logo.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/static/img/nbxyz-logo-dark.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/static/img/white_logo_transparent.svg:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
--------------------------------------------------------------------------------