Chromium Code Reviews| OLD | NEW | 
|---|---|
| 1 #!/usr/bin/env python | 1 #!/usr/bin/env python | 
| 2 | 2 | 
| 3 # Copyright (c) 2011 The Chromium OS Authors. All rights reserved. | 3 # Copyright (c) 2011 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 """Build packages on a host machine, then install them on the local target. | 7 """Build packages on a host machine, then install them on the local target. | 
| 8 | 8 | 
| 9 Contacts a devserver (trunk/src/platform/dev/devserver.py) and | 9 Contacts a devserver (trunk/src/platform/dev/devserver.py) and | 
| 10 requests that it build a package, then performs a binary install of | 10 requests that it build a package, then performs a binary install of | 
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 65 'CONFIG_PROTECT': '-*', | 65 'CONFIG_PROTECT': '-*', | 
| 66 'FEATURES': '-sandbox', | 66 'FEATURES': '-sandbox', | 
| 67 'ACCEPT_KEYWORDS': 'arm x86 ~arm ~x86', | 67 'ACCEPT_KEYWORDS': 'arm x86 ~arm ~x86', | 
| 68 'ROOT': '/', | 68 'ROOT': '/', | 
| 69 }) | 69 }) | 
| 70 | 70 | 
| 71 def GeneratePackageRequest(self, package_name): | 71 def GeneratePackageRequest(self, package_name): | 
| 72 """Build the POST string that conveys our options to the devserver.""" | 72 """Build the POST string that conveys our options to the devserver.""" | 
| 73 post_data = {'board': self.board_name, | 73 post_data = {'board': self.board_name, | 
| 74 'pkg': package_name, | 74 'pkg': package_name, | 
| 75 'use': FLAGS.use, | 75 'features': os.environ.get('FEATURES', None), | 
| 76 'use': os.environ.get('USE', None), | |
| 76 'accept_stable': FLAGS.accept_stable, | 77 'accept_stable': FLAGS.accept_stable, | 
| 77 } | 78 } | 
| 78 post_data = dict([(key, value) for (key, value) in post_data.iteritems() | 79 post_data = dict([(key, value) for (key, value) in post_data.iteritems() | 
| 79 if value]) | 80 if value]) | 
| 80 return urllib.urlencode(post_data) | 81 return urllib.urlencode(post_data) | 
| 81 | 82 | 
| 82 def RequestPackageBuild(self, package_name): | 83 def RequestPackageBuild(self, package_name): | 
| 83 """Contacts devserver to request a build.""" | 84 """Contacts devserver to request a build.""" | 
| 84 try: | 85 try: | 
| 85 result = urllib2.urlopen(self.devkit_url + '/build', | 86 result = urllib2.urlopen(self.devkit_url + '/build', | 
| 86 data=self.GeneratePackageRequest(package_name)) | 87 data=self.GeneratePackageRequest(package_name)) | 
| 87 print result.read() | 88 print result.read() | 
| 88 result.close() | 89 result.close() | 
| 89 | 90 | 
| 90 except urllib2.HTTPError, e: | 91 except urllib2.HTTPError, e: | 
| 91 # The exception includes the content, which is the error mesage | 92 # The exception includes the content, which is the error mesage | 
| 92 sys.exit(e.read()) | 93 sys.exit(e.read()) | 
| 93 | 94 | 
| 94 | 95 | 
| 95 def main(): | 96 def main(): | 
| 96 global FLAGS | 97 global FLAGS | 
| 97 parser = optparse.OptionParser(usage='usage: %prog [options] package_name') | 98 parser = optparse.OptionParser(usage='usage: %prog [options] package_name') | 
| 98 parser.add_option('--accept_stable', | 99 parser.add_option('--accept_stable', | 
| 99 action='store_true', dest='accept_stable', default=False, | 100 action='store_true', dest='accept_stable', default=False, | 
| 100 help=('Build even if a cros_workon package is not ' | 101 help=('Build even if a cros_workon package is not ' | 
| 101 'using the live package')) | 102 'using the live package')) | 
| 102 parser.add_option('-n', '--no_devserver', | 103 parser.add_option('-n', '--no_devserver', | 
| 103 action='store_false', dest='call_devserver', default=True, | 104 action='store_false', dest='call_devserver', default=True, | 
| 104 help='Do not actually ask the server to build') | 105 help='Do not actually ask the server to build') | 
| 105 parser.add_option('--use', '--USE', | |
| 106 dest='use', default=None, | |
| 107 help='USE flags to pass to emerge on the server') | |
| 108 | 106 | 
| 109 (FLAGS, remaining_arguments) = parser.parse_args() | 107 (FLAGS, remaining_arguments) = parser.parse_args() | 
| 110 if len(remaining_arguments) != 1: | 108 if len(remaining_arguments) != 1: | 
| 111 parser.print_help() | 109 parser.print_help() | 
| 112 sys.exit('Need exactly one package name') | 110 sys.exit('Need exactly one package name') | 
| 113 | 111 | 
| 114 package_name = remaining_arguments[0] | 112 package_name = remaining_arguments[0] | 
| 115 | 113 | 
| 116 try: | 114 try: | 
| 117 subprocess.check_call(['mount', '-o', 'remount,exec', '/tmp']) | 115 subprocess.check_call(['mount', '-o', 'remount,exec', '/tmp']) | 
| 118 merger = GMerger(open('/etc/lsb-release').readlines()) | 116 merger = GMerger(open('/etc/lsb-release').readlines()) | 
| 119 merger.SetupPortageEnvironment(os.environ) | |
| 120 merger.RemountOrChangeRoot(os.environ) | |
| 121 if FLAGS.call_devserver: | 117 if FLAGS.call_devserver: | 
| 122 merger.RequestPackageBuild(package_name) | 118 merger.RequestPackageBuild(package_name) | 
| 123 else: | 119 else: | 
| 124 print 'Not requesting fresh build on server---installing whatever we find' | 120 print 'Not requesting fresh build on server---installing whatever we find' | 
| 125 | 121 | 
| 126 print 'Emerging ', package_name | 122 print 'Emerging ', package_name | 
| 123 merger.SetupPortageEnvironment(os.environ) | |
| 
 
sosa
2011/04/13 20:04:08
Move down to not affect environment passed to buil
 
 | |
| 124 merger.RemountOrChangeRoot(os.environ) | |
| 127 subprocess.check_call([ | 125 subprocess.check_call([ | 
| 128 'emerge', '--getbinpkgonly', '--usepkgonly', package_name]) | 126 'emerge', '--getbinpkgonly', '--usepkgonly', package_name]) | 
| 129 finally: | 127 finally: | 
| 130 subprocess.call(['mount', '-o', 'remount,noexec', '/tmp']) | 128 subprocess.call(['mount', '-o', 'remount,noexec', '/tmp']) | 
| 131 | 129 | 
| 132 | 130 | 
| 133 if __name__ == '__main__': | 131 if __name__ == '__main__': | 
| 134 main() | 132 main() | 
| OLD | NEW |