Index: cros_generate_stateful_update_payload.py |
diff --git a/cros_generate_stateful_update_payload.py b/cros_generate_stateful_update_payload.py |
deleted file mode 100755 |
index a2c170a84e6df299d898c8a65670271d71efd868..0000000000000000000000000000000000000000 |
--- a/cros_generate_stateful_update_payload.py |
+++ /dev/null |
@@ -1,95 +0,0 @@ |
-#!/usr/bin/python2.6 |
- |
-# Copyright (c) 2010 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. |
- |
-"""This module is responsible for generate a stateful update payload.""" |
- |
-import logging |
-import optparse |
-import os |
-import subprocess |
-import tempfile |
- |
-STATEFUL_FILE = 'stateful.tgz' |
- |
- |
-def GenerateStatefulPayload(image_path, output_directory, logger): |
- """Generates a stateful update payload given a full path to an image. |
- |
- Args: |
- image_path: Full path to the image. |
- output_directory: Path to the directory to leave the resulting output. |
- logger: logging instance. |
- """ |
- logger.info('Generating stateful update file.') |
- from_dir = os.path.dirname(image_path) |
- image = os.path.basename(image_path) |
- output_gz = os.path.join(output_directory, STATEFUL_FILE) |
- crosutils_dir = os.path.dirname(__file__) |
- |
- # Temporary directories for this function. |
- rootfs_dir = tempfile.mkdtemp(suffix='rootfs', prefix='tmp') |
- stateful_dir = tempfile.mkdtemp(suffix='stateful', prefix='tmp') |
- |
- # Mount the image to pull out the important directories. |
- try: |
- # Only need stateful partition, but this saves us having to manage our |
- # own loopback device. |
- subprocess.check_call(['%s/mount_gpt_image.sh' % crosutils_dir, |
- '--from=%s' % from_dir, |
- '--image=%s' % image, |
- '--read_only', |
- '--rootfs_mountpt=%s' % rootfs_dir, |
- '--stateful_mountpt=%s' % stateful_dir, |
- ]) |
- logger.info('Tarring up /usr/local and /var!') |
- subprocess.check_call(['sudo', |
- 'tar', |
- '-czf', |
- output_gz, |
- '--directory=%s' % stateful_dir, |
- '--hard-dereference', |
- '--transform=s,^dev_image,dev_image_new,', |
- '--transform=s,^var,var_new,', |
- 'dev_image', |
- 'var', |
- ]) |
- except: |
- logger.error('Failed to create stateful update file') |
- raise |
- finally: |
- # Unmount best effort regardless. |
- subprocess.call(['%s/mount_gpt_image.sh' % crosutils_dir, |
- '--unmount', |
- '--rootfs_mountpt=%s' % rootfs_dir, |
- '--stateful_mountpt=%s' % stateful_dir, |
- ]) |
- # Clean up our directories. |
- os.rmdir(rootfs_dir) |
- os.rmdir(stateful_dir) |
- |
- logger.info('Successfully generated %s' % output_gz) |
- |
- |
-def main(): |
- logging.basicConfig(level=logging.INFO) |
- logger = logging.getLogger(os.path.basename(__file__)) |
- parser = optparse.OptionParser() |
- parser.add_option('-i', '--image_path', |
- help='The image to generate the stateful update for.') |
- parser.add_option('-o', '--output_dir', |
- help='The path to the directory to output the update file.') |
- options, unused_args = parser.parse_args() |
- if not options.image_path: |
- parser.error('Missing image for stateful payload generator') |
- if not options.output_dir: |
- parser.error('Missing output directory for the payload generator') |
- |
- GenerateStatefulPayload(os.path.abspath(options.image_path), |
- options.output_dir, logger) |
- |
- |
-if __name__ == '__main__': |
- main() |