Here is an updated patch for action_buildiso.py
I have run the diff against the original version of the program - would
it be better against the version in git?
Changes:
1. Captured Joesphs changes to clean up images placed in iso - but I've
left it to always include profiles and distros
2. I've changed "localboot 0/-1" option to use "KERNEL chain.32" with an
"APPEND"
3. Modified to make sure chain.c32 is added to the image
4. Added code to remove the buildiso directory if it exists to make sure
old files aren't kept around
5. Added a check and warning if APPEND line exceeds 250chars (think that
could be 254?)
6. Incorporated Joesphs IP address fixes
7. Added a MENU SEPARATOR when adding systems
I have a new chain.c32 and a replacement isolinux.bin file to go in
/var/lib/cobbler - should I send them to the ML?
Dave
diff -Naur cobbler/action_buildiso.py.orig cobbler/action_buildiso.py
--- cobbler/action_buildiso.py.orig 2008-05-29 10:56:25.000000000 +0100
+++ cobbler/action_buildiso.py 2008-06-25 13:58:30.000000000 +0100
@@ -40,7 +40,8 @@
LABEL local
MENU LABEL (local)
MENU DEFAULT
- LOCALBOOT -1
+ KERNEL chain.c32
+ APPEND hd0 0
"""
@@ -58,6 +59,7 @@
self.api = config.api
self.distros = config.distros()
self.profiles = config.profiles()
+ self.systems = config.systems()
self.distmap = {}
self.distctr = 0
@@ -69,23 +71,20 @@
self.distmap[distname] = str(self.distctr)
return str(self.distctr)
- def run(self,iso=None,tempdir=None,profiles=None):
-
- # verify we can find isolinux.bin
+ def run(self,iso=None,tempdir=None,profiles=None,systems=None):
+ # if iso is none, create it in . as "kickstart.iso"
if iso is None:
iso = "kickstart.iso"
- isolinuxbin = "/usr/lib/syslinux/isolinux.bin"
- if not os.path.exists(isolinuxbin):
- raise CX(_("Required file not found: %s") % isolinuxbin)
-
- # if iso is none, create it in . as "cobbler.iso"
if tempdir is None:
tempdir = os.path.join(os.getcwd(), "buildiso")
print _("- using/creating tempdir: %s") % tempdir
if not os.path.exists(tempdir):
os.makedirs(tempdir)
+ else:
+ shutil.rmtree(tempdir)
+ os.makedirs(tempdir)
# if base of tempdir does not exist, fail
# create all profiles unless filtered by "profiles"
@@ -99,66 +98,134 @@
os.makedirs(isolinuxdir)
print _("- copying miscellaneous files")
- utils.copyfile(isolinuxbin, os.path.join(isolinuxdir, "isolinux.bin"))
+ isolinuxbin = "/var/lib/cobbler/isolinux.bin"
menu = "/var/lib/cobbler/menu.c32"
- files = [ isolinuxbin, menu ]
+ chain = "/var/lib/cobbler/chain.c32"
+ files = [ isolinuxbin, menu, chain ]
for f in files:
if not os.path.exists(f):
- raise CX(_("Required file not found: %s") % f)
- utils.copyfile(f, os.path.join(isolinuxdir, os.path.basename(f)))
+ raise CX(_("Required file not found: %s") % f)
+ else:
+ utils.copyfile(f, os.path.join(isolinuxdir, os.path.basename(f)))
- print _("- copying kernels and initrds")
+ print _("- copying kernels and initrds - for profiles")
# copy all images in included profiles to images dir
- for x in self.api.profiles():
+ for profile in self.api.profiles():
use_this = True
if profiles is not None:
which_profiles = profiles.split(",")
- if not use_this in which_profiles:
+ if not profile.name in which_profiles:
use_this = False
- dist = x.get_conceptual_parent()
- if dist.name.find("-xen") != -1:
- continue
- distname = self.make_shorter(dist.name)
- # tempdir/isolinux/$distro/vmlinuz, initrd.img
- # FIXME: this will likely crash on non-Linux breeds
- shutil.copyfile(dist.kernel, os.path.join(isolinuxdir, "%s.krn" % distname))
- shutil.copyfile(dist.initrd, os.path.join(isolinuxdir, "%s.img" % distname))
- # generate isolinux.cfg
+ if use_this:
+ dist = profile.get_conceptual_parent()
+ if dist.name.find("-xen") != -1:
+ continue
+ distname = self.make_shorter(dist.name)
+ # tempdir/isolinux/$distro/vmlinuz, initrd.img
+ # FIXME: this will likely crash on non-Linux breeds
+ shutil.copyfile(dist.kernel, os.path.join(isolinuxdir, "%s.krn" % distname))
+ shutil.copyfile(dist.initrd, os.path.join(isolinuxdir, "%s.img" % distname))
+
+ if systems is not None:
+ print _("- copying kernels and initrds - for systems")
+ # copy all images in included profiles to images dir
+ for system in self.api.systems():
+ if system.name in systems:
+ profile = system.get_conceptual_parent()
+ dist = profile.get_conceptual_parent()
+ if dist.name.find("-xen") != -1:
+ continue
+ distname = self.make_shorter(dist.name)
+ # tempdir/isolinux/$distro/vmlinuz, initrd.img
+ # FIXME: this will likely crash on non-Linux breeds
+ shutil.copyfile(dist.kernel, os.path.join(isolinuxdir, "%s.krn" % distname))
+ shutil.copyfile(dist.initrd, os.path.join(isolinuxdir, "%s.img" % distname))
+
print _("- generating a isolinux.cfg")
isolinuxcfg = os.path.join(isolinuxdir, "isolinux.cfg")
cfg = open(isolinuxcfg, "w+")
cfg.write(HEADER) # fixme, use template
- for x in self.api.profiles():
- # FIXME
+ print _("- generating profile list...")
+ for profile in self.api.profiles():
use_this = True
if profiles is not None:
which_profiles = profiles.split(",")
- if not use_this in which_profiles:
+ if not profile.name in which_profiles:
use_this = False
+
if use_this:
- dist = x.get_conceptual_parent()
+ dist = profile.get_conceptual_parent()
if dist.name.find("-xen") != -1:
continue
- data = utils.blender(self.api, True, x)
+ data = utils.blender(self.api, True, profile)
distname = self.make_shorter(dist.name)
cfg.write("\n")
- cfg.write("LABEL %s\n" % x.name)
- cfg.write(" MENU LABEL %s\n" % x.name)
+ cfg.write("LABEL %s\n" % profile.name)
+ cfg.write(" MENU LABEL %s\n" % profile.name)
cfg.write(" kernel %s.krn\n" % distname)
if data["kickstart"].startswith("/"):
data["kickstart"] = "http://%s/cblr/svc/op/ks/profile/%s" % (
data["server"],
- x.name
+ profile.name
)
append_line = " append initrd=%s.img" % distname
append_line = append_line + " ks=%s " % data["kickstart"]
append_line = append_line + " %s\n" % data["kernel_options"]
+
+ length=len(append_line)
+ if length>250:
+ print _("WARNING - append line length is greater than 250 chars: (%s chars)") % length
+
cfg.write(append_line)
+
+ if systems is not None:
+ print _("- generating system list...")
+
+ cfg.write("\nMENU SEPARATOR\n")
+
+ for system in self.api.systems():
+ use_this = False
+ if systems is not None:
+ which_systems = systems.split(",")
+ if system.name in which_systems:
+ use_this = True
+
+ if use_this:
+ profile = system.get_conceptual_parent()
+ dist = profile.get_conceptual_parent()
+ if dist.name.find("-xen") != -1:
+ continue
+ data = utils.blender(self.api, True, system)
+ distname = self.make_shorter(dist.name)
+
+ cfg.write("\n")
+ cfg.write("LABEL %s\n" % system.name)
+ cfg.write(" MENU LABEL %s\n" % system.name)
+ cfg.write(" kernel %s.krn\n" % distname)
+
+ if data["kickstart"].startswith("/"):
+ data["kickstart"] = "http://%s/cblr/svc/op/ks/system/%s" % (
+ data["server"],
+ system.name
+ )
+
+ append_line = " append initrd=%s.img" % distname
+ append_line = append_line + " ks=%s" % data["kickstart"]
+ append_line = append_line + " %s" % data["kernel_options"]
+ append_line = append_line + " ip=%s" % data["ip_address_intf0"]
+ append_line = append_line + " netmask=%s" % data["subnet_intf0"]
+ append_line = append_line + " gateway=%s\n" % data["gateway_intf0"]
+
+ length=len(append_line)
+ if length>250:
+ print _("WARNING - append line length is greater than 250 chars: (%s chars)") % length
+
+ cfg.write(append_line)
print _("- done writing config")
cfg.write("\n")
_______________________________________________
et-mgmt-tools mailing list
et-mgmt-tools@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/et-mgmt-tools