[elbe-devel] [PATCH v2] Add includepkgs as debootstrapvariant attribute

Manuel Traut manut at linutronix.de
Tue Mar 12 13:31:39 CET 2019


On 12:58 Mon 04 Mar     , bage at linutronix.de wrote:
> From: Bastian Germann <bage at linutronix.de>
> 
> In some situations, you need additional packages during debootstrap.
> Add an attribute includepkgs to the debootstrapvariant element and apply its
> contents as debootstrap --include="...".
> 
> Add checks and user errors for the following cases:
> With debootstrapvariant minbase and additional repository keys gnupg is needed.
> With HTTPS mirrors (not primary) apt-transport-https is needed.
> 
> Closes issue #200.
> 
> Signed-off-by: Bastian Germann <bage at linutronix.de>
Reviewed-by: Manuel Traut <manut at linutronix.de>

and applied to devel/elbe-3.0 - thanks!

> ---
>  elbepack/rfs.py      | 14 +++++++++++---
>  elbepack/validate.py | 32 +++++++++++++++++++++++++++++++-
>  schema/dbsfed.xsd    |  8 +++++++-
>  3 files changed, 49 insertions(+), 5 deletions(-)
> 
> diff --git a/elbepack/rfs.py b/elbepack/rfs.py
> index eec4e6a0..cb72aba0 100644
> --- a/elbepack/rfs.py
> +++ b/elbepack/rfs.py
> @@ -124,9 +124,17 @@ class BuildEnv (object):
>  
>          if self.xml.has("target/debootstrapvariant"):
>              bootstrapvariant = self.xml.text("target/debootstrapvariant")
> -            self.log.printo('NOTE: use bootstrap variant "%s".' % (
> -                bootstrapvariant))
> -            strapcmd = 'debootstrap --variant="%s"' % (bootstrapvariant)
> +            includepkgs = self.xml.node("target/debootstrapvariant").et.get("includepkgs")
> +            if includepkgs:
> +                self.log.printo('NOTE: use bootstrap variant '
> +                    '"%s" with additional includes: "%s".' % (
> +                    bootstrapvariant, includepkgs))
> +                strapcmd = 'debootstrap --variant="%s" --include="%s"' % (
> +                    bootstrapvariant, includepkgs)
> +            else:
> +                self.log.printo('NOTE: use bootstrap variant "%s".' % (
> +                    bootstrapvariant))
> +                strapcmd = 'debootstrap --variant="%s"' % (bootstrapvariant)
>          else:
>              self.log.printo('use bootstrap no variant.')
>              strapcmd = 'debootstrap'
> diff --git a/elbepack/validate.py b/elbepack/validate.py
> index c5604372..d03dd7ef 100644
> --- a/elbepack/validate.py
> +++ b/elbepack/validate.py
> @@ -6,6 +6,7 @@
>  # SPDX-License-Identifier: GPL-3.0-or-later
>  
>  import sys
> +
>  from lxml import etree
>  from lxml.etree import XMLParser, parse
>  
> @@ -20,7 +21,7 @@ def validate_xml(fname):
>          xml = parse(fname, parser=parser)
>  
>          if schema.validate(xml):
> -            return []
> +            return validate_xml_content(xml)
>      except etree.XMLSyntaxError:
>          return ["XML Parse error\n" + str(sys.exc_info()[1])]
>      except BaseException:
> @@ -41,3 +42,32 @@ def validate_xml(fname):
>                        "Run 'elbe preprocess' first!\n")
>  
>      return errors
> +
> +def validate_xml_content(xml):
> +    errors = []
> +
> +    dbsv = xml.find("/target/debootstrapvariant")
> +
> +    if (dbsv is not None and "minbase" in dbsv.text
> +            and "gnupg" not in dbsv.get("includepkgs", "")
> +            and xml.find("/project/mirror/url-list/url/key") is not None):
> +
> +        errors.append("\nThe XML contains a custom mirror key. "
> +                      "Use debootstrapvariant's attribute includepkgs "
> +                      "to make gnupg available in debootstrap.\n")
> +
> +    https = xml.findtext("/project/mirror/primary_proto", "").lower() == "https"
> +
> +    if not https and (dbsv is None
> +            or "apt-transport-https" not in dbsv.get("includepkgs", "")):
> +        for url in xml.findall("/project/mirror/url-list/url"):
> +            b = url.findtext("binary", "")
> +            s = url.findtext("source", "")
> +            if b.startswith("https") or s.startswith("https"):
> +                errors.append("\nThe XML contains an HTTPS mirror. "
> +                              "Use debootstrapvariant's attribute includepkgs "
> +                              "to make apt-transport-https available in "
> +                              "debootstrap.\n")
> +                break
> +
> +    return errors
> diff --git a/schema/dbsfed.xsd b/schema/dbsfed.xsd
> index 4740a436..ccab23be 100644
> --- a/schema/dbsfed.xsd
> +++ b/schema/dbsfed.xsd
> @@ -885,7 +885,13 @@
>      </annotation>
>      <simpleContent>
>        <extension base="rfs:debootstrapvarianttype_restriction">
> -        <attribute ref="xml:base"/>
> +        <attribute name="includepkgs" type="string" use="optional">
> +          <annotation>
> +            <documentation>
> +              A comma-separated list of additional packages at debootstrap runtime.
> +            </documentation>
> +          </annotation>
> +        </attribute>
>        </extension>
>      </simpleContent>
>    </complexType>
> -- 
> 2.11.0
> 
> 
> _______________________________________________
> elbe-devel mailing list
> elbe-devel at linutronix.de
> https://lists.linutronix.de/mailman/listinfo/elbe-devel



More information about the elbe-devel mailing list