[syslinux] fixing debian's hd-media image
Ady Ady
ady-sf at hotmail.com
Wed Dec 5 12:16:08 PST 2018
After some discussion/debugging behind the scenes, we are back on
track, with updated Debian packages.
0_ Starting from an _original_ (so-called "hd-media") boot.img mounted
in "target" (or "$target", or some similar notation), and the version
of Syslinux-related packages in the OS should be
"6.04~git20171011.af7e95c3+dfsg1-6" or newer. At the moment I'm writing
this, the packages are in Debian "Unstable" (repo).
Although not all the packages are essential for this procedure, the
Syslinux-related packages I'm referring to are, at least:
_ extlinux
_ isolinux
_ pxelinux
_ syslinux
_ syslinux-common
_ syslinux-efi
_ syslinux-utils
Note: For each and every step in the following procedure, it is assumed
that any (prior) process has finished (successfully) and that relevant
files have been saved and closed before continuing to the next step.
1_ Create 'target/boot/syslinux/syslinux.cfg'
2_ Content of 'target/boot/syslinux/syslinux.cfg' (please note that the
PATH directive here is followed by a space character, a dot and a slash
character; in theory the slash is optional and I choose to use it for
directories; the space and the dot are absolutely essential in our
setup):
# D-I config version 2.0
# search path for the c32 support libraries (libcom32, libutil etc.)
PATH ./
DEFAULT debian
PROMPT 0
LABEL debian
CONFIG ../../debian.cfg ../../
3_ Rename 'target/syslinux.cfg' to 'target/debian.cfg'
4_ Edit content of 'target/debian.cfg' to (only) be:
include menu.cfg
default vesamenu.c32
prompt 0
timeout 0
5_ Edit content of 'target/exithelp.cfg' to (only) be:
label menu
kernel vesamenu.c32
config debian.cfg
6_ (Possibly you need some special/root rights/permissions for this
step) Delete 'target/ldlinux.*' and 'target/*.c32'.
7_ From the 'bios' subdirectory for Syslinux files in your OS
(package), copy:
_ vesamenu.c32
_ libcom32.c32
_ libutil.c32
to 'target/boot/syslinux/*.c32'.
8_ Install SYSLINUX to the adequate directory (shown below). Since the
"device" (boot.img) is currently mounted, I'm using here the 'extlinux'
command. Please adapt the command to the pertinent paths / notation /
script(s):
extlinux --install $target/boot/syslinux/
or
extlinux --install target/boot/syslinux/
or similar, depending on the adequate notation (for your script).
Alternatively, the installation of SYSLINUX can instead be performed
later on, once/when the device is unmounted, by using one of the
alternative official installers for SYSLINUX. This alternative is
currently _not_ described in this procedure.
Note1: "$target" (or "target") is just one way for me to post the
command here. Your real path / script / notation might be slightly
different (yet, all variants shall include the subdirectory
"boot/syslinux"). Please adapt it accordingly.
Note2: the last slash character in the above command might cause an
error (which might also be "silent") in some (OS') environments whereas
it might be a requirement in others; YMMV - reports are appreciated.
For more details about several alternative official installers for
Syslinux, see:
www.syslinux.org/wiki/index.php/Install
9_ Create 'target/EFI/BOOT/SYSLINUX/EFI64/'.
Optionally, create the directory 'target/EFI/BOOT/SYSLINUX/EFI32/' too.
10_ From the 'efi64' subdirectory for Syslinux files in your OS, copy
'syslinux.efi' to 'target/EFI/BOOT/BOOTX64.EFI'.
Optionally, from the 'efi32' subdirectory for Syslinux files in your
OS, copy 'syslinux.efi' to 'target/EFI/BOOT/BOOTIA32.EFI'.
11_ From the 'efi64' subdirectory for Syslinux files in your OS, copy
'ldlinux.e64' to 'target/EFI/BOOT/LDLINUX.E64'.
Optionally, from the 'efi32' subdirectory for Syslinux files, copy
'ldlinux.e32' to 'target/EFI/BOOT/LDLINUX.E32'.
12_ From the 'efi64' subdirectory for Syslinux files, copy:
_ vesamenu.c32
_ libcom32.c32
_ libutil.c32
to 'target/EFI/BOOT/SYSLINUX/EFI64/*.c32'.
Optionally, from the 'efi32' subdirectory for Syslinux files, copy:
_ vesamenu.c32
_ libcom32.c32
_ libutil.c32
to 'target/EFI/BOOT/SYSLINUX/EFI32/*.c32'.
13_ Create 'target/EFI/BOOT/SYSLX64.CFG'.
Optionally, create 'target/EFI/BOOT/SYSLIA32.CFG'.
14_ Content of 'target/EFI/BOOT/SYSLX64.CFG':
# D-I config version 2.0
# search path for the c32 support libraries (libcom32, libutil etc.)
PATH SYSLINUX/EFI64/
DEFAULT debian
PROMPT 0
LABEL debian
CONFIG ../../debian.cfg ../../
Optionally, the content of 'target/EFI/BOOT/SYSLIA32.CFG':
# D-I config version 2.0
# search path for the c32 support libraries (libcom32, libutil etc.)
PATH SYSLINUX/EFI32/
DEFAULT debian
PROMPT 0
LABEL debian
CONFIG ../../debian.cfg ../../
15_ Unmount the 'target', test and report back! :).
Hopefully I have no typos in the above steps. Let's also hope that the
description was clear enough to follow, and that the results are as
expected.
Please note that there are potential improvements to the above setup
and that not every single aspect of the resulting boot.img has been
tested.
Regards,
Ady.
More information about the Syslinux
mailing list