Adding more changes

This commit is contained in:
Antony Messerli 2019-11-10 17:31:00 +00:00 committed by Ryan Kuba
parent 3cf7f27ed9
commit fe57e98664
33 changed files with 683 additions and 189 deletions

View File

@ -9,4 +9,4 @@
* More host OS support * More host OS support
* Docker images * Docker images
* package cacher * package cacher
* port netboot.xyz to this in staging env to validate and test * port netboot.xyz to this in staging env to validate and test

View File

@ -1,17 +1,27 @@
--- ---
### site configuration ###
site_name: netboot.xyz site_name: netboot.xyz
boot_domain: boot.netboot.xyz boot_domain: boot.netboot.xyz
boot_version: 1.04 boot_version: 1.04
sigs_enabled: false
img_sigs_enabled: false
sigs_location: "http://${boot_domain}/sigs/"
memdisk_location: "http://${boot_domain}/memdisk"
ipxe_repo: https://github.com/ipxe/ipxe.git ipxe_repo: https://github.com/ipxe/ipxe.git
ipxe_branch: master ipxe_branch: master
ipxe_source_dir: /usr/src/ipxe ipxe_source_dir: /usr/src/ipxe
netbootxyz_repo: https://github.com/netbootxyz/netboot.xyz.git live_endpoint: "https://github.com/netbootxyz"
netbootxyz_branch: master
netbootxyz_root: /var/www/html netbootxyz_root: /var/www/html
bootloader_tftp_enabled: false
bootloader_https_enabled: true
bootloader_http_enabled: true
### release values ###
releases: releases:
alpinelinux: alpinelinux:
name: "Alpine Linux" name: "Alpine Linux"
@ -126,6 +136,7 @@ releases:
code_name: "edge" code_name: "edge"
freebsd: freebsd:
name: "FreeBSD" name: "FreeBSD"
enabled: false
menu: "bsd" menu: "bsd"
versions: versions:
- name: "FreeBSD 12.0" - name: "FreeBSD 12.0"
@ -157,14 +168,16 @@ releases:
gentoo: gentoo:
name: "Gentoo" name: "Gentoo"
mirror: "" mirror: ""
enabled: false
menu: "linux" menu: "linux"
versions: versions:
- name: "TBA" - name: "Minimal CD 20160204 (amd64)"
code_name: "TBA" code_name: "20160204"
ipfire: ipfire:
name: "IPFire" name: "IPFire"
mirror: "downloads.ipfire.org" mirror: "downloads.ipfire.org"
menu: "linux" menu: "linux"
enabled: true
versions: versions:
- name: "2.21 Core 126" - name: "2.21 Core 126"
code_name: "2.21-core126" code_name: "2.21-core126"
@ -301,6 +314,7 @@ releases:
name: "Scientific Linux" name: "Scientific Linux"
mirror: "ftp1.scientificlinux.org" mirror: "ftp1.scientificlinux.org"
base_dir: "" base_dir: ""
enabled: true
menu: "linux" menu: "linux"
versions: versions:
- name: "7.7" - name: "7.7"
@ -315,6 +329,7 @@ releases:
name: "Slackware" name: "Slackware"
mirror: "mirror.rackspace.com" mirror: "mirror.rackspace.com"
base_dir: "slackware" base_dir: "slackware"
enabled: true
menu: "linux" menu: "linux"
versions: versions:
- name: "Current" - name: "Current"
@ -326,6 +341,7 @@ releases:
tinycore: tinycore:
name: "Tiny Core Linux" name: "Tiny Core Linux"
mirror: "tinycorelinux.net" mirror: "tinycorelinux.net"
enabled: true
menu: "linux" menu: "linux"
versions: versions:
- name: "Core [ISO]" - name: "Core [ISO]"

View File

@ -0,0 +1,67 @@
#!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 version 1.04
:start
echo ${bold}${fg_gre}netboot.xyz ${fg_whi}v${version}${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 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
: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

View File

@ -0,0 +1,68 @@
#!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 version 1.04
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 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
: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

View File

@ -0,0 +1,69 @@
#!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 version 1.04
set ipxe_cloud_config packet
:start
echo ${bold}${fg_gre}netboot.xyz ${fg_whi}v${version} for ${fg_red}packet.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 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
: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

View File

@ -0,0 +1,28 @@
#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

View File

@ -0,0 +1 @@
#undef OCSP_CHECK

View File

@ -0,0 +1,11 @@
#define DIGEST_CMD /* Image crypto digest commands */
#define DOWNLOAD_PROTO_HTTPS /* Secure Hypertext Transfer Protocol */
#define IMAGE_COMBOOT /* COMBOOT */
#define IMAGE_TRUST_CMD /* Image trust management commands */
#define NET_PROTO_IPV6 /* IPv6 protocol */
#define NSLOOKUP_CMD /* DNS resolving command */
#define NTP_CMD /* NTP commands */
#define PCI_CMD /* PCI commands */
#define REBOOT_CMD /* Reboot command */
#define TIME_CMD /* Time commands */
#define VLAN_CMD /* VLAN commands */

View File

@ -0,0 +1,10 @@
#define DIGEST_CMD /* Image crypto digest commands */
#define DOWNLOAD_PROTO_HTTPS /* Secure Hypertext Transfer Protocol */
#define IMAGE_TRUST_CMD /* Image trust management commands */
#define NET_PROTO_IPV6 /* IPv6 protocol */
#define NSLOOKUP_CMD /* DNS resolving command */
#define NTP_CMD /* NTP commands */
#define PCI_CMD /* PCI commands */
#define REBOOT_CMD /* Reboot command */
#define TIME_CMD /* Time commands */
#define VLAN_CMD /* VLAN commands */

View File

@ -0,0 +1,4 @@
/* nap.h */
#undef NAP_EFIX86
#undef NAP_EFIARM
#define NAP_NULL

View File

@ -0,0 +1,2 @@
/* usb.h */
#define USB_EFI

View File

@ -1,136 +1,11 @@
--- ---
- name: Adds python packages if python is not present
raw: test -e /usr/bin/python || (apt -y update && apt install -y python-minimal python-yaml)
- name: Gathering facts - include: generate_disks_base.yml
setup:
- name: Gather variables for each operating system - include: generate_disks_legacy.yml
include_vars: "{{ item }}" when:
with_first_found: - generate_disks_legacy | default(true) | bool
- "{{ ansible_distribution | lower }}-{{ ansible_distribution_version | lower }}.yml"
- "{{ ansible_distribution | lower }}-{{ ansible_distribution_major_version | lower }}.yml"
- "{{ ansible_os_family | lower }}-{{ ansible_distribution_major_version | lower }}.yml"
- "{{ ansible_distribution | lower }}.yml"
- "{{ ansible_os_family | lower }}.yml"
- name: Install required packages - include: generate_disks_efi.yml
package: when:
name: "{{ item }}" - generate_disks_efi | default(true) | bool
state: latest
with_items: "{{ netbootxyz_packages }}"
- name: Check out latest iPXE sources
git:
repo: "{{ ipxe_repo }}"
dest: /usr/src/ipxe
version: "{{ ipxe_branch }}"
- name: Check out latest netboot.xyz sources
git:
repo: "{{ netbootxyz_repo }}"
dest: /usr/src/netboot.xyz
version: "{{ netbootxyz_branch }}"
- name: Copy iPXE Bootloader template to iPXE source directory
template:
src: disks/ipxe-bootloader.j2
dest: /usr/src/ipxe/src/ipxe-bootloader
- name: Copy netboot.xyz colour.h iPXE config
file:
src: /usr/src/netboot.xyz/ipxe/local/colour.h
dest: /usr/src/ipxe/src/config/local/colour.h
state: link
- name: Copy netboot.xyz general.h iPXE config
file:
src: /usr/src/netboot.xyz/ipxe/local/general.h
dest: /usr/src/ipxe/src/config/local/general.h
state: link
- name: Touch iPXE config local files
file:
path: "{{ item }}"
state: touch
with_items:
- /usr/src/ipxe/src/config/local/console.h
- /usr/src/ipxe/src/config/local/umalloc.h
- /usr/src/ipxe/src/config/local/nap.h
- /usr/src/ipxe/src/config/local/timer.h
- /usr/src/ipxe/src/config/local/branding.h
- /usr/src/ipxe/src/config/local/serial.h
- /usr/src/ipxe/src/config/local/reboot.h
- /usr/src/ipxe/src/config/local/sanboot.h
- /usr/src/ipxe/src/config/local/fault.h
- /usr/src/ipxe/src/config/local/dhcp.h
- /usr/src/ipxe/src/config/local/sideband.h
- /usr/src/ipxe/src/config/local/entropy.h
- /usr/src/ipxe/src/config/local/crypto.h
- /usr/src/ipxe/src/config/local/usb.h
- /usr/src/ipxe/src/config/local/settings.h
- name: Create iPXE file directory
file:
path: /var/www/html/ipxe
state: directory
- name: Compile iPXE bootloader for Legacy BIOS
shell: "{{ item }}"
with_items:
- make EMBED=ipxe-bootloader bin/ipxe.dsk bin/ipxe.iso bin/ipxe.lkrn bin/ipxe.usb bin/ipxe.kpxe bin/undionly.kpxe
args:
chdir: /usr/src/ipxe/src
- name: Copy iPXE files for Legacy BIOS to http directory
copy:
src: /usr/src/ipxe/src/bin/{{ item }}
dest: /var/www/html/ipxe/{{ boot_domain }}-{{ item }}
remote_src: True
with_items:
- ipxe.dsk
- ipxe.iso
- ipxe.lkrn
- ipxe.usb
- ipxe.kpxe
- undionly.kpxe
- name: Copy helper apps
copy:
src: "{{ item }}"
dest: "{{ netbootxyz_root }}"
with_items:
- memdisk
- wimboot
- name: Copy netboot.xyz general.h.efi iPXE config
file:
src: /usr/src/netboot.xyz/ipxe/local/general.h.efi
dest: /usr/src/ipxe/src/config/local/general.h
state: link
- name: Compile iPXE bootloader for EFI
shell: "{{ item }}"
with_items:
- make clean
- make EMBED=ipxe-bootloader bin-x86_64-efi/ipxe.efi
args:
chdir: /usr/src/ipxe/src
- name: Generate iPXE EFI ISO Disk
shell: "{{ item }}"
with_items:
- mkdir -p efi_tmp/EFI/BOOT/
- cp bin-x86_64-efi/ipxe.efi efi_tmp/EFI/BOOT/bootx64.efi
- genisoimage -o ipxe-efi.iso efi_tmp
args:
chdir: /usr/src/ipxe/src
- name: Copy iPXE EFI builds to http directory
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: "{{ boot_domain }}-ipxe.efi" }
- { src: "ipxe-efi.iso", dest: "{{ boot_domain }}-ipxe-efi.iso" }

View File

@ -0,0 +1,66 @@
---
- name: Gathering facts
setup:
- name: Gather variables for each operating system
include_vars: "{{ item }}"
with_first_found:
- "{{ ansible_distribution | lower }}-{{ ansible_distribution_version | lower }}.yml"
- "{{ ansible_distribution | lower }}-{{ ansible_distribution_major_version | lower }}.yml"
- "{{ ansible_os_family | lower }}-{{ ansible_distribution_major_version | lower }}.yml"
- "{{ ansible_distribution | lower }}.yml"
- "{{ ansible_os_family | lower }}.yml"
- name: Create iPXE file directories
file:
path: "{{ item }}"
state: directory
with_items:
- "{{ netbootxyz_root }}/ipxe"
- name: Copy helper apps
copy:
src: "{{ item }}"
dest: "{{ netbootxyz_root }}"
with_items:
- memdisk
- wimboot
- name: Install required packages
package:
name: "{{ item }}"
state: latest
with_items: "{{ netbootxyz_packages }}"
- name: Check out latest iPXE sources
git:
repo: "{{ ipxe_repo }}"
dest: "{{ ipxe_source_dir }}"
version: "{{ ipxe_branch }}"
- name: Copy iPXE Bootloader template to iPXE source directory
template:
src: disks/ipxe-bootloader.j2
dest: "{{ ipxe_source_dir }}/src/ipxe-bootloader"
- name: Touch iPXE config local files
file:
path: "{{ ipxe_source_dir }}/{{ item }}"
state: touch
with_items:
- src/config/local/console.h
- 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

View File

@ -0,0 +1,44 @@
---
- name: Copy netboot.xyz local EFI iPXE configs
copy:
src: "ipxe/local/{{ item }}"
dest: "{{ ipxe_source_dir }}/src/config/local/{{ item }}"
with_items:
- colour.h
- crypto.h
- name: Copy netboot.xyz general.h.efi iPXE config
copy:
src: "ipxe/local/general.h.efi"
dest: "{{ ipxe_source_dir }}/src/config/local/general.h"
- name: Compile iPXE bootloader for EFI
shell: "{{ item }}"
with_items:
- make clean
- make EMBED=ipxe-bootloader bin-x86_64-efi/ipxe.efi
args:
chdir: "{{ ipxe_source_dir }}/src"
- name: Generate iPXE EFI ISO Disk
shell: "{{ item }}"
with_items:
- mkdir -p efi_tmp
- dd if=/dev/zero of=efi_tmp/ipxe.img count=2880
- mformat -i efi_tmp/ipxe.img -m 0xf8 -f 2880
- mmd -i efi_tmp/ipxe.img ::efi ::efi/boot
- mcopy -i efi_tmp/ipxe.img bin-x86_64-efi/ipxe.efi ::efi/boot/bootx64.efi
- genisoimage -o ipxe-efi.eiso -eltorito-alt-boot -e ipxe.img -no-emul-boot efi_tmp
args:
chdir: "{{ ipxe_source_dir }}/src"
warn: false
- name: Copy iPXE EFI builds to http directory
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: "{{ site_name }}.efi" }
- { src: "ipxe-efi.eiso", dest: "{{ site_name }}-efi.iso" }

View File

@ -0,0 +1,36 @@
---
- name: Copy netboot.xyz local legacy iPXE configs
copy:
src: "ipxe/local/{{ item }}"
dest: "{{ ipxe_source_dir }}/src/config/local/{{ item }}"
with_items:
- colour.h
- crypto.h
- general.h
- name: Compile iPXE bootloader for Legacy BIOS
shell: "{{ item }}"
with_items:
- make clean
- make EMBED=ipxe-bootloader bin/ipxe.dsk bin/ipxe.iso bin/ipxe.lkrn bin/ipxe.usb bin/ipxe.kpxe bin/undionly.kpxe
args:
chdir: "{{ ipxe_source_dir }}/src"
- name: Copy iPXE files for Legacy BIOS to http directory
copy:
src: "{{ ipxe_source_dir }}/src/bin/ipxe{{ item }}"
dest: "{{ netbootxyz_root }}/ipxe/{{ site_name }}{{ item }}"
remote_src: True
with_items:
- ".dsk"
- ".iso"
- ".lkrn"
- ".usb"
- ".kpxe"
- name: Copy undionly.kpxe for Legacy BIOS to http directory
copy:
src: "{{ ipxe_source_dir }}/src/bin/undionly.kpxe"
dest: "{{ netbootxyz_root }}/ipxe/{{ site_name }}-undionly.kpxe"
remote_src: True

View File

@ -1,11 +1,11 @@
--- ---
- name: Combine overrides with defaults - name: Combine overrides with defaults
set_fact: set_fact:
_my_releases: "{{ releases|combine(release_overrides, recursive=True) }}" _releases: "{{ releases|combine(release_overrides, recursive=True) }}"
- name: Set releases with user overrides - name: Set releases with user overrides
set_fact: set_fact:
releases: "{{ _my_releases }}" releases: "{{ _releases }}"
- name: Generate directories - name: Generate directories
file: file:
@ -16,6 +16,10 @@
debug: debug:
var: releases var: releases
- name: Dump endpoint vars for debugging
debug:
var: endpoints
- name: Generate netboot.xyz source files templates - name: Generate netboot.xyz source files templates
template: template:
src: "{{ item.src }}" src: "{{ item.src }}"

View File

@ -19,8 +19,8 @@ prompt --key m --timeout 4000 Hit the ${bold}m${boldoff} key to open failsafe me
:dhcp :dhcp
echo echo
dhcp || goto netconfig dhcp || goto netconfig
isset ${next-server} && iseq ${filename} netboot.xyz.kpxe && goto tftpmenu isset ${next-server} && iseq ${filename} {{ site_name }}.kpxe && goto tftpmenu ||
isset ${next-server} && iseq ${filename} netboot.xyz.efi && goto tftpmenu isset ${next-server} && iseq ${filename} {{ site_name }}.efi && goto tftpmenu ||
goto menu goto menu
:failsafe :failsafe
@ -52,11 +52,15 @@ goto menu || goto failsafe
chain --autofree tftp://${next-server}/menu.ipxe || echo ${TFTP_ERR} && goto menu chain --autofree tftp://${next-server}/menu.ipxe || echo ${TFTP_ERR} && goto menu
:menu :menu
{% if bootloader_https_enabled | bool %}
set conn_type https set conn_type https
chain --autofree https://${boot_domain}/menu.ipxe || echo ${HTTPS_ERR} chain --autofree https://${boot_domain}/menu.ipxe || echo ${HTTPS_ERR}
sleep 5 sleep 5
{% endif %}
{% if bootloader_http_enabled | bool %}
set conn_type http set conn_type http
chain --autofree http://${boot_domain}/menu.ipxe || echo ${HTTP_ERR} chain --autofree http://${boot_domain}/menu.ipxe || echo ${HTTP_ERR}
{% endif %}
goto localboot goto localboot
:localboot :localboot

View File

@ -8,22 +8,22 @@ set site_name {{ site_name }}
set boot_domain {{ boot_domain }} set boot_domain {{ boot_domain }}
# set location of memdisk # set location of memdisk
set memdisk http://${boot_domain}/memdisk set memdisk {{ memdisk_location }}
# signature check enabled? # signature check enabled?
set sigs_enabled true set sigs_enabled {{ sigs_enabled | default(false) | bool }}
# image signatures check enabled? # image signatures check enabled?
set img_sigs_enabled true set img_sigs_enabled {{ img_sigs_enabled | default(false) | bool }}
# set location of signatures for sources # set location of signatures for sources
set sigs http://${boot_domain}/sigs/ set sigs {{ sigs_location }}
# set location of latest iPXE # set location of latest iPXE
set ipxe_disk netboot.xyz-undionly.kpxe set ipxe_disk netboot.xyz-undionly.kpxe
# set location of custom netboot.xyz live assets # set location of custom netboot.xyz live assets
set live_endpoint https://github.com/netbootxyz set live_endpoint {{ live_endpoint }}
############################## ##############################
# netboot-xyz hosted endpoints # netboot-xyz hosted endpoints

View File

@ -9,7 +9,7 @@ iseq ${arch} x86_64 && set arch_a amd64 || set arch_a ${arch}
# BSD based systems # BSD based systems
item --gap BSD Based Operating Systems item --gap BSD Based Operating Systems
{% for key, value in releases.items() | sort %} {% for key, value in releases.items() | sort(attribute='1.name') %}
{% if value.enabled is defined and value.menu == "bsd" and value.enabled | bool %} {% if value.enabled is defined and value.menu == "bsd" and value.enabled | bool %}
item {{ key }} ${space} {{ value.name }} item {{ key }} ${space} {{ value.name }}
{% endif %} {% endif %}
@ -38,4 +38,4 @@ exit 0
:changebits :changebits
iseq ${arch} x86_64 && set arch i386 || set arch x86_64 iseq ${arch} x86_64 && set arch i386 || set arch x86_64
goto bsd_menu goto bsd_menu

View File

@ -0,0 +1,32 @@
#!ipxe
# Gentoo Operating System
# http://www.gentoo.org
# Note: in order to boot Gentoo via iPXE, the method at http://blog.dastrup.com/?p=12 has been utilized to
# to allow for the Gentoo minimal disk to boot. I've regenerated the latest boot disks and have put
# them on https://sourceforge.net/projects/netboot-xyz/files/distros/gentoo/amd64/20160204/
goto ${menu}
:gentoo
set os {{ releases.gentoo.name }}
menu ${os} ${arch_a}
{% for item in releases.gentoo.versions %}
item {{ item.code_name }} ${space} ${os} {{ item.name }}
{% endfor %}
choose gentoo_version || goto gentoo_exit
goto ${gentoo_version}
:20160204
set gentoopath https://master.dl.sourceforge.net/project/netboot-xyz/distros/gentoo/amd64/20160204
echo Please note the gentoo ISO has been regenerated to work with iPXE
echo using the method here: http://blog.dastrup.com/?p=12
kernel --name gentoo-kernel ${gentoopath}/kernel root=/dev/ram0 init=/linuxrc loop=/image.squashfs looptype=squashfs cdroot=1 real_root=/ ${console}
initrd --name gentoo-initrd.img ${gentoopath}/initrd
boot
goto gentoo
:gentoo_exit
clear menu
chain linux.ipxe

View File

@ -1,7 +0,0 @@
#!ipxe
#### boot.netboot.xyz initial loader ####
#### see https://netboot.xyz for more information ####
set conn_type https
chain --autofree https://boot.netboot.xyz/menu.ipxe || echo HTTPS failed... attempting HTTP...
set conn_type http
chain --autofree http://boot.netboot.xyz/menu.ipxe || echo HTTP failed, localbooting...

View File

@ -0,0 +1,11 @@
#!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 %}

View File

@ -6,7 +6,7 @@ goto ${menu} ||
menu Linux Installers - Current Arch [ ${arch} ] menu Linux Installers - Current Arch [ ${arch} ]
iseq ${arch} x86_64 && set arch_a amd64 || set arch_a ${arch} iseq ${arch} x86_64 && set arch_a amd64 || set arch_a ${arch}
item --gap Popular Linux Operating Systems: item --gap Popular Linux Operating Systems:
{% for key, value in releases.items() | sort %} {% for key, value in releases.items() | sort(attribute='1.name') %}
{% if value.enabled is defined and value.menu == "linux" and value.enabled | bool %} {% if value.enabled is defined and value.menu == "linux" and value.enabled | bool %}
item {{ key }} ${space} {{ value.name }} item {{ key }} ${space} {{ value.name }}
{% endif %} {% endif %}

View File

@ -6,7 +6,7 @@ goto ${menu} ||
menu Live Boot Distributions - Current Arch [ ${arch} ] menu Live Boot Distributions - Current Arch [ ${arch} ]
iseq ${arch} x86_64 && set arch_a amd64 || set arch_a ${arch} iseq ${arch} x86_64 && set arch_a amd64 || set arch_a ${arch}
item --gap Live Boot Distributions item --gap Live Boot Distributions
item liveubuntu ${space} Ubuntu Live item live-ubuntu ${space} Ubuntu Live
choose menu || goto live_exit choose menu || goto live_exit
echo ${cls} echo ${cls}
goto ${menu} || goto ${menu} ||

View File

@ -6,17 +6,32 @@ goto ${menu} ||
menu Live Ubuntu Default (Unity) - Current Arch [ ${arch} ] menu Live Ubuntu Default (Unity) - Current Arch [ ${arch} ]
iseq ${arch} x86_64 && set arch_a amd64 || set arch_a ${arch} iseq ${arch} x86_64 && set arch_a amd64 || set arch_a ${arch}
item --gap Live Ubuntu Default (Unity) item --gap Live Ubuntu Default (Unity)
item bionic-18.04-default ${space} Bionic Beaver 18.04 {% for key, value in endpoints.items() | sort %}
{% if value.os == "ubuntu" and 'squash' in key %}
item {{ key }} ${space} {{ value.os | title }} {{ value.version }} {{ value.flavor | title}}
{% endif %}
{% endfor %}
choose menu || goto live_exit choose menu || goto live_exit
echo ${cls} echo ${cls}
goto ${menu} || goto ${menu} ||
iseq ${sigs_enabled} true && goto verify_sigs || goto change_menu iseq ${sigs_enabled} true && goto verify_sigs || goto change_menu
:bionic-18.04-default {% for key, value in endpoints.items() | sort %}
kernel ${live_endpoint}${ubuntu-18.04-live-kernel}vmlinuz boot=casper netboot=http fetch=${live_endpoint}${ubuntu-18.04-default-squash}filesystem.squashfs initrd=initrd {% if value.os == "ubuntu" and 'squash' in key %}
initrd ${live_endpoint}${ubuntu-18.04-live-kernel}initrd {% set kernel_name = value.kernel %}
:{{ key }}
set fetch_url ${live_endpoint}{{ value.path }}filesystem.squashfs
{% for key, value in endpoints.items() | sort %}
{% if key == kernel_name %}
kernel ${live_endpoint}{{ value.path }}vmlinuz boot=casper netboot=http fetch=${fetch_url} initrd=initrd
initrd ${live_endpoint}{{ value.path }}initrd
boot boot
{% endif %}
{% endfor %}
{% endif %}
{% endfor %}
:change_menu :change_menu
chain ${menu}.ipxe || goto error chain ${menu}.ipxe || goto error
goto live_menu goto live_menu

View File

@ -1,26 +0,0 @@
#!ipxe
goto ${menu} ||
:live_menu
menu Live Ubuntu Distros - Current Arch [ ${arch} ]
iseq ${arch} x86_64 && set arch_a amd64 || set arch_a ${arch}
item --gap Live Ubuntu Distros
item liveubuntu-default ${space} Ubuntu Live Default (Unity)
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

View File

@ -0,0 +1,44 @@
#!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} - Image Sig Checks: [${img_sigs_enabled}]
{% 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 {{ releases.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 {{ releases.mageia.mirror }}/${dir}/${dir2}/vmlinuz
initrd {{ releases.mageia.mirror }}/${dir}/${dir2}/all.rdz
imgargs vmlinuz automatic=${automatic} vga=788 splash=silent ${console} initrd=all.rdz
echo
echo MD5sums:
md5sum vmlinuz all.rdz
iseq ${img_sigs_enabled} true && goto verify_sigs || goto skip_sigs
:verify_sigs
echo
echo Checking signatures...
imgverify vmlinuz ${sigs}${dir}/${dir2}/vmlinuz.sig || goto error
imgverify all.rdz ${sigs}${dir}/${dir2}/all.rdz.sig || goto error
echo Signatures verified!
echo
:skip_sigs
boot || goto mageia
:mageia_exit
clear menu
exit 0

View File

@ -1,7 +1,7 @@
#!ipxe #!ipxe
:start :start
chain --autofree boot.ipxe || chain --autofree boot.cfg ||
iseq ${cls} serial && goto ignore_cls || iseq ${cls} serial && goto ignore_cls ||
set cls:hex 1b:5b:4a # ANSI clear screen sequence - "^[[J" set cls:hex 1b:5b:4a # ANSI clear screen sequence - "^[[J"
set cls ${cls:string} set cls ${cls:string}

View File

@ -0,0 +1,52 @@
#!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 rhel_arch x86_64
goto ${menu} ||
:rhel
set os Red Hat Enterprise Linux
clear rhel_version
menu ${os}
item --gap Installers
item rhel_install ${space} Load ${os} Installer...
item --gap Options:
item arch_set ${space} Architecture [ ${rhel_arch} ]
item url_set ${space} Base URL [ ${rhel_base_url} ]
choose rhel_version || goto rhel_exit
goto ${rhel_version}
:arch_set
iseq ${rhel_arch} x86_64 && set rhel_arch i386 || set rhel_arch x86_64
goto rhel
: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/${rhel_arch}/images/pxeboot/vmlinuz
echo ${rhel_base_url}/os/${rhel_arch}/images/pxeboot/initrd.img
echo
prompt Press any key to return to RHEL Menu...
goto rhel
:rhel_install
isset ${rhel_base_url} && goto boot || echo URL not set... && goto url_set
:boot
imgfree
kernel ${rhel_base_url}/os/${rhel_arch}/images/pxeboot/vmlinuz repo=${rhel_base_url}/os/${rhel_arch} ${console} ${ipparam} initrd=initrd.img
initrd ${rhel_base_url}/os/${rhel_arch}/images/pxeboot/initrd.img
md5sum vmlinuz initrd.img
boot
:rhel_exit
exit 0

View File

@ -0,0 +1,59 @@
#!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}/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
kernel http://${boot_domain}/wimboot
initrd ${win_base_url}/${win_arch}/bootmgr bootmgr
initrd ${win_base_url}/${win_arch}/boot/bcd bcd
initrd ${win_base_url}/${win_arch}/boot/boot.sdi boot.sdi
initrd ${win_base_url}/${win_arch}/sources/boot.wim boot.wim
md5sum wimboot
iseq ${img_sigs_enabled} true && goto verify_sigs || goto skip_sigs
:verify_sigs
echo
echo Checking wimboot signature...
imgverify wimboot ${sigs}wimboot.sig || goto error
:skip_sigs
boot
:windows_exit
exit 0

View File

@ -1,8 +1,13 @@
--- ---
netbootxyz_packages: netbootxyz_packages:
- apache2 - apache2
- binutils-dev
- binutils-aarch64-linux-gnu
- gcc-aarch64-linux-gnu
- build-essential - build-essential
- genisoimage - genisoimage
- git - git
- isolinux
- liblzma-dev - liblzma-dev
- syslinux - syslinux
- syslinux-common

View File

@ -2,7 +2,7 @@
# overrides defaults in netbootxyz role # overrides defaults in netbootxyz role
generate_menus: true generate_menus: true
generate_disks: false generate_disks: true
# set desired site name # set desired site name
#site_name: mysitename.com #site_name: mysitename.com
@ -13,6 +13,10 @@ generate_disks: false
# set boot version # set boot version
#boot_version: 1.00 #boot_version: 1.00
#bootloader_tftp_enabled: false
#bootloader_https_enabled: true
#bootloader_http_enabled: true
# set overrides from standard netboot.xyz defaults # set overrides from standard netboot.xyz defaults
release_overrides: release_overrides:
alpinelinux: alpinelinux: