[OE-core] [PATCH v3 4/4] devtool: deploy-target: Support stripped libs and execs
Tobias Hagelborn
tobias.hagelborn at axis.com
Thu Aug 24 13:15:32 UTC 2017
On 06/21/2017 12:09 PM, Jussi Kukkonen wrote:
>
>
> On 20 June 2017 at 10:42, Tobias Hagelborn <tobias.hagelborn at axis.com
> <mailto:tobias.hagelborn at axis.com>> wrote:
> >
> > New devtool deploy-target option --strip which enables deploying
> > stripped binaries, saving some space on target.
> >
> > * Copies the files of ${D} into a new directory and strips them in place
> > * Used oe.package.strip_execs for stripping directory
> > * Added devtool.conf option "strip" for changing default behavior
> >
> > Config example:
> > [Deploy]
> > strip = true
> >
> > [YOCTO #11227]
> >
> > Signed-off-by: Tobias Hagelborn <tobiasha at axis.com
> <mailto:tobiasha at axis.com>>
> > ---
> > scripts/lib/devtool/deploy.py | 32 ++++++++++++++++++++++++++++----
> > 1 file changed, 28 insertions(+), 4 deletions(-)
> >
> > diff --git a/scripts/lib/devtool/deploy.py
> b/scripts/lib/devtool/deploy.py
> > index 04c34cb..96b877e 100644
> > --- a/scripts/lib/devtool/deploy.py
> > +++ b/scripts/lib/devtool/deploy.py
> > @@ -16,12 +16,16 @@
> > # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
> > """Devtool plugin containing the deploy subcommands"""
> >
> > +import logging
> > import os
> > +import shutil
> > import subprocess
> > -import logging
> > import tempfile
> > -import shutil
> > +
> > +import bb.utils
> > import argparse_oe
> > +import oe
> > +
> > from devtool import exec_fakeroot, setup_tinfoil,
> check_workspace_recipe, DevtoolError
> >
> > logger = logging.getLogger('devtool')
> > @@ -140,9 +144,9 @@ def _prepare_remote_script(deploy, verbose=False,
> dryrun=False, undeployall=Fals
> > return '\n'.join(lines)
> >
> >
> > +
> > def deploy(args, config, basepath, workspace):
> > """Entry point for the devtool 'deploy' subcommand"""
> > - import re
> > import math
> > import oe.recipeutils
> >
> > @@ -170,6 +174,17 @@ def deploy(args, config, basepath, workspace):
> > 'recipe? If so, the install step has not
> installed '
> > 'any files.' % args.recipename)
> >
> > + if args.strip and not args.dry_run:
> > + # Fakeroot copy to new destination
> > + srcdir = recipe_outdir
> > + recipe_outdir = os.path.join(rd.getVar('WORKDIR', True),
> 'deploy-target-stripped')
> > + if os.path.isdir(recipe_outdir):
> > + bb.utils.remove(recipe_outdir, True)
> > + exec_fakeroot(rd, "cp -af %s %s" % (os.path.join(srcdir,
> '.'), recipe_outdir), shell=True)
> > + os.environ['PATH'] = ':'.join([os.environ['PATH'],
> rd.getVar('PATH', True) or ''])
> > + oe.package.strip_execs(args.recipename, recipe_outdir,
> rd.getVar('STRIP', True), rd.getVar('libdir', True),
> > + rd.getVar('base_libdir', True))
> > +
> > filelist = []
> > ftotalsize = 0
> > for root, _, files in os.walk(recipe_outdir):
> > @@ -189,7 +204,6 @@ def deploy(args, config, basepath, workspace):
> > print(' %s' % item)
> > return 0
> >
> > -
> > extraoptions = ''
> > if args.no_host_check:
> > extraoptions += '-o UserKnownHostsFile=/dev/null -o
> StrictHostKeyChecking=no'
> > @@ -301,6 +315,7 @@ def undeploy(args, config, basepath, workspace):
> >
> > def register_commands(subparsers, context):
> > """Register devtool subcommands from the deploy plugin"""
> > +
> > parser_deploy = subparsers.add_parser('deploy-target',
> > help='Deploy recipe output
> files to live target machine',
> > description='Deploys a
> recipe\'s build output (i.e. the output of the do_install task) to a
> live target machine over ssh. By default, any existing files will be
> preserved instead of being overwritten and will be restored if you run
> devtool undeploy-target. Note: this only deploys the recipe itself and
> not any runtime dependencies, so it is assumed that those have been
> installed on the target beforehand.',
> > @@ -313,6 +328,15 @@ def register_commands(subparsers, context):
> > parser_deploy.add_argument('-p', '--no-preserve', help='Do not
> preserve existing files', action='store_true')
> > parser_deploy.add_argument('--no-check-space', help='Do not
> check for available space before deploying', action='store_true')
> > parser_deploy.add_argument('-P', '--port', default='22',
> help='Port to use for connection to the target')
> > +
> > + strip_opts =
> parser_deploy.add_mutually_exclusive_group(required=False)
> > + strip_opts.add_argument('-S', '--strip',
> > + help='Strip executables prior to
> deploying (default: %(default)s). '
> > + 'The default value of this
> option can be controlled by setting the strip option in the [Deploy]
> section to True or False.',
> > +
> default=oe.types.boolean(context.config.get('Deploy', 'strip',
> default='0')),
> > + action='store_true')
>
> Autobuilder is complaining about this:
>
> Exception: bb.process.ExecutionError: Execution of 'devtool --bbpath
> /home/pokybuild/yocto-autobuilder/yocto-worker/nightly-x86-64/build/meta-poky:/home/pokybuild/yocto-autobuilder/yocto-worker/nightly-x86-64/build/build:/home/pokybuild/yocto-autobuilder/yocto-worker/nightly-x86-64/build/meta:/home/pokybuild/yocto-autobuilder/yocto-worker/nightly-x86-64/build/meta-yocto-bsp
> --basepath
> /home/pokybuild/yocto-autobuilder/yocto-worker/nightly-x86-64/build/build/tmp/work/qemux86_64-poky-linux/core-image-minimal/1.0-r0/sdk-ext/image//opt/poky/2.3
> create-workspace --create-only
> /home/pokybuild/yocto-autobuilder/yocto-worker/nightly-x86-64/build/build/tmp/work/qemux86_64-poky-linux/core-image-minimal/1.0-r0/sdk-ext/image//opt/poky/2.3/workspace'
> failed with exit code 1:
> Traceback (most recent call last):
> File
> "/home/pokybuild/yocto-autobuilder/yocto-worker/nightly-x86-64/build/scripts/devtool",
> line 351, in <module>
> ret = main()
> File
> "/home/pokybuild/yocto-autobuilder/yocto-worker/nightly-x86-64/build/scripts/devtool",
> line 329, in main
> plugin.register_commands(subparsers, context)
> File
> "/home/pokybuild/yocto-autobuilder/yocto-worker/nightly-x86-64/build/scripts/lib/devtool/deploy.py",
> line 336, in register_commands
> default=oe.types.boolean(context.config.get('Deploy', 'strip',
> default='0')),
> AttributeError: module 'oe' has no attribute 'types'
>
> See
> https://autobuilder.yocto.io/builders/nightly-x86-64/builds/333/steps/BuildImages_2/logs/stdio
> for context.
>
>
> > + strip_opts.add_argument('--no-strip', help='Do not strip
> executables prior to deploy', dest='strip', action='store_false')
> > +
> > parser_deploy.set_defaults(func=deploy)
> >
> > parser_undeploy = subparsers.add_parser('undeploy-target',
> > --
> > 2.1.4
> >
> > --
> > _______________________________________________
> > Openembedded-core mailing list
> > Openembedded-core at lists.openembedded.org
> <mailto:Openembedded-core at lists.openembedded.org>
> > http://lists.openembedded.org/mailman/listinfo/openembedded-core
Thanks for pointing this out Jussi,
I will send an updated version.
Cheers
Tobias
More information about the Openembedded-core
mailing list