[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