Exemple #1
0
 def clean_source(self, buildreq, conn_data):
     retval = None
     if buildreq.transport.method != "apt":
         retval = "wrong_method"
     if not retval:
         src_dir = os.path.join(self.settings["buildroot"], buildreq.get_suite(), buildreq.transport.method)
         src_changes = "%s/%s_%s.dsc" % (src_dir, buildreq.get_package(), buildreq.get_version())
         command = "dcmd rm -f %s" % src_changes
         if not os.path.exists(src_changes):
             retval = "success"
         elif pybitclient.run_cmd(command, self.settings["dry_run"], None):
             retval = "source-clean-fail"
     if not retval:
         self.cleandir = os.path.join(self.settings["buildroot"], buildreq.get_suite(), buildreq.transport.method,
                                      buildreq.get_package())
         command = "rm -rf %s/" % self.cleandir
         if pybitclient.run_cmd(command, self.settings["dry_run"], None):
             retval = "failed_clean"
     if not retval:
         retval = "success"
     pybitclient.send_message(conn_data, retval)
     if retval == "success":
         return 0
     else:
         return 1
Exemple #2
0
	def build_slave (self, buildreq, conn_data):
		retval = None
		srcdir = os.path.join (self.options["buildroot"],
				buildreq.get_suite(), buildreq.transport.method)
		package_dir = "%s/%s" % (srcdir, buildreq.get_package())
		if os.path.isdir(package_dir) :
			command = "(cd %s ; dpkg-buildpackage -S -d -uc -us)" % package_dir
			if not pybitclient.run_cmd (command, self.options["dry_run"]):
				retval = "build_dsc"
			if not retval :
				command = "sbuild --apt-update -d %s %s/%s_%s.dsc" % (
					buildreq.get_suite(), srcdir,
					buildreq.get_package(), buildreq.get_version())
				if not pybitclient.run_cmd (command, self.options["dry_run"]):
					retval = "build_binary"
			if not retval :
				changes = "%s/%s_%s_%s.changes" % (srcdir,
					buildreq.get_package(), buildreq.get_version(),
					buildreq.get_arch())
				if not os.path.isfile (changes) :
					print "Failed to find %s file." % (changes)
					retval = "build_changes"
		if not retval :
			retval = "success"
		pybitclient.send_message (conn_data, retval)
		if retval == "success":
			return 0
		else :
			return 1
Exemple #3
0
 def build_master(self, buildreq, conn_data):
     retval = None
     logfile = self.get_buildlog(self.settings["buildroot"], buildreq)
     if not isinstance(buildreq, BuildRequest):
         logging.debug("E: not able to identify package name.")
         retval = "misconfigured"
         pybitclient.send_message(conn_data, retval)
         return
     srcdir = os.path.join(self.settings["buildroot"],
                           buildreq.get_suite(), buildreq.transport.method)
     package_dir = "%s/%s" % (srcdir, buildreq.get_package())
     command = "(cd %s ; dpkg-buildpackage -S -d -uc -us)" % package_dir
     if pybitclient.run_cmd(command, self.settings["dry_run"], logfile):
         retval = "build-dep-wait"
     if not retval:
         command = "sbuild -n --debbuildopt=\"-a%s\" --setup-hook=\"/usr/bin/sbuild-cross.sh\" --arch=%s -A -s -d %s %s/%s_%s.dsc" % (
             buildreq.get_arch(), buildreq.get_arch(), buildreq.get_suite(), srcdir,
             buildreq.get_package(), buildreq.get_version())
         if pybitclient.run_cmd(command, self.settings["dry_run"], logfile):
             retval = "build_binary"
     if not retval:
         changes = "%s/%s_%s_%s.changes" % (self.settings["buildroot"], buildreq.get_package(),
                                            buildreq.get_version(), buildreq.get_arch())
         if not self.settings["dry_run"] and not os.path.isfile(changes):
             logging.debug("build_master: Failed to find %s file." % changes)
             retval = "build_changes"
     if not retval:
         retval = "success"
     pybitclient.send_message(conn_data, retval)
     if retval == "success":
         return 0
     else:
         return 1
Exemple #4
0
 def build_slave(self, buildreq, conn_data):
     retval = None
     logfile = self.get_buildlog(self.settings["buildroot"], buildreq)
     srcdir = os.path.join(self.settings["buildroot"],
                           buildreq.get_suite(), buildreq.transport.method)
     package_dir = "%s/%s" % (srcdir, buildreq.get_package())
     if os.path.isdir(package_dir) or self.settings["dry_run"]:
         command = "(cd %s ; dpkg-buildpackage -S -d -uc -us)" % package_dir
         if pybitclient.run_cmd(command, self.settings["dry_run"], logfile):
             retval = "build_dsc"
         if not retval:
             command = "sbuild -n --apt-update -d %s %s/%s_%s.dsc" % (
                 buildreq.get_suite(), srcdir,
                 buildreq.get_package(), buildreq.get_version())
             if pybitclient.run_cmd(command, self.settings["dry_run"], logfile):
                 retval = "build_binary"
         if not retval:
             changes = "%s/%s_%s_%s.changes" % (self.settings["buildroot"],
                                                buildreq.get_package(), buildreq.get_version(),
                                                buildreq.get_arch())
             if not self.settings["dry_run"] and not os.path.isfile(changes):
                 logging.debug("build_slave: Failed to find %s file." % changes)
                 retval = "build_changes"
     else:
         retval = "Can't find build dir."
     if not retval:
         retval = "success"
     pybitclient.send_message(conn_data, retval)
     if retval == "success":
         return 0
     else:
         return 1
Exemple #5
0
 def fetch_source(self, buildreq, conn_data):
     retval = None
     if buildreq.transport.method != self.method:
         retval = "wrong_method"
     if not retval:
         self.workdir = os.path.join(
             self.settings["buildroot"], buildreq.get_suite(), buildreq.transport.method, buildreq.get_package()
         )
         if buildreq.transport.vcs_id is not None:
             command = "svn export %s@%s %s" % (buildreq.transport.uri, buildreq.transport.vcs_id, self.workdir)
         elif buildreq.transport.uri is not None:
             command = "svn export %s %s" % (buildreq.transport.uri, self.workdir)
         else:
             logging.warn("E: Could not fetch source, no method URI found")
             retval = "unrecognised uri"
     if not retval:
         if pybitclient.run_cmd(command, self.settings["dry_run"], None):
             retval = "fetch_source"
     if not retval:
         retval = "success"
     pybitclient.send_message(conn_data, retval)
     if retval == "success":
         return 0
     else:
         return 1
Exemple #6
0
	def build_command_handler (self, buildreq, conn_data) :
		retval = None
		logfile = self.get_buildlog (self.settings["buildroot"], buildreq)
		# expect fakeroot debian/rules rules-target
		package_dir = os.path.join (self.settings["buildroot"],
				buildreq.get_suite(), buildreq.transport.method, buildreq.get_package())
		parts = buildreq.commands.split(' ')
		if len(parts) != 3 :
			retval = "failed-custom-command-len"
		if retval :
			return retval
		# only allow debian/rules targets, specified in full
		if parts[0] != "fakeroot" or parts[1] != "debian/rules" or parts[2] is None :
			retval = "failed-custom-command-parts"
		if retval :
			return retval
		# debian/rules targets must be run in the package_dir and
		# a command passed to schroot needs to be accessible inside the
		# chroot and therefore copied to ${HOME} so that schroot copies it again,
		# into the chroot itself.
		orig_sh = "/usr/share/pybitclient/sbuild-orig.sh"
		command = "(cp %s %s/sbuild-orig.sh ; schroot -n -u root -c %s -- %s/sbuild-orig.sh %s %s ; rm %s/sbuild-orig.sh)" % (orig_sh,
			self.settings["buildroot"], buildreq.get_suite(), self.settings["buildroot"], package_dir, parts[2], self.settings["buildroot"])
		if pybitclient.run_cmd (command, self.settings["dry_run"], logfile):
			retval = "custom-command-error"
		return retval
Exemple #7
0
 def fetch_source(self, buildreq, conn_data):
     retval = None
     # try:
     if buildreq.transport.method != "svn":
         retval = "wrong_method"
     if not retval:
         self.workdir = os.path.join(
             self.settings["buildroot"], buildreq.get_suite(), buildreq.transport.method, buildreq.get_package()
         )
         if buildreq.transport.vcs_id is not None:
             command = "svn export %s@%s %s" % (buildreq.transport.uri, buildreq.transport.vcs_id, self.workdir)
         elif buildreq.transport.uri is not None:
             command = "svn export %s %s" % (buildreq.transport.uri, self.workdir)
         else:
             print "Could not fetch source, no method URI found"
             retval = "unrecognised uri"
     if not retval:
         if not pybitclient.run_cmd(command, self.settings["dry_run"]):
             retval = "fetch_source"
             # except Exception as e:
             # 	retval = str(e)
     if not retval:
         retval = "success"
     pybitclient.send_message(conn_data, retval)
     if retval == "success":
         return 0
     else:
         return 1
Exemple #8
0
    def build_slave (self, buildreq, conn_data):
        retval = None
        logfile = self.get_buildlog (self.settings["buildroot"], buildreq)
        srcdir = os.path.join (self.settings["buildroot"],
                buildreq.get_suite(), buildreq.transport.method)
        package_dir = "%s/%s" % (srcdir, buildreq.get_package())
        if os.path.isdir(package_dir) or self.settings["dry_run"]:
            # need an extra uscan stage to deal with non-native packages
            # this requires the upstream release to be accessible to the client.
            # i.e. unreleased versions of non-native packages cannot be built this way.
            # See #18 for the unreleased build support issue.
            if hasattr (buildreq, 'commands') and buildreq.commands :
                retval = self.build_command_handler (buildreq, conn_data)
            else :
                retval = self.orig_source_handler (buildreq, conn_data)
            command = "(cd %s ; dpkg-buildpackage -nc -S -d -uc -us)" % (package_dir)
            if pybitclient.run_cmd (command, self.settings["dry_run"], logfile):
                retval = "build_dsc"
            chroot_name = buildreq.get_suite()
            if (buildreq.get_buildenv() is not None):
                chroot_name = "%s-%s" % (buildreq.get_buildenv(), buildreq.get_suite())
            if not retval :
                command = "sbuild -n --apt-update -d %s %s/%s_%s.dsc" % (chroot_name, srcdir,
                    buildreq.get_package(), buildreq.get_version())
                ret = pybitclient.run_cmd (command, self.settings["dry_run"], logfile)
                if (ret == 3 or ret == 768):
                    retval = "build-dep-wait"
                elif (ret):
                    retval = "build_binary"
            if not retval :
                changes = "%s/%s_%s_%s.changes" % (self.settings["buildroot"],
                    buildreq.get_package(), buildreq.get_version(),
                    buildreq.get_arch())
                if not self.settings["dry_run"] and not os.path.isfile (changes) :
                    logging.warn ("E: build_slave: Failed to find %s file." % (changes))
                    retval = "build_changes"
                if not retval and checkValue ('debsignkey', self.settings) :
                    command = "debsign -k%s %s" % (self.settings['debsignkey'], changes)
                    if pybitclient.run_cmd (command, self.settings["dry_run"], logfile):
                        retval = "build_sign"
        else:
            retval = "Can't find build dir."
                #If we have a message set we send back the message and failure

        return self._overall_success(retval, conn_data)
Exemple #9
0
	def build_master (self, buildreq, conn_data):
		retval = None
		if (not isinstance(buildreq, BuildRequest)):
			print "E: not able to identify package name."
			retval = "misconfigured"
			pybitclient.send_message (conn_data, retval)
			return
		srcdir = os.path.join (self.options["buildroot"],
				buildreq.get_suite(), buildreq.transport.method)
		package_dir = "%s/%s" % (srcdir, buildreq.get_package())
		command = "(cd %s ; dpkg-buildpackage -S -d -uc -us)" % (package_dir)
		if not pybitclient.run_cmd (command, self.options["dry_run"]):
			retval = "build-dep-wait"
		if not retval :
			command = "sbuild --debbuildopt=\"-a%s\" --setup-hook=\"/usr/bin/sbuild-cross.sh\" --arch=%s -A -s -d %s %s/%s_%s.dsc" %
				(pkg.architecture, pkg.architecture, pkg.suite, srcdir, pkg.source, pkg.version)
			if not pybitclient.run_cmd (command, self.options["dry_run"]):
				retval = "build_binary"
Exemple #10
0
 def clean_source(self, buildreq, conn_data):
     retval = None
     if buildreq.transport.method != self.method:
         retval = "wrong_method"
     if not retval:
         # look for a _source.changes file generated when we made the .dsc
         src_chgs = os.path.join(
             self.settings["buildroot"],
             buildreq.get_suite(),
             buildreq.transport.method,
             ("%s_%s_source.changes" % (buildreq.get_package(), buildreq.get_version())),
         )
         if os.path.exists(src_chgs):
             command = "dcmd rm -f %s" % (src_chgs)
             if pybitclient.run_cmd(command, self.settings["dry_run"], None):
                 retval = "source-clean-fail"
         else:
             # check for just the .dsc
             src_chgs = os.path.join(
                 self.settings["buildroot"],
                 buildreq.get_suite(),
                 buildreq.transport.method,
                 ("%s_%s.dsc" % (buildreq.get_package(), buildreq.get_version())),
             )
             if os.path.exists(src_chgs):
                 command = "dcmd rm -f %s" % (src_chgs)
                 if pybitclient.run_cmd(command, self.settings["dry_run"], None):
                     retval = "source-clean-fail"
     if not retval:
         self.cleandir = os.path.join(
             self.settings["buildroot"], buildreq.get_suite(), buildreq.transport.method, buildreq.get_package()
         )
         command = "rm -rf %s" % (self.cleandir)
         if pybitclient.run_cmd(command, self.settings["dry_run"], None):
             retval = "failed_clean"
     if not retval:
         retval = "success"
     pybitclient.send_message(conn_data, retval)
     # return the exit value of the process - exit (0) for success.
     if retval == "success":
         return 0
     else:
         return 1
Exemple #11
0
	def upload (self, buildreq, conn_data):
		retval = None
		logfile = self.get_buildlog (self.settings["buildroot"], buildreq)
		changes = "%s/%s_%s_%s.changes" % (self.settings["buildroot"], buildreq.get_package(),
			buildreq.get_version(), buildreq.get_arch())
		if not os.path.isfile (changes) and not self.settings["dry_run"]:
			logging.debug("upload: Failed to find %s file." % (changes))
			retval = "upload_changes"
		if not retval :
			command = "dput -c %s %s %s %s" % (self.dput_cfg,
				self.settings["dput"], self.settings["dput_dest"], changes)
			if pybitclient.run_cmd (command, self.settings["dry_run"], logfile):
				retval = "upload_fail"
		if not retval :
			command = "dcmd rm %s" % (changes)
			if pybitclient.run_cmd (command, self.settings["dry_run"], logfile):
				retval = "post-upload-clean-fail"

		return self._overall_success(retval, conn_data)
Exemple #12
0
 def update_environment(self, name, pkg, conn_data):
     retval = "success"
     command = "schroot -u root -c %s -- apt-get update > /dev/null 2>&1" % name
     if pybitclient.run_cmd(command, self.settings["dry_run"], None):
         retval = "build_update"
     pybitclient.send_message(conn_data, retval)
     if retval == "success":
         return 0
     else:
         return 1
Exemple #13
0
 def fetch_source(self, buildreq, conn_data):
     retval = None
     command = None
     if buildreq.transport.method != "apt":
         retval = "wrong_method"
     if not retval:
         self.workdir = os.path.join(self.settings["buildroot"],
                                     buildreq.get_suite(), buildreq.transport.method, buildreq.get_package())
         if not os.path.isdir(self.workdir):
             pybitclient.mkdir_p(self.workdir)
         apt_path = os.path.join(self.workdir, "lists", "partial")
         pybitclient.mkdir_p(apt_path)
         apt_path = os.path.join(self.workdir, "archives", "partial")
         pybitclient.mkdir_p(apt_path)
         apt_path = os.path.join(self.workdir, "etc", "apt", "preferences.d")
         pybitclient.mkdir_p(apt_path)
         apt_path = os.path.join(self.workdir, "sources.list")
         src_list = os.open(apt_path, os.O_CREAT | os.O_WRONLY)
         url = "deb-src http://cdn.debian.net/debian %s main " % buildreq.get_suite()
         os.write(src_list, url)
         cfg_str = "-o Apt::Get::AllowUnauthenticated=true -o Dir=%s -o Dir::State=%s -o Dir::Etc::SourceList=%s/sources.list -o Dir::Cache=%s" % \
             (self.workdir, self.workdir, self.workdir, self.workdir)
         command = "(cd %s && apt-get %s update 2>/dev/null || true)" % (self.workdir, cfg_str)
         if not retval:
             if pybitclient.run_cmd(command, self.settings["dry_run"], None):
                 retval = "update_apt"
         if buildreq.get_version() is not None:
             command = "(cd %s/.. && apt-get %s -d source %s=%s )" % (self.workdir, cfg_str,
                                                                      buildreq.get_package(), buildreq.get_version())
         else:
             command = "(cd %s && apt-get %s -d source %s )" % (self.workdir, cfg_str, buildreq.get_package())
     if not retval:
         if pybitclient.run_cmd(command, self.settings["dry_run"], None):
             retval = "fetch_source"
     if not retval:
         retval = "success"
     pybitclient.send_message(conn_data, retval)
     # return the exit value of the process - exit (0) for success.
     if retval == "success":
         return 0
     else:
         return 1
Exemple #14
0
	def clean_source (self, buildreq, conn_data) :
		retval = None
		if buildreq.transport.method != "git":
			retval = "wrong_method"
		if not retval :
			self.cleandir = os.path.join (self.options["buildroot"], buildreq.get_suite())
			command = "rm -rf %s/*" % (self.cleandir)
			if not pybitclient.run_cmd (command, self.options["dry_run"]) :
				retval = "failed_clean"
		retval = "success"
		pybitclient.send_message (conn_data, retval)
Exemple #15
0
	def build_master (self, buildreq, conn_data):
		print "build_master"
		retval = None
		if (not isinstance(buildreq, BuildRequest)):
			print "E: not able to identify package name."
			retval = "misconfigured"
			pybitclient.send_message (conn_data, retval)
			return
		srcdir = os.path.join (self.settings["buildroot"],
				buildreq.get_suite(), buildreq.transport.method)
		package_dir = "%s/%s" % (srcdir, buildreq.get_package())
		# FIXME: doesn't make sense to run dpkg-checkbuilddeps outside the chroot!
		if os.path.isdir(package_dir) :
			control = os.path.join (package_dir, 'debian', 'control')
			dep_check = "/usr/lib/pbuilder/pbuilder-satisfydepends-classic --control"
			command = "schroot -u root -c %s -- %s %s" % (buildreq.get_suite(),
				 dep_check, os.path.realpath(control))
			if not pybitclient.run_cmd (command, self.settings["dry_run"]):
				retval = "build-dep-wait"
		if not retval :
			command = "(cd %s ; dpkg-buildpackage -S -d -uc -us)" % (package_dir)
			if not pybitclient.run_cmd (command, self.settings["dry_run"]):
				retval = "build_dsc"
		if not retval :
			command = "sbuild -A -s -d %s %s/%s_%s.dsc" % (buildreq.get_suite(),
				srcdir, buildreq.get_package(), buildreq.get_version())
			if not pybitclient.run_cmd (command, self.settings["dry_run"]):
				retval = "build_binary"
		if not retval :
			changes = "%s/%s_%s_%s.changes" % (os.getcwd(), buildreq.get_package(),
				buildreq.get_version(), buildreq.get_arch())
			if not self.settings["dry_run"] and not os.path.isfile (changes) :
				print "build_master: Failed to find %s file." % (changes)
				retval = "build_changes"
		if not retval :
			retval = "success"
		pybitclient.send_message (conn_data, retval)
		if retval == "success":
			return 0
		else :
			return 1
Exemple #16
0
 def orig_source_handler (self, buildreq, conn_data) :
     retval = None
     logfile = self.get_buildlog (self.settings["buildroot"], buildreq)
     srcdir = os.path.join (self.settings["buildroot"],
             buildreq.get_suite(), buildreq.transport.method)
     version = buildreq.get_version()
     if '-' not in version :
         # native package, nothing to do for the orig source.
         return retval
     if self.settings["dry_run"] :
         logging.debug("I: %s (%s) is not a native package - need original source" % (buildreq.get_package(), version))
     offset = version.find('-')
     # strip the debian packaging part of the version string
     origversion = version[0:offset]
     origtar = os.path.join (srcdir, "%s_%s.orig.tar.gz" % (buildreq.get_package(), origversion))
     if os.path.isfile (origtar) :
         # have .gz
         return retval
     # check for .tar.bz2
     origtar = os.path.join (srcdir, "%s_%s.orig.tar.bz2" % (buildreq.get_package(), origversion))
     if os.path.isfile (origtar) :
         # have .bz2
         return retval
     # use a debian/watch file and uscan
     package_dir = "%s/%s" % (srcdir, buildreq.get_package())
     watch = os.path.join (srcdir, package_dir, "debian", "watch")
     logging.debug ("I: Looking for '%s' as watch file." % watch)
     if os.path.isfile (watch) or self.settings["dry_run"] :
         logging.debug ("I: Using '%s' as watch file." % watch)
         command = "(cd %s ; uscan --destdir ../ --repack --force-download --download-version %s)" % (os.path.join(srcdir,
             buildreq.get_package()), origversion)
         if pybitclient.run_cmd (command, self.settings["dry_run"], logfile):
             retval = "watch-failed"
             return retval
     # fall back to apt-get source
     else :
         command = "(cd ../ ; apt-get -d source %s/%s)" % (buildreq.get_package(), buildreq.get_suite())
         if pybitclient.run_cmd (command, self.settings["dry_run"], logfile):
             logging.debug("I: apt-get source failed, proceeding anyway incase its an update of a debian package.")
     return retval
Exemple #17
0
	def clean_source (self, buildreq, conn_data) :
		retval = None
		if buildreq.transport.method != "apt":
			retval = "wrong_method"
		if not retval :
			self.cleandir = os.path.join (self.settings["buildroot"], buildreq.get_suite(), buildreq.transport.method,
				buildreq.get_package())
			command = "rm -rf %s" % (self.cleandir)
			if pybitclient.run_cmd (command, self.settings["dry_run"], None) :
				retval = "failed_clean"
		if not retval :
			retval = "success"
		pybitclient.send_message (conn_data, retval)
		if retval == "success":
			return 0
		else :
			return 1
Exemple #18
0
	def upload (self, buildreq, conn_data):
		retval = None
		srcdir = os.path.join (self.settings["buildroot"],
				buildreq.get_suite(), buildreq.transport.method)
		changes = "%s/%s_%s_%s.changes" % (os.getcwd(), buildreq.get_package(),
			buildreq.get_version(), buildreq.get_arch())
		if not os.path.isfile (changes) and not self.settings["dry_run"]:
			print "upload: Failed to find %s file." % (changes)
			retval = "upload_changes"
		if not retval :
			command = "dput -c %s %s %s %s" % (self.dput_cfg,
				self.settings["dput"], self.settings["dput_dest"], changes)
			if not pybitclient.run_cmd (command, self.settings["dry_run"]):
				retval = "upload_fail"
		if not retval :
			retval = "success"
		pybitclient.send_message (conn_data, retval)
		if retval == "success":
			return 0
		else :
			return 1
Exemple #19
0
	def fetch_source(self, buildreq, conn_data):
		retval = None
		#try:
		if buildreq.transport.method != "git":
			retval = "wrong_method"
		if not retval :
			self.workdir = os.path.join (self.options["buildroot"],
				buildreq.get_suite(), buildreq.transport.method)
			# vcs_id for git is a branch identifier
			if (buildreq.transport.vcs_id is not None):
				command = "git clone -b %s %s %s" % (buildreq.transport.vcs_id,
					buildreq.transport.uri, self.workdir)
			elif (buildreq.transport.uri is not None):
				command = "git clone %s %s" % (buildreq.transport.uri, self.workdir)
			else:
				print "Could not fetch source, no method URI found"
				retval = "unrecognised uri"
		if not retval :
			if not pybitclient.run_cmd (command, self.options["dry_run"]) :
				retval = "fetch_source"
		if not retval :
			retval = "success"
		pybitclient.send_message (conn_data, retval)
Exemple #20
0
	def fetch_source(self, buildreq, conn_data):
		retval = None
		if buildreq.transport.method != "apt":
			retval = "wrong_method"
		if not retval :
			self.workdir = os.path.join (self.settings["buildroot"],
				buildreq.get_suite(), buildreq.transport.method)
			if (buildreq.get_version() is not None):
				command = "(cd %s && apt-get -d source %s=%s && dpkg-source -x %s_%s.dsc)" % (self.workdir,
				buildreq.get_package(), buildreq.get_version(), buildreq.get_package(), buildreq.get_version() )
			else :
				command = "(cd %s && apt-get -d source %s && dpkg-source -x %s_%s.dsc)" % (self.workdir,
				buildreq.get_package(), buildreq.get_package(), buildreq.get_version() )
		if not retval :
			if pybitclient.run_cmd (command, self.settings["dry_run"], None) :
				retval = "fetch_source"
		if not retval :
			retval = "success"
		pybitclient.send_message (conn_data, retval)
		if retval == "success":
			return 0
		else :
			return 1
Exemple #21
0
	def update_environment(self,name,pkg, conn_data):
		retval = None
		command = "schroot -u root -c %s -- apt-get update > /dev/null 2>&1" % (name)
		if pybitclient.run_cmd (command, self.settings["dry_run"], None) :
			retval = "build_update"
		return retval
Exemple #22
0
	def build_master (self, buildreq, conn_data):
		retval = None
		logfile = self.get_buildlog (self.settings["buildroot"], buildreq)
		if (not isinstance(buildreq, BuildRequest)):
			logging.debug ("E: not able to identify package name.")
			retval = "misconfigured"
			return self._overall_success(retval, conn_data)
		srcdir = os.path.join (self.settings["buildroot"],
				buildreq.get_suite(), buildreq.transport.method)
		package_dir = "%s/%s" % (srcdir, buildreq.get_package())
		# To check the build-dependencies in advance, we need to ensure the
		# chroot has an update apt-cache, so can't use apt-update option of
		# sbuild. The alternative is to update the apt-cache twice per build,
		# once for the dep check and once before the build. The choice depends
		# on whether two network trips are more efficient than rewriting the
		# lvm snapshot before even trying to do any build.
		if self.settings["use_lvm"] :
			update_name = "%s-source" % buildreq.get_suite()
		else :
			update_name = buildreq.get_suite()
		retval = self.update_environment (update_name, buildreq, conn_data)
		# need an extra uscan stage to deal with non-native packages
		# this requires the upstream release to be accessible to the client.
		# i.e. unreleased versions of non-native packages cannot be built this way.
		# See #18 for the unreleased build support issue.
		if not retval:
			if hasattr (buildreq, 'commands') and buildreq.commands :
				retval = self.build_command_handler (buildreq, conn_data)
			else : #61 - avoid dependency check if not using lvm
				if self.settings["use_lvm"] and (os.path.isdir(package_dir) or self.settings["dry_run"]) :
					control = os.path.join (package_dir, 'debian', 'control')
					dep_check = "/usr/lib/pbuilder/pbuilder-satisfydepends-classic --control"
					command = "schroot -u root -c %s -- %s %s" % (buildreq.get_suite(), dep_check, os.path.realpath(control))
					if pybitclient.run_cmd (command, self.settings["dry_run"], logfile):
						retval = "build-dep-wait"
				if not retval :
					retval = self.orig_source_handler (buildreq, conn_data)
				if not retval :
					dsc_file = "%s/%s_%s.dsc" % (srcdir, buildreq.get_package(), buildreq.get_version())
					if not os.path.exists (dsc_file) :
						command = "(cd %s && dpkg-buildpackage -nc -S -d -uc -us)" % (package_dir)
						if pybitclient.run_cmd (command, self.settings["dry_run"], logfile):
							retval = "build_dsc"
		if not retval :
			command = "sbuild -A -n -s -d %s %s/%s_%s.dsc" % (buildreq.get_suite(),
				srcdir, buildreq.get_package(), buildreq.get_version())
			ret = pybitclient.run_cmd (command, self.settings["dry_run"], logfile)
			if (ret == 3 or ret == 1):
				retval = "build-dep-wait"
			elif (ret):
				retval = "build_binary"
		if not retval :
			changes = "%s/%s_%s_%s.changes" % (self.settings["buildroot"], buildreq.get_package(),
				buildreq.get_version(), buildreq.get_arch())
			if not self.settings["dry_run"] and not os.path.isfile (changes) :
				logging.debug("build_master: Failed to find %s file." % (changes))
				retval = "build_changes"
			if not retval and checkValue ('debsignkey', self.settings) :
				command = "debsign -k%s %s" % (self.settings['debsignkey'], changes)
				if pybitclient.run_cmd (command, self.settings["dry_run"], logfile):
					retval = "build_sign"

		return self._overall_success(retval, conn_data)