[elbe-devel] [PATCH v6 1/5] Add optional mirror for host architecture
Bastian Germann
bage at linutronix.de
Wed Jul 22 09:42:07 CEST 2020
Am 22.07.20 um 08:59 schrieb Torben Hohn:
> From: Kory Maincent <kory.maincent at bootlin.com>
>
> If the primary mirror does not contain the packages for both target and host
> architecture the build_host_sysroot process fails.
>
> This patch adds support for describing in the XML configuration an additional
> optional mirror containing packages for the host architecture, like:
> <mirror>
> <host>http://archive.ubuntu.com/ubuntu</host>
> </mirror>
>
> It also adds the architecture type in the sources.list file to avoid issues
> with apt-get update.
>
> Signed-off-by: Kory Maincent <kory.maincent at bootlin.com>
> [torbenh: use xml and default mechanism to determine host sdk architecture
> rename hostsdk variable to hostsysroot
> make hostsyroot an attribute of BuildEnv]
> Signed-off-by: Torben Hohn <torben.hohn at linutronix.de>
Reviewed-by: Bastian Germann <bage at linutronix.de>
> ---
> elbepack/elbeproject.py | 3 ++-
> elbepack/elbexml.py | 51 +++++++++++++++++++++++++----------------
> elbepack/rfs.py | 8 ++++---
> elbepack/xmldefaults.py | 3 ++-
> schema/dbsfed.xsd | 7 ++++++
> 5 files changed, 47 insertions(+), 25 deletions(-)
>
> diff --git a/elbepack/elbeproject.py b/elbepack/elbeproject.py
> index 122399cd2..cd5020dc7 100644
> --- a/elbepack/elbeproject.py
> +++ b/elbepack/elbeproject.py
> @@ -324,7 +324,8 @@ class ElbeProject (object):
> self.host_sysrootenv = BuildEnv(self.xml,
> hostsysrootpath,
> clean=True,
> - arch="amd64")
> + arch="amd64",
> + hostsysroot=True)
> # Import keyring
> self.host_sysrootenv.import_keys()
> logging.info("Keys imported")
> diff --git a/elbepack/elbexml.py b/elbepack/elbexml.py
> index 6496e442a..bcfd2054a 100644
> --- a/elbepack/elbexml.py
> +++ b/elbepack/elbexml.py
> @@ -134,13 +134,16 @@ class ElbeXML(object):
>
> return mirror.replace("LOCALMACHINE", "10.0.2.2")
>
> - def get_primary_mirror(self, cdrompath, initvm=True):
> + def get_primary_mirror(self, cdrompath, initvm=True, hostsysroot=False):
> if self.prj.has("mirror/primary_host"):
> m = self.prj.node("mirror")
>
> - mirror = m.text("primary_proto") + "://"
> - mirror += m.text("primary_host") + "/"
> - mirror += m.text("primary_path")
> + if hostsysroot and self.prj.has("mirror/host"):
> + mirror = m.text("host")
> + else:
> + mirror = m.text("primary_proto") + "://"
> + mirror += m.text("primary_host") + "/"
> + mirror += m.text("primary_path")
>
> elif self.prj.has("mirror/cdrom") and cdrompath:
> mirror = "file://%s" % cdrompath
> @@ -148,40 +151,48 @@ class ElbeXML(object):
> return replace_localmachine(mirror, initvm)
>
> # XXX: maybe add cdrom path param ?
> - def create_apt_sources_list(self, build_sources=False, initvm=True):
> + def create_apt_sources_list(self, build_sources=False, initvm=True, hostsysroot=False):
> if self.prj is None:
> return "# No Project"
>
> if not self.prj.has("mirror") and not self.prj.has("mirror/cdrom"):
> return "# no mirrors configured"
>
> - noauth = ""
> + options = []
> if self.prj.has("noauth"):
> - noauth = "[trusted=yes] "
> + options.append("trusted=yes")
>
> - mirror = ""
> + if hostsysroot:
> + arch = self.text("project/buildimage/sdkarch", key="sdkarch")
> + else:
> + arch = self.text("project/buildimage/arch", key="arch")
> +
> + options.append("arch=%s" % arch)
> +
> + mirror = []
> if self.prj.has("mirror/primary_host"):
> - mirror += "deb " + noauth + self.get_primary_mirror(None)
> - mirror += " " + self.prj.text("suite") + " main\n"
> + pmirror = self.get_primary_mirror(None, hostsysroot=hostsysroot)
> + mirror.append("deb [%s] %s %s main" %
> + (' '.join(options), pmirror, self.prj.text("suite")))
>
> if build_sources:
> - mirror += "deb-src " + noauth + self.get_primary_mirror(None)
> - mirror += " " + self.prj.text("suite") + " main\n"
> + mirror.append("deb-src [%s] %s %s main" %
> + (' '.join(options), pmirror, self.prj.text("suite")))
>
> - if self.prj.has("mirror/url-list"):
> + if self.prj.has("mirror/url-list") and not hostsysroot:
> for url in self.prj.node("mirror/url-list"):
> if url.has("binary"):
> - mirror += "deb " + noauth + \
> - url.text("binary").strip() + "\n"
> + mirror.append("deb [%s] %s" %
> + (' '.join(options), url.text("binary").strip()))
> if url.has("source"):
> - mirror += "deb-src " + noauth + \
> - url.text("source").strip() + "\n"
> + mirror.append("deb-src [%s] %s" %
> + (' '.join(options), url.text("source").strip()))
>
> if self.prj.has("mirror/cdrom"):
> - mirror += "deb copy:///cdrom/targetrepo %s main added\n" % (
> - self.prj.text("suite"))
> + mirror.append("deb copy:///cdrom/targetrepo %s main added" %
> + (self.prj.text("suite")))
>
> - return replace_localmachine(mirror, initvm)
> + return replace_localmachine('\n'.join(mirror), initvm)
>
> @staticmethod
> def validate_repo(r):
> diff --git a/elbepack/rfs.py b/elbepack/rfs.py
> index ffb62641d..76a6485f8 100644
> --- a/elbepack/rfs.py
> +++ b/elbepack/rfs.py
> @@ -66,7 +66,7 @@ class DebootstrapException (Exception):
> # TODO:py3 Remove object inheritance
> # pylint: disable=useless-object-inheritance
> class BuildEnv (object):
> - def __init__(self, xml, path, build_sources=False, clean=False, arch="default"):
> + def __init__(self, xml, path, build_sources=False, clean=False, arch="default", hostsysroot=False):
>
> # pylint: disable=too-many-arguments
>
> @@ -74,6 +74,7 @@ class BuildEnv (object):
> self.path = path
> self.rpcaptcache = None
> self.arch = arch
> + self.hostsysroot = hostsysroot
>
> self.rfs = BuildImgFs(path, xml.defs["userinterpr"])
>
> @@ -163,7 +164,7 @@ class BuildEnv (object):
> suite = self.xml.prj.text("suite")
>
> primary_mirror = self.xml.get_primary_mirror(
> - self.rfs.fname('/cdrom/targetrepo'))
> + self.rfs.fname('/cdrom/targetrepo'), hostsysroot=self.hostsysroot)
>
> if self.xml.prj.has("mirror/primary_proxy"):
> os.environ["no_proxy"] = "10.0.2.2,localhost,127.0.0.1"
> @@ -299,7 +300,8 @@ class BuildEnv (object):
> self.add_key(key)
>
> def initialize_dirs(self, build_sources=False):
> - mirror = self.xml.create_apt_sources_list(build_sources=build_sources)
> + mirror = self.xml.create_apt_sources_list(build_sources=build_sources,
> + hostsysroot=self.hostsysroot)
>
> if self.rfs.lexists("etc/apt/sources.list"):
> self.rfs.remove("etc/apt/sources.list")
> diff --git a/elbepack/xmldefaults.py b/elbepack/xmldefaults.py
> index ad6f15fe2..7c3c4689b 100644
> --- a/elbepack/xmldefaults.py
> +++ b/elbepack/xmldefaults.py
> @@ -174,7 +174,8 @@ archindep_defaults = {
> "img": "qcow2",
> "mem": "1GiB",
> "swap-size": "0",
> - "max-cpus": "8"
> + "max-cpus": "8",
> + "sdkarch": "amd64",
> }
>
> defaults = {"armel": armel_defaults,
> diff --git a/schema/dbsfed.xsd b/schema/dbsfed.xsd
> index 388529b2d..f068c9ba8 100644
> --- a/schema/dbsfed.xsd
> +++ b/schema/dbsfed.xsd
> @@ -273,6 +273,13 @@
> </documentation>
> </annotation>
> </element>
> + <element name="host" type="rfs:string" minOccurs="0" maxOccurs="1">
> + <annotation>
> + <documentation>
> + Url of the host mirror.
> + </documentation>
> + </annotation>
> + </element>
> <element name="url-list" type="rfs:url-list" minOccurs="0">
> <annotation>
> <documentation>
>
More information about the elbe-devel
mailing list