mirror of
https://github.com/genodelabs/genode.git
synced 2024-12-30 02:28:54 +00:00
b60f28bee9
If a user has e.g. /tftpboot/x86 as directory and configures base_dir=/tftboot and offset_dir=/x86, this leads to bad behavior as the load module creates a symlink /tftpboot/x86/<builddir> -> <absolut_builddir> in this case instead of the desired /tftpboot/x86 -> <absolut_builddir> Furthermore, the module works on /tftpboot/x86/config-00-00-00-00-00-00 and /tftpboot/x86/<builddir>/config-00-00-00-00-00-00 afterwards, which looks bad too. As there is no warning at all, this can be hard to debug. The commit adds an appropriate check with error message and exit -1 on an existing directory. Fixes #1630
73 lines
2.0 KiB
Plaintext
73 lines
2.0 KiB
Plaintext
##
|
|
# Load files needed by the scenario via TFTP
|
|
#
|
|
# \param --load-tftp-base-dir base directory of TFTP
|
|
# \param --load-tftp-offset-dir offset directory within TFTP
|
|
# \param --load-tftp-absolute path is absolute, i.e. /base_dir/offset_dir
|
|
# instead of only /offset_dir is used
|
|
#
|
|
|
|
source [genode_dir]/tool/run/load.inc
|
|
|
|
|
|
##
|
|
# The files are loaded implicitly via TFTP to the target machine
|
|
#
|
|
proc run_load { } {
|
|
global load_spawn_id
|
|
set load_spawn_id -1
|
|
return true
|
|
}
|
|
|
|
|
|
proc load_tftp_base_dir { } { return [get_cmd_arg --load-tftp-base-dir ""] }
|
|
|
|
|
|
proc load_tftp_offset_dir { } { return [get_cmd_arg --load-tftp-offset-dir ""] }
|
|
|
|
|
|
proc load_tftp_use_absolute { } { return [get_cmd_switch --load-tftp-absolute] }
|
|
|
|
|
|
##
|
|
# Install files needed to boot via PXE
|
|
#
|
|
proc install_pxe_bootloader_to_run_dir { } {
|
|
exec mkdir -p [run_dir]/boot
|
|
exec cp [genode_dir]/tool/boot/pulsar [run_dir]/boot/pulsar
|
|
exec cp [genode_dir]/tool/boot/bender [run_dir]/boot/bender
|
|
}
|
|
|
|
|
|
##
|
|
# Generate pulsar config file used for loading files from TFTP
|
|
#
|
|
proc generate_tftp_config { } {
|
|
set tftp_base_dir [load_tftp_base_dir]
|
|
set tftp_offset_dir [load_tftp_offset_dir]
|
|
|
|
if {[string length $tftp_base_dir] > 0 && [string length $tftp_offset_dir] > 0} {
|
|
|
|
# if the link target exists as directory this leads to bad behavior
|
|
if {[file exists $tftp_base_dir$tftp_offset_dir] &&
|
|
[string compare [file type $tftp_base_dir$tftp_offset_dir] "directory"] == 0} {
|
|
|
|
puts stderr "Error: TFTP symlink target $tftp_base_dir$tftp_offset_dir is a directory"
|
|
exit -1
|
|
}
|
|
exec ln -nfs "[pwd]" "$tftp_base_dir$tftp_offset_dir"
|
|
|
|
set tftp_base ""
|
|
if {[load_tftp_use_absolute]} {
|
|
set tftp_base $tftp_base_dir
|
|
}
|
|
|
|
set fh [open "$tftp_base_dir$tftp_offset_dir/config-00-00-00-00-00-00" "WRONLY CREAT TRUNC"]
|
|
puts $fh " root $tftp_base$tftp_offset_dir/[run_dir]"
|
|
puts $fh " config config-52-54-00-12-34-56"
|
|
close $fh
|
|
} else {
|
|
puts "Warning, TFTP base directory or TFTP offset directory not set."
|
|
}
|
|
}
|