blob: 3a73eb48f886ab7dcca8bdf7ce8f4427ce08afc7 [file] [log] [blame]
# -*- coding: utf-8 -*-
# Copyright 2018 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Script to generate a Chromium OS update for use by the update engine.
If a source .bin is specified, the update is assumed to be a delta update.
"""
from __future__ import print_function
import sys
from chromite.lib import commandline
from chromite.lib import cros_logging as logging
from chromite.lib.paygen import paygen_payload_lib
assert sys.version_info >= (3, 6), 'This module requires Python 3.6+'
def ParseArguments(argv):
"""Returns a namespace for the CLI arguments."""
parser = commandline.ArgumentParser(description=__doc__)
parser.add_argument('--tgt-image',
help='The path (to local disk or Google Storage Bucket)'
' of the target image to build the payload for.')
parser.add_argument('--src-image',
help='The path (to local disk or Google Storage Bucket)'
' of the source image. If specified, this makes a delta'
' update payload.')
parser.add_argument('--output', type='path', help='Output file.')
parser.add_argument('--private-key', type='path',
help='Path to private key in .pem format.')
parser.add_argument('--check', action='store_true',
help='If passed, verifies the integrity of the payload')
parser.add_argument('--extract', action='store_true',
help='If set, extract old/new kernel/rootfs to '
'[old|new]_[kern|root].dat. Useful for debugging.')
parser.add_argument('--work-dir', type='path',
help='Path to a temporary directory in the chroot.')
parser.add_argument('--payload', type='path',
help='Path to the input payload file. Only used when '
'trying to generate the payload properties file using '
'the given payload. If --output is not passed, the '
'payload properties file path will be generated by '
'appending .json to the payload filename itself.')
opts = parser.parse_args(argv)
opts.Freeze()
return opts
def main(argv):
opts = ParseArguments(argv)
if opts.payload:
# We only want the payload's metadata. Create it and exit.
logging.info('Generating payload properties file.')
paygen_payload_lib.GenerateUpdatePayloadPropertiesFile(opts.payload,
opts.output)
return
return paygen_payload_lib.GenerateUpdatePayload(
opts.tgt_image, opts.output, src_image=opts.src_image,
work_dir=opts.work_dir, private_key=opts.private_key, check=opts.check)