| @@ -37,7 +37,7 @@ pip install dist/focker-0.9.tgz | |||||
| ### Setting up ZFS | ### 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: | |||||
| 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 | ||||
| @@ -50,7 +50,7 @@ Upon first execution of the `focker` command, Focker will automatically create t | |||||
| ### Preparing base image | ### 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: | |||||
| 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 (using Bash shell): | |||||
| ```bash | ```bash | ||||
| TAGS="freebsd-latest freebsd-$(freebsd-version | cut -d'-' -f1)" | TAGS="freebsd-latest freebsd-$(freebsd-version | cut -d'-' -f1)" | ||||
| @@ -139,49 +139,65 @@ focker | |||||
| Individual combinations are briefly described below: | Individual combinations are briefly described below: | ||||
| #### focker image | |||||
| #### focker image|img|im|i | |||||
| The `focker image` mode groups commands related to Focker images. | The `focker image` mode groups commands related to Focker images. | ||||
| ##### build FOCKER_DIR [--tags TAG [...TAG]] | |||||
| ##### build|b FOCKER_DIR [--tags TAG [...TAG]] | |||||
| Build a Focker image according to the specification in a Fockerfile present in the specified FOCKER_DIR. Fockerfile syntax is very straightforward and explained below. | Build a Focker image according to the specification in a Fockerfile present in the specified FOCKER_DIR. Fockerfile syntax is very straightforward and explained below. | ||||
| ##### tag REFERENCE TAG [...TAG] | |||||
| ##### tag|t REFERENCE TAG [...TAG] | |||||
| Applies one or more tags to the given image. REFERENCE can be the SHA256 of an image or one of its existing tags. It can be just a few first characters as long as they are unambiguous. | Applies one or more tags to the given image. REFERENCE can be the SHA256 of an image or one of its existing tags. It can be just a few first characters as long as they are unambiguous. | ||||
| ##### untag TAG [...TAG] | |||||
| ##### untag|u TAG [...TAG] | |||||
| Removes one or more image tags. | Removes one or more image tags. | ||||
| ##### list [--full-sha256|-f] | |||||
| ##### list|ls|l [--full-sha256|-f] | |||||
| Lists existing Focker images, optionally with full SHA256 checksums (instead of the default 7 first characters). | Lists existing Focker images, optionally with full SHA256 checksums (instead of the default 7 first characters). | ||||
| ##### prune | |||||
| ##### prune|p | |||||
| Greedily removes existing Focker images without tags and without dependents. | Greedily removes existing Focker images without tags and without dependents. | ||||
| ##### remove REFERENCE | |||||
| ##### remove|r REFERENCE | |||||
| Removes the specified image. | Removes the specified image. | ||||
| #### focker jail | |||||
| #### focker jail|j | |||||
| ##### create | |||||
| The `focker jail` mode groups commands related to Focker-managed jails. | |||||
| ##### start | |||||
| ##### create|c IMAGE [--command|-c COMMAND] [--env|-e VAR1:VALUE1 [...VARN:VALUEN]] [--mounts|-m FROM1:ON1 [...FROMN:ONN]] [--hostname|-n HOSTNAME] | |||||
| ##### stop | |||||
| Creates a new Focker-managed jail. A jail consists of a clone of the given `IMAGE` and an entry in `/etc/jail.conf`. The configuration entry uses `exec.prestart` and `exec.start` to specify how the runtime environment (mounts and environmental variables) should be set up. It also calls `COMMAND` as last in `exec.start`. If not specified `COMMAND` defaults to `/bin/sh`. The hostname can be specified using the `HOSTNAME` parameter. Mounts and environment variables are provided as tuples separated by a colon (:). The environmental variable specification consists of variable name followed by variable value. The mount specification consists of the "from path", followed by the "on path". "From path" can be a local system path or a volume name. | |||||
| ##### remove | |||||
| ##### start|s REFERENCE | |||||
| ##### exec | |||||
| Starts the given jail specified by `REFERENCE`. `REFERENCE` can be the SHA256 of an existing jail or one of its existing tags. It can be just a few first characters as long as they are unambiguous. This command is equivalent of calling `jail -c`. | |||||
| ##### oneshot | |||||
| ##### stop|S REFERENCE | |||||
| ##### list | |||||
| Stops the given jail specified by `REFERENCE`. This command is equivalent to calling `jail -r`. | |||||
| ##### remove|r REFERENCE | |||||
| Removes the given jail specified by `REFERENCE`. The jail is stopped if running, any filesystems mounted under its root directory are unmounted, its ZFS dataset and entry in `/etc/jail.conf` are removed. | |||||
| ##### exec|e REFERENCE [...COMMAND] | |||||
| Executes given `COMMAND` (or `/bin/sh` if not specified) in the given running jail specified by `REFERENCE`. This command is the equivalent of calling `jexec`. | |||||
| ##### oneshot|o IMAGE [--env|-e VAR1:VALUE1 [...VARN:VALUEN]] [--mounts|-m FROM1:ON1 [...FROMN:ONN]] [...COMMAND] | |||||
| Create a new one-time Focker-managed jail. The syntax and logic is identical to `focker jail create`, the difference being that the hostname cannot be specified and that the jail will be automatically removed when the `COMMAND` exits. | |||||
| Example: `focker jail oneshot freebsd-latest -e FOO:bar -- ls -al` | |||||
| ##### list|ls|l | |||||
| ##### tag | ##### tag | ||||