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

Side by Side Diff: build/android/provision_devices.py

Issue 949323003: Write adb public key to devices during provision. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Write adb keys passed as args and seperate out write adb keys function. Created 5 years, 10 months 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
« 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/env python 1 #!/usr/bin/env python
2 # 2 #
3 # Copyright (c) 2013 The Chromium Authors. All rights reserved. 3 # Copyright (c) 2013 The Chromium 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 """Provisions Android devices with settings required for bots. 7 """Provisions Android devices with settings required for bots.
8 8
9 Usage: 9 Usage:
10 ./provision_devices.py [-d <device serial number>] 10 ./provision_devices.py [-d <device serial number>]
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
106 '\n'.join(local_props), as_root=True) 106 '\n'.join(local_props), as_root=True)
107 # Android will not respect the local props file if it is world writable. 107 # Android will not respect the local props file if it is world writable.
108 device.RunShellCommand( 108 device.RunShellCommand(
109 ['chmod', '644', constants.DEVICE_LOCAL_PROPERTIES_PATH], 109 ['chmod', '644', constants.DEVICE_LOCAL_PROPERTIES_PATH],
110 as_root=True) 110 as_root=True)
111 except device_errors.CommandFailedError as e: 111 except device_errors.CommandFailedError as e:
112 logging.warning(str(e)) 112 logging.warning(str(e))
113 113
114 # LOCAL_PROPERTIES_PATH = '/data/local.prop' 114 # LOCAL_PROPERTIES_PATH = '/data/local.prop'
115 115
116 def WriteAdbKeysFile(device, adb_keys_string):
117 path_list = constants.ADB_KEYS_FILE.split('/')
118 dir_path = '/'.join(path_list[:len(path_list)-1])
perezju 2015/02/25 09:35:41 nit: maybe that's just me, but I would go for: d
jbudorick 2015/02/25 14:09:07 I didn't know about posixpath. We should be using
navabi 2015/02/25 18:57:25 Yeah I don't like this split. But how about using:
jbudorick 2015/02/25 21:47:38 It depends on the path being manipulated: - for h
119 device.RunShellCommand('mkdir -p %s' % dir_path, as_root=True)
120 device.RunShellCommand('restorecon %s' % dir_path, as_root=True)
121 device.WriteFile(constants.ADB_KEYS_FILE, adb_keys_string, as_root=True)
122 device.RunShellCommand('restorecon %s' % constants.ADB_KEYS_FILE,
123 as_root=True)
124
116 125
117 def WipeDeviceData(device): 126 def WipeDeviceData(device):
118 """Wipes data from device, keeping only the adb_keys for authorization. 127 """Wipes data from device, keeping only the adb_keys for authorization.
119 128
120 After wiping data on a device that has been authorized, adb can still 129 After wiping data on a device that has been authorized, adb can still
121 communicate with the device, but after reboot the device will need to be 130 communicate with the device, but after reboot the device will need to be
122 re-authorized because the adb keys file is stored in /data/misc/adb/. 131 re-authorized because the adb keys file is stored in /data/misc/adb/.
123 Thus, adb_keys file is rewritten so the device does not need to be 132 Thus, adb_keys file is rewritten so the device does not need to be
124 re-authorized. 133 re-authorized.
125 134
126 Arguments: 135 Arguments:
127 device: the device to wipe 136 device: the device to wipe
128 """ 137 """
129 device_authorized = device.FileExists(constants.ADB_KEYS_FILE) 138 device_authorized = device.FileExists(constants.ADB_KEYS_FILE)
130 if device_authorized: 139 if device_authorized:
131 adb_keys = device.ReadFile(constants.ADB_KEYS_FILE, as_root=True) 140 adb_keys = device.ReadFile(constants.ADB_KEYS_FILE, as_root=True)
132 device.RunShellCommand('wipe data', as_root=True) 141 device.RunShellCommand('wipe data', as_root=True)
133 if device_authorized: 142 if device_authorized:
134 path_list = constants.ADB_KEYS_FILE.split('/') 143 WriteAdbKeysFile(device, adb_keys)
135 dir_path = '/'.join(path_list[:len(path_list)-1])
136 device.RunShellCommand('mkdir -p %s' % dir_path, as_root=True)
137 device.RunShellCommand('restorecon %s' % dir_path, as_root=True)
138 device.WriteFile(constants.ADB_KEYS_FILE, adb_keys, as_root=True)
139 device.RunShellCommand('restorecon %s' % constants.ADB_KEYS_FILE,
140 as_root=True)
141 144
142 145
143 def WipeDeviceIfPossible(device, timeout): 146 def WipeDeviceIfPossible(device, timeout):
144 try: 147 try:
145 device.EnableRoot() 148 device.EnableRoot()
146 WipeDeviceData(device) 149 WipeDeviceData(device)
147 device.Reboot(True, timeout=timeout, retries=0) 150 device.Reboot(True, timeout=timeout, retries=0)
148 except (errors.DeviceUnresponsiveError, device_errors.CommandFailedError): 151 except (errors.DeviceUnresponsiveError, device_errors.CommandFailedError):
149 pass 152 pass
150 153
151 154
152 def ProvisionDevice(device, options): 155 def ProvisionDevice(device, options):
153 if options.reboot_timeout: 156 if options.reboot_timeout:
154 reboot_timeout = options.reboot_timeout 157 reboot_timeout = options.reboot_timeout
155 elif (device.build_version_sdk >= 158 elif (device.build_version_sdk >=
156 constants.ANDROID_SDK_VERSION_CODES.LOLLIPOP): 159 constants.ANDROID_SDK_VERSION_CODES.LOLLIPOP):
157 reboot_timeout = _DEFAULT_TIMEOUTS.LOLLIPOP 160 reboot_timeout = _DEFAULT_TIMEOUTS.LOLLIPOP
158 else: 161 else:
159 reboot_timeout = _DEFAULT_TIMEOUTS.PRE_LOLLIPOP 162 reboot_timeout = _DEFAULT_TIMEOUTS.PRE_LOLLIPOP
160 163
164 if options.adb_key_files:
165 adb_keys = set()
perezju 2015/02/25 09:35:41 nit: does it really need to be a set? do we expect
navabi 2015/02/25 18:57:25 Not the way the current adb keys on the host are,
166 for adb_key_file in options.adb_key_files:
167 with open(adb_key_file, 'r') as f:
168 adb_public_key = f.readlines()[0]
perezju 2015/02/25 09:35:41 why do we keep only the first line? (earlier versi
navabi 2015/02/25 18:57:25 Because before we were reading the adb keys file o
169 adb_keys.add(adb_public_key)
170 adb_key_contents = '\n'.join(adb_keys)
171 WriteAdbKeysFile(device, adb_key_contents)
jbudorick 2015/02/25 14:09:07 This will wipe existing keys from the device. Woul
navabi 2015/02/25 18:57:25 This will not cause problems before the hosts have
jbudorick 2015/02/25 21:47:38 This makes me a little nervous, but ok.
172
161 try: 173 try:
162 if not options.skip_wipe: 174 if not options.skip_wipe:
163 WipeDeviceIfPossible(device, reboot_timeout) 175 WipeDeviceIfPossible(device, reboot_timeout)
164 try: 176 try:
165 device.EnableRoot() 177 device.EnableRoot()
166 except device_errors.CommandFailedError as e: 178 except device_errors.CommandFailedError as e:
167 logging.warning(str(e)) 179 logging.warning(str(e))
168 _ConfigureLocalProperties(device, options.enable_java_debug) 180 _ConfigureLocalProperties(device, options.enable_java_debug)
169 device_settings.ConfigureContentSettings( 181 device_settings.ConfigureContentSettings(
170 device, device_settings.DETERMINISTIC_DEVICE_SETTINGS) 182 device, device_settings.DETERMINISTIC_DEVICE_SETTINGS)
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
269 parser.add_argument('--disable-network', action='store_true', 281 parser.add_argument('--disable-network', action='store_true',
270 help='disable network access on devices') 282 help='disable network access on devices')
271 parser.add_argument('--disable-java-debug', action='store_false', 283 parser.add_argument('--disable-java-debug', action='store_false',
272 dest='enable_java_debug', default=True, 284 dest='enable_java_debug', default=True,
273 help='disable Java property asserts and JNI checking') 285 help='disable Java property asserts and JNI checking')
274 parser.add_argument('-t', '--target', default='Debug', 286 parser.add_argument('-t', '--target', default='Debug',
275 help='the build target (default: %(default)s)') 287 help='the build target (default: %(default)s)')
276 parser.add_argument('-r', '--auto-reconnect', action='store_true', 288 parser.add_argument('-r', '--auto-reconnect', action='store_true',
277 help='push binary which will reboot the device on adb' 289 help='push binary which will reboot the device on adb'
278 ' disconnections') 290 ' disconnections')
291 parser.add_argument('--adb-key-files', type=str, nargs='+',
292 help='list of adb keys to push to device')
279 args = parser.parse_args() 293 args = parser.parse_args()
280 constants.SetBuildType(args.target) 294 constants.SetBuildType(args.target)
281 295
282 return ProvisionDevices(args) 296 return ProvisionDevices(args)
283 297
284 298
285 if __name__ == '__main__': 299 if __name__ == '__main__':
286 sys.exit(main()) 300 sys.exit(main())
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