Package: syslinux-common Version: 2:4.04+dfsg-9 Severity: minor Tags: patch fixed-upstream
Hi "gfxboot-themes" packages assembled by gfxboot-dev 4.4.3, fail to work under syslinux (isolinux) 2:4.04+dfsg-9 using gfxboot.c32. While the system still boots eventually (black screen, no interaction possible) neither background images, nor menus are displayed and most routines of the gfxboot theme aren't executed. The issue has been introduced by (upstream) gfxboot 4.4.0 in commit "rewrite chdir to work without bootloader chdir support"[1] and therefore affects Debian's gfxboot-dev 4.4.3-1 and all binary packages of gfxboot-themes 4.4.3-2.5-1, which have been assembled using gfxboot-dev 4.4.3-1: - gfxboot-themes-kde - gfxboot-themes-opensuse - gfxboot-themes-sled - gfxboot-themes-sles - gfxboot-themes-upstream Workarounds for this bug are: - using an older gfxboot-dev to build the theme, e.g. squeeze's 4.2.2-1 or the intermediate 4.3.5-2 that went to experimental. - placing all theme files into the root of the ISO (very ugly) - [updating to syslinux 4.05] I'm filing this bug against syslinux-common and not gfxboot/ gfxboot-themes, because an accompanying patch, which fixes this bug, has been committed to syslinux[2] and was released as part of syslinux 4.05. With this patch, syslinux now correctly passes the current working directory to the gfxboot themes. OpenSuSE has been carrying this patch (attached) in their syslinux 4.04 packages[3] since April 19th 2011 and I can confirm that adding it to syslinux 2:4.04+dfsg-9 fixes the problem for Debian as well. The patched syslinux package (or upstream syslinux 4.05) allows gfxboot-themes-opensuse 4.4.3-2.5-1, as currently present in the archive, to get executed correctly using isolinux/ gfxboot.c32. Given that you're also maintaining gfxboot and gfxboot-themes, I'm not filing separate bugs against gfxboot or gfxboot-themes, as this issue can be fixed by patching or upgrading syslinux and without having to touch either of gfxboot or gfxboot-themes. It might make sense to add versioned Breaks against syslinux-common <<2:4.04+dfsg-10~, or <<2:4.05+dfsg respectively, to future gfxboot-themes versions in order to avoid using incompatible versions of gfxboot-themes (which indirectly enforce a minimum gfxboot-dev version) and syslinux-common. Thank you a lot for your efforts regarding syslinux and the gfxboot packages. Regards Stefan Lippers-Hollmann [1] git://gitorious.org/gfxboot/gfxboot.git http://gitorious.org/gfxboot ffce373dad0a387aabcbe8beabe901040da1be5c rewrite chdir to work without bootloader chdir support this behaviour is still present in current upstream git and the released gfxboot 4.4.7 and apears to be intended by upstream [2] http://git.kernel.org/?p=boot/syslinux/syslinux.git http://git.kernel.org/?p=boot/syslinux/syslinux.git;a=commitdiff;h=a5d27926e87205e1696e94d9a4200894e1d59c03 [3] http://download.opensuse.org/factory/repo/src-oss/suse/src/syslinux-4.04-14.1.src.rpm -- System Information: Debian Release: wheezy/sid APT prefers unstable APT policy: (500, 'unstable') Architecture: amd64 (x86_64) Kernel: Linux 3.2-rc6-aptosid-amd64 (SMP w/4 CPU cores; PREEMPT) Locale: LANG=de_DE.UTF-8, LC_CTYPE=de_DE.UTF-8 (charmap=UTF-8) Shell: /bin/sh linked to /bin/dash syslinux-common depends on no packages. Versions of packages syslinux-common recommends: ii libcrypt-passwdmd5-perl <none> ii perl [libdigest-sha-perl] 5.14.2-6 syslinux-common suggests no packages. -- no debconf information
--- a/com32/gfxboot/gfxboot.c +++ b/com32/gfxboot/gfxboot.c @@ -102,6 +102,8 @@ typedef struct __attribute__ ((packed)) // 0: GFX_CB_MENU_INIT accepts 32 bit addresses // 1: knows about xmem_start, xmem_end uint16_t reserved_1; // 62: + uint32_t gfxboot_cwd; // 64: if set, points to current gfxboot working directory relative + // to syslinux working directory } gfx_config_t; @@ -181,6 +183,7 @@ int main(int argc, char **argv) { int menu_index; const union syslinux_derivative_info *sdi; + char working_dir[256]; openconsole(&dev_stdcon_r, &dev_stdcon_w); @@ -224,6 +227,10 @@ int main(int argc, char **argv) return 0; } + if(getcwd(working_dir, sizeof working_dir)) { + gfx_config.gfxboot_cwd = (uint32_t) working_dir; + } + if(gfx_init(argv[1])) { printf("Error setting up gfxboot\n"); if(argc > 2) show_message(argv[2]); @@ -806,6 +813,12 @@ void boot(int index) int i, label_len, menu_label_len; unsigned ipapp; const struct syslinux_ipappend_strings *ipappend; + char *gfxboot_cwd = (char *) gfx_config.gfxboot_cwd; + + if(gfxboot_cwd) { + chdir(gfxboot_cwd); + gfx_config.gfxboot_cwd = 0; + } for(menu_ptr = menu; menu_ptr; menu_ptr = menu_ptr->next, index--) { if(!index) break;
signature.asc
Description: This is a digitally signed message part.