.Dd January 15, 2011 .Dt EZJAIL-ADMIN 8 USD .Os FreeBSD .Sh NAME .Nm ezjail-admin .Nd Administrate ezjail environment .Sh SYNOPSIS .Nm Cm install .Op Fl mMpPsS .Op Fl h Ar host .Op Fl r Ar release .Nm .Cm create .Op Fl bx .Op Fl f Ar flavour .Op Fl r Ar jailroot .Op Fl a Ar archive .Op Fl A Ar options .Op Fl c Ar jailtype Fl s Ar imagesize Op Fl C Ar attachargs .Bk -words .Ar jailname ipaddress Ns Op Ar ,ipaddress2,... .Ek .Nm .Cm console .Op Fl f .Op Fl e Ar command .Ar jailname .Nm .Cm list .Nm .Cm start | stop | restart | cryptostart Ar jailname... .Nm .Cm config .Op Fl r Ar run | norun .Op Fl n Ar newname .Op Fl i Ar attach | detach | fsck .Op Fl z Ar newdataset .Op Fl c Ar newcpuset .Op Fl f Ar newfib .Ar jailname .Nm .Cm delete .Op Fl wf .Ar jailname .Nm .Cm archive .Op Fl Af .Op Fl a Ar archive .Op Fl d Ar archivedir .Ar jailname... .Nm .Cm restore .Op Fl f .Op Fl d Ar archivedir .Ar archive | jailname... .Nm .Cm update .Op Fl s Ar sourcetree .Op Fl p .Fl b | Fl i | Fl P | Fl u .Sh DESCRIPTION The .Nm utility is used to manage the ezjail environment and all the jails inside the ezjail scope. This man page describes the invocation of .Nm . Refer to .Xr ezjail 7 in order to get an introduction to the usage of ezjail, as well as usage examples. .Pp The description of some options ends with .Sq Variable: Dq Li $ezjail_abcd . This means that the default value of the option may be overridden by setting this variable in .Xr ezjail.conf 5 , which see. .Ss Nm Cm install This function sub-command is normally run once in the life of the ezjail environment. It allocates the directory structure used by ezjail and populates the base jail using the minimal distribution set from a FreeBSD FTP server. .Pp The default location for ezjail's basejail is in .Pa /usr/jails , so be sure you have enough space there (a FreeBSD base release without man pages, sources and ports is around 120MB). This location may be modified in .Xr ezjail.conf 5 . .Pp See also .Nm .Cm update to install the base jail from source, as well as a method to update the base jail using .Xr freebsd-update 8 . .Pp The following options are available: .Bl -tag -width indent .It Fl m Fetch and install man pages (ca. 10MB). .It Fl M Fetch and install man pages, without (re)installing the base jail. May be used to add the man pages to the base jail after the intial installation. .It Fl s Fetch and install sources (ca. 450MB). .It Fl S Fetch and install sources, without (re)installing the base jail. .It Fl p Invoke the .Xr portsnap 8 utility to fetch and extract a FreeBSD ports tree from .Li portsnap.FreeBSD.org (ca. 475MB). When a ports tree is added to the base jail, a modified .Pa make.conf containing reasonable values to function in the jailed environment is added to the new jail template so all jails created from the new jail template will have a working ports environment. See the appendix .%B Using Portsnap in the .%B FreeBSD Handbook for details or .Xr portsnap 8 . .It Fl P Fetch and extract a ports tree, without (re)installing the base jail. .It Fl h Ar host Set the remote host to fetch FreeBSD distribution sets from. If absent the default host .Li ftp.FreeBSD.org is used. Variable: .Dq Li $ezjail_ftphost . .Pp It is possible to install from the .Li disc1 CDRom, or an extracted -RELEASE directory, by specifying the .Ar host argument as .Pa file://path/to/source . .It Fl r Ar release Install this release of FreeBSD in the base jail, instead of the version returned by .Dq Li uname -r on the host system. Note that the FreeBSD FTP servers usually provide only -RELEASE versions, not -STABLE nor -CURRENT versions; you will be prompted for confirmation when trying to install a non -RELEASE version. If you want to install a -CURRENT version, you may have to compile from source the base jail; see the .Nm Cm update sub-command for this. .El .Ss Nm Cm create Create a new jail inside ezjail's scope. It either copies the new jail directory tree template or an ezjail archive directory tree to .Pa /usr/jails/ Ns Ar jailname directory tree. Jailname and IP address are mandatory parameters. .Pp When a new jail is created, a corresponding new .Pa /etc/fstab. Ns Ar jailname file is also created, with a .Xr nullfs 5 mount giving access to the base jail from the new jail. .Pp The following operands are mandatory: .Bl -tag -width indent .It Ar jailname The name of the jail. It is customary to use the network name of the jail, such as .Dq Li jail1.example.com (or maybe simply .Dq Li jail1 ) , but really any name may be used. .Pp It is an error to have several jails of the same name. .It Ar ipaddress Ns Op Ar ,ipaddress2,... The IP address or addresses of the jail. Since FreeBSD 7.2, it is possible to assign several several IPv4 or IPv6 addresses to a jail, by separating them with commas. Previous versions of FreeBSD allowed only a single IPv4 address per jail. .Pp The addresses of the jail are not configured on the host. .Nm will display a warning if the requested address is not found on any interface, and the jail will probably not start. .Pp XXX: is the following relevant, except maybe the warning about dynamic addresses? .Pp This is the static (premanent, never changes) public internet routable ip address assigned to you by your ISP. If you purchased a continous block of static public internet routable ip address, then each jail could be assigned one of those individual ip address from the block. .Pp Normally phone dialup PPP access and cable providers assign dynamic ip address. The assigned ip address may change every time you dialup and with cable providers when the lease time expires or you reboot your system. \fBUse dynamic ip address at your own risk.\fR .Pp On the host issue 'ifconfig -a' command to see your assigned ip address. Your host /etc/rc.conf should have ifconfig_XXX="DHCP" where XXX is the 'unit name' of the NIC card facing the public internet. You will also need this same ifconfig_XXX="DHCP" statement in the rc.conf of each jail to enable the public network for that jail. .Pp If your host is acting as a 'gateway' (IE. has a LAN behind it), you can provide jails for LAN access only. In this configuration your host /etc/rc.conf should have ifconfig_XXX="inet x.x.x.x" where XXX is the 'unit name' of the NIC card facing the private LAN (local-area-network), where x.x.x.x is a private ip address from the list of reserved non-public routable ip address. You will also need this same ifconfig_XXX="inet x.x.x.x" statement in the rc.conf of each jail to enable the lan network for that jail. .El .Pp The following options are available: .Bl -tag -width indent .It Fl r Ar jailroot Use this name as the directory name of the new jail. Without this option, it is derived from the jail's name. If this option is given and does not start with a '/', it is interpreted as relative to ezjail's root directory .Pa (/usr/jails by default). If a specified jailroot path lies outside the ezjail root directory, a soft link is created inside .Pa /usr/jails/ pointing to the location of the newly created jail. .It Fl a Ar archive Restore a jail from an archive created with .Nm Cm archive . The archive files are kept in .Pa /usr/jails/archive by default. Use .Pa - to restore an archive from the standard input. .Pp You will probably need to tidy up things inside an ezjail if you migrate it between different ezjail environments. This may include (but is not limited to) reinstalling ports or packages for different CPUs or library versions. You may also need to copy some libraries from the source host's base jail. .Pp See also .Nm Cm restore , if you only want to revert to an old jail's state from an archive on the same release version. .It Fl A Ar jailconf Copy the comments, in particular the .Dq Li PROVIDE , .Dq Li REQUIRE and .Dq Li BEFORE lines, from this jail. .Pp XXX: This is my understanding from the code. Is that correct? .It Fl x This flag indicates that an jail of that name already exists. In this case, ezjail will only update the configuration of the jail. Sanity checks are performed. .It Fl f Ar flavour Install the requested .Ar flavour in the new jail. .Pp This option may not be used with the .Fl a option. .It Fl c Cm simple | bde | eli | zfs Create a jail of the given type. .Pp A .Cm simple jail is backed with a single file. The jail will not be allowed to grow beyond its allocated size. The base jail is included in the image, making it portable between hosts running the same (or sufficiently close) version of FreeBSD. The jail will be stored in a file named .Ar jailname Ns Pa .img , unless .Fl r Ar jailroot is given, in which case the jail is stored in .Ar jailroot Ns Pa .img . .Pp A .Cm bde No or Cm eli jail is a .Cm simple jail whose file has been encrypted using .Xr gbde 4 (for .Cm bde ) or .Xr geli 8 (for .Cm eli ) . See also the .Fl C flag when creating this kind of jail. .Pp A .Cm zfs jail is backed with a .Xr zfs 8 volume, whose initial quota is given with the .Fl s option. The volume is compressed using the lzjb method. The volume is created in the .Cm ezjail_jailzfs data set, if set in .Xr ezjail.conf 5 . .Pp XXX: from the code, it looks like the user needs to have done ezjail-admin install with ezjail_use_zfs. Is that correct? .Pp In each case, the .Fl s flag is mandatory when creating such a jail. An empty directory (without the .Pa .img suffix in the case of file-based jails) will be created and used as a mount point when running the jail. .It Fl s Ar imagesize Allocate this size to the jail. Without an unit, the size is in bytes. The valid suffix values are b/B for bytes, k/K for kilobytes, m/M for megabytes, and g/G for gigabytes. As a reference point, a newly created jail requires 2MB. .Pp It is not possible to increase the size of file-based jails after their creation, short of creating a new image jail with a larger size. .It Fl C Ar imageopt Pass this argument to .Li gbde No or Li geli init . .Fl P No and Fl K (and .Fl L for .Xr gbde 4 ) will be translated and passed to .Li gbde No or Li geli attach when starting the jail. .It Fl i Synonym of .Fl c Cm simple . .It Fl b Don't start the jail at boot time. .El .Ss Nm Cm console Attach your console to the selected jail. You are logged in as root by default. The command line prompt shows the name of the jail. You have to use the pwd command to see where in the directory tree you are. Entering \fBexit\fR will terminate the jail console. .Pp The following options are available: .Bl -tag -width indent .It Fl f Start the jail if it is not running yet. .It Fl e Ar command Use .Ar command instead of .Dq /usr/bin/login -f root . A one time change to use a different user can be accomplished by using .Fl e Qq Li /usr/bin/login -f user . Variable: .Dq Li $ezjail_default_execute . .El .Ss Nm Cm list List all jails inside ezjail's scope. They are sorted by the order they start up, as defined by .Xr rcorder 1 . .Pp The first column is the status flag consisting of 2 or 3 letters. The first letter is the type of jail: .Bl -tag -width 4n -offset indent -compact .It Sy D Directory tree based jail. .It Sy I File-based jail. .It Sy E Geli encrypted file-based jail. .It Sy B Bde encrypted file-based jail. .It Sy Z ZFS filesystem-based jail. .El .Pp The second letter is the status of the jail: .Bl -tag -width 4n -offset indent -compact .It Sy R The jail is running. .It Sy A The image of the jail is mounted, but the jail is not running. .It Sy S The jail is stopped. .El .Pp If present, the third letter, .Sy N , means that the jail is not automatically started. .Pp The following columns are the JID (when it is running), the IP addresses, the name and the full path directory name of the jail. .Ss Nm Cm start | stop | restart | cryptostart Op Ar jailname ... Execute the given action on .Ar jailname , or on all jails if the operand is omitted. Several jails may be specified. .Pp As this is just a shortcut to the .Xr rc 8 .Cm ezjail script, if ezjail is not enabled in .Xr rc.conf 5 with .Dq Li ezjail_enable= Ns Qq Li YES , nothing will be done. Prefix the action with .Cm one (as in .Cm onestart , etc.) to force the action regardless of the value of .Dq Li $ezjail_enable . .Pp .Cm cryptostart is used to start jails that use .Xr gbde 4 or .Xr geli 8 encryption. Those jails require interaction with the administrator when starting. .Ss Nm Cm config Ar jailname Manage parameters of specific ezjails. For running jails, most of the configuration changes described below will not be applied until the next time the jail is restarted. .Pp The following options are available: .Bl -tag -width indent .It Fl r Cm run | norun Set the jail to be automatically started or not on boot. .It Fl n An newname Rename the jail. Unless a custom root directory was given with the .Fl r flag when creating the jail, the root directory will be renamed as well. A running jail may not be renamed. .It Fl i Cm attach | detach | fsck Only valid for stopped image jails. Attaching a jail means making the content of the root of the jail accessible from the host. No other sub-commands will function on an jail while its image is attached. With .Cm fsck , the image jail is attached, .Xr fsck 8 is run, then the image jail is detached. You can only fsck image based jails. .It Fl z Ar newdataset Set the given ZFS dataset to be mounted inside the jail file system when it is started. .It Fl f Ar newfib Change the FIB of the jail (see .Xr setfib 2 ) . .It Fl c Ar newcpuset Change the CPU affinity set of the jail (see .Xr cpuset 2 ) . .El .Ss Nm Cm delete Ar jailname Delete a jail. By default, this command only deletes ezjail's control file for the selected jail as well as .Pa /etc/fstab. Ns Ar jailname . The .Pa /usr/jails/ Ns Ar jailname directory is not deleted. .Pp .Bl -tag -width indent .It Fl f Stop the jail before deleting it. .It Fl w Delete the directory or the file backing the jail. .El .Ss Nm Cm archive Create a backup of one, multiple or all ezjails. The specified service jail's root directory tree is backed up as a .Xr pax 1 file. The jail needs to be stopped. .Pp See .Nm Cm restore or .Nm Cm create Fl a Ar archive to restore an archive. .Pp The basejail can not be archived. There is no ezjail function to delete archive files; they may be removed from the host using .Xr rm 1 . .Bl -tag -width indent .It Fl a Ar archivename Use this name for the archive file. If absent, the archive file name is derived from the jail name, with the date and time of the archive appended to the file name. .It Fl d Ar directory Save the archive in this directory. If this option is not given and .Dq Li $ezjail_archivedir is not set, the archive is saved in the default directory. Variable: .Dq Li $ezjail_archivedir . .It Fl f Archive the jail even when it is running. .It Fl A Archive all jails. .It Ar jailname Archive only this jail. This argument is mandatory if .Fl a is not given. .El .Ss Nm Cm restore Create new ezjails from archived versions. It tries to collect all information necessary to do that without user interaction from the user. .Pp The following operand is mandatory: .Bl -tag -width indent .It Ar archive | jailname Restore this jail. If only the jail name is given, .Nm will use the most recent archive file matching the name you specified. To restore an older version, specify the complete archive file name (file name with the date and time of the archive appended to it). .El The following options are available: .Bl -tag -width indent .It Fl d Ar archivedir Search the archive file in this directory. If this option is not given and .Dq Li $ezjail_archivedir is not set, the archive is searched in the current directory. Variable: .Dq Li $ezjail_archivedir . .It Fl f Restore the archive even if running on a host different from where it was archived. Be default, .Nm will refuse to restore an archive if the hostname, the FreeBSD version or the CPU architecture is modified. .El .Ss Nm Cm update Creates or updates ezjail's basejail from source. This performs a .Dq make world ; make installworld using the basejail's RELEASE source located at .Pa /usr/src (but see the .Fl s option). Exactly one of .Fl b , i , u , P is mandatory. .Pp See the .Cm install command to install the basejail from binary packages. .Pp Exactly one of the following operand must be specified: .Bl -tag -width indent .It Fl b Build and install a world from source located in the basejail. .It Fl i Perform a .Qq make installworld , assuming the world has already been built. .It Fl u Use .Xr freebsd-update 8 to update the basejail. Note that as .Xr freebsd-update 8 uses .Dq Li uname -r to determine the currently running system, the base jail and the host need to be updated at the same time, without rebooting on the new kernel in the meantime. .Pp Jails that are stored in a ZFS volume are snapshot first. .It Fl P Install only the ports tree, assuming the basejail has already been created.This can be done while jails are running. The .Xr portsnap 8 utility is invoked to do the actual work. .El The following options are available: .Bl -tag -width indent .It Fl p Give the new basejail a copy of FreeBSD's ports tree. The .Xr portsnap 8 utility is invoked to do the actual work. .It Fl s Ar sourcedir Use the sources in .Ar sourcedir instead of .Pa /usr/src . Variable: .Dq Li $ezjail_sourcetree . .El .Sh FILES .Pa EZJAIL_PREFIX/bin/ezjail-admin .br .Pa EZJAIL_PREFIX/etc/rc.d/ezjail.sh .br .Pa EZJAIL_PREFIX/etc/ezjail.conf .br .Pa EZJAIL_PREFIX/share/examples/ezjail/ .br .Pa EZJAIL_PREFIX/etc/ezjail/* .br .Pa /usr/etc/fstab.* .Sh SEE ALSO .Xr ezjail 7 , .Xr ezjail.conf 8 , .Xr jail 8 , .Xr devfs 5 , .Xr fdescfs 5 , .Xr procfs 5 , .Xr portsnap 8 . .Sh AUTHOR .An Dirk Engling .Aq erdgeist@erdgeist.org .