| 
						
						
							
								
							
						
						
					 | 
					 | 
					@ -132,6 +132,35 @@ def dismount_ovfs(): | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    run(["umount", "-l", OVERLAY_MERGED]) | 
					 | 
					 | 
					 | 
					    run(["umount", "-l", OVERLAY_MERGED]) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					def setup_git_options(cwd): | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					  # We sync FS object atimes (which EON doesn't use) and mtimes, but ctimes | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					  # are outside user control. Make sure Git is set up to ignore system ctimes, | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					  # because they change when we make hard links during finalize. Otherwise, | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					  # there is a lot of unnecessary churn. This appears to be a common need on | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					  # OSX as well: https://www.git-tower.com/blog/make-git-rebase-safe-on-osx/ | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					  try: | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    trustctime = run(["git", "config", "--get", "core.trustctime"], cwd) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    trustctime_set = (trustctime.strip() == "false") | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					  except subprocess.CalledProcessError: | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    trustctime_set = False | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					  if not trustctime_set: | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    cloudlog.info("Setting core.trustctime false") | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    run(["git", "config", "core.trustctime", "false"], cwd) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					  # We are temporarily using copytree to copy the directory, which also changes | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					  # inode numbers. Ignore those changes too. | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					  try: | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    checkstat = run(["git", "config", "--get", "core.checkStat"], cwd) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    checkstat_set = (checkstat.strip() == "minimal") | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					  except subprocess.CalledProcessError: | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    checkstat_set = False | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					  if not checkstat_set: | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    cloudlog.info("Setting core.checkState minimal") | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    run(["git", "config", "core.checkStat", "minimal"], cwd) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					def init_ovfs(): | 
					 | 
					 | 
					 | 
					def init_ovfs(): | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  cloudlog.info("preparing new safe staging area") | 
					 | 
					 | 
					 | 
					  cloudlog.info("preparing new safe staging area") | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  Params().put("UpdateAvailable", "0") | 
					 | 
					 | 
					 | 
					  Params().put("UpdateAvailable", "0") | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -151,17 +180,6 @@ def init_ovfs(): | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  if os.path.isfile(os.path.join(BASEDIR, ".overlay_consistent")): | 
					 | 
					 | 
					 | 
					  if os.path.isfile(os.path.join(BASEDIR, ".overlay_consistent")): | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    os.remove(os.path.join(BASEDIR, ".overlay_consistent")) | 
					 | 
					 | 
					 | 
					    os.remove(os.path.join(BASEDIR, ".overlay_consistent")) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  # We sync FS object atimes (which EON doesn't use) and mtimes, but ctimes | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  # are outside user control. Make sure Git is set up to ignore system ctimes, | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  # because they change when we make hard links during finalize. Otherwise, | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  # there is a lot of unnecessary churn. This appears to be a common need on | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  # OSX as well: https://www.git-tower.com/blog/make-git-rebase-safe-on-osx/ | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  run(["git", "config", "core.trustctime", "false"], BASEDIR) | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  # We are temporarily using copytree to copy the directory, which also changes | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  # inode numbers. Ignore those changes too. | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  run(["git", "config", "core.checkStat", "minimal"], BASEDIR) | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  # Leave a timestamped canary in BASEDIR to check at startup. The EON clock | 
					 | 
					 | 
					 | 
					  # Leave a timestamped canary in BASEDIR to check at startup. The EON clock | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  # should be correct by the time we get here. If the init file disappears, or | 
					 | 
					 | 
					 | 
					  # should be correct by the time we get here. If the init file disappears, or | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  # critical mtimes in BASEDIR are newer than .overlay_init, continue.sh can | 
					 | 
					 | 
					 | 
					  # critical mtimes in BASEDIR are newer than .overlay_init, continue.sh can | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -253,6 +271,8 @@ def finalize_from_ovfs_copy(): | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					def attempt_update(): | 
					 | 
					 | 
					 | 
					def attempt_update(): | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  cloudlog.info("attempting git update inside staging overlay") | 
					 | 
					 | 
					 | 
					  cloudlog.info("attempting git update inside staging overlay") | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					  setup_git_options(OVERLAY_MERGED) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  git_fetch_output = run(NICE_LOW_PRIORITY + ["git", "fetch"], OVERLAY_MERGED) | 
					 | 
					 | 
					 | 
					  git_fetch_output = run(NICE_LOW_PRIORITY + ["git", "fetch"], OVERLAY_MERGED) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					  cloudlog.info("git fetch success: %s", git_fetch_output) | 
					 | 
					 | 
					 | 
					  cloudlog.info("git fetch success: %s", git_fetch_output) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
					 | 
					
  |