|  |  |  | @ -76,12 +76,12 @@ class WaitTimeHelper: | 
			
		
	
		
			
				
					|  |  |  |  |     self.ready_event.set() | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | def wait_between_updates(ready_event): | 
			
		
	
		
			
				
					|  |  |  |  | def wait_between_updates(ready_event, t=60*10): | 
			
		
	
		
			
				
					|  |  |  |  |   ready_event.clear() | 
			
		
	
		
			
				
					|  |  |  |  |   if SHORT: | 
			
		
	
		
			
				
					|  |  |  |  |     ready_event.wait(timeout=10) | 
			
		
	
		
			
				
					|  |  |  |  |   else: | 
			
		
	
		
			
				
					|  |  |  |  |     ready_event.wait(timeout=60 * 10) | 
			
		
	
		
			
				
					|  |  |  |  |     ready_event.wait(timeout=t) | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | def link(src, dest): | 
			
		
	
	
		
			
				
					|  |  |  | @ -341,50 +341,52 @@ def main(): | 
			
		
	
		
			
				
					|  |  |  |  |   time.sleep(30) | 
			
		
	
		
			
				
					|  |  |  |  |   wait_helper = WaitTimeHelper() | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |   while True: | 
			
		
	
		
			
				
					|  |  |  |  |   while not wait_helper.shutdown: | 
			
		
	
		
			
				
					|  |  |  |  |     update_failed_count += 1 | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     # Check for internet every 30s | 
			
		
	
		
			
				
					|  |  |  |  |     time_wrong = datetime.datetime.utcnow().year < 2019 | 
			
		
	
		
			
				
					|  |  |  |  |     ping_failed = subprocess.call(["ping", "-W", "4", "-c", "1", "8.8.8.8"]) | 
			
		
	
		
			
				
					|  |  |  |  |     if ping_failed or time_wrong: | 
			
		
	
		
			
				
					|  |  |  |  |       wait_between_updates(wait_helper.ready_event, t=30) | 
			
		
	
		
			
				
					|  |  |  |  |       continue | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     # Wait until we have a valid datetime to initialize the overlay | 
			
		
	
		
			
				
					|  |  |  |  |     if not (ping_failed or time_wrong): | 
			
		
	
		
			
				
					|  |  |  |  |       try: | 
			
		
	
		
			
				
					|  |  |  |  |         # If the git directory has modifcations after we created the overlay | 
			
		
	
		
			
				
					|  |  |  |  |         # we need to recreate the overlay | 
			
		
	
		
			
				
					|  |  |  |  |         if overlay_init_done: | 
			
		
	
		
			
				
					|  |  |  |  |           overlay_init_fn = os.path.join(BASEDIR, ".overlay_init") | 
			
		
	
		
			
				
					|  |  |  |  |           git_dir_path = os.path.join(BASEDIR, ".git") | 
			
		
	
		
			
				
					|  |  |  |  |           new_files = run(["find", git_dir_path, "-newer", overlay_init_fn]) | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |           if len(new_files.splitlines()): | 
			
		
	
		
			
				
					|  |  |  |  |             cloudlog.info(".git directory changed, recreating overlay") | 
			
		
	
		
			
				
					|  |  |  |  |             overlay_init_done = False | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         if not overlay_init_done: | 
			
		
	
		
			
				
					|  |  |  |  |           init_ovfs() | 
			
		
	
		
			
				
					|  |  |  |  |           overlay_init_done = True | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         if params.get("IsOffroad") == b"1": | 
			
		
	
		
			
				
					|  |  |  |  |           attempt_update() | 
			
		
	
		
			
				
					|  |  |  |  |           update_failed_count = 0 | 
			
		
	
		
			
				
					|  |  |  |  |         else: | 
			
		
	
		
			
				
					|  |  |  |  |           cloudlog.info("not running updater, openpilot running") | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |       except subprocess.CalledProcessError as e: | 
			
		
	
		
			
				
					|  |  |  |  |         cloudlog.event( | 
			
		
	
		
			
				
					|  |  |  |  |           "update process failed", | 
			
		
	
		
			
				
					|  |  |  |  |           cmd=e.cmd, | 
			
		
	
		
			
				
					|  |  |  |  |           output=e.output, | 
			
		
	
		
			
				
					|  |  |  |  |           returncode=e.returncode | 
			
		
	
		
			
				
					|  |  |  |  |         ) | 
			
		
	
		
			
				
					|  |  |  |  |         overlay_init_done = False | 
			
		
	
		
			
				
					|  |  |  |  |       except Exception: | 
			
		
	
		
			
				
					|  |  |  |  |         cloudlog.exception("uncaught updated exception, shouldn't happen") | 
			
		
	
		
			
				
					|  |  |  |  |     # Attempt an update | 
			
		
	
		
			
				
					|  |  |  |  |     try: | 
			
		
	
		
			
				
					|  |  |  |  |       # If the git directory has modifcations after we created the overlay | 
			
		
	
		
			
				
					|  |  |  |  |       # we need to recreate the overlay | 
			
		
	
		
			
				
					|  |  |  |  |       if overlay_init_done: | 
			
		
	
		
			
				
					|  |  |  |  |         overlay_init_fn = os.path.join(BASEDIR, ".overlay_init") | 
			
		
	
		
			
				
					|  |  |  |  |         git_dir_path = os.path.join(BASEDIR, ".git") | 
			
		
	
		
			
				
					|  |  |  |  |         new_files = run(["find", git_dir_path, "-newer", overlay_init_fn]) | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         if len(new_files.splitlines()): | 
			
		
	
		
			
				
					|  |  |  |  |           cloudlog.info(".git directory changed, recreating overlay") | 
			
		
	
		
			
				
					|  |  |  |  |           overlay_init_done = False | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |       if not overlay_init_done: | 
			
		
	
		
			
				
					|  |  |  |  |         init_ovfs() | 
			
		
	
		
			
				
					|  |  |  |  |         overlay_init_done = True | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |       if params.get("IsOffroad") == b"1": | 
			
		
	
		
			
				
					|  |  |  |  |         attempt_update() | 
			
		
	
		
			
				
					|  |  |  |  |         update_failed_count = 0 | 
			
		
	
		
			
				
					|  |  |  |  |       else: | 
			
		
	
		
			
				
					|  |  |  |  |         cloudlog.info("not running updater, openpilot running") | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     except subprocess.CalledProcessError as e: | 
			
		
	
		
			
				
					|  |  |  |  |       cloudlog.event( | 
			
		
	
		
			
				
					|  |  |  |  |         "update process failed", | 
			
		
	
		
			
				
					|  |  |  |  |         cmd=e.cmd, | 
			
		
	
		
			
				
					|  |  |  |  |         output=e.output, | 
			
		
	
		
			
				
					|  |  |  |  |         returncode=e.returncode | 
			
		
	
		
			
				
					|  |  |  |  |       ) | 
			
		
	
		
			
				
					|  |  |  |  |       overlay_init_done = False | 
			
		
	
		
			
				
					|  |  |  |  |     except Exception: | 
			
		
	
		
			
				
					|  |  |  |  |       cloudlog.exception("uncaught updated exception, shouldn't happen") | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     params.put("UpdateFailedCount", str(update_failed_count)) | 
			
		
	
		
			
				
					|  |  |  |  |     wait_between_updates(wait_helper.ready_event) | 
			
		
	
		
			
				
					|  |  |  |  |     if wait_helper.shutdown: | 
			
		
	
		
			
				
					|  |  |  |  |       break | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |   # We've been signaled to shut down | 
			
		
	
		
			
				
					|  |  |  |  |   dismount_ovfs() | 
			
		
	
	
		
			
				
					|  |  |  | 
 |