| 
				
				
					
				
				
				 | 
			
			 | 
			@@ -7,3 +7,50 @@ Focker is a FreeBSD image orchestration tool in the vein of Docker. | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			## Installation
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			In order to use Focker you need a ZFS pool available in your FreeBSD installation.
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			### Installing the Python package
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			Run:
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			```bash
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			git clone https://github.com/sadaszewski/focker.git
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			cd focker/
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			python setup.py install
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			```
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			or (if you want an uninstaller):
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			```bash
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			git clone https://github.com/sadaszewski/focker.git
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			cd focker/
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			python setup.py sdist
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			pip install dist/focker-0.9.tgz
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			```
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			### Setting up ZFS
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			Upon first execution of the `focker` command, Focker will automatically create the necessary directories and ZFS datasets. You just need to exclude the unlikely case that you are already using /focker in your filesystem hierarchy. The layout after initialization will look the following:
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			```
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			/focker
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			/focker/images
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			/focker/jails
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			/focker/volumes
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			```
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			`images`, `jails`, and `volumes` have corresponding ZFS datasets with `canmount=off` so that they serve as mountpoint anchors for child entries.
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			### Preparing base image
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			To bootstrap the images system you need to install FreeBSD in jail mode to a ZFS dataset placed in /focker/images and provide two user-defined properties - `focker:sha256` and `focker:tags`. One way to achieve this would be the following:
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			```bash
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			TAGS="freebsd-latest freebsd-$(freebsd-version | cut -d'-' -f1)"
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			VERSION="FreeBSD $(freebsd-version)"
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			SHA256=$(echo -n ${VERSION} | sha256)
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			NAME=${SHA256:0:7}
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			zfs create -o focker:sha256=${SHA256} -o focker:tags="${TAGS}" zroot/focker/images/${NAME}
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			bsdinstall jail /focker/images/${NAME}
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			zfs set readonly=on zroot/focker/images/${NAME}
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			zfs snapshot zroot/focker/images/${NAME}@1
 | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			```
 |