[elbe-devel] [PATCH 2/3] setrepo: initial version
Torben Hohn
torben.hohn at linutronix.de
Fri Sep 21 11:13:22 CEST 2018
On Fri, Sep 14, 2018 at 03:06:24PM +0200, Manuel Traut wrote:
> a new subcommand to replace the mirror section of a xml with a single
> repo. It's designed to be used for mirrors that have been built with cd2aptly.
>
> Signed-off-by: Manuel Traut <manut at linutronix.de>
looks good.
> ---
> debian/elbe.install | 1 +
> docs/elbe-setrepo.txt | 68 ++++++++++++++++++++++++++++++++++++
> elbepack/commands/setrepo.py | 57 ++++++++++++++++++++++++++++++
> elbepack/elbexml.py | 33 +++++++++++++++++
> 4 files changed, 159 insertions(+)
> create mode 100644 docs/elbe-setrepo.txt
> create mode 100644 elbepack/commands/setrepo.py
>
> diff --git a/debian/elbe.install b/debian/elbe.install
> index 3637e585..e961dfa5 100644
> --- a/debian/elbe.install
> +++ b/debian/elbe.install
> @@ -9,6 +9,7 @@
> ./usr/lib/python2.*/*-packages/elbepack/commands/pkgdiff.py
> ./usr/lib/python2.*/*-packages/elbepack/commands/preprocess.py
> ./usr/lib/python2.*/*-packages/elbepack/commands/remove_sign.py
> +./usr/lib/python2.*/*-packages/elbepack/commands/setrepo.py
> ./usr/lib/python2.*/*-packages/elbepack/commands/setsel.py
> ./usr/lib/python2.*/*-packages/elbepack/commands/show.py
> ./usr/lib/python2.*/*-packages/elbepack/commands/sign.py
> diff --git a/docs/elbe-setrepo.txt b/docs/elbe-setrepo.txt
> new file mode 100644
> index 00000000..46eadd99
> --- /dev/null
> +++ b/docs/elbe-setrepo.txt
> @@ -0,0 +1,68 @@
> +elbe-setrepo(1)
> +===============
> +
> +NAME
> +----
> +elbe-setrepo - Replace the mirror section with a single repository
> +
> +SYNOPSIS
> +--------
> +[verse]
> +'elbe setrepo' [options] <xmlfile> <primary_host>
> +
> +
> +DESCRIPTION
> +-----------
> +This command exchanges the mirror section of the initvm and target section with
> +the given repository.
> +
> +It can be used to do 'offline rebuilds' with a repo generated by elbe-cd2aptly.
> +
> +OPTIONS
> +-------
> +--initvmpath::
> + defaults to '/debian' it is the primary_path inserted into the intivm/mirror
> + section.
> +
> +--targetpath::
> + defaults to '/debian' it is the primary_path inserted into the project/mirror
> + section.
> +
> +--protocol::
> + defaults to 'http' it is the primary_proto that is inserted.
> +
> +--auth::
> + normally the noauth tag is set automatically, this can be skipped by using
> + the auth flag.
> +
> +--no-dsc-on-mirror::
> + the specified mirror doesn't contain debian sources (dsc).
> +
> +<xmlfile>::
> + The xmlfile to be modified.
> +
> +<primary_host>::
> + The hostname inserted as primary_host into the initvm and projects mirror
> + sections.
> +
> +EXAMPLES
> +--------
> +
> +* build a repo from a set of cdroms
> ++
> +------------
> +$ elbe cd2aptly build-*/bin-cdrom.iso myrepo
> +------------
> +
> +* host the repo
> ++
> +------------
> +$ cd myrepo
> +$ python -m SimpleHTTPServer &
> +$ elbe setrepo --initvmpath=/ --targetpath=/ source.xml LOCALMACHINE:8000
> +------------
> +
> +
> +ELBE
> +----
> +Part of the linkgit:elbe[1] suite
> diff --git a/elbepack/commands/setrepo.py b/elbepack/commands/setrepo.py
> new file mode 100644
> index 00000000..8e0665d2
> --- /dev/null
> +++ b/elbepack/commands/setrepo.py
> @@ -0,0 +1,57 @@
> +# ELBE - Debian Based Embedded Rootfilesystem Builder
> +# Copyright (c) 2016-2017 Manuel Traut <manut at linutronix.de>
> +#
> +# SPDX-License-Identifier: GPL-3.0-or-later
> +
> +from __future__ import print_function
> +
> +import sys
> +
> +from elbepack.elbexml import ElbeXML
> +from optparse import OptionParser
> +
> +
> +def run_command(argv):
> +
> + oparser = OptionParser(
> + usage="usage: %prog setrepo [options] <xmlfile> <host>")
> + oparser.add_option("--initvmpath", help="path for initvm mirror",
> + dest="initvmpath", default="debian")
> + oparser.add_option("--targetpath", help="path for target mirror",
> + dest="targetpath", default="debian")
> + oparser.add_option("--protocol", help="protocol to access the repo",
> + dest="protocol", default="http")
> + oparser.add_option("--no-dsc-on-mirror", action="store_true",
> + help="mirror doesn't contain debian src packages",
> + dest="nodsc", default=False)
> + oparser.add_option("--auth", help="don't set the noauth flag",
> + dest="auth", default=False, action="store_true")
> + (opt, args) = oparser.parse_args(argv)
> +
> + if len(args) < 2:
> + print("Wrong number of arguments")
> + oparser.print_help()
> + sys.exit(20)
> +
> + try:
> + xml = ElbeXML(args[0])
> + except Exception as e:
> + print("Error reading xml file: %s" % str(e))
> + sys.exit(20)
> +
> + try:
> + xml.set_repo(args[1],
> + opt.initvmpath,
> + opt.targetpath,
> + opt.protocol,
> + opt.auth,
> + not opt.nodsc)
> + except Exception as e:
> + print("Error setting repo %s: %s" % (args[1], str(e)))
> + sys.exit(20)
> +
> + try:
> + xml.xml.write(args[0])
> + except BaseException:
> + print("Unable to write new xml file")
> + sys.exit(20)
> diff --git a/elbepack/elbexml.py b/elbepack/elbexml.py
> index 4eb26b9f..d935f4f2 100644
> --- a/elbepack/elbexml.py
> +++ b/elbepack/elbexml.py
> @@ -119,6 +119,39 @@ class ElbeXML(object):
>
> return mirror.replace("LOCALMACHINE", "10.0.2.2")
>
> + def _set_repo(self, project, mirror, path, proto='http', auth=False, src=True):
> + m = project.node("mirror")
> + m.clear() # this also clears url-list
> + h = m.ensure_child("primary_host")
> + h.set_text(mirror)
> + p = m.ensure_child("primary_path")
> + p.set_text(path)
> + x = m.ensure_child("primary_proto")
> + x.set_text(proto)
> + if not auth:
> + project.ensure_child("noauth")
> + if src:
> + m.ensure_child("url-list")
> + ul = m.node("url-list")
> + ul.ensure_child("url")
> + url = ul.node("url")
> + url.ensure_child("source")
> + s = url.node("source")
> + s.set_text("%s://%s/%s %s main" % (proto,
> + mirror,
> + path,
> + project.text("suite")))
> +
> + def set_repo(self, mirror, inintvmpath, targetpath, proto='http',
> + auth=False, src=True):
> +
> + i = self.node("initvm")
> + if i:
> + self._set_repo(i, mirror, inintvmpath, proto, auth)
> + t = self.prj
> + if t:
> + self._set_repo(t, mirror, targetpath, proto, auth, src)
> +
> # XXX: maybe add cdrom path param ?
> def create_apt_sources_list(self, build_sources=False):
> if self.prj is None:
> --
> 2.19.0.rc2
>
--
Torben Hohn
Linutronix GmbH | Bahnhofstrasse 3 | D-88690 Uhldingen-Mühlhofen
Phone: +49 7556 25 999 18; Fax.: +49 7556 25 999 99
Hinweise zum Datenschutz finden Sie hier (Informations on data privacy
can be found here): https://linutronix.de/kontakt/Datenschutz.php
Linutronix GmbH | Firmensitz (Registered Office): Uhldingen-Mühlhofen |
Registergericht (Registration Court): Amtsgericht Freiburg i.Br., HRB700
806 | Geschäftsführer (Managing Directors): Heinz Egger, Thomas Gleixner
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 488 bytes
Desc: not available
URL: <http://lists.linutronix.de/pipermail/elbe-devel/attachments/20180921/a26ee7cb/attachment.sig>
More information about the elbe-devel
mailing list