[elbe-devel] [PATCH 03/13] enable updating pbuilder
Manuel Traut
manuel.traut at linutronix.de
Fri Dec 8 15:04:27 CET 2017
On Tue, Dec 05, 2017 at 04:19:32PM +0100, Torben Hohn wrote:
> On Thu, Nov 30, 2017 at 03:15:05PM +0100, Manuel Traut wrote:
> > If a pbuilder was created the base.tgz can't be updated from outside the
> > initvm.
> >
> > So debootstraping the pbuilder rfs needs to be done if a future build
> > should consider any updated essential packages. To speedup this, the
> > newly introduced 'elbe pbuilder update' subcommand can be used.
> >
> > Signed-off-by: Manuel Traut <manut at linutronix.de>
>
> Reviewed-by: Torben Hohn <torbenh at linutronix.de>
thanks for the review, applied to devel/elbe-3.0
> > ---
> > elbepack/asyncworker.py | 23 +++++++++++++++++++++++
> > elbepack/daemons/soap/esoap.py | 8 ++++++++
> > elbepack/elbeproject.py | 3 +++
> > elbepack/pbuilderaction.py | 31 +++++++++++++++++++++++++++++++
> > elbepack/projectmanager.py | 7 ++++++-
> > elbepack/soapclient.py | 16 ++++++++++++++++
> > 6 files changed, 87 insertions(+), 1 deletion(-)
> >
> > diff --git a/elbepack/asyncworker.py b/elbepack/asyncworker.py
> > index 58e967fd..ac9eb273 100644
> > --- a/elbepack/asyncworker.py
> > +++ b/elbepack/asyncworker.py
> > @@ -216,6 +216,29 @@ class CreatePbuilderJob(AsyncWorkerJob):
> > self.project.log.printo( traceback.format_exc() )
> > db.reset_busy( self.project.builddir, "build_failed" )
> >
> > +class UpdatePbuilderJob(AsyncWorkerJob):
> > + def __init__ (self, project):
> > + AsyncWorkerJob.__init__( self, project )
> > +
> > + def enqueue (self, queue, db):
> > + db.set_busy( self.project.builddir,
> > + [ "empty_project", "needs_build", "has_changes",
> > + "build_done", "build_failed" ] )
> > + self.project.log.printo( "Enqueueing project to update the pbuilder" )
> > + AsyncWorkerJob.enqueue( self, queue, db )
> > +
> > + def execute (self, db):
> > + try:
> > + self.project.log.printo( "Updating pbuilder started" )
> > + self.project.update_pbuilder()
> > + self.project.log.printo( "Updating Pbuilder finished successfully" )
> > + db.reset_busy( self.project.builddir, "build_done" )
> > + except Exception as e:
> > + db.update_project_files( self.project )
> > + self.project.log.printo( "update Pbuilder failed" )
> > + self.project.log.printo( traceback.format_exc() )
> > + db.reset_busy( self.project.builddir, "build_failed" )
> > +
> > class APTUpdateJob(AsyncWorkerJob):
> > def __init__ (self, project):
> > AsyncWorkerJob.__init__( self, project )
> > diff --git a/elbepack/daemons/soap/esoap.py b/elbepack/daemons/soap/esoap.py
> > index 0bdcdf11..a866aee5 100644
> > --- a/elbepack/daemons/soap/esoap.py
> > +++ b/elbepack/daemons/soap/esoap.py
> > @@ -158,6 +158,14 @@ class ESoap (ServiceBase):
> > self.app.pm.open_project (uid, builddir)
> > self.app.pm.build_pbuilder (uid)
> >
> > +
> > + @rpc (String)
> > + @authenticated_uid
> > + @soap_faults
> > + def update_pbuilder (self, uid, builddir):
> > + self.app.pm.open_project (uid, builddir)
> > + self.app.pm.update_pbuilder (uid)
> > +
> > @rpc (String)
> > @authenticated_uid
> > @soap_faults
> > diff --git a/elbepack/elbeproject.py b/elbepack/elbeproject.py
> > index ed033ed2..f120ccc5 100644
> > --- a/elbepack/elbeproject.py
> > +++ b/elbepack/elbeproject.py
> > @@ -412,6 +412,9 @@ class ElbeProject (object):
> > self.log.printo ('Package fails to build.')
> > self.log.printo ('Please make sure, that the submitted package builds in pbuilder')
> >
> > + def update_pbuilder (self):
> > + self.log.do ('pbuilder --update --configfile "%s" --aptconfdir "%s"' % (
> > + os.path.join (self.builddir, "pbuilderrc"), os.path.join (self.builddir, "aptconfdir")))
> >
> > def create_pbuilder (self):
> > # Remove old pbuilder directory, if it exists
> > diff --git a/elbepack/pbuilderaction.py b/elbepack/pbuilderaction.py
> > index b81049f2..0b864a9f 100644
> > --- a/elbepack/pbuilderaction.py
> > +++ b/elbepack/pbuilderaction.py
> > @@ -118,6 +118,37 @@ class CreateAction(PBuilderAction):
> >
> > PBuilderAction.register(CreateAction)
> >
> > +class UpdateAction(PBuilderAction):
> > +
> > + tag = 'update'
> > +
> > + def __init__(self, node):
> > + PBuilderAction.__init__(self, node)
> > +
> > + def execute(self, opt, args):
> > +
> > + if not opt.project:
> > + print ('you need to specify --project option', file=sys.stderr)
> > + sys.exit(20)
> > +
> > + prjdir = opt.project
> > +
> > + print ("Updating pbuilder")
> > +
> > + try:
> > + system ('%s control update_pbuilder "%s"' % (elbe_exe, prjdir))
> > + except CommandError:
> > + print ("elbe control update_pbuilder Failed", file=sys.stderr)
> > + print ("Giving up", file=sys.stderr)
> > + sys.exit(20)
> > +
> > + print ("")
> > + print ("Updating Pbuilder finished !")
> > + print ("")
> > +
> > +PBuilderAction.register(CreateAction)
> > +
> > +
> > class BuildAction(PBuilderAction):
> >
> > tag = 'build'
> > diff --git a/elbepack/projectmanager.py b/elbepack/projectmanager.py
> > index 87390a00..a747de0c 100644
> > --- a/elbepack/projectmanager.py
> > +++ b/elbepack/projectmanager.py
> > @@ -32,7 +32,7 @@ from elbepack.asyncworker import AsyncWorker, BuildJob, APTUpdateJob
> > from elbepack.asyncworker import APTCommitJob, GenUpdateJob
> > from elbepack.asyncworker import SaveVersionJob, CheckoutVersionJob
> > from elbepack.asyncworker import APTUpdUpgrJob, BuildSysrootJob
> > -from elbepack.asyncworker import PdebuildJob, CreatePbuilderJob
> > +from elbepack.asyncworker import PdebuildJob, CreatePbuilderJob, UpdatePbuilderJob
> > from elbepack.asyncworker import BuildChrootTarJob
> > from elbepack.elbexml import ValidationMode
> >
> > @@ -284,6 +284,11 @@ class ProjectManager(object):
> > self.worker.enqueue (BuildJob (ep, build_bin, build_src,
> > skip_pbuilder))
> >
> > + def update_pbuilder (self, userid):
> > + with self.lock:
> > + ep = self._get_current_project (userid, allow_busy=False)
> > + self.worker.enqueue (UpdatePbuilderJob (ep))
> > +
> > def build_pbuilder (self, userid):
> > with self.lock:
> > ep = self._get_current_project (userid, allow_busy=False)
> > diff --git a/elbepack/soapclient.py b/elbepack/soapclient.py
> > index fe2a7646..9832be87 100644
> > --- a/elbepack/soapclient.py
> > +++ b/elbepack/soapclient.py
> > @@ -599,6 +599,22 @@ class BuildPbuilderAction(ClientAction):
> >
> > ClientAction.register(BuildPbuilderAction)
> >
> > +class UpdatePbuilderAction(ClientAction):
> > +
> > + tag = 'update_pbuilder'
> > +
> > + def __init__(self, node):
> > + ClientAction.__init__(self, node)
> > +
> > + def execute(self, client, opt, args):
> > + if len (args) != 1:
> > + print ("usage: elbe control update_pbuilder <project_dir>", file=sys.stderr)
> > + sys.exit(20)
> > +
> > + builddir = args[0]
> > + client.service.update_pbuilder (builddir)
> > +
> > +ClientAction.register(UpdatePbuilderAction)
> >
> > class RepoAction(ClientAction):
> > repoactiondict = {}
> > --
> > 2.15.1
> >
> >
> > _______________________________________________
> > elbe-devel mailing list
> > elbe-devel at linutronix.de
> > https://lists.linutronix.de/mailman/listinfo/elbe-devel
>
> --
> Mit freundlichen Grüßen
> Torben Hohn
>
> Linutronix GmbH
>
> Standort: Bremen
>
> Phone: +49 7556 25 999 18; Fax.: +49 7556 25 999 99
>
> Firmensitz / Registered Office: D-88690 Uhldingen, Bahnhofstr. 3
> Registergericht / Local District Court: Amtsgericht Freiburg i. Br.; HRB
> Nr. / Trade register no.: 700 806
>
> Geschäftsführer / Managing Directors: Heinz Egger, Thomas Gleixner
>
> Eine Bitte von uns: Sollten Sie diese E-Mail irrtümlich erhalten haben,
> benachrichtigen Sie uns in diesem Falle bitte sobald wie es Ihnen
> möglich ist, durch Antwort-Mail. Vielen Dank!
More information about the elbe-devel
mailing list