[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