Skip to content

Commit

Permalink
Refs #36833 - New PXE loader "Grub2 UEFI SecureBoot (target OS)"
Browse files Browse the repository at this point in the history
  • Loading branch information
goarsna committed Feb 29, 2024
1 parent 012295c commit 1298680
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 24 deletions.
51 changes: 31 additions & 20 deletions modules/tftp/server.rb
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ def delete_dir(dir)
end
end

def setup_bootloader(mac, os, major, minor, arch)
def setup_bootloader(mac, os, major, minor, arch, build)
end
end

Expand Down Expand Up @@ -134,30 +134,41 @@ def bootloader_path(os, version, arch)
bootloader_path
end

def setup_bootloader(mac, os, major, minor, arch)
def setup_bootloader(mac, os, major, minor, arch, build)
pxeconfig_dir_mac = pxeconfig_dir(mac)
FileUtils.mkdir_p(pxeconfig_dir_mac)

version = "#{major}#{".#{minor}" unless minor.empty?}"
bootloader_path = bootloader_path(os, version, arch)
if build == "true"
logger.debug "TFTP: Host is in build mode."
logger.debug "TFTP: => Deploying host specific bootloader files to \"#{pxeconfig_dir_mac}\""

FileUtils.mkdir_p(pxeconfig_dir_mac)

version = "#{major}#{".#{minor}" unless minor.empty?}"
bootloader_path = bootloader_path(os, version, arch)

if bootloader_path
logger.debug "TFTP: Copying bootloader files from bootloader universe:"
logger.debug "TFTP: - \"#{bootloader_path}/*\" => \"#{pxeconfig_dir_mac}/\""
FileUtils.cp_r("#{bootloader_path}/.", "#{pxeconfig_dir_mac}/", remove_destination: true)
else
logger.debug "TFTP: Copying default bootloader files:"
logger.debug "TFTP: - \"#{pxeconfig_dir}/grubx64.efi\" => \"#{pxeconfig_dir_mac}/grubx64.efi\""
logger.debug "TFTP: - \"#{pxeconfig_dir}/shimx64.efi\" => \"#{pxeconfig_dir_mac}/shimx64.efi\""
logger.debug "TFTP: - \"#{pxeconfig_dir}/grubx64.efi\" => \"#{pxeconfig_dir_mac}/boot.efi\""
logger.debug "TFTP: - \"#{pxeconfig_dir}/shimx64.efi\" => \"#{pxeconfig_dir_mac}/boot-sb.efi\""
FileUtils.cp_r("#{pxeconfig_dir}/grubx64.efi", "#{pxeconfig_dir_mac}/grubx64.efi", remove_destination: true)
FileUtils.cp_r("#{pxeconfig_dir}/shimx64.efi", "#{pxeconfig_dir_mac}/shimx64.efi", remove_destination: true)
FileUtils.cp_r("#{pxeconfig_dir}/grubx64.efi", "#{pxeconfig_dir_mac}/boot.efi", remove_destination: true)
FileUtils.cp_r("#{pxeconfig_dir}/shimx64.efi", "#{pxeconfig_dir_mac}/boot-sb.efi", remove_destination: true)
end

if bootloader_path
logger.debug "TFTP: Copying bootloader files from bootloader universe:"
logger.debug "TFTP: - \"#{bootloader_path}/*\" => \"#{pxeconfig_dir_mac}/\""
FileUtils.cp_r("#{bootloader_path}/.", "#{pxeconfig_dir_mac}/", remove_destination: true)
File.write(File.join(pxeconfig_dir_mac, 'os_info'), "#{os} #{version} #{arch}")
else
logger.debug "TFTP: Copying default bootloader files:"
logger.debug "TFTP: - \"#{pxeconfig_dir}/grubx64.efi\" => \"#{pxeconfig_dir_mac}/grubx64.efi\""
logger.debug "TFTP: - \"#{pxeconfig_dir}/shimx64.efi\" => \"#{pxeconfig_dir_mac}/shimx64.efi\""
logger.debug "TFTP: - \"#{pxeconfig_dir}/grubx64.efi\" => \"#{pxeconfig_dir_mac}/boot.efi\""
logger.debug "TFTP: - \"#{pxeconfig_dir}/shimx64.efi\" => \"#{pxeconfig_dir_mac}/boot-sb.efi\""
FileUtils.cp_r("#{pxeconfig_dir}/grubx64.efi", "#{pxeconfig_dir_mac}/grubx64.efi", remove_destination: true)
FileUtils.cp_r("#{pxeconfig_dir}/shimx64.efi", "#{pxeconfig_dir_mac}/shimx64.efi", remove_destination: true)
FileUtils.cp_r("#{pxeconfig_dir}/grubx64.efi", "#{pxeconfig_dir_mac}/boot.efi", remove_destination: true)
FileUtils.cp_r("#{pxeconfig_dir}/shimx64.efi", "#{pxeconfig_dir_mac}/boot-sb.efi", remove_destination: true)
end
logger.debug "TFTP: Host is not in build mode."
logger.debug "TFTP: => Removing host specific bootloader files from \"#{pxeconfig_dir_mac}\""

File.write(File.join(pxeconfig_dir_mac, 'os_info'), "#{os} #{version} #{arch}")
FileUtils.rm_f(Dir.glob("#{pxeconfig_dir_mac}/*.efi"))
end
end

def del(mac)
Expand Down
8 changes: 4 additions & 4 deletions modules/tftp/tftp_api.rb
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,9 @@ def instantiate(variant, mac = nil)
Object.const_get("Proxy").const_get('TFTP').const_get(variant.capitalize).new
end

def create(variant, mac, os, major, minor, arch)
def create(variant, mac, os, major, minor, arch, build)
tftp = instantiate variant, mac
log_halt(400, "TFTP: Failed to setup target OS bootloader directory: ") { tftp.setup_bootloader(mac, os, major, minor, arch) }
log_halt(400, "TFTP: Failed to setup target OS bootloader directory: ") { tftp.setup_bootloader(mac, os, major, minor, arch, build) }
log_halt(400, "TFTP: Failed to create pxe config file: ") { tftp.set(mac, (params[:pxeconfig] || params[:syslinux_config])) }
end

Expand Down Expand Up @@ -49,7 +49,7 @@ def create_default(variant)
end

post "/:variant/:mac" do |variant, mac|
create variant, mac, params[:targetos], params[:major], params[:minor], params[:arch]
create variant, mac, params[:targetos], params[:major], params[:minor], params[:arch], params[:build]
end

delete "/:variant/:mac" do |variant, mac|
Expand All @@ -61,7 +61,7 @@ def create_default(variant)
end

post "/:mac" do |mac|
create "syslinux", mac, nil, nil, nil, nil
create "syslinux", mac, nil, nil, nil, nil, nil
end

delete("/:mac") do |mac|
Expand Down

0 comments on commit 1298680

Please sign in to comment.