diff options
| author | Tobias Hagelborn <tobias.hagelborn@axis.com> | 2017-08-25 13:32:38 +0200 |
|---|---|---|
| committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2017-08-27 22:32:00 +0100 |
| commit | cd26fc143bbfd948795c2e65a577f89627a4f841 (patch) | |
| tree | c1a77baaf501dd66befcbaf56e75a1a94bd2c043 /scripts/lib/devtool/deploy.py | |
| parent | 390dcbf2e14f212d81a8fe252cf3ae801b82ffa9 (diff) | |
| download | poky-cd26fc143bbfd948795c2e65a577f89627a4f841.tar.gz | |
devtool: deploy-target: Support stripped libs and execs
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]
(From OE-Core rev: 7f10c5118793da6ded59ae6e60e796152dbd7ca3)
Signed-off-by: Tobias Hagelborn <tobiasha@axis.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'scripts/lib/devtool/deploy.py')
| -rw-r--r-- | scripts/lib/devtool/deploy.py | 33 |
1 files changed, 29 insertions, 4 deletions
diff --git a/scripts/lib/devtool/deploy.py b/scripts/lib/devtool/deploy.py index 04c34cb016..7c571746c8 100644 --- a/scripts/lib/devtool/deploy.py +++ b/scripts/lib/devtool/deploy.py | |||
| @@ -16,12 +16,16 @@ | |||
| 16 | # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. | 16 | # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
| 17 | """Devtool plugin containing the deploy subcommands""" | 17 | """Devtool plugin containing the deploy subcommands""" |
| 18 | 18 | ||
| 19 | import logging | ||
| 19 | import os | 20 | import os |
| 21 | import shutil | ||
| 20 | import subprocess | 22 | import subprocess |
| 21 | import logging | ||
| 22 | import tempfile | 23 | import tempfile |
| 23 | import shutil | 24 | |
| 25 | import bb.utils | ||
| 24 | import argparse_oe | 26 | import argparse_oe |
| 27 | import oe.types | ||
| 28 | |||
| 25 | from devtool import exec_fakeroot, setup_tinfoil, check_workspace_recipe, DevtoolError | 29 | from devtool import exec_fakeroot, setup_tinfoil, check_workspace_recipe, DevtoolError |
| 26 | 30 | ||
| 27 | logger = logging.getLogger('devtool') | 31 | logger = logging.getLogger('devtool') |
| @@ -140,11 +144,12 @@ def _prepare_remote_script(deploy, verbose=False, dryrun=False, undeployall=Fals | |||
| 140 | return '\n'.join(lines) | 144 | return '\n'.join(lines) |
| 141 | 145 | ||
| 142 | 146 | ||
| 147 | |||
| 143 | def deploy(args, config, basepath, workspace): | 148 | def deploy(args, config, basepath, workspace): |
| 144 | """Entry point for the devtool 'deploy' subcommand""" | 149 | """Entry point for the devtool 'deploy' subcommand""" |
| 145 | import re | ||
| 146 | import math | 150 | import math |
| 147 | import oe.recipeutils | 151 | import oe.recipeutils |
| 152 | import oe.package | ||
| 148 | 153 | ||
| 149 | check_workspace_recipe(workspace, args.recipename, checksrc=False) | 154 | check_workspace_recipe(workspace, args.recipename, checksrc=False) |
| 150 | 155 | ||
| @@ -170,6 +175,17 @@ def deploy(args, config, basepath, workspace): | |||
| 170 | 'recipe? If so, the install step has not installed ' | 175 | 'recipe? If so, the install step has not installed ' |
| 171 | 'any files.' % args.recipename) | 176 | 'any files.' % args.recipename) |
| 172 | 177 | ||
| 178 | if args.strip and not args.dry_run: | ||
| 179 | # Fakeroot copy to new destination | ||
| 180 | srcdir = recipe_outdir | ||
| 181 | recipe_outdir = os.path.join(rd.getVar('WORKDIR', True), 'deploy-target-stripped') | ||
| 182 | if os.path.isdir(recipe_outdir): | ||
| 183 | bb.utils.remove(recipe_outdir, True) | ||
| 184 | exec_fakeroot(rd, "cp -af %s %s" % (os.path.join(srcdir, '.'), recipe_outdir), shell=True) | ||
| 185 | os.environ['PATH'] = ':'.join([os.environ['PATH'], rd.getVar('PATH', True) or '']) | ||
| 186 | oe.package.strip_execs(args.recipename, recipe_outdir, rd.getVar('STRIP', True), rd.getVar('libdir', True), | ||
| 187 | rd.getVar('base_libdir', True)) | ||
| 188 | |||
| 173 | filelist = [] | 189 | filelist = [] |
| 174 | ftotalsize = 0 | 190 | ftotalsize = 0 |
| 175 | for root, _, files in os.walk(recipe_outdir): | 191 | for root, _, files in os.walk(recipe_outdir): |
| @@ -189,7 +205,6 @@ def deploy(args, config, basepath, workspace): | |||
| 189 | print(' %s' % item) | 205 | print(' %s' % item) |
| 190 | return 0 | 206 | return 0 |
| 191 | 207 | ||
| 192 | |||
| 193 | extraoptions = '' | 208 | extraoptions = '' |
| 194 | if args.no_host_check: | 209 | if args.no_host_check: |
| 195 | extraoptions += '-o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no' | 210 | extraoptions += '-o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no' |
| @@ -301,6 +316,7 @@ def undeploy(args, config, basepath, workspace): | |||
| 301 | 316 | ||
| 302 | def register_commands(subparsers, context): | 317 | def register_commands(subparsers, context): |
| 303 | """Register devtool subcommands from the deploy plugin""" | 318 | """Register devtool subcommands from the deploy plugin""" |
| 319 | |||
| 304 | parser_deploy = subparsers.add_parser('deploy-target', | 320 | parser_deploy = subparsers.add_parser('deploy-target', |
| 305 | help='Deploy recipe output files to live target machine', | 321 | help='Deploy recipe output files to live target machine', |
| 306 | 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.', | 322 | 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 +329,15 @@ def register_commands(subparsers, context): | |||
| 313 | parser_deploy.add_argument('-p', '--no-preserve', help='Do not preserve existing files', action='store_true') | 329 | parser_deploy.add_argument('-p', '--no-preserve', help='Do not preserve existing files', action='store_true') |
| 314 | parser_deploy.add_argument('--no-check-space', help='Do not check for available space before deploying', action='store_true') | 330 | parser_deploy.add_argument('--no-check-space', help='Do not check for available space before deploying', action='store_true') |
| 315 | parser_deploy.add_argument('-P', '--port', default='22', help='Port to use for connection to the target') | 331 | parser_deploy.add_argument('-P', '--port', default='22', help='Port to use for connection to the target') |
| 332 | |||
| 333 | strip_opts = parser_deploy.add_mutually_exclusive_group(required=False) | ||
| 334 | strip_opts.add_argument('-S', '--strip', | ||
| 335 | help='Strip executables prior to deploying (default: %(default)s). ' | ||
| 336 | 'The default value of this option can be controlled by setting the strip option in the [Deploy] section to True or False.', | ||
| 337 | default=oe.types.boolean(context.config.get('Deploy', 'strip', default='0')), | ||
| 338 | action='store_true') | ||
| 339 | strip_opts.add_argument('--no-strip', help='Do not strip executables prior to deploy', dest='strip', action='store_false') | ||
| 340 | |||
| 316 | parser_deploy.set_defaults(func=deploy) | 341 | parser_deploy.set_defaults(func=deploy) |
| 317 | 342 | ||
| 318 | parser_undeploy = subparsers.add_parser('undeploy-target', | 343 | parser_undeploy = subparsers.add_parser('undeploy-target', |
