Blob Blame History Raw
diff -rupN cobbler-2.0.7-orig/cobbler/action_buildiso.py cobbler-2.0.7-new/cobbler/action_buildiso.py
--- cobbler-2.0.7-orig/cobbler/action_buildiso.py	2013-05-22 15:00:28.213867934 -0400
+++ cobbler-2.0.7-new/cobbler/action_buildiso.py	2013-07-11 15:35:59.637378396 -0400
@@ -86,7 +86,7 @@ class BuildIso:
             return str(self.distctr)

   
-    def generate_netboot_iso(self,imagesdir,isolinuxdir,profiles=None,systems=None,exclude_dns=None):
+    def generate_netboot_iso(self,imagesdir,isolinuxdir,profiles=None,systems=None,exclude_dns=None,force_server=None):
         self.logger.info("copying kernels and initrds for profiles")
         # copy all images in included profiles to images dir
         for profile in self.api.profiles():
@@ -152,6 +152,8 @@ class BuildIso:
                 if dist.name.find("-xen") != -1:
                     continue
                 data = utils.blender(self.api, True, profile)
+                if force_server:
+                    data["server"] = force_server
                 distname = self.make_shorter(dist.name)

                 cfg.write("\n")
@@ -164,6 +166,12 @@ class BuildIso:
                         data["server"],
                         profile.name
                     )
+                else:
+                    if force_server:
+                        # replace configured hostname with the forced one
+                        data["kickstart"] = re.sub(r'://.*?/',
+                                '://' + data["server"] + '/',
+                                data["kickstart"])

                 append_line = "  append initrd=%s.img" % distname
                 append_line = append_line + " ks=%s " % data["kickstart"]
@@ -199,6 +207,8 @@ class BuildIso:
                    if dist.name.find("-xen") != -1:
                        continue
                    data = utils.blender(self.api, True, system)
+                   if force_server:
+                       data["server"] = force_server
                    distname = self.make_shorter(dist.name)

                    cfg.write("\n")
@@ -211,6 +221,12 @@ class BuildIso:
                            data["server"],
                            system.name
                        )
+                   else:
+                       if force_server:
+                           # replace configured hostname with the forced one
+                           data["kickstart"] = re.sub(r'://.*?/',
+                                   '://' + data["server"] + '/',
+                                   data["kickstart"])

                    append_line = "  append initrd=%s.img" % distname
                    append_line = append_line + " ks=%s" % data["kickstart"]
@@ -352,7 +368,7 @@ class BuildIso:
         return
 
 
-    def run(self,iso=None,tempdir=None,profiles=None,systems=None,distro=None,standalone=None,source=None,exclude_dns=None):
+    def run(self,iso=None,tempdir=None,profiles=None,systems=None,distro=None,standalone=None,source=None,exclude_dns=None,force_server=None):

         # the distro option is for stand-alone builds only
         if not standalone and distro is not None:
@@ -372,7 +388,7 @@ class BuildIso:
             iso = "kickstart.iso"

         if tempdir is None:
-            tempdir = os.path.join(os.getcwd(), "buildiso")
+            tempdir = self.config.settings().buildisodir
         else:
             if not os.path.isdir(tempdir):
                 utils.die(self.logger,"The --tempdir specified is not a directory")
@@ -415,14 +431,15 @@ class BuildIso:
         files = [ isolinuxbin, menu, chain ]
         for f in files:
             if not os.path.exists(f):
-               utils.die(self.logger,"Required file not found: %s" % f)
+                self.logger.error("Required file not found: %s. Try 'yum install cobbler-loaders'." % f)
+                return False
             else:
                utils.copyfile(f, os.path.join(isolinuxdir, os.path.basename(f)), self.api)

         if standalone:
             self.generate_standalone_iso(imagesdir,isolinuxdir,distro,source)
         else:
-            self.generate_netboot_iso(imagesdir,isolinuxdir,profiles,systems,exclude_dns)
+            self.generate_netboot_iso(imagesdir,isolinuxdir,profiles,systems,exclude_dns,force_server)

         # removed --quiet
         cmd = "mkisofs -o %s -r -b isolinux/isolinux.bin -c isolinux/boot.cat" % iso
diff -rupN cobbler-2.0.7-orig/cobbler/action_check.py cobbler-2.0.7-new/cobbler/action_check.py
--- cobbler-2.0.7-orig/cobbler/action_check.py	2013-05-22 15:00:28.210867913 -0400
+++ cobbler-2.0.7-new/cobbler/action_check.py	2013-07-11 14:41:26.976177891 -0400
@@ -325,7 +325,7 @@ class BootCheck:
           missing = True

        if missing:
-          status.append("some network boot-loaders are missing from /var/lib/cobbler/loaders, you may run 'cobbler get-loaders' to download them, or, if you only want to handle x86/x86_64 netbooting, you may ensure that you have installed a *recent* version of the syslinux package installed and can ignore this message entirely.  Files in this directory, should you want to support all architectures, should include pxelinux.0, menu.c32, elilo.efi, and yaboot. The 'cobbler get-loaders' command is the easiest way to resolve these requirements.")
+          status.append("some network boot-loaders are missing from /var/lib/cobbler/loaders, you may run 'yum install cobbler-loaders' to download them, or, if you only want to handle x86/x86_64 netbooting, you may ensure that you have installed a *recent* version of the syslinux package installed and can ignore this message entirely.  Files in this directory, should you want to support all architectures, should include pxelinux.0, menu.c32, elilo.efi, and yaboot. The 'yum install cobbler-loaders' command is the easiest way to resolve these requirements.")
  
    def check_tftpd_bin(self,status):
        """
diff -rupN cobbler-2.0.7-orig/cobbler/action_dlcontent.py cobbler-2.0.7-new/cobbler/action_dlcontent.py
--- cobbler-2.0.7-orig/cobbler/action_dlcontent.py	2013-05-22 15:00:28.209867906 -0400
+++ cobbler-2.0.7-new/cobbler/action_dlcontent.py	2013-07-11 14:41:26.976177891 -0400
@@ -39,36 +39,11 @@ class ContentDownloader:

    def run(self,force=False):
        """
-       Download bootloader content for all of the latest bootloaders, since the user
-       has chosen to not supply their own.  You may ask "why not get this from yum", though
-       Fedora has no IA64 repo, for instance, and we also want this to be able to work on Debian and
-       further do not want folks to have to install a cross compiler.  For those that don't like this approach
-       they can still source their cross-arch bootloader content manually.
+       This action used to download the bootloaders from fedorapeople.org,
+       however these files are now available from yum in the cobbler-loaders
+       package so you should use that instead.
        """

-       content_server = "http://mdehaan.fedorapeople.org/loaders"
-       dest = "/var/lib/cobbler/loaders"
-
-       files = (
-          ( "%s/README" % content_server, "%s/README" % dest ),
-          ( "%s/COPYING.elilo" % content_server, "%s/COPYING.elilo" % dest ),
-          ( "%s/COPYING.yaboot" % content_server, "%s/COPYING.yaboot" % dest),
-          ( "%s/COPYING.syslinux" % content_server, "%s/COPYING.syslinux" % dest),
-          ( "%s/elilo-3.8-ia64.efi" % content_server, "%s/elilo-ia64.efi" % dest ),
-          ( "%s/yaboot-1.3.14-12" % content_server, "%s/yaboot" % dest),
-          ( "%s/pxelinux.0-3.61" % content_server, "%s/pxelinux.0" % dest),
-          ( "%s/menu.c32-3.61" % content_server, "%s/menu.c32" % dest),
-       )
-
-       self.logger.info("downloading content required to netboot all arches")
-       for f in files:
-          src = f[0]
-          dst = f[1]
-          if os.path.exists(dst) and not force:
-             self.logger.info("path %s already exists, not overwriting existing content, use --force if you wish to update" % dst)
-             continue
-          self.logger.info("downloading %s to %s" % (src,dst))
-          urlgrabber.urlgrab(src,dst)
-
-       return True
+       self.logger.info("The 'cobbler get-loaders' command has been obsoleted with 'yum install cobbler-loaders' in this version of cobbler. Please use 'yum install cobbler-loaders' instead.")
+       return False

diff -rupN cobbler-2.0.7-orig/cobbler/api.py cobbler-2.0.7-new/cobbler/api.py
--- cobbler-2.0.7-orig/cobbler/api.py	2013-05-22 15:00:28.214867942 -0400
+++ cobbler-2.0.7-new/cobbler/api.py	2013-07-11 14:41:26.977177897 -0400
@@ -750,10 +750,10 @@ class BootAPI:

     # ==========================================================================

-    def build_iso(self,iso=None,profiles=None,systems=None,tempdir=None,distro=None,standalone=None,source=None, exclude_dns=None, logger=None):
+    def build_iso(self,iso=None,profiles=None,systems=None,tempdir=None,distro=None,standalone=None,source=None, exclude_dns=None, logger=None, force_server=None):
         builder = action_buildiso.BuildIso(self._config, logger=logger)
         return builder.run(
-           iso=iso, profiles=profiles, systems=systems, tempdir=tempdir, distro=distro, standalone=standalone, source=source, exclude_dns=exclude_dns
+           iso=iso, profiles=profiles, systems=systems, tempdir=tempdir, distro=distro, standalone=standalone, source=source, exclude_dns=exclude_dns, force_server=force_server
         )

     # ==========================================================================
diff -rupN cobbler-2.0.7-orig/cobbler/cli.py cobbler-2.0.7-new/cobbler/cli.py
--- cobbler-2.0.7-orig/cobbler/cli.py	2013-05-22 15:00:28.212867927 -0400
+++ cobbler-2.0.7-new/cobbler/cli.py	2013-07-12 15:18:14.024502192 -0400
@@ -29,6 +29,7 @@ import time
 import os

 import utils
+import config
 import module_loader
 import item_distro
 import item_profile
@@ -311,16 +312,17 @@ class BootCLI:
         task_id = -1 # if assigned, we must tail the logfile

         if action_name == "buildiso":
-
-            defaultiso = os.path.join(os.getcwd(), "generated.iso")
-            self.parser.add_option("--iso",      dest="iso",  default=defaultiso, help="(OPTIONAL) output ISO to this path")
+            buildisodir = config.Config(self).settings().buildisodir
+            defaultiso = os.path.join(buildisodir, "generated.iso")
+            self.parser.add_option("--iso",      dest="iso",  default=defaultiso, help="(OPTIONAL) output ISO to this path (must be writable by cobblerd)")
             self.parser.add_option("--profiles", dest="profiles", help="(OPTIONAL) use these profiles only")
             self.parser.add_option("--systems",  dest="systems",  help="(OPTIONAL) use these systems only")
-            self.parser.add_option("--tempdir",  dest="tempdir",  help="(OPTIONAL) working directory")
+            self.parser.add_option("--tempdir",  dest="tempdir",  help="(OPTIONAL) temporary working directory (must be writable by cobblerd)")
             self.parser.add_option("--distro",   dest="distro",   help="(OPTIONAL) used with --standalone to create a distro-based ISO including all associated profiles/systems")
             self.parser.add_option("--standalone", dest="standalone", action="store_true", help="(OPTIONAL) creates a standalone ISO with all required distro files on it")
             self.parser.add_option("--source",   dest="source",   help="(OPTIONAL) used with --standalone to specify a source for the distribution files")
             self.parser.add_option("--exclude-dns", dest="exclude_dns", action="store_true", help="(OPTIONAL) prevents addition of name server addresses to the kernel boot options")
+            self.parser.add_option("--force-server", dest="force_server", help="(OPTIONAL) when kickstarting get required files from the given server instead of the default (may be given as IP Address or FQDN of the server). Useful when kickstarting through a proxy.")

             (options, args) = self.parser.parse_args()
             task_id = self.start_task("buildiso",options)
diff -rupN cobbler-2.0.7-orig/cobbler/remote.py cobbler-2.0.7-new/cobbler/remote.py
--- cobbler-2.0.7-orig/cobbler/remote.py	2013-05-22 15:00:28.212867927 -0400
+++ cobbler-2.0.7-new/cobbler/remote.py	2013-07-11 14:41:26.978177903 -0400
@@ -152,7 +152,8 @@ class CobblerXMLRPCInterface:
                 self.options.get("standalone",False),
                 self.options.get("source",None),
                 self.options.get("exclude_dns",False),
-                self.logger
+                self.logger,
+                self.options.get("force_server",None)
             )
         def on_done(self):
             if self.options.get("iso","") == "/var/www/cobbler/pub/generated.iso":
diff -rupN cobbler-2.0.7-orig/cobbler/settings.py cobbler-2.0.7-new/cobbler/settings.py
--- cobbler-2.0.7-orig/cobbler/settings.py	2013-05-22 15:00:28.212867927 -0400
+++ cobbler-2.0.7-new/cobbler/settings.py	2013-07-11 16:31:33.375946740 -0400
@@ -96,6 +96,7 @@ DEFAULTS = {
     "template_remote_kickstarts"  : 0,
     "virt_auto_boot"              : 0,
     "webdir"                      : "/var/www/cobbler",
+    "buildisodir"                 : "/tmp/cobbler/buildiso",
     "xmlrpc_port"                 : 25151,
     "yum_post_install_mirror"     : 1,
     "createrepo_flags"            : "-c cache -s sha",