| 
				
				
				
				 | 
			
			 | 
			@@ -0,0 +1,22 @@ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			import subprocess
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			import hashlib
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			from .misc import find_prefix
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			from .zfs import zfs_poolname, \
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    zfs_mountpoint, \
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    zfs_tag
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			def command_bootstrap(args):
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    version = subprocess.check_output(['freebsd-version']).decode('utf-8')
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    print('FreeBSD version:', version)
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    tags = [ 'freebsd-' + version.split('-')[0], 'freebsd-latest' ]
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    sha256 = hashlib.sha256(('FreeBSD ' + version).encode('utf-8')).hexdigest()
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    poolname = zfs_poolname()
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    name = find_prefix(poolname + '/focker/images/', sha256)
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    subprocess.check_output(['zfs', 'create', '-o', 'focker:sha256=' + sha256, name])
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    zfs_tag(name, tags)
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    res = subprocess.run(['bsdinstall', 'jail', zfs_mountpoint(name)])
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    if res.returncode != 0:
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        raise ValueError('bsdinstall failed')
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    subprocess.check_output(['zfs', 'set', 'rdonly=on', name])
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    subprocess.check_output(['zfs', 'snapshot', name + '@1'])
 |