Ejemplo n.º 1
0
	def __init__(self, check_access=True):
		UniventionUpdater.__init__(self, check_access)
		self.log = logging.getLogger('updater.Mirror')
		self.log.addHandler(NullHandler())
		self.repository_path =  self.configRegistry.get( 'repository/mirror/basepath', '/var/lib/univention-repository' )

		version_end = self.configRegistry.get('repository/mirror/version/end') or self.current_version
		self.version_end = UCS_Version(version_end)
		version_start = self.configRegistry.get('repository/mirror/version/start') or (self.version_major, 0, 0)
		self.version_start = UCS_Version(version_start)
		# set architectures to mirror
		archs = self.configRegistry.get( 'repository/mirror/architectures', '' )
		if archs:
			self.architectures = archs.split( ' ' )
Ejemplo n.º 2
0
    def mirror_update_scripts(self):
        '''mirrors the preup.sh and postup.sh scripts'''
        start = self.version_start
        end = self.version_end
        parts = self.parts
        archs = ('all', )

        repos = self._iterate_version_repositories(start, end, parts,
                                                   archs)  # returns generator

        start_errata = UCS_Version((start.major, start.minor,
                                    1))  # errata updates start with 'errata1'
        end_errata = UCS_Version(
            (end.major, end.minor, 999))  # get all available for mirror
        errata = self._iterate_errata_repositories(start_errata, end_errata,
                                                   parts,
                                                   archs)  # returns generator

        components = self.get_components(only_localmirror_enabled=True)
        comp = self._iterate_component_repositories(
            components, start, end, archs,
            for_mirror_list=True)  # returns generator

        all_repos = itertools.chain(
            repos, errata,
            comp)  # concatenate all generators into a single one
        for server, struct, phase, path, script in UniventionUpdater.get_sh_files(
                all_repos, self.script_verify):
            self.log.info('Mirroring %s:%r/%s to %s', server, struct, phase,
                          path)
            assert script is not None, 'No script'

            # use prefix if defined - otherwise file will be stored in wrong directory
            if server.prefix:
                filename = os.path.join(self.repository_path, 'mirror',
                                        server.prefix, path)
            else:
                filename = os.path.join(self.repository_path, 'mirror', path)

            # Check disabled, otherwise files won't get refetched if they change on upstream server
            # if os.path.exists(filename):
            #   ud.debug(ud.NETWORK, ud.ALL, "Script already exists, skipping: %s" % filename)
            #   continue

            makedirs(os.path.dirname(filename))
            fd = open(filename, "w")
            try:
                fd.write(script)
                ud.debug(ud.ADMIN, ud.INFO,
                         "Successfully mirrored: %s" % filename)
            finally:
                fd.close()
Ejemplo n.º 3
0
    def __init__(self, check_access=True):
        """
        Create new mirror with settings from UCR.

        :param bool check_access: Check if repository server is reachable on init.
        :raises ConfigurationError: if configured server is not available immediately.
        """
        UniventionUpdater.__init__(self, check_access)
        self.log = logging.getLogger('updater.Mirror')
        self.log.addHandler(NullHandler())
        self.repository_path = self.configRegistry.get(
            'repository/mirror/basepath', '/var/lib/univention-repository')

        version_end = self.configRegistry.get(
            'repository/mirror/version/end') or self.current_version
        self.version_end = UCS_Version(version_end)
        version_start = self.configRegistry.get(
            'repository/mirror/version/start') or (self.version_major, 0, 0)
        self.version_start = UCS_Version(version_start)
        # set architectures to mirror
        archs = self.configRegistry.get('repository/mirror/architectures', '')
        if archs:
            self.architectures = archs.split(' ')
Ejemplo n.º 4
0
	def mirror_update_scripts( self ):
		'''mirrors the preup.sh and postup.sh scripts'''
		start = self.version_start
		end = self.version_end
		parts = self.parts
		archs = ('all',)

		repos = self._iterate_version_repositories(start, end, parts, archs) # returns generator

		start_errata = UCS_Version((start.major, start.minor, 1))  # errata updates start with 'errata1'
		end_errata = UCS_Version((end.major, end.minor, 999)) # get all available for mirror
		errata = self._iterate_errata_repositories(start_errata, end_errata, parts, archs) # returns generator

		components = self.get_components()
		comp = self._iterate_component_repositories(components, start, end, archs, for_mirror_list=True) # returns generator

		all_repos = itertools.chain(repos, errata, comp) # concatenate all generators into a single one
		for server, struct, phase, path, script in UniventionUpdater.get_sh_files(all_repos):
			self.log.info('Mirroring %s:%r/%s to %s', server, struct, phase, path)
			assert script is not None, 'No script'

			# use prefix if defined - otherwise file will be stored in wrong directory
			if server.prefix:
				filename = os.path.join(self.repository_path, 'mirror', server.prefix, path)
			else:
				filename = os.path.join(self.repository_path, 'mirror', path)

			# Check disabled, otherwise files won't get refetched if they change on upstream server
			#if os.path.exists(filename):
			#	ud.debug(ud.NETWORK, ud.ALL, "Script already exists, skipping: %s" % filename)
			#	continue

			dirname = os.path.dirname(filename)
			try:
				os.makedirs(dirname, 0755)
			except OSError, ex:
				if ex.errno != errno.EEXIST:
					raise
			fd = open(filename, "w")
			try:
				fd.write(script)
				ud.debug(ud.ADMIN, ud.INFO, "Successfully mirrored script: %s" % filename)
			finally:
				fd.close()