1# Copyright (c) 2013, Intel Corporation. 2# 3# SPDX-License-Identifier: GPL-2.0-only 4# 5# DESCRIPTION 6# This module implements some basic help invocation functions along 7# with the bulk of the help topic text for the OE Core Image Tools. 8# 9# AUTHORS 10# Tom Zanussi <tom.zanussi (at] linux.intel.com> 11# 12 13import subprocess 14import logging 15 16from wic.pluginbase import PluginMgr, PLUGIN_TYPES 17 18logger = logging.getLogger('wic') 19 20def subcommand_error(args): 21 logger.info("invalid subcommand %s", args[0]) 22 23 24def display_help(subcommand, subcommands): 25 """ 26 Display help for subcommand. 27 """ 28 if subcommand not in subcommands: 29 return False 30 31 hlp = subcommands.get(subcommand, subcommand_error)[2] 32 if callable(hlp): 33 hlp = hlp() 34 pager = subprocess.Popen('less', stdin=subprocess.PIPE) 35 pager.communicate(hlp.encode('utf-8')) 36 37 return True 38 39 40def wic_help(args, usage_str, subcommands): 41 """ 42 Subcommand help dispatcher. 43 """ 44 if args.help_topic == None or not display_help(args.help_topic, subcommands): 45 print(usage_str) 46 47 48def get_wic_plugins_help(): 49 """ 50 Combine wic_plugins_help with the help for every known 51 source plugin. 52 """ 53 result = wic_plugins_help 54 for plugin_type in PLUGIN_TYPES: 55 result += '\n\n%s PLUGINS\n\n' % plugin_type.upper() 56 for name, plugin in PluginMgr.get_plugins(plugin_type).items(): 57 result += "\n %s plugin:\n" % name 58 if plugin.__doc__: 59 result += plugin.__doc__ 60 else: 61 result += "\n %s is missing docstring\n" % plugin 62 return result 63 64 65def invoke_subcommand(args, parser, main_command_usage, subcommands): 66 """ 67 Dispatch to subcommand handler borrowed from combo-layer. 68 Should use argparse, but has to work in 2.6. 69 """ 70 if not args.command: 71 logger.error("No subcommand specified, exiting") 72 parser.print_help() 73 return 1 74 elif args.command == "help": 75 wic_help(args, main_command_usage, subcommands) 76 elif args.command not in subcommands: 77 logger.error("Unsupported subcommand %s, exiting\n", args.command) 78 parser.print_help() 79 return 1 80 else: 81 subcmd = subcommands.get(args.command, subcommand_error) 82 usage = subcmd[1] 83 subcmd[0](args, usage) 84 85 86## 87# wic help and usage strings 88## 89 90wic_usage = """ 91 92 Create a customized OpenEmbedded image 93 94 usage: wic [--version] | [--help] | [COMMAND [ARGS]] 95 96 Current 'wic' commands are: 97 help Show help for command or one of the topics (see below) 98 create Create a new OpenEmbedded image 99 list List available canned images and source plugins 100 101 Help topics: 102 overview wic overview - General overview of wic 103 plugins wic plugins - Overview and API 104 kickstart wic kickstart - wic kickstart reference 105""" 106 107wic_help_usage = """ 108 109 usage: wic help <subcommand> 110 111 This command displays detailed help for the specified subcommand. 112""" 113 114wic_create_usage = """ 115 116 Create a new OpenEmbedded image 117 118 usage: wic create <wks file or image name> [-o <DIRNAME> | --outdir <DIRNAME>] 119 [-e | --image-name] [-s, --skip-build-check] [-D, --debug] 120 [-r, --rootfs-dir] [-b, --bootimg-dir] 121 [-k, --kernel-dir] [-n, --native-sysroot] [-f, --build-rootfs] 122 [-c, --compress-with] [-m, --bmap] 123 124 This command creates an OpenEmbedded image based on the 'OE kickstart 125 commands' found in the <wks file>. 126 127 The -o option can be used to place the image in a directory with a 128 different name and location. 129 130 See 'wic help create' for more detailed instructions. 131""" 132 133wic_create_help = """ 134 135NAME 136 wic create - Create a new OpenEmbedded image 137 138SYNOPSIS 139 wic create <wks file or image name> [-o <DIRNAME> | --outdir <DIRNAME>] 140 [-e | --image-name] [-s, --skip-build-check] [-D, --debug] 141 [-r, --rootfs-dir] [-b, --bootimg-dir] 142 [-k, --kernel-dir] [-n, --native-sysroot] [-f, --build-rootfs] 143 [-c, --compress-with] [-m, --bmap] [--no-fstab-update] 144 145DESCRIPTION 146 This command creates an OpenEmbedded image based on the 'OE 147 kickstart commands' found in the <wks file>. 148 149 In order to do this, wic needs to know the locations of the 150 various build artifacts required to build the image. 151 152 Users can explicitly specify the build artifact locations using 153 the -r, -b, -k, and -n options. See below for details on where 154 the corresponding artifacts are typically found in a normal 155 OpenEmbedded build. 156 157 Alternatively, users can use the -e option to have 'wic' determine 158 those locations for a given image. If the -e option is used, the 159 user needs to have set the appropriate MACHINE variable in 160 local.conf, and have sourced the build environment. 161 162 The -e option is used to specify the name of the image to use the 163 artifacts from e.g. core-image-sato. 164 165 The -r option is used to specify the path to the /rootfs dir to 166 use as the .wks rootfs source. 167 168 The -b option is used to specify the path to the dir containing 169 the boot artifacts (e.g. /EFI or /syslinux dirs) to use as the 170 .wks bootimg source. 171 172 The -k option is used to specify the path to the dir containing 173 the kernel to use in the .wks bootimg. 174 175 The -n option is used to specify the path to the native sysroot 176 containing the tools to use to build the image. 177 178 The -f option is used to build rootfs by running "bitbake <image>" 179 180 The -s option is used to skip the build check. The build check is 181 a simple sanity check used to determine whether the user has 182 sourced the build environment so that the -e option can operate 183 correctly. If the user has specified the build artifact locations 184 explicitly, 'wic' assumes the user knows what he or she is doing 185 and skips the build check. 186 187 The -D option is used to display debug information detailing 188 exactly what happens behind the scenes when a create request is 189 fulfilled (or not, as the case may be). It enumerates and 190 displays the command sequence used, and should be included in any 191 bug report describing unexpected results. 192 193 When 'wic -e' is used, the locations for the build artifacts 194 values are determined by 'wic -e' from the output of the 'bitbake 195 -e' command given an image name e.g. 'core-image-minimal' and a 196 given machine set in local.conf. In that case, the image is 197 created as if the following 'bitbake -e' variables were used: 198 199 -r: IMAGE_ROOTFS 200 -k: STAGING_KERNEL_DIR 201 -n: STAGING_DIR_NATIVE 202 -b: empty (plugin-specific handlers must determine this) 203 204 If 'wic -e' is not used, the user needs to select the appropriate 205 value for -b (as well as -r, -k, and -n). 206 207 The -o option can be used to place the image in a directory with a 208 different name and location. 209 210 The -c option is used to specify compressor utility to compress 211 an image. gzip, bzip2 and xz compressors are supported. 212 213 The -m option is used to produce .bmap file for the image. This file 214 can be used to flash image using bmaptool utility. 215 216 The --no-fstab-update option is used to doesn't change fstab file. When 217 using this option the final fstab file will be same that in rootfs and 218 wic doesn't update file, e.g adding a new mount point. User can control 219 the fstab file content in base-files recipe. 220""" 221 222wic_list_usage = """ 223 224 List available OpenEmbedded images and source plugins 225 226 usage: wic list images 227 wic list <image> help 228 wic list source-plugins 229 230 This command enumerates the set of available canned images as well as 231 help for those images. It also can be used to list of available source 232 plugins. 233 234 The first form enumerates all the available 'canned' images. 235 236 The second form lists the detailed help information for a specific 237 'canned' image. 238 239 The third form enumerates all the available --sources (source 240 plugins). 241 242 See 'wic help list' for more details. 243""" 244 245wic_list_help = """ 246 247NAME 248 wic list - List available OpenEmbedded images and source plugins 249 250SYNOPSIS 251 wic list images 252 wic list <image> help 253 wic list source-plugins 254 255DESCRIPTION 256 This command enumerates the set of available canned images as well 257 as help for those images. It also can be used to list available 258 source plugins. 259 260 The first form enumerates all the available 'canned' images. 261 These are actually just the set of .wks files that have been moved 262 into the /scripts/lib/wic/canned-wks directory). 263 264 The second form lists the detailed help information for a specific 265 'canned' image. 266 267 The third form enumerates all the available --sources (source 268 plugins). The contents of a given partition are driven by code 269 defined in 'source plugins'. Users specify a specific plugin via 270 the --source parameter of the partition .wks command. Normally 271 this is the 'rootfs' plugin but can be any of the more specialized 272 sources listed by the 'list source-plugins' command. Users can 273 also add their own source plugins - see 'wic help plugins' for 274 details. 275""" 276 277wic_ls_usage = """ 278 279 List content of a partitioned image 280 281 usage: wic ls <image>[:<partition>[<path>]] [--native-sysroot <path>] 282 283 This command outputs either list of image partitions or directory contents 284 of vfat and ext* partitions. 285 286 See 'wic help ls' for more detailed instructions. 287 288""" 289 290wic_ls_help = """ 291 292NAME 293 wic ls - List contents of partitioned image or partition 294 295SYNOPSIS 296 wic ls <image> 297 wic ls <image>:<vfat or ext* partition> 298 wic ls <image>:<vfat or ext* partition><path> 299 wic ls <image>:<vfat or ext* partition><path> --native-sysroot <path> 300 301DESCRIPTION 302 This command lists either partitions of the image or directory contents 303 of vfat or ext* partitions. 304 305 The first form it lists partitions of the image. 306 For example: 307 $ wic ls tmp/deploy/images/qemux86-64/core-image-minimal-qemux86-64.wic 308 Num Start End Size Fstype 309 1 1048576 24438783 23390208 fat16 310 2 25165824 50315263 25149440 ext4 311 312 Second and third form list directory content of the partition: 313 $ wic ls tmp/deploy/images/qemux86-64/core-image-minimal-qemux86-64.wic:1 314 Volume in drive : is boot 315 Volume Serial Number is 2DF2-5F02 316 Directory for ::/ 317 318 efi <DIR> 2017-05-11 10:54 319 startup nsh 26 2017-05-11 10:54 320 vmlinuz 6922288 2017-05-11 10:54 321 3 files 6 922 314 bytes 322 15 818 752 bytes free 323 324 325 $ wic ls tmp/deploy/images/qemux86-64/core-image-minimal-qemux86-64.wic:1/EFI/boot/ 326 Volume in drive : is boot 327 Volume Serial Number is 2DF2-5F02 328 Directory for ::/EFI/boot 329 330 . <DIR> 2017-05-11 10:54 331 .. <DIR> 2017-05-11 10:54 332 grub cfg 679 2017-05-11 10:54 333 bootx64 efi 571392 2017-05-11 10:54 334 4 files 572 071 bytes 335 15 818 752 bytes free 336 337 The -n option is used to specify the path to the native sysroot 338 containing the tools(parted and mtools) to use. 339 340""" 341 342wic_cp_usage = """ 343 344 Copy files and directories to/from the vfat or ext* partition 345 346 usage: wic cp <src> <dest> [--native-sysroot <path>] 347 348 source/destination image in format <image>:<partition>[<path>] 349 350 This command copies files or directories either 351 - from local to vfat or ext* partitions of partitioned image 352 - from vfat or ext* partitions of partitioned image to local 353 354 See 'wic help cp' for more detailed instructions. 355 356""" 357 358wic_cp_help = """ 359 360NAME 361 wic cp - copy files and directories to/from the vfat or ext* partitions 362 363SYNOPSIS 364 wic cp <src> <dest>:<partition> 365 wic cp <src>:<partition> <dest> 366 wic cp <src> <dest-image>:<partition><path> 367 wic cp <src> <dest-image>:<partition><path> --native-sysroot <path> 368 369DESCRIPTION 370 This command copies files or directories either 371 - from local to vfat or ext* partitions of partitioned image 372 - from vfat or ext* partitions of partitioned image to local 373 374 The first form of it copies file or directory to the root directory of 375 the partition: 376 $ wic cp test.wks tmp/deploy/images/qemux86-64/core-image-minimal-qemux86-64.wic:1 377 $ wic ls tmp/deploy/images/qemux86-64/core-image-minimal-qemux86-64.wic:1 378 Volume in drive : is boot 379 Volume Serial Number is DB4C-FD4C 380 Directory for ::/ 381 382 efi <DIR> 2017-05-24 18:15 383 loader <DIR> 2017-05-24 18:15 384 startup nsh 26 2017-05-24 18:15 385 vmlinuz 6926384 2017-05-24 18:15 386 test wks 628 2017-05-24 21:22 387 5 files 6 927 038 bytes 388 15 677 440 bytes free 389 390 The second form of the command copies file or directory to the specified directory 391 on the partition: 392 $ wic cp test tmp/deploy/images/qemux86-64/core-image-minimal-qemux86-64.wic:1/efi/ 393 $ wic ls tmp/deploy/images/qemux86-64/core-image-minimal-qemux86-64.wic:1/efi/ 394 Volume in drive : is boot 395 Volume Serial Number is DB4C-FD4C 396 Directory for ::/efi 397 398 . <DIR> 2017-05-24 18:15 399 .. <DIR> 2017-05-24 18:15 400 boot <DIR> 2017-05-24 18:15 401 test <DIR> 2017-05-24 21:27 402 4 files 0 bytes 403 15 675 392 bytes free 404 405 The third form of the command copies file or directory from the specified directory 406 on the partition to local: 407 $ wic cp tmp/deploy/images/qemux86-64/core-image-minimal-qemux86-64.wic:1/vmlinuz test 408 409 The -n option is used to specify the path to the native sysroot 410 containing the tools(parted and mtools) to use. 411""" 412 413wic_rm_usage = """ 414 415 Remove files or directories from the vfat or ext* partitions 416 417 usage: wic rm <image>:<partition><path> [--native-sysroot <path>] 418 419 This command removes files or directories from the vfat or ext* partitions of 420 the partitioned image. 421 422 See 'wic help rm' for more detailed instructions. 423 424""" 425 426wic_rm_help = """ 427 428NAME 429 wic rm - remove files or directories from the vfat or ext* partitions 430 431SYNOPSIS 432 wic rm <src> <image>:<partition><path> 433 wic rm <src> <image>:<partition><path> --native-sysroot <path> 434 wic rm -r <image>:<partition><path> 435 436DESCRIPTION 437 This command removes files or directories from the vfat or ext* partition of the 438 partitioned image: 439 440 $ wic ls ./tmp/deploy/images/qemux86-64/core-image-minimal-qemux86-64.wic:1 441 Volume in drive : is boot 442 Volume Serial Number is 11D0-DE21 443 Directory for ::/ 444 445 libcom32 c32 186500 2017-06-02 15:15 446 libutil c32 24148 2017-06-02 15:15 447 syslinux cfg 209 2017-06-02 15:15 448 vesamenu c32 27104 2017-06-02 15:15 449 vmlinuz 6926384 2017-06-02 15:15 450 5 files 7 164 345 bytes 451 16 582 656 bytes free 452 453 $ wic rm ./tmp/deploy/images/qemux86-64/core-image-minimal-qemux86-64.wic:1/libutil.c32 454 455 $ wic ls ./tmp/deploy/images/qemux86-64/core-image-minimal-qemux86-64.wic:1 456 Volume in drive : is boot 457 Volume Serial Number is 11D0-DE21 458 Directory for ::/ 459 460 libcom32 c32 186500 2017-06-02 15:15 461 syslinux cfg 209 2017-06-02 15:15 462 vesamenu c32 27104 2017-06-02 15:15 463 vmlinuz 6926384 2017-06-02 15:15 464 4 files 7 140 197 bytes 465 16 607 232 bytes free 466 467 The -n option is used to specify the path to the native sysroot 468 containing the tools(parted and mtools) to use. 469 470 The -r option is used to remove directories and their contents 471 recursively,this only applies to ext* partition. 472""" 473 474wic_write_usage = """ 475 476 Write image to a device 477 478 usage: wic write <image> <target device> [--expand [rules]] [--native-sysroot <path>] 479 480 This command writes partitioned image to a target device (USB stick, SD card etc). 481 482 See 'wic help write' for more detailed instructions. 483 484""" 485 486wic_write_help = """ 487 488NAME 489 wic write - write an image to a device 490 491SYNOPSIS 492 wic write <image> <target> 493 wic write <image> <target> --expand auto 494 wic write <image> <target> --expand 1:100M,2:300M 495 wic write <image> <target> --native-sysroot <path> 496 497DESCRIPTION 498 This command writes an image to a target device (USB stick, SD card etc) 499 500 $ wic write ./tmp/deploy/images/qemux86-64/core-image-minimal-qemux86-64.wic /dev/sdb 501 502 The --expand option is used to resize image partitions. 503 --expand auto expands partitions to occupy all free space available on the target device. 504 It's also possible to specify expansion rules in a format 505 <partition>:<size>[,<partition>:<size>...] for one or more partitions. 506 Specifying size 0 will keep partition unmodified. 507 Note: Resizing boot partition can result in non-bootable image for non-EFI images. It is 508 recommended to use size 0 for boot partition to keep image bootable. 509 510 The --native-sysroot option is used to specify the path to the native sysroot 511 containing the tools(parted, resize2fs) to use. 512""" 513 514wic_plugins_help = """ 515 516NAME 517 wic plugins - Overview and API 518 519DESCRIPTION 520 plugins allow wic functionality to be extended and specialized by 521 users. This section documents the plugin interface, which is 522 currently restricted to 'source' plugins. 523 524 'Source' plugins provide a mechanism to customize various aspects 525 of the image generation process in wic, mainly the contents of 526 partitions. 527 528 Source plugins provide a mechanism for mapping values specified in 529 .wks files using the --source keyword to a particular plugin 530 implementation that populates a corresponding partition. 531 532 A source plugin is created as a subclass of SourcePlugin (see 533 scripts/lib/wic/pluginbase.py) and the plugin file containing it 534 is added to scripts/lib/wic/plugins/source/ to make the plugin 535 implementation available to the wic implementation. 536 537 Source plugins can also be implemented and added by external 538 layers - any plugins found in a scripts/lib/wic/plugins/source/ 539 or lib/wic/plugins/source/ directory in an external layer will 540 also be made available. 541 542 When the wic implementation needs to invoke a partition-specific 543 implementation, it looks for the plugin that has the same name as 544 the --source param given to that partition. For example, if the 545 partition is set up like this: 546 547 part /boot --source bootimg-pcbios ... 548 549 then the methods defined as class members of the plugin having the 550 matching bootimg-pcbios .name class member would be used. 551 552 To be more concrete, here's the plugin definition that would match 553 a '--source bootimg-pcbios' usage, along with an example method 554 that would be called by the wic implementation when it needed to 555 invoke an implementation-specific partition-preparation function: 556 557 class BootimgPcbiosPlugin(SourcePlugin): 558 name = 'bootimg-pcbios' 559 560 @classmethod 561 def do_prepare_partition(self, part, ...) 562 563 If the subclass itself doesn't implement a function, a 'default' 564 version in a superclass will be located and used, which is why all 565 plugins must be derived from SourcePlugin. 566 567 The SourcePlugin class defines the following methods, which is the 568 current set of methods that can be implemented/overridden by 569 --source plugins. Any methods not implemented by a SourcePlugin 570 subclass inherit the implementations present in the SourcePlugin 571 class (see the SourcePlugin source for details): 572 573 do_prepare_partition() 574 Called to do the actual content population for a 575 partition. In other words, it 'prepares' the final partition 576 image which will be incorporated into the disk image. 577 578 do_post_partition() 579 Called after the partition is created. It is useful to add post 580 operations e.g. signing the partition. 581 582 do_configure_partition() 583 Called before do_prepare_partition(), typically used to 584 create custom configuration files for a partition, for 585 example syslinux or grub config files. 586 587 do_install_disk() 588 Called after all partitions have been prepared and assembled 589 into a disk image. This provides a hook to allow 590 finalization of a disk image, for example to write an MBR to 591 it. 592 593 do_stage_partition() 594 Special content-staging hook called before 595 do_prepare_partition(), normally empty. 596 597 Typically, a partition will just use the passed-in 598 parameters, for example the unmodified value of bootimg_dir. 599 In some cases however, things may need to be more tailored. 600 As an example, certain files may additionally need to be 601 take from bootimg_dir + /boot. This hook allows those files 602 to be staged in a customized fashion. Note that 603 get_bitbake_var() allows you to access non-standard 604 variables that you might want to use for these types of 605 situations. 606 607 This scheme is extensible - adding more hooks is a simple matter 608 of adding more plugin methods to SourcePlugin and derived classes. 609 Please see the implementation for details. 610""" 611 612wic_overview_help = """ 613 614NAME 615 wic overview - General overview of wic 616 617DESCRIPTION 618 The 'wic' command generates partitioned images from existing 619 OpenEmbedded build artifacts. Image generation is driven by 620 partitioning commands contained in an 'Openembedded kickstart' 621 (.wks) file (see 'wic help kickstart') specified either directly 622 on the command-line or as one of a selection of canned .wks files 623 (see 'wic list images'). When applied to a given set of build 624 artifacts, the result is an image or set of images that can be 625 directly written onto media and used on a particular system. 626 627 The 'wic' command and the infrastructure it's based on is by 628 definition incomplete - its purpose is to allow the generation of 629 customized images, and as such was designed to be completely 630 extensible via a plugin interface (see 'wic help plugins'). 631 632 Background and Motivation 633 634 wic is meant to be a completely independent standalone utility 635 that initially provides easier-to-use and more flexible 636 replacements for a couple bits of existing functionality in 637 oe-core: directdisk.bbclass and mkefidisk.sh. The difference 638 between wic and those examples is that with wic the functionality 639 of those scripts is implemented by a general-purpose partitioning 640 'language' based on Red Hat kickstart syntax). 641 642 The initial motivation and design considerations that lead to the 643 current tool are described exhaustively in Yocto Bug #3847 644 (https://bugzilla.yoctoproject.org/show_bug.cgi?id=3847). 645 646 Implementation and Examples 647 648 wic can be used in two different modes, depending on how much 649 control the user needs in specifying the Openembedded build 650 artifacts that will be used in creating the image: 'raw' and 651 'cooked'. 652 653 If used in 'raw' mode, artifacts are explicitly specified via 654 command-line arguments (see example below). 655 656 The more easily usable 'cooked' mode uses the current MACHINE 657 setting and a specified image name to automatically locate the 658 artifacts used to create the image. 659 660 OE kickstart files (.wks) can of course be specified directly on 661 the command-line, but the user can also choose from a set of 662 'canned' .wks files available via the 'wic list images' command 663 (example below). 664 665 In any case, the prerequisite for generating any image is to have 666 the build artifacts already available. The below examples assume 667 the user has already build a 'core-image-minimal' for a specific 668 machine (future versions won't require this redundant step, but 669 for now that's typically how build artifacts get generated). 670 671 The other prerequisite is to source the build environment: 672 673 $ source oe-init-build-env 674 675 To start out with, we'll generate an image from one of the canned 676 .wks files. The following generates a list of availailable 677 images: 678 679 $ wic list images 680 mkefidisk Create an EFI disk image 681 directdisk Create a 'pcbios' direct disk image 682 683 You can get more information about any of the available images by 684 typing 'wic list xxx help', where 'xxx' is one of the image names: 685 686 $ wic list mkefidisk help 687 688 Creates a partitioned EFI disk image that the user can directly dd 689 to boot media. 690 691 At any time, you can get help on the 'wic' command or any 692 subcommand (currently 'list' and 'create'). For instance, to get 693 the description of 'wic create' command and its parameters: 694 695 $ wic create 696 697 Usage: 698 699 Create a new OpenEmbedded image 700 701 usage: wic create <wks file or image name> [-o <DIRNAME> | ...] 702 [-i <JSON PROPERTY FILE> | --infile <JSON PROPERTY_FILE>] 703 [-e | --image-name] [-s, --skip-build-check] [-D, --debug] 704 [-r, --rootfs-dir] [-b, --bootimg-dir] [-k, --kernel-dir] 705 [-n, --native-sysroot] [-f, --build-rootfs] 706 707 This command creates an OpenEmbedded image based on the 'OE 708 kickstart commands' found in the <wks file>. 709 710 The -o option can be used to place the image in a directory 711 with a different name and location. 712 713 See 'wic help create' for more detailed instructions. 714 ... 715 716 As mentioned in the command, you can get even more detailed 717 information by adding 'help' to the above: 718 719 $ wic help create 720 721 So, the easiest way to create an image is to use the -e option 722 with a canned .wks file. To use the -e option, you need to 723 specify the image used to generate the artifacts and you actually 724 need to have the MACHINE used to build them specified in your 725 local.conf (these requirements aren't necessary if you aren't 726 using the -e options.) Below, we generate a directdisk image, 727 pointing the process at the core-image-minimal artifacts for the 728 current MACHINE: 729 730 $ wic create directdisk -e core-image-minimal 731 732 Checking basic build environment... 733 Done. 734 735 Creating image(s)... 736 737 Info: The new image(s) can be found here: 738 /var/tmp/wic/build/directdisk-201309252350-sda.direct 739 740 The following build artifacts were used to create the image(s): 741 742 ROOTFS_DIR: ... 743 BOOTIMG_DIR: ... 744 KERNEL_DIR: ... 745 NATIVE_SYSROOT: ... 746 747 The image(s) were created using OE kickstart file: 748 .../scripts/lib/wic/canned-wks/directdisk.wks 749 750 The output shows the name and location of the image created, and 751 so that you know exactly what was used to generate the image, each 752 of the artifacts and the kickstart file used. 753 754 Similarly, you can create a 'mkefidisk' image in the same way 755 (notice that this example uses a different machine - because it's 756 using the -e option, you need to change the MACHINE in your 757 local.conf): 758 759 $ wic create mkefidisk -e core-image-minimal 760 Checking basic build environment... 761 Done. 762 763 Creating image(s)... 764 765 Info: The new image(s) can be found here: 766 /var/tmp/wic/build/mkefidisk-201309260027-sda.direct 767 768 ... 769 770 Here's an example that doesn't take the easy way out and manually 771 specifies each build artifact, along with a non-canned .wks file, 772 and also uses the -o option to have wic create the output 773 somewhere other than the default /var/tmp/wic: 774 775 $ wic create ./test.wks -o ./out --rootfs-dir 776 tmp/work/qemux86_64-poky-linux/core-image-minimal/1.0-r0/rootfs 777 --bootimg-dir tmp/sysroots/qemux86-64/usr/share 778 --kernel-dir tmp/deploy/images/qemux86-64 779 --native-sysroot tmp/sysroots/x86_64-linux 780 781 Creating image(s)... 782 783 Info: The new image(s) can be found here: 784 out/build/test-201507211313-sda.direct 785 786 The following build artifacts were used to create the image(s): 787 ROOTFS_DIR: tmp/work/qemux86_64-poky-linux/core-image-minimal/1.0-r0/rootfs 788 BOOTIMG_DIR: tmp/sysroots/qemux86-64/usr/share 789 KERNEL_DIR: tmp/deploy/images/qemux86-64 790 NATIVE_SYSROOT: tmp/sysroots/x86_64-linux 791 792 The image(s) were created using OE kickstart file: 793 ./test.wks 794 795 Here is a content of test.wks: 796 797 part /boot --source bootimg-pcbios --ondisk sda --label boot --active --align 1024 798 part / --source rootfs --ondisk sda --fstype=ext3 --label platform --align 1024 799 800 bootloader --timeout=0 --append="rootwait rootfstype=ext3 video=vesafb vga=0x318 console=tty0" 801 802 803 Finally, here's an example of the actual partition language 804 commands used to generate the mkefidisk image i.e. these are the 805 contents of the mkefidisk.wks OE kickstart file: 806 807 # short-description: Create an EFI disk image 808 # long-description: Creates a partitioned EFI disk image that the user 809 # can directly dd to boot media. 810 811 part /boot --source bootimg-efi --ondisk sda --fstype=efi --active 812 813 part / --source rootfs --ondisk sda --fstype=ext3 --label platform 814 815 part swap --ondisk sda --size 44 --label swap1 --fstype=swap 816 817 bootloader --timeout=10 --append="rootwait console=ttyPCH0,115200" 818 819 You can get a complete listing and description of all the 820 kickstart commands available for use in .wks files from 'wic help 821 kickstart'. 822""" 823 824wic_kickstart_help = """ 825 826NAME 827 wic kickstart - wic kickstart reference 828 829DESCRIPTION 830 This section provides the definitive reference to the wic 831 kickstart language. It also provides documentation on the list of 832 --source plugins available for use from the 'part' command (see 833 the 'Platform-specific Plugins' section below). 834 835 The current wic implementation supports only the basic kickstart 836 partitioning commands: partition (or part for short) and 837 bootloader. 838 839 The following is a listing of the commands, their syntax, and 840 meanings. The commands are based on the Fedora kickstart 841 documentation but with modifications to reflect wic capabilities. 842 843 https://pykickstart.readthedocs.io/en/latest/kickstart-docs.html#part-or-partition 844 https://pykickstart.readthedocs.io/en/latest/kickstart-docs.html#bootloader 845 846 Commands 847 848 * 'part' or 'partition' 849 850 This command creates a partition on the system and uses the 851 following syntax: 852 853 part [<mountpoint>] 854 855 The <mountpoint> is where the partition will be mounted and 856 must take of one of the following forms: 857 858 /<path>: For example: /, /usr, or /home 859 860 swap: The partition will be used as swap space. 861 862 If a <mountpoint> is not specified the partition will be created 863 but will not be mounted. 864 865 Partitions with a <mountpoint> specified will be automatically mounted. 866 This is achieved by wic adding entries to the fstab during image 867 generation. In order for a valid fstab to be generated one of the 868 --ondrive, --ondisk, --use-uuid or --use-label partition options must 869 be used for each partition that specifies a mountpoint. Note that with 870 --use-{uuid,label} and non-root <mountpoint>, including swap, the mount 871 program must understand the PARTUUID or LABEL syntax. This currently 872 excludes the busybox versions of these applications. 873 874 875 The following are supported 'part' options: 876 877 --size: The minimum partition size. Specify an integer value 878 such as 500. Multipliers k, M ang G can be used. If 879 not specified, the size is in MB. 880 You do not need this option if you use --source. 881 882 --fixed-size: Exact partition size. Value format is the same 883 as for --size option. This option cannot be 884 specified along with --size. If partition data 885 is larger than --fixed-size and error will be 886 raised when assembling disk image. 887 888 --source: This option is a wic-specific option that names the 889 source of the data that will populate the 890 partition. The most common value for this option 891 is 'rootfs', but can be any value which maps to a 892 valid 'source plugin' (see 'wic help plugins'). 893 894 If '--source rootfs' is used, it tells the wic 895 command to create a partition as large as needed 896 and to fill it with the contents of the root 897 filesystem pointed to by the '-r' wic command-line 898 option (or the equivalent rootfs derived from the 899 '-e' command-line option). The filesystem type 900 that will be used to create the partition is driven 901 by the value of the --fstype option specified for 902 the partition (see --fstype below). 903 904 If --source <plugin-name>' is used, it tells the 905 wic command to create a partition as large as 906 needed and to fill with the contents of the 907 partition that will be generated by the specified 908 plugin name using the data pointed to by the '-r' 909 wic command-line option (or the equivalent rootfs 910 derived from the '-e' command-line option). 911 Exactly what those contents and filesystem type end 912 up being are dependent on the given plugin 913 implementation. 914 915 If --source option is not used, the wic command 916 will create empty partition. --size parameter has 917 to be used to specify size of empty partition. 918 919 --ondisk or --ondrive: Forces the partition to be created on 920 a particular disk. 921 922 --fstype: Sets the file system type for the partition. These 923 apply to partitions created using '--source rootfs' (see 924 --source above). Valid values are: 925 926 vfat 927 msdos 928 ext2 929 ext3 930 ext4 931 btrfs 932 squashfs 933 erofs 934 swap 935 936 --fsoptions: Specifies a free-form string of options to be 937 used when mounting the filesystem. This string 938 will be copied into the /etc/fstab file of the 939 installed system and should be enclosed in 940 quotes. If not specified, the default string is 941 "defaults". 942 943 --fspassno: Specifies the order in which filesystem checks are done 944 at boot time by fsck. See fs_passno parameter of 945 fstab(5). This parameter will be copied into the 946 /etc/fstab file of the installed system. If not 947 specified the default value of "0" will be used. 948 949 --label label: Specifies the label to give to the filesystem 950 to be made on the partition. If the given 951 label is already in use by another filesystem, 952 a new label is created for the partition. 953 954 --use-label: This option is specific to wic. It makes wic to use the 955 label in /etc/fstab to specify a partition. If the 956 --use-label and --use-uuid are used at the same time, 957 we prefer the uuid because it is less likely to cause 958 name confliction. We don't support using this parameter 959 on the root partition since it requires an initramfs to 960 parse this value and we do not currently support that. 961 962 --active: Marks the partition as active. 963 964 --align (in KBytes): This option is specific to wic and says 965 to start a partition on an x KBytes 966 boundary. 967 968 --no-table: This option is specific to wic. Space will be 969 reserved for the partition and it will be 970 populated but it will not be added to the 971 partition table. It may be useful for 972 bootloaders. 973 974 --exclude-path: This option is specific to wic. It excludes the given 975 relative path from the resulting image. If the path 976 ends with a slash, only the content of the directory 977 is omitted, not the directory itself. This option only 978 has an effect with the rootfs source plugin. 979 980 --include-path: This option is specific to wic. It adds the contents 981 of the given path or a rootfs to the resulting image. 982 The option contains two fields, the origin and the 983 destination. When the origin is a rootfs, it follows 984 the same logic as the rootfs-dir argument and the 985 permissions and owners are kept. When the origin is a 986 path, it is relative to the directory in which wic is 987 running not the rootfs itself so use of an absolute 988 path is recommended, and the owner and group is set to 989 root:root. If no destination is given it is 990 automatically set to the root of the rootfs. This 991 option only has an effect with the rootfs source 992 plugin. 993 994 --change-directory: This option is specific to wic. It changes to the 995 given directory before copying the files. This 996 option is useful when we want to split a rootfs in 997 multiple partitions and we want to keep the right 998 permissions and usernames in all the partitions. 999 1000 --no-fstab-update: This option is specific to wic. It does not update the 1001 '/etc/fstab' stock file for the given partition. 1002 1003 --extra-space: This option is specific to wic. It adds extra 1004 space after the space filled by the content 1005 of the partition. The final size can go 1006 beyond the size specified by --size. 1007 By default, 10MB. This option cannot be used 1008 with --fixed-size option. 1009 1010 --overhead-factor: This option is specific to wic. The 1011 size of the partition is multiplied by 1012 this factor. It has to be greater than or 1013 equal to 1. The default value is 1.3. 1014 This option cannot be used with --fixed-size 1015 option. 1016 1017 --part-name: This option is specific to wic. It specifies name for GPT partitions. 1018 1019 --part-type: This option is specific to wic. It specifies partition 1020 type GUID for GPT partitions. 1021 List of partition type GUIDS can be found here: 1022 http://en.wikipedia.org/wiki/GUID_Partition_Table#Partition_type_GUIDs 1023 1024 --use-uuid: This option is specific to wic. It makes wic to generate 1025 random globally unique identifier (GUID) for the partition 1026 and use it in bootloader configuration to specify root partition. 1027 1028 --uuid: This option is specific to wic. It specifies partition UUID. 1029 It's useful if preconfigured partition UUID is added to kernel command line 1030 in bootloader configuration before running wic. In this case .wks file can 1031 be generated or modified to set preconfigured parition UUID using this option. 1032 1033 --fsuuid: This option is specific to wic. It specifies filesystem UUID. 1034 It's useful if preconfigured filesystem UUID is added to kernel command line 1035 in bootloader configuration before running wic. In this case .wks file can 1036 be generated or modified to set preconfigured filesystem UUID using this option. 1037 1038 --system-id: This option is specific to wic. It specifies partition system id. It's useful 1039 for the harware that requires non-default partition system ids. The parameter 1040 in one byte long hex number either with 0x prefix or without it. 1041 1042 --mkfs-extraopts: This option specifies extra options to pass to mkfs utility. 1043 NOTE, that wic uses default options for some filesystems, for example 1044 '-S 512' for mkfs.fat or '-F -i 8192' for mkfs.ext. Those options will 1045 not take effect when --mkfs-extraopts is used. This should be taken into 1046 account when using --mkfs-extraopts. 1047 1048 * bootloader 1049 1050 This command allows the user to specify various bootloader 1051 options. The following are supported 'bootloader' options: 1052 1053 --timeout: Specifies the number of seconds before the 1054 bootloader times out and boots the default option. 1055 1056 --append: Specifies kernel parameters. These will be added to 1057 bootloader command-line - for example, the syslinux 1058 APPEND or grub kernel command line. 1059 1060 --configfile: Specifies a user defined configuration file for 1061 the bootloader. This file must be located in the 1062 canned-wks folder or could be the full path to the 1063 file. Using this option will override any other 1064 bootloader option. 1065 1066 Note that bootloader functionality and boot partitions are 1067 implemented by the various --source plugins that implement 1068 bootloader functionality; the bootloader command essentially 1069 provides a means of modifying bootloader configuration. 1070 1071 * include 1072 1073 This command allows the user to include the content of .wks file 1074 into original .wks file. 1075 1076 Command uses the following syntax: 1077 1078 include <file> 1079 1080 The <file> is either path to the file or its name. If name is 1081 specified wic will try to find file in the directories with canned 1082 .wks files. 1083 1084""" 1085 1086wic_help_help = """ 1087NAME 1088 wic help - display a help topic 1089 1090DESCRIPTION 1091 Specify a help topic to display it. Topics are shown above. 1092""" 1093 1094 1095wic_help = """ 1096Creates a customized OpenEmbedded image. 1097 1098Usage: wic [--version] 1099 wic help [COMMAND or TOPIC] 1100 wic COMMAND [ARGS] 1101 1102 usage 1: Returns the current version of Wic 1103 usage 2: Returns detailed help for a COMMAND or TOPIC 1104 usage 3: Executes COMMAND 1105 1106 1107COMMAND: 1108 1109 list - List available canned images and source plugins 1110 ls - List contents of partitioned image or partition 1111 rm - Remove files or directories from the vfat or ext* partitions 1112 help - Show help for a wic COMMAND or TOPIC 1113 write - Write an image to a device 1114 cp - Copy files and directories to the vfat or ext* partitions 1115 create - Create a new OpenEmbedded image 1116 1117 1118TOPIC: 1119 overview - Presents an overall overview of Wic 1120 plugins - Presents an overview and API for Wic plugins 1121 kickstart - Presents a Wic kickstart file reference 1122 1123 1124Examples: 1125 1126 $ wic --version 1127 1128 Returns the current version of Wic 1129 1130 1131 $ wic help cp 1132 1133 Returns the SYNOPSIS and DESCRIPTION for the Wic "cp" command. 1134 1135 1136 $ wic list images 1137 1138 Returns the list of canned images (i.e. *.wks files located in 1139 the /scripts/lib/wic/canned-wks directory. 1140 1141 1142 $ wic create mkefidisk -e core-image-minimal 1143 1144 Creates an EFI disk image from artifacts used in a previous 1145 core-image-minimal build in standard BitBake locations 1146 (e.g. Cooked Mode). 1147 1148""" 1149