Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(625)

Side by Side Diff: bin/cros_image_to_target.py

Issue 5149002: Use new stateful image builder (Closed) Base URL: http://git.chromium.org/git/crosutils.git@master
Patch Set: Created 10 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/python 1 #!/usr/bin/python
2 # 2 #
3 # Copyright (c) 2010 The Chromium OS Authors. All rights reserved. 3 # Copyright (c) 2010 The Chromium OS Authors. All rights reserved.
4 # Use of this source code is governed by a BSD-style license that can be 4 # Use of this source code is governed by a BSD-style license that can be
5 # found in the LICENSE file. 5 # found in the LICENSE file.
6 6
7 """Create and copy update image to target host. 7 """Create and copy update image to target host.
8 8
9 auto-update and devserver change out from beneath us often enough 9 auto-update and devserver change out from beneath us often enough
10 that despite having to duplicate a litte code, it seems that the 10 that despite having to duplicate a litte code, it seems that the
(...skipping 15 matching lines...) Expand all
26 import traceback 26 import traceback
27 27
28 from xml.dom import minidom 28 from xml.dom import minidom
29 29
30 30
31 # This is the default filename within the image directory to load updates from 31 # This is the default filename within the image directory to load updates from
32 DEFAULT_IMAGE_NAME = 'chromiumos_image.bin' 32 DEFAULT_IMAGE_NAME = 'chromiumos_image.bin'
33 33
34 # The filenames we provide to clients to pull updates 34 # The filenames we provide to clients to pull updates
35 UPDATE_FILENAME = 'update.gz' 35 UPDATE_FILENAME = 'update.gz'
36 STATEFUL_FILENAME = 'stateful.image.gz' 36 STATEFUL_FILENAME = 'stateful.tgz'
37 37
38 # How long do we wait for the server to start before launching client 38 # How long do we wait for the server to start before launching client
39 SERVER_STARTUP_WAIT = 1 39 SERVER_STARTUP_WAIT = 1
40 40
41 41
42 class Command(object): 42 class Command(object):
43 """Shell command ease-ups for Python.""" 43 """Shell command ease-ups for Python."""
44 44
45 def __init__(self, env): 45 def __init__(self, env):
46 self.env = env 46 self.env = env
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after
185 return True 185 return True
186 186
187 if not self.cmd.Run(self.CrosUtilsPath('cros_generate_update_payload'), 187 if not self.cmd.Run(self.CrosUtilsPath('cros_generate_update_payload'),
188 '--image=%s' % src, '--output=%s' % dst, 188 '--image=%s' % src, '--output=%s' % dst,
189 '--patch_kernel'): 189 '--patch_kernel'):
190 self.Error('generate_payload failed') 190 self.Error('generate_payload failed')
191 return False 191 return False
192 192
193 return True 193 return True
194 194
195 def BuildStateful(self, src, dst): 195 def BuildStateful(self, src, dst_dir, dst_file):
196 """Create a stateful partition update image.""" 196 """Create a stateful partition update image."""
197 197
198 if self.GetCached(src, dst): 198 if self.GetCached(src, dst_file):
199 self.Info('Using cached stateful %s' % dst) 199 self.Info('Using cached stateful %s' % dst_file)
200 return True 200 return True
201 201
202 cgpt = self.ChrootPath('/usr/bin/cgpt') 202 return self.cmd.Run(self.CrosUtilsPath(
203 offset = self.cmd.OutputOneLine(cgpt, 'show', '-b', '-i', '1', src) 203 'cros_generate_stateful_update_payload'),
204 size = self.cmd.OutputOneLine(cgpt, 'show', '-s', '-i', '1', src) 204 '--image=%s' % src, '--output=%s' % dst_dir)
205 if None in (size, offset):
206 self.Error('Unable to use cgpt to get image geometry')
207 return False
208
209 return self.cmd.RunPipe([['dd', 'if=%s' % src, 'bs=512',
210 'skip=%s' % offset, 'count=%s' % size],
211 ['gzip', '-c']], outfile=dst)
212 205
213 def GetSize(self, filename): 206 def GetSize(self, filename):
214 return os.path.getsize(filename) 207 return os.path.getsize(filename)
215 208
216 def GetHash(self, filename): 209 def GetHash(self, filename):
217 return self.cmd.RunPipe([['openssl', 'sha1', '-binary'], 210 return self.cmd.RunPipe([['openssl', 'sha1', '-binary'],
218 ['openssl', 'base64']], 211 ['openssl', 'base64']],
219 infile=filename, 212 infile=filename,
220 capture=True, oneline=True) 213 capture=True, oneline=True)
221 214
(...skipping 385 matching lines...) Expand 10 before | Expand all | Expand 10 after
607 cros_env.Fatal() 600 cros_env.Fatal()
608 601
609 elif not options.server_only: 602 elif not options.server_only:
610 parser.error('Either --server-only must be specified or ' 603 parser.error('Either --server-only must be specified or '
611 '--remote=<client> needs to be given') 604 '--remote=<client> needs to be given')
612 605
613 update_file = os.path.join(image_directory, UPDATE_FILENAME) 606 update_file = os.path.join(image_directory, UPDATE_FILENAME)
614 stateful_file = os.path.join(image_directory, STATEFUL_FILENAME) 607 stateful_file = os.path.join(image_directory, STATEFUL_FILENAME)
615 608
616 if (not cros_env.GenerateUpdatePayload(image_file, update_file) or 609 if (not cros_env.GenerateUpdatePayload(image_file, update_file) or
617 not cros_env.BuildStateful(image_file, stateful_file)): 610 not cros_env.BuildStateful(image_file, image_directory, stateful_file)):
618 cros_env.Fatal() 611 cros_env.Fatal()
619 612
620 cros_env.CreateServer(options.port, update_file, stateful_file) 613 cros_env.CreateServer(options.port, update_file, stateful_file)
621 614
622 exit_status = 1 615 exit_status = 1
623 if options.server_only: 616 if options.server_only:
624 child = None 617 child = None
625 else: 618 else:
626 # Start an "image-to-live" instance that will pull bits from the server 619 # Start an "image-to-live" instance that will pull bits from the server
627 child = os.fork() 620 child = os.fork()
(...skipping 29 matching lines...) Expand all
657 650
658 if child: 651 if child:
659 os.kill(child, 15) 652 os.kill(child, 15)
660 653
661 cros_env.Info('Server exiting with status %d' % exit_status) 654 cros_env.Info('Server exiting with status %d' % exit_status)
662 sys.exit(exit_status) 655 sys.exit(exit_status)
663 656
664 657
665 if __name__ == '__main__': 658 if __name__ == '__main__':
666 main(sys.argv) 659 main(sys.argv)
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698