[anaconda 3/3] Add repo --install support to DNF (#1119867)

Martin Kolman mkolman at redhat.com
Mon Jul 28 08:12:14 UTC 2014



----- Original Message -----
> From: "Brian C. Lane" <bcl at redhat.com>
> To: anaconda-patches at lists.fedorahosted.org
> Sent: Friday, July 25, 2014 3:34:13 AM
> Subject: [anaconda 3/3] Add repo --install support to DNF (#1119867)
> 
> _writeDNFRepo is mostly a copy of _writeYumRepo because there are slight
> differences in the options supported, and because it may diverge further
> in the futute.
         ^^^^^^ future ?
> ---
>  pyanaconda/packaging/dnfpayload.py | 68
>  ++++++++++++++++++++++++++++++++++++++
>  1 file changed, 68 insertions(+)
> 
> diff --git a/pyanaconda/packaging/dnfpayload.py
> b/pyanaconda/packaging/dnfpayload.py
> index 64f7433..07d1bf0 100644
> --- a/pyanaconda/packaging/dnfpayload.py
> +++ b/pyanaconda/packaging/dnfpayload.py
> @@ -19,6 +19,7 @@
>  #
>  # Red Hat Author(s): Ales Kozumplik <akozumpl at redhat.com>
>  #
> +import os
>  
>  from blivet.size import Size
>  from pyanaconda.flags import flags
> @@ -39,6 +40,7 @@ import pyanaconda.localization
>  import pyanaconda.packaging as packaging
>  import sys
>  import time
> +from pyanaconda.iutil import ProxyString, ProxyStringError
>  
>  log = logging.getLogger("packaging")
>  
> @@ -537,6 +539,10 @@ class DNFPayload(packaging.PackagePayload):
>          process.join()
>          self._base.close()
>  
> +    def getRepo(self, repo_id):
> +        """ Return the yum repo object. """
> +        return self._base.repos[repo_id]
> +
>      def isRepoEnabled(self, repo_id):
>          try:
>              return self._base.repos[repo_id].enabled
> @@ -629,3 +635,65 @@ class DNFPayload(packaging.PackagePayload):
>                  self.disableRepo(id_)
>              elif constants.isFinal and 'rawhide' in id_:
>                  self.disableRepo(id_)
> +
> +    def _writeDNFRepo(self, repo, repo_path):
> +        """ Write a repo object to a DNF repo.conf file
> +
> +            :param repo: DNF repository object
> +            :param string repo_path: Path to write the repo to
> +            :raises: PayloadSetupError if the repo doesn't have a url
> +        """
> +        with open(repo_path, "w") as f:
> +            f.write("[%s]\n" % repo.id)
> +            f.write("name=%s\n" % repo.id)
> +            if self.isRepoEnabled(repo.id):
> +                f.write("enabled=1\n")
> +            else:
> +                f.write("enabled=0\n")
> +
> +            if repo.mirrorlist:
> +                f.write("mirrorlist=%s\n" % repo.mirrorlist)
> +            elif repo.metalink:
> +                f.write("metalink=%s\n" % repo.metalink)
> +            elif repo.baseurl:
> +                f.write("baseurl=%s\n" % repo.baseurl[0])
> +            else:
> +                f.close()
> +                os.unlink(repo_path)
> +                raise packaging.PayloadSetupError("repo %s has no baseurl,
> mirrorlist or metalink", repo.id)
> +
> +            # kickstart repo modifiers
> +            ks_repo = self.getAddOnRepo(repo.id)
> +            if ks_repo:
> +                if ks_repo.noverifyssl:
> +                    f.write("sslverify=0\n")
> +
> +                if ks_repo.proxy:
> +                    try:
> +                        proxy = ProxyString(ks_repo.proxy)
> +                        f.write("proxy=%s\n" % proxy.url)
> +                    except ProxyStringError as e:
> +                        log.error("Failed to parse proxy for
> _writeInstallConfig %s: %s",
> +                                  ks_repo.proxy, e)
> +
> +                if ks_repo.cost:
> +                    f.write("cost=%d\n" % ks_repo.cost)
> +
> +    def postInstall(self):
> +        """ Perform post-installation tasks. """
> +        # Write selected kickstart repos to target system
> +        for ks_repo in (ks for ks in (self.getAddOnRepo(r) for r in
> self.addOns) if ks.install):
> +            try:
> +                repo = self.getRepo(ks_repo.name)
> +                if not repo:
> +                    continue
> +            except (dnf.exceptions.RepoError, KeyError):
> +                continue
> +            repo_path = pyanaconda.iutil.getSysroot() +
> "/etc/yum.repos.d/%s.repo" % repo.id
> +            try:
> +                log.info("Writing %s.repo to target system.", repo.id)
> +                self._writeDNFRepo(repo, repo_path)
> +            except packaging.PayloadSetupError as e:
> +                log.error(e)
> +
> +        super(DNFPayload, self).postInstall()
> --
> 1.9.3
> 
> _______________________________________________
> anaconda-patches mailing list
> anaconda-patches at lists.fedorahosted.org
> https://lists.fedorahosted.org/mailman/listinfo/anaconda-patches
> 


More information about the anaconda-patches mailing list