[OE-core] [PATCH v3 4/4] devtool: deploy-target: Support stripped libs and execs

Jussi Kukkonen jussi.kukkonen at intel.com
Wed Jun 21 10:09:18 UTC 2017


On 20 June 2017 at 10:42, Tobias Hagelborn <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>
> ---
>  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
> http://lists.openembedded.org/mailman/listinfo/openembedded-core
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openembedded.org/pipermail/openembedded-core/attachments/20170621/9a1a5698/attachment-0002.html>


More information about the Openembedded-core mailing list