Browse Source

Merge pull request #998 from netbootxyz/development

Release 2.0.48-RC
Antony Messerli 3 years ago
parent
commit
dd88fcc4b9

+ 10 - 0
CHANGELOG.md

@@ -4,6 +4,16 @@ All notable changes to this project will be documented in this file.
 
 
 ## [Unreleased]
 ## [Unreleased]
 
 
+## [2.0.48]
+#### Added
+- Support for Harvester
+- Support for Tails
+- Support for Kali 32-bit net installer
+- Support for hrmpf
+- Support for Gentoo 32-bit and arm64 installers
+- Added EFI support for OpenBSD using sanboot
+- Adds additional options for arm64 iPXE binary downloads
+
 ## [2.0.47] - 2021-08-30
 ## [2.0.47] - 2021-08-30
 #### Fixes
 #### Fixes
 - Corrects an issue with loading 32-bit linux menu on 64-bit platforms (https://github.com/netbootxyz/netboot.xyz/issues/978)
 - Corrects an issue with loading 32-bit linux menu on 64-bit platforms (https://github.com/netbootxyz/netboot.xyz/issues/978)

+ 12 - 6
README.md

@@ -36,7 +36,9 @@
 
 
 | Type | Bootloader | Description |
 | Type | Bootloader | Description |
 |------|------------|-------------|
 |------|------------|-------------|
-|DHCP-snp| [netboot.xyz-arm64.efi](https://boot.netboot.xyz/ipxe/netboot.xyz-arm64.efi)| EFI w/ Simple Network Protocol, attempts to boot all net devices|
+|DHCP| [netboot.xyz-arm64.efi](https://boot.netboot.xyz/ipxe/netboot.xyz-arm64.efi)| DHCP boot image file, uses built-in iPXE NIC drivers|
+|DHCP-snp| [netboot.xyz-arm64-snp.efi](https://boot.netboot.xyz/ipxe/netboot.xyz-arm64-snp.efi)| EFI w/ Simple Network Protocol, attempts to boot all net devices|
+|DHCP-snponly| [netboot.xyz-arm64-snponly.efi](https://boot.netboot.xyz/ipxe/netboot.xyz-arm64-snponly.efi)| EFI w/ Simple Network Protocol, only boots from device chained from|
 
 
 #### Raspberry Pi iPXE Bootloaders
 #### Raspberry Pi iPXE Bootloaders
 
 
@@ -51,15 +53,15 @@ SHA256 checksums are generated during each build of iPXE and are located [here](
 
 
 [netboot.xyz](http://www.netboot.xyz) is a convenient place to boot into any type of operating system or utility disk without the need of having to go spend time retrieving the ISO just to run it.  [iPXE](http://ipxe.org/) is used to provide a user friendly menu from within the BIOS that lets you easily choose the operating system you want along with any specific types of versions or bootable flags.
 [netboot.xyz](http://www.netboot.xyz) is a convenient place to boot into any type of operating system or utility disk without the need of having to go spend time retrieving the ISO just to run it.  [iPXE](http://ipxe.org/) is used to provide a user friendly menu from within the BIOS that lets you easily choose the operating system you want along with any specific types of versions or bootable flags.
 
 
-If you already have iPXE up and running on the network, you can hit netboot.xyz at anytime by typing:
+If you already have iPXE up and running on the network, you can hit netboot.xyz at anytime by typing for Legacy (PCBIOS) mode:
 
 
-    chain --autofree https://boot.netboot.xyz/ipxe/netboot.xyz.lkrn
+    chain --autofree http://boot.netboot.xyz/ipxe/netboot.xyz.lkrn
 
 
-or when in EFI mode:
+or when in UEFI mode:
 
 
-    chain --autofree https://boot.netboot.xyz/ipxe/netboot.xyz.efi
+    chain --autofree http://boot.netboot.xyz/ipxe/netboot.xyz.efi
 
 
-This will load the appropriate netboot.xyz kernel with all of the proper options enabled.
+You can also load using HTTPS, but by default builds of iPXE do not have HTTPS support compiled in. This will load the appropriate netboot.xyz kernel with all of the proper options enabled.
 
 
 ### Documentation
 ### Documentation
 
 
@@ -136,6 +138,8 @@ In addition to being able to host netboot.xyz locally, you can also create your
 | FreeBSD | https://freebsd.org | Yes, disk image | No |
 | FreeBSD | https://freebsd.org | Yes, disk image | No |
 | FreeDOS | http://www.freedos.org | ISO - Memdisk| No |
 | FreeDOS | http://www.freedos.org | ISO - Memdisk| No |
 | Gentoo | https://gentoo.org | Yes | Yes |
 | Gentoo | https://gentoo.org | Yes | Yes |
+| Harvester | https://harvesterhci.io | Yes | No |
+| hrmpf | https://github.com/leahneukirchen/hrmpf/ | No | Yes |
 | IPFire | https://www.ipfire.org | Yes | No |
 | IPFire | https://www.ipfire.org | Yes | No |
 | Kali Linux | https://www.kali.org | Yes | Yes |
 | Kali Linux | https://www.kali.org | Yes | Yes |
 | KDE Neon | https://neon.kde.org | No | Yes |
 | KDE Neon | https://neon.kde.org | No | Yes |
@@ -168,6 +172,7 @@ In addition to being able to host netboot.xyz locally, you can also create your
 | Slackware | https://www.slackware.com | Yes | No |
 | Slackware | https://www.slackware.com | Yes | No |
 | SmartOS | https://www.joyent.com/smartos | Yes | No |
 | SmartOS | https://www.joyent.com/smartos | Yes | No |
 | SparkyLinux | https://sparkylinux.org/ | No | Yes |
 | SparkyLinux | https://sparkylinux.org/ | No | Yes |
+| Tails | https://tails.boum.org/ | No | Yes |
 | Talos | https://www.talos.dev/ | Yes | No |
 | Talos | https://www.talos.dev/ | Yes | No |
 | Tiny Core Linux | https://tinycorelinux.net | Yes | Yes |
 | Tiny Core Linux | https://tinycorelinux.net | Yes | Yes |
 | Ubuntu | https://www.ubuntu.com | Yes | Yes |
 | Ubuntu | https://www.ubuntu.com | Yes | Yes |
@@ -193,6 +198,7 @@ In addition to being able to host netboot.xyz locally, you can also create your
 | Grml | http://grml.org | LiveCD |
 | Grml | http://grml.org | LiveCD |
 | Kaspersky Rescue Disk | https://support.kaspersky.com/viruses/krd18 | LiveCD |
 | Kaspersky Rescue Disk | https://support.kaspersky.com/viruses/krd18 | LiveCD |
 | Memtest | http://www.memtest.org/ | Kernel |
 | Memtest | http://www.memtest.org/ | Kernel |
+| MemTest86 Free | https://www.memtest86.com | USB Img |
 | Redo Rescue | http://redorescue.com/ | LiveCD |
 | Redo Rescue | http://redorescue.com/ | LiveCD |
 | Rescatux | https://www.supergrubdisk.org/rescatux/ | LiveCD |
 | Rescatux | https://www.supergrubdisk.org/rescatux/ | LiveCD |
 | Rescuezilla | https://rescuezilla.com/ | LiveCD |
 | Rescuezilla | https://rescuezilla.com/ | LiveCD |

+ 68 - 25
endpoints.yml

@@ -183,13 +183,13 @@ endpoints:
     flavor: XFCE
     flavor: XFCE
     kernel: manjaro-18.1.0-gui-kernel
     kernel: manjaro-18.1.0-gui-kernel
   kali-xfce-squash:
   kali-xfce-squash:
-    path: /debian-squash/releases/download/2021.2-4237c18c/
+    path: /debian-squash/releases/download/2021.3-023bb8a5/
     files:
     files:
     - filesystem.squashfs
     - filesystem.squashfs
     - initrd
     - initrd
     - vmlinuz
     - vmlinuz
     os: kali
     os: kali
-    version: rolling
+    version: '2021.3'
     flavor: xfce
     flavor: xfce
     kernel: kali-xfce-squash
     kernel: kali-xfce-squash
   pop-19.10-default-squash:
   pop-19.10-default-squash:
@@ -414,7 +414,7 @@ endpoints:
     flavor: stable
     flavor: stable
     kernel: clonezilla-debian-stable
     kernel: clonezilla-debian-stable
   clonezilla-debian-testing:
   clonezilla-debian-testing:
-    path: /debian-squash/releases/download/2.7.3-19-002d59cc/
+    path: /debian-squash/releases/download/2.8.0-6-002d59cc/
     files:
     files:
     - filesystem.squashfs
     - filesystem.squashfs
     - initrd
     - initrd
@@ -434,7 +434,7 @@ endpoints:
     flavor: stable
     flavor: stable
     kernel: clonezilla-ubuntu-stable
     kernel: clonezilla-ubuntu-stable
   clonezilla-ubuntu-testing:
   clonezilla-ubuntu-testing:
-    path: /ubuntu-squash/releases/download/20210817-hirsute-18e78f5f/
+    path: /ubuntu-squash/releases/download/20210907-hirsute-18e78f5f/
     files:
     files:
     - filesystem.squashfs
     - filesystem.squashfs
     - initrd
     - initrd
@@ -670,7 +670,7 @@ endpoints:
     os: blackarch
     os: blackarch
     version: current
     version: current
   bluestar:
   bluestar:
-    path: /asset-mirror/releases/download/5.13.10-2021.08.13-a3024eea/
+    path: /asset-mirror/releases/download/5.14.2-2021.09.12-a3024eea/
     files:
     files:
     - initrd
     - initrd
     - vmlinuz
     - vmlinuz
@@ -693,14 +693,6 @@ endpoints:
     - airootfs.sfs
     - airootfs.sfs
     os: zeninstall
     os: zeninstall
     version: current
     version: current
-  gentoo:
-    path: /asset-mirror/releases/download/20210822T170550Z-21ec62e4/
-    files:
-    - image.squashfs
-    - initrd
-    - vmlinuz
-    os: gentoo
-    version: autobuilds
   lxle:
   lxle:
     path: /ubuntu-squash/releases/download/18.04.3-83291c4b/
     path: /ubuntu-squash/releases/download/18.04.3-83291c4b/
     files:
     files:
@@ -747,7 +739,7 @@ endpoints:
     flavor: xfce
     flavor: xfce
     kernel: manjaro-xfce-current
     kernel: manjaro-xfce-current
   manjaro-gnome-current:
   manjaro-gnome-current:
-    path: /manjaro-squash/releases/download/21.1.0-210817-linux513-cd9dc50d/
+    path: /manjaro-squash/releases/download/21.1.2-210904-linux513-8034501d/
     files:
     files:
     - livefs.sfs
     - livefs.sfs
     - rootfs.sfs
     - rootfs.sfs
@@ -780,7 +772,7 @@ endpoints:
     os: fatdog
     os: fatdog
     version: current
     version: current
   raizo:
   raizo:
-    path: /debian-squash/releases/download/v12.21.07.17i-0aa6f3c9/
+    path: /debian-squash/releases/download/v12.21.09.05i-0aa6f3c9/
     files:
     files:
     - filesystem.squashfs
     - filesystem.squashfs
     - initrd
     - initrd
@@ -957,13 +949,13 @@ endpoints:
     os: kodachi
     os: kodachi
     version: '7'
     version: '7'
   linux-lite-5-squash:
   linux-lite-5-squash:
-    path: /ubuntu-squash/releases/download/5.4-a096cd9b/
+    path: /ubuntu-squash/releases/download/5.6-75cb937c/
     files:
     files:
     - filesystem.squashfs
     - filesystem.squashfs
     - initrd
     - initrd
     - vmlinuz
     - vmlinuz
     os: lite
     os: lite
-    version: '5'
+    version: 5.6
     kernel: linux-lite-5-squash
     kernel: linux-lite-5-squash
   fedora-33-gnome:
   fedora-33-gnome:
     path: /fedora-assets/releases/download/1.2-2e758900/
     path: /fedora-assets/releases/download/1.2-2e758900/
@@ -1049,7 +1041,7 @@ endpoints:
     flavor: netboot
     flavor: netboot
     kernel: ubuntu-20.04-netboot
     kernel: ubuntu-20.04-netboot
   hirens:
   hirens:
-    path: /asset-mirror/releases/download/v1.0.1-937d3db8/
+    path: /asset-mirror/releases/download/v1.0.2-da645fe7/
     files:
     files:
     - bootmgr
     - bootmgr
     - bootmgr.efi
     - bootmgr.efi
@@ -1057,9 +1049,9 @@ endpoints:
     - boot.sdi
     - boot.sdi
     - boot.wim
     - boot.wim
     os: hirens
     os: hirens
-    version: v1.0.1
+    version: v1.0.2
   vyos-rolling:
   vyos-rolling:
-    path: /debian-squash/releases/download/202108250814-fdd40a1c/
+    path: /debian-squash/releases/download/202109160217-fdd40a1c/
     files:
     files:
     - filesystem.squashfs
     - filesystem.squashfs
     - initrd
     - initrd
@@ -1140,15 +1132,15 @@ endpoints:
     os: ovirt
     os: ovirt
     version: '4.4'
     version: '4.4'
   nitrux-release:
   nitrux-release:
-    path: /ubuntu-squash/releases/download/2021.02.27-bb02b131/
+    path: /ubuntu-squash/releases/download/2021.09.01-e364d0a5/
     files:
     files:
     - initrd
     - initrd
     - vmlinuz
     - vmlinuz
     - filesystem.squashfs
     - filesystem.squashfs
     os: nitrux
     os: nitrux
-    version: release
+    version: 2021.09.01
   endeavouros:
   endeavouros:
-    path: /asset-mirror/releases/download/2021.04.17-fd4170a4/
+    path: /asset-mirror/releases/download/2021.08.27-d09b132d/
     files:
     files:
     - airootfs.sfs
     - airootfs.sfs
     - initrd
     - initrd
@@ -1421,12 +1413,12 @@ endpoints:
     os: proxmox
     os: proxmox
     version: 7.0-1
     version: 7.0-1
   talos:
   talos:
-    path: /asset-mirror/releases/download/0.11.4-3f5e10e5/
+    path: /asset-mirror/releases/download/0.12.1-3f5e10e5/
     files:
     files:
     - vmlinuz
     - vmlinuz
     - initramfs.xz
     - initramfs.xz
     os: talos
     os: talos
-    version: 0.11.4
+    version: 0.12.1
   elementaryos-6-default-squash:
   elementaryos-6-default-squash:
     path: /ubuntu-squash/releases/download/6-c6e63f57/
     path: /ubuntu-squash/releases/download/6-c6e63f57/
     files:
     files:
@@ -1527,3 +1519,54 @@ endpoints:
     version: bullseye
     version: bullseye
     flavor: bullseye
     flavor: bullseye
     kernel: voyager-bullseye-squash
     kernel: voyager-bullseye-squash
+  memtest86:
+    path: /asset-mirror/releases/download/9.2-4e73affb/
+    files:
+    - memtest86-usb.img
+    os: memtest86-free
+    version: '9.2'
+  gentoo-x86:
+    path: /asset-mirror/releases/download/20210913T170555Z-6734abfd/
+    files:
+    - image.squashfs
+    - initrd
+    - vmlinuz
+    os: gentoo
+    version: 20210913T170555Z
+    arch: x86
+  gentoo-arm64:
+    path: /asset-mirror/releases/download/20210912T235133Z-079d67cf/
+    files:
+    - image.squashfs
+    - initrd
+    - vmlinuz
+    os: gentoo
+    version: 20210912T235133Z
+    arch: arm64
+  gentoo-amd64:
+    path: /asset-mirror/releases/download/20210912T170541Z-383e823f/
+    files:
+    - image.squashfs
+    - initrd
+    - vmlinuz
+    os: gentoo
+    version: 20210912T170541Z
+    arch: amd64
+  tails:
+    path: /asset-mirror/releases/download/4.22-28906ec3/
+    files:
+    - vmlinuz
+    - initrd.img
+    - tails-amd64-4.22.iso
+    - 9990-misc-helpers.sh
+    os: tails
+    version: '4.22'
+    arch: amd64
+  hrmpf:
+    path: /asset-mirror/releases/download/20210914-75990558/
+    files:
+    - vmlinuz
+    - initrd
+    - squashfs.img
+    os: hrmpf
+    version: '20210914'

+ 48 - 11
roles/netbootxyz/defaults/main.yml

@@ -7,10 +7,18 @@ bootloader_http_enabled: true
 bootloader_https_enabled: true
 bootloader_https_enabled: true
 bootloaders:
 bootloaders:
   arm:
   arm:
+  - desc: DHCP EFI boot image file, uses built-in iPXE NIC drivers
+    ipxe_bin: ipxe.efi
+    output_bin: -arm64.efi
+    type: DHCP
   - desc: EFI w/ Simple Network Protocol, attempts to boot all net devices
   - desc: EFI w/ Simple Network Protocol, attempts to boot all net devices
     ipxe_bin: snp.efi
     ipxe_bin: snp.efi
-    output_bin: -arm64.efi
+    output_bin: -arm64-snp.efi
     type: DHCP-snp
     type: DHCP-snp
+  - desc: EFI w/ Simple Network Protocol, only boots from device chained from
+    ipxe_bin: snponly.efi
+    output_bin: -arm64-snponly.efi
+    type: DHCP-snponly
   hybrid:
   hybrid:
   - desc: Used for CD/DVD, Virtual CDs, DRAC/iLO, VMware, Virtual Box
   - desc: Used for CD/DVD, Virtual CDs, DRAC/iLO, VMware, Virtual Box
     ipxe_bin: ipxe.iso
     ipxe_bin: ipxe.iso
@@ -84,6 +92,8 @@ generate_version_file: true
 ipxe_branch: master
 ipxe_branch: master
 ipxe_ca_filename: ca-ipxe-org.crt
 ipxe_ca_filename: ca-ipxe-org.crt
 ipxe_ca_url: http://ca.ipxe.org/ca.crt
 ipxe_ca_url: http://ca.ipxe.org/ca.crt
+ipxe_debug_enabled: false
+ipxe_debug_options: httpcore,tls
 ipxe_repo: https://github.com/ipxe/ipxe
 ipxe_repo: https://github.com/ipxe/ipxe
 ipxe_source_dir: /usr/src/ipxe
 ipxe_source_dir: /usr/src/ipxe
 kernel_params: initrd=initrd.magic ${cmdline}
 kernel_params: initrd=initrd.magic ${cmdline}
@@ -132,8 +142,17 @@ releases:
     mirror: mirrors.kernel.org
     mirror: mirrors.kernel.org
     name: Arch Linux
     name: Arch Linux
     versions:
     versions:
-    - code_name: 2021.08.01
-      name: 2021.08.01
+    - code_name: 2021.09.01
+      name: 2021.09.01
+  archlinux-32:
+    base_dir: pub/archlinux32
+    enabled: true
+    menu: linux
+    mirror: mirror.math.princeton.edu
+    name: Arch Linux 32-bit
+    versions:
+    - code_name: 2021.09.01
+      name: 2021.09.01
   blackarch:
   blackarch:
     enabled: true
     enabled: true
     menu: linux
     menu: linux
@@ -163,8 +182,12 @@ releases:
     mirror: https://builds.coreos.fedoraproject.org
     mirror: https://builds.coreos.fedoraproject.org
     name: Fedora CoreOS
     name: Fedora CoreOS
     versions:
     versions:
-    - code_name: 34.20210808.3.0
+    - code_name: 34.20210821.3.0
       name: stable
       name: stable
+    - code_name: 34.20210904.2.0
+      name: testing
+    - code_name: 34.20210904.1.0
+      name: next
   debian:
   debian:
     archive_mirror: http://archive.debian.org
     archive_mirror: http://archive.debian.org
     base_dir: debian
     base_dir: debian
@@ -248,6 +271,14 @@ releases:
     enabled: true
     enabled: true
     menu: linux
     menu: linux
     name: Gentoo
     name: Gentoo
+  harvester:
+    enabled: true
+    menu: linux
+    mirror: https://releases.rancher.com/harvester
+    name: Harvester
+    versions:
+    - code_name: v0.2.0
+      name: v0.2.0
   ipfire:
   ipfire:
     base_dir: releases/ipfire-2.x
     base_dir: releases/ipfire-2.x
     enabled: true
     enabled: true
@@ -421,14 +452,14 @@ releases:
     mirror: https://netboot.joyent.com/os/
     mirror: https://netboot.joyent.com/os/
     name: SmartOS
     name: SmartOS
     versions:
     versions:
+    - code_name: 20210909T065923Z
+      name: 20210909T065923Z
+    - code_name: 20210909T002651Z
+      name: 20210909T002651Z
     - code_name: 20210826T002459Z
     - code_name: 20210826T002459Z
       name: 20210826T002459Z
       name: 20210826T002459Z
     - code_name: 20210812T031946Z
     - code_name: 20210812T031946Z
       name: 20210812T031946Z
       name: 20210812T031946Z
-    - code_name: 20210729T002724Z
-      name: 20210729T002724Z
-    - code_name: 20210715T010227Z
-      name: 20210715T010227Z
   talos:
   talos:
     enabled: true
     enabled: true
     menu: linux
     menu: linux
@@ -598,10 +629,11 @@ sigs_menu: false
 site_name: netboot.xyz
 site_name: netboot.xyz
 time_server: 0.pool.ntp.org
 time_server: 0.pool.ntp.org
 utilitiesarm:
 utilitiesarm:
-  placeholder:
+  memtest86:
     enabled: false
     enabled: false
-    name: placeholder
-    type: direct
+    kernel: ${live_endpoint}{{ endpoints.memtest86.path }}memtest86-usb.img
+    name: Memtest86 Free - {{ endpoints.memtest86.version }}
+    type: sanboot
 utilitiesefi:
 utilitiesefi:
   4mlinux:
   4mlinux:
     enabled: true
     enabled: true
@@ -639,6 +671,11 @@ utilitiesefi:
     enabled: true
     enabled: true
     name: Kaspersky Rescue Disk
     name: Kaspersky Rescue Disk
     type: ipxemenu
     type: ipxemenu
+  memtest86:
+    enabled: false
+    kernel: ${live_endpoint}{{ endpoints.memtest86.path }}memtest86-usb.img
+    name: Memtest86 Free - {{ endpoints.memtest86.version }}
+    type: sanboot
   redorescue:
   redorescue:
     enabled: true
     enabled: true
     initrd: ${live_endpoint}{{ endpoints.redorescue.path }}initrd
     initrd: ${live_endpoint}{{ endpoints.redorescue.path }}initrd

+ 2 - 0
roles/netbootxyz/files/ipxe/local/general.h

@@ -4,6 +4,7 @@
 #define IMAGE_COMBOOT         /* COMBOOT */
 #define IMAGE_COMBOOT         /* COMBOOT */
 #define IMAGE_TRUST_CMD       /* Image trust management commands */
 #define IMAGE_TRUST_CMD       /* Image trust management commands */
 #define IMAGE_GZIP            /* GZIP image support */
 #define IMAGE_GZIP            /* GZIP image support */
+#define IMAGE_PNG             /* PNG image support */
 #define IMAGE_ZLIB            /* ZLIB image support */
 #define IMAGE_ZLIB            /* ZLIB image support */
 #define NET_PROTO_IPV6        /* IPv6 protocol */
 #define NET_PROTO_IPV6        /* IPv6 protocol */
 #define NSLOOKUP_CMD          /* DNS resolving command */
 #define NSLOOKUP_CMD          /* DNS resolving command */
@@ -11,6 +12,7 @@
 #define PARAM_CMD             /* Form parameter commands */
 #define PARAM_CMD             /* Form parameter commands */
 #define PCI_CMD               /* PCI commands */
 #define PCI_CMD               /* PCI commands */
 #define PING_CMD              /* Ping command */
 #define PING_CMD              /* Ping command */
+#define POWEROFF_CMD          /* Power off commands */
 #define REBOOT_CMD            /* Reboot command */
 #define REBOOT_CMD            /* Reboot command */
 #define TIME_CMD              /* Time commands */
 #define TIME_CMD              /* Time commands */
 #define VLAN_CMD              /* VLAN commands */
 #define VLAN_CMD              /* VLAN commands */

+ 2 - 0
roles/netbootxyz/files/ipxe/local/general.h.efi

@@ -3,6 +3,7 @@
 #define DOWNLOAD_PROTO_HTTPS  /* Secure Hypertext Transfer Protocol */
 #define DOWNLOAD_PROTO_HTTPS  /* Secure Hypertext Transfer Protocol */
 #define IMAGE_TRUST_CMD       /* Image trust management commands */
 #define IMAGE_TRUST_CMD       /* Image trust management commands */
 #define IMAGE_GZIP            /* GZIP image support */
 #define IMAGE_GZIP            /* GZIP image support */
+#define IMAGE_PNG             /* PNG image support */
 #define IMAGE_ZLIB            /* ZLIB image support */
 #define IMAGE_ZLIB            /* ZLIB image support */
 #define NET_PROTO_IPV6        /* IPv6 protocol */
 #define NET_PROTO_IPV6        /* IPv6 protocol */
 #define NSLOOKUP_CMD          /* DNS resolving command */
 #define NSLOOKUP_CMD          /* DNS resolving command */
@@ -10,6 +11,7 @@
 #define PARAM_CMD             /* Form parameter commands */
 #define PARAM_CMD             /* Form parameter commands */
 #define PCI_CMD               /* PCI commands */
 #define PCI_CMD               /* PCI commands */
 #define PING_CMD              /* Ping command */
 #define PING_CMD              /* Ping command */
+#define POWEROFF_CMD          /* Power off commands */
 #define REBOOT_CMD            /* Reboot command */
 #define REBOOT_CMD            /* Reboot command */
 #define TIME_CMD              /* Time commands */
 #define TIME_CMD              /* Time commands */
 #define VLAN_CMD              /* VLAN commands */
 #define VLAN_CMD              /* VLAN commands */

+ 34 - 3
roles/netbootxyz/tasks/generate_disks_arm.yml

@@ -34,22 +34,53 @@
       tags:
       tags:
       - skip_ansible_lint
       - skip_ansible_lint
 
 
-    - name: Compile iPXE bootloader for EFI arm64
+    - name: Compile iPXE bootloaders for EFI arm64
       shell: |
       shell: |
         make clean
         make clean
-        make CROSS_COMPILE=aarch64-linux-gnu- ARCH=arm64 \
-        EMBED={{ bootloader_filename }} \
+        make CROSS_COMPILE=aarch64-linux-gnu- \
+             ARCH=arm64 \
+             EMBED={{ bootloader_filename }} \
+             TRUST={{ trust_files }} \
+             bin-arm64-efi/ipxe.efi \
+             bin-arm64-efi/snp.efi \
+             bin-arm64-efi/snponly.efi
+      args:
+        chdir: "{{ ipxe_source_dir }}/src"
+      tags:
+      - skip_ansible_lint
+      when: ipxe_debug_enabled | bool == false
+
+    - name: Compile iPXE bootloader for EFI arm64 with debug flags
+      shell: |
+        make clean
+        make CROSS_COMPILE=aarch64-linux-gnu- \
+             ARCH=arm64 \
+             DEBUG={{ ipxe_debug_options }} \
+             EMBED={{ bootloader_filename }} \
              TRUST={{ trust_files }} \
              TRUST={{ trust_files }} \
              bin-arm64-efi/snp.efi
              bin-arm64-efi/snp.efi
       args:
       args:
         chdir: "{{ ipxe_source_dir }}/src"
         chdir: "{{ ipxe_source_dir }}/src"
       tags:
       tags:
       - skip_ansible_lint
       - skip_ansible_lint
+      when: ipxe_debug_enabled | bool
 
 
     - name: Copy iPXE arm64 EFI builds to http directory
     - name: Copy iPXE arm64 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-arm64-efi/ipxe.efi", dest: "{{ bootloader_filename }}-arm64.efi" }
+        - { src: "bin-arm64-efi/snp.efi", dest: "{{ bootloader_filename }}-arm64-snp.efi" }
+        - { src: "bin-arm64-efi/snponly.efi", dest: "{{ bootloader_filename }}-arm64-snponly.efi" }
+      when: bootloader_filename != "netboot.xyz-packet"
+
+    - name: Copy iPXE arm64 EFI builds to http directory for packet
       copy:
       copy:
         src: "{{ ipxe_source_dir }}/src/{{ item.src }}"
         src: "{{ ipxe_source_dir }}/src/{{ item.src }}"
         dest: "{{ netbootxyz_root }}/ipxe/{{ item.dest }}"
         dest: "{{ netbootxyz_root }}/ipxe/{{ item.dest }}"
         remote_src: True
         remote_src: True
       with_items:
       with_items:
         - { src: "bin-arm64-efi/snp.efi", dest: "{{ bootloader_filename }}-arm64.efi" }
         - { src: "bin-arm64-efi/snp.efi", dest: "{{ bootloader_filename }}-arm64.efi" }
+      when: bootloader_filename == "netboot.xyz-packet"

+ 16 - 0
roles/netbootxyz/tasks/generate_disks_efi.yml

@@ -36,7 +36,23 @@
       chdir: "{{ ipxe_source_dir }}/src"
       chdir: "{{ ipxe_source_dir }}/src"
     tags:
     tags:
     - skip_ansible_lint
     - skip_ansible_lint
+    when: ipxe_debug_enabled | bool == false
 
 
+  - name: Compile iPXE bootloader for EFI with debug flags
+    shell: |
+      make clean
+      make EMBED={{ bootloader_filename }} \
+           DEBUG={{ ipxe_debug_options }} \
+           TRUST={{ trust_files }} \
+           bin-x86_64-efi/ipxe.efi \
+           bin-x86_64-efi/snp.efi \
+           bin-x86_64-efi/snponly.efi
+    args:
+      chdir: "{{ ipxe_source_dir }}/src"
+    tags:
+    - skip_ansible_lint
+    when: ipxe_debug_enabled | bool
+    
   - name: Copy iPXE EFI builds to http directory
   - name: Copy iPXE EFI builds to http directory
     copy:
     copy:
       src: "{{ ipxe_source_dir }}/src/{{ item.src }}"
       src: "{{ ipxe_source_dir }}/src/{{ item.src }}"

+ 23 - 1
roles/netbootxyz/tasks/generate_disks_legacy.yml

@@ -23,11 +23,33 @@
   - name: Compile iPXE bootloader for Legacy BIOS
   - name: Compile iPXE bootloader for Legacy BIOS
     shell: |
     shell: |
       make clean
       make clean
-      make EMBED={{ bootloader_filename }} TRUST={{ trust_files }} bin/ipxe.dsk bin/ipxe.lkrn bin/ipxe.kpxe bin/undionly.kpxe
+      make EMBED={{ bootloader_filename }} \
+           TRUST={{ trust_files }} \
+           bin/ipxe.dsk \
+           bin/ipxe.lkrn \
+           bin/ipxe.kpxe \
+           bin/undionly.kpxe
     args:
     args:
       chdir: "{{ ipxe_source_dir }}/src"
       chdir: "{{ ipxe_source_dir }}/src"
     tags:
     tags:
     - skip_ansible_lint
     - skip_ansible_lint
+    when: ipxe_debug_enabled | bool == false
+
+  - name: Compile iPXE bootloader for Legacy BIOS with debug flags
+    shell: |
+      make clean
+      make EMBED={{ bootloader_filename }} \
+           DEBUG={{ ipxe_debug_options }} \
+           TRUST={{ trust_files }} \
+           bin/ipxe.dsk \
+           bin/ipxe.lkrn \
+           bin/ipxe.kpxe \
+           bin/undionly.kpxe
+    args:
+      chdir: "{{ ipxe_source_dir }}/src"
+    tags:
+    - skip_ansible_lint
+    when: ipxe_debug_enabled | bool
 
 
   - name: Copy iPXE files for Legacy BIOS to http directory
   - name: Copy iPXE files for Legacy BIOS to http directory
     copy:
     copy:

+ 8 - 4
roles/netbootxyz/templates/menu/gentoo.ipxe.j2

@@ -4,12 +4,17 @@
 # http://www.gentoo.org
 # http://www.gentoo.org
 
 
 :gentoo
 :gentoo
+clear gentoo_version
 set os {{ releases.gentoo.name }}
 set os {{ releases.gentoo.name }}
-menu ${os} - Current Arch [ ${arch} ]
+set os_arch ${arch}
+iseq ${os_arch} x86_64 && set os_arch amd64 ||
+iseq ${os_arch} i386 && set os_arch x86 ||
+iseq ${os_arch} arm64 && set os_arch arm64 ||
+menu ${os} - Current Arch [ ${os_arch} ]
 item --gap ${os} Versions
 item --gap ${os} Versions
 {% for key, value in endpoints.items() | sort %}
 {% for key, value in endpoints.items() | sort %}
 {% if value.os == "gentoo" %}
 {% if value.os == "gentoo" %}
-item {{ value.version }} ${space} ${os} {{ value.version }}
+iseq ${os_arch} {{ value.arch }} && item {{ value.version }}_{{ value.arch }} ${space} ${os} {{ value.version }} - {{ value.arch }} ||
 {% endif %}
 {% endif %}
 {% endfor %}
 {% endfor %}
 choose gentoo_version || goto gentoo_exit
 choose gentoo_version || goto gentoo_exit
@@ -17,10 +22,9 @@ goto ${gentoo_version}
 
 
 {% for key, value in endpoints.items() | sort %}
 {% for key, value in endpoints.items() | sort %}
 {% if value.os == "gentoo" %}
 {% if value.os == "gentoo" %}
-:{{ value.version }}
+:{{ value.version }}_{{ value.arch }}
 set url ${live_endpoint}{{ value.path }}
 set url ${live_endpoint}{{ value.path }}
 goto boot
 goto boot
-
 {% endif %}
 {% endif %}
 {% endfor %}
 {% endfor %}
 
 

+ 67 - 0
roles/netbootxyz/templates/menu/harvester.ipxe.j2

@@ -0,0 +1,67 @@
+#!ipxe
+
+# Harvester
+# https://harvesterhci.io/
+# https://docs.harvesterhci.io/v0.2/install/pxe-boot-install/
+
+goto ${menu} ||
+
+:harvester
+set os {{ releases.harvester.name }}
+set os_arch ${arch}
+iseq ${os_arch} x86_64 && set os_arch amd64 ||
+set harvester_mirror {{ releases.harvester.mirror }}
+set harvester_version {{ releases.harvester.versions[0].name }}
+isset ${harvester_version} || set harvester_version {{ releases.harvester.versions[0].name }}
+menu ${os} - ${os_arch}
+item --gap Harvester:
+item harvester_boot ${space} Begin install ${os} ${harvester_version}
+item --gap Parameters:
+item harvester_version ${space} ${os} version: ${harvester_version}
+item harvester_config_url ${space} Set config-create or config-join.yaml URL: ${harvester_config_url}
+choose --default ${menu} menu || goto harvester_exit
+echo ${cls}
+goto ${menu} ||
+goto harvester_exit
+
+:harvester_version 
+menu ${os} version
+item latest ${space} latest 
+item custom ${space} Set custom version
+choose --default ${version} version || goto harvester_exit
+echo ${cls}
+goto harvester_version_${version} ||
+goto harvester_exit
+
+:harvester_version_latest
+set harvester_version {{ releases.harvester.versions[0].name }}
+set harvester_base_url ${harvester_mirror}/${harvester_version}
+goto harvester
+
+:harvester_version_custom
+clear harvester_version
+echo -n Please set harvester version manually (in format vX.Y.Z):  && read harvester_version
+set harvester_base_url ${harvester_mirror}/${harvester_version}
+clear menu
+goto harvester
+
+:harvester_config_url
+echo -n Set config.yaml URL:  && read harvester_config_url
+clear menu
+goto harvester
+
+:harvester_boot
+isset ${harvester_base_url} || set harvester_base_url ${harvester_mirror}/${harvester_version}
+set install_params k3os.mode=install harvester.install.automatic=true harvester.install.config_url=${harvester_config_url}
+set boot_params console=ttyS0 console=tty1
+imgfree
+kernel ${harvester_base_url}/harvester-vmlinuz-${os_arch} ${install_params} ${boot_params} {{ kernel_params }}
+initrd ${harvester_base_url}/harvester-initrd-${os_arch}
+echo
+echo MD5sums:
+md5sum harvester-vmlinuz-${os_arch} harvester-initrd-${os_arch}
+boot
+
+:harvester_exit
+clear menu
+exit 0

+ 1 - 0
roles/netbootxyz/templates/menu/kali.ipxe.j2

@@ -9,6 +9,7 @@ goto ${menu} ||
 set os {{ releases.kali.name }}
 set os {{ releases.kali.name }}
 set os_arch ${arch}
 set os_arch ${arch}
 iseq ${os_arch} x86_64 && set os_arch amd64 ||
 iseq ${os_arch} x86_64 && set os_arch amd64 ||
+iseq ${os_arch} i386 && set os_arch i386 ||
 menu ${os} - ${os_arch}
 menu ${os} - ${os_arch}
 {% for item in releases.kali.versions %}
 {% for item in releases.kali.versions %}
 item {{ item.code_name }} ${space} ${os} {{ item.name }}
 item {{ item.code_name }} ${space} ${os} {{ item.name }}

+ 1 - 0
roles/netbootxyz/templates/menu/linux-arm.ipxe.j2

@@ -9,6 +9,7 @@ item alpinelinux ${space} AlmaLinux
 item alpinelinux ${space} Alpine Linux
 item alpinelinux ${space} Alpine Linux
 item centos ${space} CentOS
 item centos ${space} CentOS
 item debian ${space} Debian
 item debian ${space} Debian
+item gentoo ${space} Gentoo
 item fedora ${space} Fedora
 item fedora ${space} Fedora
 item rhel ${space} Red Hat Enterprise Linux
 item rhel ${space} Red Hat Enterprise Linux
 item rockylinux ${space} Rocky Linux
 item rockylinux ${space} Rocky Linux

+ 2 - 0
roles/netbootxyz/templates/menu/linux-i386.ipxe.j2

@@ -7,6 +7,8 @@ menu Linux Installers - Current Arch [ ${arch} ]
 item --gap Popular Linux Operating Systems:
 item --gap Popular Linux Operating Systems:
 item alpinelinux ${space} Alpine Linux
 item alpinelinux ${space} Alpine Linux
 item debian ${space} Debian
 item debian ${space} Debian
+item gentoo ${space} Gentoo
+item kali ${space} Kali Linux
 item opensuse ${space} OpenSUSE
 item opensuse ${space} OpenSUSE
 choose menu || goto linux_exit
 choose menu || goto linux_exit
 echo ${cls}
 echo ${cls}

+ 39 - 0
roles/netbootxyz/templates/menu/live-hrmpf.ipxe.j2

@@ -0,0 +1,39 @@
+#!ipxe
+
+# hrmpf
+# https://github.com/leahneukirchen/hrmpf/
+
+goto ${menu} ||
+
+:live-hrmpf
+clear hrmpf_version
+set os hrmpf
+set os_arch ${arch}
+iseq ${os_arch} x86_64 && set os_arch amd64 ||
+menu ${os}
+item --gap ${os} Versions
+{% for key, value in endpoints.items() | sort %}
+{% if value.os == "hrmpf" %}
+item {{ value.version }} ${space} ${os} {{ value.version }}
+{% endif %}
+{% endfor %}
+choose hrmpf_version || goto hrmpf_exit
+goto ${hrmpf_version}
+
+{% for key, value in endpoints.items() | sort %}
+{% if value.os == "hrmpf" %}
+:{{ value.version }}
+set kernel_url ${live_endpoint}{{ value.path }}
+goto boot
+{% endif %}
+{% endfor %}
+
+:boot
+imgfree
+kernel ${kernel_url}vmlinuz root=live:${kernel_url}squashfs.img ro init=/sbin/init rd.luks=0 rd.md=0 rd.dm=0 gpt add_efi_memmap vconsole.unicode=1 vconsole.keymap=us locale.LANG=en_US.UTF-8 loglevel=6 printk.time=1 consoleblank=0 net.ifnames=0 {{ kernel_params }}
+initrd ${kernel_url}initrd
+boot
+
+:hrmpf_exit
+clear menu
+exit 0

+ 4 - 15
roles/netbootxyz/templates/menu/live-kali.ipxe.j2

@@ -6,24 +6,13 @@ goto ${menu} ||
 set os Kali Linux
 set os Kali Linux
 menu ${os}
 menu ${os}
 item --gap ${os} Versions
 item --gap ${os} Versions
-item rolling ${space} ${os} Rolling
-choose live_version || goto live_exit
-menu ${os} ${live_version}
-item --gap ${os} Flavors
-goto ${live_version}
-
-:rolling
 {% for key, value in endpoints.items() | sort %}
 {% for key, value in endpoints.items() | sort %}
-{% if value.os == "kali" and 'squash' in key and value.version == "rolling" and value.flavor == "xfce" %}
-item {{ key }} ${space} {{ value.os | title }} {{ value.version | title }} {{ value.flavor | upper }}
+{% if value.os == "kali"  %}
+item {{ key }} ${space} ${os} {{ value.version }}
 {% endif %}
 {% endif %}
 {% endfor %}
 {% endfor %}
-goto flavor_select
-
-:flavor_select
-choose flavor || goto live_menu
-echo ${cls}
-goto ${flavor} ||
+choose live_version || goto live_exit
+goto ${live_version}
 
 
 {% for key, value in endpoints.items() | sort %}
 {% for key, value in endpoints.items() | sort %}
 {% if value.os == "kali" and 'squash' in key %}
 {% if value.os == "kali" and 'squash' in key %}

+ 42 - 0
roles/netbootxyz/templates/menu/live-tails.ipxe.j2

@@ -0,0 +1,42 @@
+#!ipxe
+
+# Tails Operating System
+# https://tails.boum.org/
+
+goto ${menu} ||
+
+:live-tails
+clear tails_version
+set os Tails
+set os_arch ${arch}
+iseq ${os_arch} x86_64 && set os_arch amd64 ||
+menu ${os}
+item --gap ${os} Versions
+{% for key, value in endpoints.items() | sort %}
+{% if value.os == "tails" %}
+item tails_{{ value.version }} ${space} ${os} {{ value.version }}
+{% endif %}
+{% endfor %}
+choose tails_version || goto tails_exit
+goto ${tails_version}
+
+{% for key, value in endpoints.items() | sort %}
+{% if value.os == "tails" %}
+:tails_{{ value.version }}
+set kernel_url ${live_endpoint}{{ value.path }}
+set iso_version {{ value.version }}
+goto boot
+{% endif %}
+{% endfor %}
+
+:boot
+imgfree
+kernel ${kernel_url}vmlinuz boot=live fromiso=/tails.iso config nopersistence noprompt timezone=Etc/UTC splash noautologin module=Tails slab_nomerge slub_debug=FZP mce=0 vsyscall=none page_poison=1 init_on_free=1 mds=full,nosmt {{ kernel_params }}
+initrd ${kernel_url}initrd.img
+initrd ${kernel_url}9990-misc-helpers.sh /usr/lib/live/boot/9990-misc-helpers.sh
+initrd ${kernel_url}tails-${os_arch}-${iso_version}.iso /tails.iso
+boot
+
+:tails_exit
+clear menu
+exit 0

+ 2 - 0
roles/netbootxyz/templates/menu/live.ipxe.j2

@@ -16,6 +16,7 @@ item live-endeavouros ${space} EndeavourOS
 item live-fatdog ${space} Fatdog64
 item live-fatdog ${space} Fatdog64
 item live-fedora ${space} Fedora
 item live-fedora ${space} Fedora
 item live-feren ${space} Feren OS
 item live-feren ${space} Feren OS
+item live-hrmpf ${space} hrmpf
 item live-k3os ${space} K3OS
 item live-k3os ${space} K3OS
 item live-kali ${space} Kali
 item live-kali ${space} Kali
 item live-kodachi ${space} Kodachi
 item live-kodachi ${space} Kodachi
@@ -33,6 +34,7 @@ item live-raizo ${space} Live Raizo
 item live-regolith ${space} Regolith
 item live-regolith ${space} Regolith
 item live-septor ${space} Septor
 item live-septor ${space} Septor
 item live-sparky ${space} SparkyLinux
 item live-sparky ${space} SparkyLinux
+item live-tails ${space} Tails
 item tinycore ${space} Tiny Core Linux
 item tinycore ${space} Tiny Core Linux
 item live-ubuntu ${space} Ubuntu
 item live-ubuntu ${space} Ubuntu
 item live-voyager ${space} Voyager
 item live-voyager ${space} Voyager

+ 12 - 2
roles/netbootxyz/templates/menu/openbsd.ipxe.j2

@@ -19,12 +19,22 @@ iseq ${ver} {{ item.code_name }} && set image_ver {{ item.image_ver }} ||
 goto boot_openbsd
 goto boot_openbsd
 
 
 :boot_openbsd
 :boot_openbsd
+iseq ${platform} pcbios && goto pcbios_boot ||
+iseq ${platform} efi && goto efi_boot ||
+
+:pcbios_boot
 set src ${openbsd_mirror}/${openbsd_base_dir}/${ver}/${os_arch}/cd${image_ver}.iso
 set src ${openbsd_mirror}/${openbsd_base_dir}/${ver}/${os_arch}/cd${image_ver}.iso
 imgfree
 imgfree
 initrd ${src}
 initrd ${src}
 chain ${memdisk} iso raw
 chain ${memdisk} iso raw
-exit
+goto openbsd_menu
+
+:efi_boot
+set src ${openbsd_mirror}/${openbsd_base_dir}/${ver}/${os_arch}/install${image_ver}.img
+imgfree
+sanboot ${src}
+goto openbsd_menu
 
 
 :openbsd_exit
 :openbsd_exit
 clear menu
 clear menu
-exit 0
+exit 0

+ 6 - 3
roles/netbootxyz/templates/menu/talos.ipxe.j2

@@ -8,6 +8,9 @@ goto ${menu} ||
 
 
 :talos
 :talos
 set os {{ releases.talos.name }}
 set os {{ releases.talos.name }}
+set os_arch ${arch}
+iseq ${os_arch} x86_64 && set os_arch amd64 ||
+iseq ${os_arch} arm64 && set os_arch arm64 ||
 isset ${talos_version} || set talos_version latest
 isset ${talos_version} || set talos_version latest
 isset ${talos_mirror} || set talos_mirror {{ releases.talos.mirror }}
 isset ${talos_mirror} || set talos_mirror {{ releases.talos.mirror }}
 isset ${talos_platform} || set talos_platform metal
 isset ${talos_platform} || set talos_platform metal
@@ -69,14 +72,14 @@ isset ${talos_base_url} || set talos_base_url ${talos_mirror}/latest/download
 isset ${talos_config_url} && set talos_config talos.config=${talos_config_url} ||
 isset ${talos_config_url} && set talos_config talos.config=${talos_config_url} ||
 set boot_params page_poison=1 printk.devkmsg=on slab_nomerge slub_debug=P pti=on talos.platform=${talos_platform} ${talos_config} {{ kernel_params }}
 set boot_params page_poison=1 printk.devkmsg=on slab_nomerge slub_debug=P pti=on talos.platform=${talos_platform} ${talos_config} {{ kernel_params }}
 imgfree
 imgfree
-kernel ${talos_base_url}/vmlinuz ${boot_params}
-initrd ${talos_base_url}/initramfs.xz
+kernel ${talos_base_url}/vmlinuz-${os_arch} ${boot_params}
+initrd ${talos_base_url}/initramfs-${os_arch}.xz
 echo
 echo
 echo Booting with the following kernel args:
 echo Booting with the following kernel args:
 echo ${boot_params}
 echo ${boot_params}
 echo
 echo
 echo MD5sums:
 echo MD5sums:
-md5sum vmlinuz initramfs.xz
+md5sum vmlinuz-${os_arch} initramfs-${os_arch}.xz
 boot
 boot
 
 
 :talos_exit
 :talos_exit

+ 9 - 0
roles/netbootxyz/templates/menu/utils-arm.ipxe.j2

@@ -26,6 +26,15 @@ goto utils_exit
 {% endif %}
 {% endif %}
 {% endfor %}
 {% endfor %}
 
 
+{% for key, value in utilitiesefi.items() | sort %}
+{% if value.enabled | bool and value.type == "sanboot" %}
+:{{ key }}
+imgfree
+sanboot {{ value.kernel }}
+goto utils_exit
+{% endif %}
+{% endfor %}
+
 :utils_exit
 :utils_exit
 clear menu
 clear menu
 exit 0
 exit 0

+ 9 - 0
roles/netbootxyz/templates/menu/utils-efi.ipxe.j2

@@ -30,6 +30,15 @@ goto utils_exit
 {% endif %}
 {% endif %}
 {% endfor %}
 {% endfor %}
 
 
+{% for key, value in utilitiesefi.items() | sort %}
+{% if value.enabled | bool and value.type == "sanboot" %}
+:{{ key }}
+imgfree
+sanboot {{ value.kernel }}
+goto utils_exit
+{% endif %}
+{% endfor %}
+
 :cmdline
 :cmdline
 echo If you want to change the default kernel command line parameters
 echo If you want to change the default kernel command line parameters
 echo you can override the defaults here.
 echo you can override the defaults here.

+ 0 - 5
script/pre_install

@@ -1,5 +0,0 @@
-#!/bin/bash
-set -e
-
-# Install aws cli
-sudo pip install awscli tornado

+ 1 - 1
version.txt

@@ -1 +1 @@
-2.0.47
+2.0.48