class MyYumRepository(yum.yumRepo.YumRepository): def __del__(self): pass def dirSetup(self): super(MyYumRepository, self).dirSetup() # relocate package dir pkgdir = os.path.join(self.basecachedir, 'packages', self.id) self.setAttribute('_dir_setup_pkgdir', pkgdir) self._dirSetupMkdir_p(self.pkgdir) def _getFile(self, url=None, relative=None, local=None, start=None, end=None, copy_local=None, checkfunc=None, text=None, reget='simple', cache=True, size=None): m2c_connection = None if not self.sslverify: try: import M2Crypto m2c_connection = M2Crypto.SSL.Connection.clientPostConnectionCheck M2Crypto.SSL.Connection.clientPostConnectionCheck = None except ImportError, err: raise CreatorError("%s, please try to install python-m2crypto" % str(err)) proxy = None if url: proxy = get_proxy_for(url) else: proxy = get_proxy_for(self.urls[0]) if proxy: self.proxy = str(proxy) size = int(size) if size else None rvalue = super(MyYumRepository, self)._getFile(url, relative, local, start, end, copy_local, checkfunc, text, reget, cache, size) if m2c_connection and \ not M2Crypto.SSL.Connection.clientPostConnectionCheck: M2Crypto.SSL.Connection.clientPostConnectionCheck = m2c_connection return rvalue
def get_proxy(self, repoinfo): proxy = None reponame = "%s" % repoinfo.name() for repo in self.repos: if repo.name == reponame: proxy = repo.proxy break if proxy: return proxy else: repourl = str(repoinfo.baseUrls()[0]) return get_proxy_for(repourl)
def package_url(self, pkgname): pkgs = self.pkgSack.searchNevra(name=pkgname) if pkgs: proxy = None proxies = None url = pkgs[0].remote_url repoid = pkgs[0].repoid repos = filter(lambda r: r.id == repoid, self.repos.listEnabled()) if repos: proxy = repos[0].proxy if not proxy: proxy = get_proxy_for(url) if proxy: proxies = {str(url.split(':')[0]): str(proxy)} return (url, proxies) return (None, None)
def get_proxies(self, pobj): if not pobj: return None proxy = None proxies = None repoinfo = pobj.repoInfo() reponame = "%s" % repoinfo.name() repos = filter(lambda r: r.name == reponame, self.repos) repourl = str(repoinfo.baseUrls()[0]) if repos: proxy = repos[0].proxy if not proxy: proxy = get_proxy_for(repourl) if proxy: proxies = {str(repourl.split(':')[0]): str(proxy)} return proxies
def package_url(self, pkgname): pkgs = self.pkgSack.searchNevra(name=pkgname) if pkgs: proxy = None proxies = None url = pkgs[0].remote_url repoid = pkgs[0].repoid repos = [r for r in self.repos.listEnabled() if r.id == repoid] if repos: proxy = repos[0].proxy if not proxy: proxy = get_proxy_for(url) if proxy: proxies = {str(url.split(':')[0]): str(proxy)} return (url, proxies) return (None, None)
def get_proxies(self, pobj): if not pobj: return None proxy = None proxies = None repoinfo = pobj.repoInfo() reponame = "%s" % repoinfo.name() repos = [r for r in self.repos if r.name == reponame] repourl = str(repoinfo.baseUrls()[0]) if repos: proxy = repos[0].proxy if not proxy: proxy = get_proxy_for(repourl) if proxy: proxies = {str(repourl.split(':')[0]): str(proxy)} return proxies
def package_url(self, pkgname): pkgs = self.pkgSack.searchNevra(name=pkgname) if pkgs: pkg = pkgs[0] repo = pkg.repo url = SafeURL(repo.baseurl[0]).join(pkg.remote_path) proxy = repo.proxy if not proxy: proxy = get_proxy_for(url) if proxy: proxies = {str(url.split(':')[0]): str(proxy)} else: proxies = None return (url, proxies) return (None, None)
def runmic_in_runtime(runmode, opts, ksfile, argv=None): dist = misc.get_distro()[0] if not runmode or not dist or "MeeGo" == dist: return if not argv: argv = sys.argv else: argv = argv[:] if runmode == 'bootstrap': msger.info("Use bootstrap runtime environment") name = "micbootstrap" try: repostrs = configmgr.bootstraps[name] except: repostrs = "name:%s,baseurl:%s," (name, BOOTSTRAP_URL) proxy = get_proxy_for(BOOTSTRAP_URL) if proxy: repostrs += "proxy:%s" % proxy repolist = [] if not name: # use ks repo to create bootstrap # so far it can't be effective for mic not in repo #name = os.path.basename(ksfile) #repostrs = misc.get_repostrs_from_ks(opts['ks']) #for item in repostrs: # repolist.append(convert_repostr(item)) msger.info("Failed to find propery bootstrap, please check config file") msger.info("Back to native running") return else: for reponame, repostr in repostrs.items(): repolist.append(convert_repostr(repostr)) runmic_in_bootstrap(name, argv, opts, ksfile, repolist) else: raise errors.RuntimeError('Invalid runmode: %s ' % runmode) sys.exit(0)
def runmic_in_runtime(runmode, opts, ksfile, argv=None): dist = distro.name() if not runmode or not dist or "MeeGo" == dist: return if not argv: argv = sys.argv else: argv = argv[:] if runmode == 'bootstrap': msger.info("Use bootstrap runtime environment") name = "micbootstrap" try: repostrs = configmgr.bootstraps[name] except: repostrs = "name:%s,baseurl:%s," (name, BOOTSTRAP_URL) proxy = get_proxy_for(BOOTSTRAP_URL) if proxy: repostrs += "proxy:%s" % proxy repolist = [] if not name: # use ks repo to create bootstrap # so far it can't be effective for mic not in repo #name = os.path.basename(ksfile) #repostrs = misc.get_repostrs_from_ks(opts['ks']) #for item in repostrs: # repolist.append(convert_repostr(item)) msger.info("cannot find valid bootstrap, please check the config") msger.info("Back to native running") return else: for reponame, repostr in list(repostrs.items()): repolist.append(convert_repostr(repostr)) runmic_in_bootstrap(name, argv, opts, ksfile, repolist) else: raise errors.RuntimeError('Invalid runmode: %s ' % runmode) sys.exit(0)
def __attachment_packages(self, pkg_manager): if not self.ks: return self._attachment = [] for item in kickstart.get_attachment(self.ks): if item.startswith('/'): fpaths = os.path.join(self._instroot, item.lstrip('/')) for fpath in glob.glob(fpaths): self._attachment.append(fpath) continue filelist = pkg_manager.getFilelist(item) if filelist: # found rpm in rootfs for pfile in pkg_manager.getFilelist(item): fpath = os.path.join(self._instroot, pfile.lstrip('/')) self._attachment.append(fpath) continue # try to retrieve rpm file url = pkg_manager.package_url(item) if not url: msger.warning("Can't get url from repo for %s" % item) continue proxies = proxy.get_proxy_for(url) fpath = os.path.join(self.cachedir, os.path.basename(url)) if not os.path.exists(fpath): # download pkgs try: fpath = rpmmisc.myurlgrab(url, fpath, proxies, None) except CreatorError: raise tmpdir = self._mkdtemp() misc.extract_rpm(fpath, tmpdir) for (root, dirs, files) in os.walk(tmpdir): for fname in files: fpath = os.path.join(root, fname) self._attachment.append(fpath)
def addRepository(self, name, url = None, mirrorlist = None, proxy = None, proxy_username = None, proxy_password = None, inc = None, exc = None, ssl_verify = True, nocache = False, cost=None, priority=None): # TODO: Handle cost attribute for repos if not self.repo_manager: self.__initialize_repo_manager() if not proxy and url: proxy = get_proxy_for(url) repo = RepositoryStub() repo.name = name repo.id = name repo.proxy = proxy repo.proxy_username = proxy_username repo.proxy_password = proxy_password repo.ssl_verify = ssl_verify repo.nocache = nocache repo.baseurl.append(url) if inc: for pkg in inc: self.incpkgs[pkg] = name if exc: for pkg in exc: self.excpkgs[pkg] = name if mirrorlist: repo.mirrorlist = mirrorlist # Enable gpg check for verifying corrupt packages repo.gpgcheck = 1 if priority is not None: # priority 0 has issue in RepoInfo.setPriority repo.priority = priority + 1 try: repo_info = zypp.RepoInfo() repo_info.setAlias(repo.name) repo_info.setName(repo.name) repo_info.setEnabled(repo.enabled) repo_info.setAutorefresh(repo.autorefresh) repo_info.setKeepPackages(repo.keeppackages) baseurl = zypp.Url(repo.baseurl[0].full) if not ssl_verify: baseurl.setQueryParam("ssl_verify", "no") if proxy: host = urlparse.urlparse(proxy)[1] # scheme, host, path, parm, query, frag = urlparse.urlparse(proxy) proxyinfo = host.rsplit(":", 1) host = proxyinfo[0] port = "80" if len(proxyinfo) > 1: port = proxyinfo[1] if proxy.startswith("socks") and len(proxy.rsplit(':', 1)) == 2: host = proxy.rsplit(':', 1)[0] port = proxy.rsplit(':', 1)[1] # parse user/pass from proxy host proxyinfo = host.rsplit("@", 1) if len(proxyinfo) == 2: host = proxyinfo[1] # Known Issue: If password contains ":", which should be # quoted, for example, use '123%3Aabc' instead of 123:abc userpassinfo = proxyinfo[0].rsplit(":", 1) if len(userpassinfo) == 2: proxy_username = userpassinfo[0] proxy_password = userpassinfo[1] elif len(userpassinfo) == 1: proxy_username = userpassinfo[0] baseurl.setQueryParam ("proxy", host) baseurl.setQueryParam ("proxyport", port) if proxy_username: baseurl.setQueryParam ("proxyuser", proxy_username) if proxy_password: baseurl.setQueryParam ("proxypass", proxy_password) else: baseurl.setQueryParam ("proxy", "_none_") self.repos.append(repo) repo_info.addBaseUrl(baseurl) if repo.priority is not None: repo_info.setPriority(repo.priority) # this hack is used to change zypp credential file location # the default one is $HOME/.zypp, which cause conflicts when # installing some basic packages, and the location doesn't # have any interface actually, so use a tricky way anyway homedir = None if 'HOME' in os.environ: homedir = os.environ['HOME'] os.environ['HOME'] = '/' else: os.environ['HOME'] = '/' self.repo_manager.addRepository(repo_info) # save back the $HOME env if homedir: os.environ['HOME'] = homedir else: del os.environ['HOME'] self.__build_repo_cache(name) except RuntimeError, e: raise CreatorError(str(e))
def addRepository(self, name, url = None, mirrorlist = None, proxy = None, proxy_username = None, proxy_password = None, inc = None, exc = None, ssl_verify = True, nocache = False, cost=None, priority=None): # TODO: Handle cost attribute for repos if not self.repo_manager: self.__initialize_repo_manager() if not proxy and url: proxy = get_proxy_for(url) repo = RepositoryStub() repo.name = name repo.id = name repo.proxy = proxy repo.proxy_username = proxy_username repo.proxy_password = proxy_password repo.ssl_verify = ssl_verify repo.nocache = nocache repo.baseurl.append(url) if inc: for pkg in inc: self.incpkgs[pkg] = name if exc: for pkg in exc: self.excpkgs[pkg] = name # check LICENSE files if not rpmmisc.checkRepositoryEULA(name, repo): msger.warning('skip repo:%s for failed EULA confirmation' % name) return None if mirrorlist: repo.mirrorlist = mirrorlist # Enable gpg check for verifying corrupt packages repo.gpgcheck = 1 if priority is not None: # priority 0 has issue in RepoInfo.setPriority repo.priority = priority + 1 try: repo_info = zypp.RepoInfo() repo_info.setAlias(repo.name) repo_info.setName(repo.name) repo_info.setEnabled(repo.enabled) repo_info.setAutorefresh(repo.autorefresh) repo_info.setKeepPackages(repo.keeppackages) baseurl = zypp.Url(repo.baseurl[0]) if not ssl_verify: baseurl.setQueryParam("ssl_verify", "no") if proxy: scheme, host, path, parm, query, frag = urlparse.urlparse(proxy) proxyinfo = host.split(":") host = proxyinfo[0] port = "80" if len(proxyinfo) > 1: port = proxyinfo[1] if proxy.startswith("socks") and len(proxy.rsplit(':', 1)) == 2: host = proxy.rsplit(':', 1)[0] port = proxy.rsplit(':', 1)[1] baseurl.setQueryParam ("proxy", host) baseurl.setQueryParam ("proxyport", port) repo.baseurl[0] = baseurl.asCompleteString() self.repos.append(repo) repo_info.addBaseUrl(baseurl) if repo.priority is not None: repo_info.setPriority(repo.priority) # this hack is used to change zypp credential file location # the default one is $HOME/.zypp, which cause conflicts when # installing some basic packages, and the location doesn't # have any interface actually, so use a tricky way anyway homedir = None if 'HOME' in os.environ: homedir = os.environ['HOME'] os.environ['HOME'] = '/' else: os.environ['HOME'] = '/' self.repo_manager.addRepository(repo_info) # save back the $HOME env if homedir: os.environ['HOME'] = homedir else: del os.environ['HOME'] self.__build_repo_cache(name) except RuntimeError, e: raise CreatorError(str(e))
def get_metadata_from_repos(repos, cachedir): my_repo_metadata = [] for repo in repos: reponame = repo['name'] baseurl = repo['baseurl'] if 'proxy' in repo: proxy = repo['proxy'] else: proxy = get_proxy_for(baseurl) proxies = None if proxy: proxies = {str(baseurl.split(":")[0]):str(proxy)} makedirs(os.path.join(cachedir, reponame)) url = os.path.join(baseurl, "repodata/repomd.xml") filename = os.path.join(cachedir, reponame, 'repomd.xml') repomd = myurlgrab(url, filename, proxies) try: root = xmlparse(repomd) except SyntaxError: raise CreatorError("repomd.xml syntax error.") ns = root.getroot().tag ns = ns[0:ns.rindex("}")+1] filepaths = {} checksums = {} sumtypes = {} for elm in root.getiterator("%sdata" % ns): if elm.attrib["type"] == "patterns": filepaths['patterns'] = elm.find("%slocation" % ns).attrib['href'] checksums['patterns'] = elm.find("%sopen-checksum" % ns).text sumtypes['patterns'] = elm.find("%sopen-checksum" % ns).attrib['type'] break for elm in root.getiterator("%sdata" % ns): if elm.attrib["type"] in ("group_gz", "group"): filepaths['comps'] = elm.find("%slocation" % ns).attrib['href'] checksums['comps'] = elm.find("%sopen-checksum" % ns).text sumtypes['comps'] = elm.find("%sopen-checksum" % ns).attrib['type'] break primary_type = None for elm in root.getiterator("%sdata" % ns): if elm.attrib["type"] in ("primary_db", "primary"): primary_type = elm.attrib["type"] filepaths['primary'] = elm.find("%slocation" % ns).attrib['href'] checksums['primary'] = elm.find("%sopen-checksum" % ns).text sumtypes['primary'] = elm.find("%sopen-checksum" % ns).attrib['type'] break if not primary_type: continue for item in ("primary", "patterns", "comps"): if item not in filepaths: filepaths[item] = None continue if not filepaths[item]: continue filepaths[item] = _get_metadata_from_repo(baseurl, proxies, cachedir, reponame, filepaths[item], sumtypes[item], checksums[item]) """ Get repo key """ try: repokey = _get_metadata_from_repo(baseurl, proxies, cachedir, reponame, "repodata/repomd.xml.key") except CreatorError: repokey = None msger.debug("\ncan't get %s/%s" % (baseurl, "repodata/repomd.xml.key")) my_repo_metadata.append({"name":reponame, "baseurl":baseurl, "repomd":repomd, "primary":filepaths['primary'], "cachedir":cachedir, "proxies":proxies, "patterns":filepaths['patterns'], "comps":filepaths['comps'], "repokey":repokey}) return my_repo_metadata
file_showed = True break if not file_showed: f = open(savepath) msger.raw(f.read()) f.close() msger.pause() # when proxy needed, make urllib2 follow it proxy = repo.proxy proxy_username = repo.proxy_username proxy_password = repo.proxy_password if not proxy: proxy = get_proxy_for(repo.baseurl[0]) handlers = [] auth_handler = u2.HTTPBasicAuthHandler(u2.HTTPPasswordMgrWithDefaultRealm()) u2opener = None if proxy: if proxy_username: proxy_netloc = urlparse.urlsplit(proxy).netloc if proxy_password: proxy_url = 'http://%s:%s@%s' % (proxy_username, proxy_password, proxy_netloc) else: proxy_url = 'http://%s@%s' % (proxy_username, proxy_netloc) else: proxy_url = proxy proxy_support = u2.ProxyHandler({'http': proxy_url,
def addRepository(self, name, url = None, mirrorlist = None, proxy = None, proxy_username = None, proxy_password = None, inc = None, exc = None, ssl_verify = True, cost=None, priority=None): # TODO: Handle cost attribute for repos if not self.repo_manager: self.__initialize_repo_manager() if not proxy and url: proxy = get_proxy_for(url) repo = RepositoryStub() repo.name = name repo.id = name repo.proxy = proxy repo.proxy_username = proxy_username repo.proxy_password = proxy_password repo.ssl_verify = ssl_verify repo.baseurl.append(url) if inc: for pkg in inc: self.incpkgs[pkg] = name if exc: for pkg in exc: self.excpkgs[pkg] = name # check LICENSE files if not rpmmisc.checkRepositoryEULA(name, repo): msger.warning('skip repo:%s for failed EULA confirmation' % name) return None if mirrorlist: repo.mirrorlist = mirrorlist # Enable gpg check for verifying corrupt packages repo.gpgcheck = 1 if priority: repo.priority = priority self.repos.append(repo) try: repo_info = zypp.RepoInfo() repo_info.setAlias(repo.name) repo_info.setName(repo.name) repo_info.setEnabled(repo.enabled) repo_info.setAutorefresh(repo.autorefresh) repo_info.setKeepPackages(repo.keeppackages) baseurl = zypp.Url(repo.baseurl[0]) if not ssl_verify: baseurl.setQueryParam("ssl_verify", "no") if proxy: scheme, host, path, parm, query, frag = urlparse.urlparse(proxy) proxyinfo = host.split(":") host = proxyinfo[0] port = "80" if len(proxyinfo) > 1: port = proxyinfo[1] if proxy.startswith("socks") and len(proxy.rsplit(':', 1)) == 2: host = proxy.rsplit(':', 1)[0] port = proxy.rsplit(':', 1)[1] baseurl.setQueryParam ("proxy", host) baseurl.setQueryParam ("proxyport", port) repo_info.addBaseUrl(baseurl) if repo.priority: repo_info.setPriority(repo.priority) self.repo_manager.addRepository(repo_info) self.__build_repo_cache(name) except RuntimeError, e: raise CreatorError(str(e))
def test_proxy(self): proxy.set_proxies('http://proxy.some.com:11', '1.2.3.4') self.assertEqual(proxy.get_proxy_for('http://1.2.3.4'), None) self.assertEqual(proxy.get_proxy_for('http://download.tizen.org'), 'http://proxy.some.com:11') proxy.set_proxies('http://proxy.some.com:11', 'download.am.org') self.assertEqual(proxy.get_proxy_for('http://download.am.org'), None) self.assertEqual(proxy.get_proxy_for('https://download.am.org'), None) self.assertEqual(proxy.get_proxy_for('http://download.tizen.org'), 'http://proxy.some.com:11') proxy.set_proxies('http://proxy.some.com:11', '1.2.3.0/24') self.assertEqual(proxy.get_proxy_for('http://1.2.3.4'), None) self.assertEqual(proxy.get_proxy_for('http://1.2.3.0'), None) self.assertEqual(proxy.get_proxy_for('http://1.2.3.255'), None) self.assertEqual(proxy.get_proxy_for('http://download.tizen.org'), 'http://proxy.some.com:11') proxy.set_proxies('http://proxy.some.com:11', '.hello.com') self.assertEqual(proxy.get_proxy_for('http://linux.hello.com'), None) self.assertEqual(proxy.get_proxy_for('http://linux.hello.com.org'), 'http://proxy.some.com:11')
def addRepository(self, name, url = None, mirrorlist = None, proxy = None, proxy_username = None, proxy_password = None, inc = None, exc = None, ssl_verify = True, cost=None, priority=None): # TODO: Handle cost attribute for repos if not self.repo_manager: self.__initialize_repo_manager() if not proxy and url: proxy = get_proxy_for(url) repo = RepositoryStub() repo.name = name repo.id = name repo.proxy = proxy repo.proxy_username = proxy_username repo.proxy_password = proxy_password repo.ssl_verify = ssl_verify repo.baseurl.append(url) if inc: for pkg in inc: self.incpkgs[pkg] = name if exc: for pkg in exc: self.excpkgs[pkg] = name # check LICENSE files if not rpmmisc.checkRepositoryEULA(name, repo): msger.warning('skip repo:%s for failed EULA confirmation' % name) return None if mirrorlist: repo.mirrorlist = mirrorlist # Enable gpg check for verifying corrupt packages repo.gpgcheck = 0 if priority: repo.priority = priority try: repo_info = zypp.RepoInfo() repo_info.setAlias(repo.name) repo_info.setName(repo.name) repo_info.setEnabled(repo.enabled) repo_info.setGpgCheck(repo.gpgcheck) repo_info.setAutorefresh(repo.autorefresh) repo_info.setKeepPackages(repo.keeppackages) baseurl = zypp.Url(repo.baseurl[0]) if not ssl_verify: baseurl.setQueryParam("ssl_verify", "no") if proxy: scheme, host, path, parm, query, frag = urllib.parse.urlparse(proxy) proxyinfo = host.split(":") host = proxyinfo[0] port = "80" if len(proxyinfo) > 1: port = proxyinfo[1] if proxy.startswith("socks") and len(proxy.rsplit(':', 1)) == 2: host = proxy.rsplit(':', 1)[0] port = proxy.rsplit(':', 1)[1] baseurl.setQueryParam ("proxy", host) baseurl.setQueryParam ("proxyport", port) repo.baseurl[0] = baseurl.asCompleteString() self.repos.append(repo) repo_info.addBaseUrl(baseurl) if repo.priority: repo_info.setPriority(repo.priority) self.repo_manager.addRepository(repo_info) self.__build_repo_cache(name) except RuntimeError as e: raise CreatorError(str(e)) msger.verbose('repo: %s was added' % name) return repo
def addRepository(self, name, url=None, mirrorlist=None, proxy=None, proxy_username=None, proxy_password=None, inc=None, exc=None, ssl_verify=True, nocache=False, cost=None, priority=None): # TODO: Handle cost attribute for repos if not self.repo_manager: self.__initialize_repo_manager() if not proxy and url: proxy = get_proxy_for(url) repo = RepositoryStub() repo.name = name repo.id = name repo.proxy = proxy repo.proxy_username = proxy_username repo.proxy_password = proxy_password repo.ssl_verify = ssl_verify repo.nocache = nocache repo.baseurl.append(url) if inc: for pkg in inc: self.incpkgs[pkg] = name if exc: for pkg in exc: self.excpkgs[pkg] = name # check LICENSE files if not rpmmisc.checkRepositoryEULA(name, repo): msger.warning('skip repo:%s for failed EULA confirmation' % name) return None if mirrorlist: repo.mirrorlist = mirrorlist # Enable gpg check for verifying corrupt packages repo.gpgcheck = 1 if priority is not None: # priority 0 has issue in RepoInfo.setPriority repo.priority = priority + 1 try: repo_info = zypp.RepoInfo() repo_info.setAlias(repo.name) repo_info.setName(repo.name) repo_info.setEnabled(repo.enabled) repo_info.setAutorefresh(repo.autorefresh) repo_info.setKeepPackages(repo.keeppackages) baseurl = zypp.Url(repo.baseurl[0]) if not ssl_verify: baseurl.setQueryParam("ssl_verify", "no") if proxy: scheme, host, path, parm, query, frag = urlparse.urlparse( proxy) proxyinfo = host.split(":") host = proxyinfo[0] port = "80" if len(proxyinfo) > 1: port = proxyinfo[1] if proxy.startswith("socks") and len(proxy.rsplit(':', 1)) == 2: host = proxy.rsplit(':', 1)[0] port = proxy.rsplit(':', 1)[1] baseurl.setQueryParam("proxy", host) baseurl.setQueryParam("proxyport", port) repo.baseurl[0] = baseurl.asCompleteString() self.repos.append(repo) repo_info.addBaseUrl(baseurl) if repo.priority is not None: repo_info.setPriority(repo.priority) # this hack is used to change zypp credential file location # the default one is $HOME/.zypp, which cause conflicts when # installing some basic packages, and the location doesn't # have any interface actually, so use a tricky way anyway homedir = None if 'HOME' in os.environ: homedir = os.environ['HOME'] os.environ['HOME'] = '/' else: os.environ['HOME'] = '/' self.repo_manager.addRepository(repo_info) # save back the $HOME env if homedir: os.environ['HOME'] = homedir else: del os.environ['HOME'] self.__build_repo_cache(name) except RuntimeError, e: raise CreatorError(str(e))