[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