[Fedora-livecd-list] mandatory syslinux on live cd causes perl dependency

Mads Kiilerich mads at kiilerich.com
Wed Mar 3 19:24:18 UTC 2010

Marc Herbert wrote, On 03/03/2010 11:19 AM:
> Mads Kiilerich a écrit :
>> Or could syslinux be split into a executable package depending on perl
>> and a /usr/share/syslinux package?
> This looks like the best solution to me in the long term. If a small,
> well defined and useful subset of syslinux can be isolated, saving
> 30Megs of dependencies, then it should be extracted to some new, small
> "syslinux-data" RPM. This could be useful in other contexts.

Livecd-creator is executed on the host system and creates isolinux.cfg 
(syslinux.cfg) by its own logic and hardcoded templates. It also runs 
isohybrid if available, and the hosts livecd-iso-to-disk runs syslinux. 
I don't see any reason why livecd-creator should use vesamenu.c32 and 
isolinux.bin from the installed image.

Using files from different unrelated packages even has the risk of 
causing problems whenever the feature-set changes.

I think the best solution is to drop the hardcoded dependency to 
syslinux and use the files from the host system. Perhaps something like 
the following (untested) patch.

And of course, if anyone wants to customize or replace these files they 
can do whatever they want and modify it in an unchrooted %post, just 
like all other boot-loader manipulations


diff --git a/imgcreate/live.py b/imgcreate/live.py
--- a/imgcreate/live.py
+++ b/imgcreate/live.py
@@ -308,7 +308,7 @@
                   "-boot-load-size", "4" ]

      def _get_required_packages(self):
-        return ["syslinux"] + 
+        return LiveImageCreatorBase._get_required_packages(self)

      def _get_isolinux_stanzas(self, isodir):
          return ""
@@ -316,7 +316,7 @@
      def __find_syslinux_menu(self):
          for menu in ("vesamenu.c32", "menu.c32"):
              for dir in ("/usr/lib/syslinux/", "/usr/share/syslinux/"):
-                if os.path.isfile(self._instroot + dir + menu):
+                if os.path.isfile(dir + menu):
                      return menu

          raise CreatorError("syslinux not installed : "
@@ -337,10 +337,10 @@
              files += [mboot]

          for f in files:
-            if os.path.exists(self._instroot + "/usr/lib/syslinux/" + f):
-                path = self._instroot + "/usr/lib/syslinux/" + f
-            elif os.path.exists(self._instroot + "/usr/share/syslinux/" 
+ f):
-                path = self._instroot + "/usr/share/syslinux/" + f
+            if os.path.exists("/usr/lib/syslinux/" + f):
+                path = "/usr/lib/syslinux/" + f
+            elif os.path.exists("/usr/share/syslinux/" + f):
+                path = "/usr/share/syslinux/" + f
              if not os.path.isfile(path):
                  raise CreatorError("syslinux not installed : "
                                     "%s not found" % path)

More information about the livecd mailing list