|  |  |  | @ -52,6 +52,8 @@ OVERLAY_METADATA = os.path.join(STAGING_ROOT, "metadata") | 
			
		
	
		
			
				
					|  |  |  |  | OVERLAY_MERGED = os.path.join(STAGING_ROOT, "merged") | 
			
		
	
		
			
				
					|  |  |  |  | FINALIZED = os.path.join(STAGING_ROOT, "finalized") | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | OVERLAY_INIT = Path(os.path.join(BASEDIR, ".overlay_init")) | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | DAYS_NO_CONNECTIVITY_MAX = 14     # do not allow to engage after this many days | 
			
		
	
		
			
				
					|  |  |  |  | DAYS_NO_CONNECTIVITY_PROMPT = 10  # send an offroad prompt after this many days | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
	
		
			
				
					|  |  |  | @ -134,12 +136,10 @@ def dismount_overlay() -> None: | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | def init_overlay() -> None: | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |   overlay_init_file = Path(os.path.join(BASEDIR, ".overlay_init")) | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |   # Re-create the overlay if BASEDIR/.git has changed since we created the overlay | 
			
		
	
		
			
				
					|  |  |  |  |   if overlay_init_file.is_file(): | 
			
		
	
		
			
				
					|  |  |  |  |   if OVERLAY_INIT.is_file(): | 
			
		
	
		
			
				
					|  |  |  |  |     git_dir_path = os.path.join(BASEDIR, ".git") | 
			
		
	
		
			
				
					|  |  |  |  |     new_files = run(["find", git_dir_path, "-newer", str(overlay_init_file)]) | 
			
		
	
		
			
				
					|  |  |  |  |     new_files = run(["find", git_dir_path, "-newer", str(OVERLAY_INIT)]) | 
			
		
	
		
			
				
					|  |  |  |  |     if not len(new_files.splitlines()): | 
			
		
	
		
			
				
					|  |  |  |  |       # A valid overlay already exists | 
			
		
	
		
			
				
					|  |  |  |  |       return | 
			
		
	
	
		
			
				
					|  |  |  | @ -170,7 +170,7 @@ def init_overlay() -> None: | 
			
		
	
		
			
				
					|  |  |  |  |   consistent_file = Path(os.path.join(BASEDIR, ".overlay_consistent")) | 
			
		
	
		
			
				
					|  |  |  |  |   if consistent_file.is_file(): | 
			
		
	
		
			
				
					|  |  |  |  |     consistent_file.unlink() | 
			
		
	
		
			
				
					|  |  |  |  |   overlay_init_file.touch() | 
			
		
	
		
			
				
					|  |  |  |  |   OVERLAY_INIT.touch() | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |   os.sync() | 
			
		
	
		
			
				
					|  |  |  |  |   overlay_opts = f"lowerdir={BASEDIR},upperdir={OVERLAY_UPPER},workdir={OVERLAY_METADATA}" | 
			
		
	
	
		
			
				
					|  |  |  | @ -419,9 +419,6 @@ def main() -> None: | 
			
		
	
		
			
				
					|  |  |  |  |     t = datetime.datetime.utcnow().isoformat() | 
			
		
	
		
			
				
					|  |  |  |  |     params.put("InstallDate", t.encode('utf8')) | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |   overlay_init = Path(os.path.join(BASEDIR, ".overlay_init")) | 
			
		
	
		
			
				
					|  |  |  |  |   overlay_init.unlink(missing_ok=True) | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |   updater = Updater() | 
			
		
	
		
			
				
					|  |  |  |  |   update_failed_count = 0  # TODO: Load from param? | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
	
		
			
				
					|  |  |  | @ -461,11 +458,11 @@ def main() -> None: | 
			
		
	
		
			
				
					|  |  |  |  |         returncode=e.returncode | 
			
		
	
		
			
				
					|  |  |  |  |       ) | 
			
		
	
		
			
				
					|  |  |  |  |       exception = f"command failed: {e.cmd}\n{e.output}" | 
			
		
	
		
			
				
					|  |  |  |  |       overlay_init.unlink(missing_ok=True) | 
			
		
	
		
			
				
					|  |  |  |  |       OVERLAY_INIT.unlink(missing_ok=True) | 
			
		
	
		
			
				
					|  |  |  |  |     except Exception as e: | 
			
		
	
		
			
				
					|  |  |  |  |       cloudlog.exception("uncaught updated exception, shouldn't happen") | 
			
		
	
		
			
				
					|  |  |  |  |       exception = str(e) | 
			
		
	
		
			
				
					|  |  |  |  |       overlay_init.unlink(missing_ok=True) | 
			
		
	
		
			
				
					|  |  |  |  |       OVERLAY_INIT.unlink(missing_ok=True) | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |     try: | 
			
		
	
		
			
				
					|  |  |  |  |       params.put("UpdaterState", "idle") | 
			
		
	
	
		
			
				
					|  |  |  | 
 |