Thoughts on jail.config
Rodrigo Mosconi
freebsd at mosconi.mat.br
Wed Jun 23 21:08:17 UTC 2010
Just a comment: IF a jail is a VNET jail, that jail doesnt need the
ip4/ip6 addresses
2010/6/23 Jamie Gritton <jamie at freebsd.org>:
> The rc system is becoming increasingly unable to handle the newer jail
> features. We've held off patching /etc/rc.d/jail for new parameters,
> with the promise of something better. Here's my outline of what I hope
> will be in fact better than what we have now.
>
> I'm working on extending jail(8) to use a configuration file that would
> have everything currently in a $jail_XXX variable in rc.conf.
> /etc/rc.d/jail would ideally be reduced to a single "jail -c" call for
> startup and "jail -r" for shutdown, though I'm not sure if thing will go
> quite that far.
>
> I'm using the state of the art in config files, the C-style already used
> by apmd and devd in /etc, as well as many non-core programs. Each section
> would be a jail name, and within the sections would be the jail parameters,
> or pseudo-parameters known by the program.
>
> foo {
> host.hostname = "foo.bar";
> path = "/usr/jail/foo";
> ip4.addr = "11.22.33.44";
> }
>
> The "name" parameter is implicit. Adding an actual name explicitly in
> the definition may work if you want it different for some reason, though
> I haven't yet worked out how well that would work.
>
> You can also have default parameters, defined at the top level or in a
> pseudo-jail called "*". The reason for that is you can also have
> defaults that apply only to some jails, as a hierarchical feature. So
> you could have a section "foo.*" that would have parameters for any jail
> under "foo".
>
> Parameters can include other parameters as shell-style variables. This
> use useful for defining defaults based on the jail name. A common use I
> expect is:
>
> path = "/usr/jail/$name";
>
> This would allow you to set up default parameters as templates. This
> variable substitution also works the other way. Consider the global
> variable:
>
> $prefix = "10.1.1";
>
> foo {
> ip4.addr = "$prefix.3"
> }
>
> Note difference to the previous example. The variable is defined as
> "$prefix = ...", not as "prefix = ...". That means it won't be included
> as a jail parameter (since there is no parameter called "prefix").
>
> When this setup, you should be able to fully specify a jail with most of
> the work done on the global end, and the per-jail parameters needing
> only the parts that actually vary between jails.
>
> In addition to the known jail parameters, there are pseudo-parameters
> that don't get passed to jail_set(2), but have some use in setting up
> the jail on the userland side. The current jail(8) already has the
> "command" pseudo-parameter, that specifies something to run (typically
> "sh /etc/rc") after the jail is created.
>
> I have done very little work with these pseudo-parameters so far, and
> they're still mostly up in the air. From recent conversation on the
> jail list, I've added "depend", which can specify that a jail is not to
> start until another jail has been set up.
>
> The other pseudo-parameters come from what /etc/rc.d/jail currently
> does. Many of these have to do with commands run at different stages in
> the setup. Here's the current shell settings I have able to pull from
> that file:
>
> Commands:
>
> exec_prestart: run outside jail before create
> exec_start: single command run inside jail upon creation
> same as "command" parameter
> exec_afterstart: run inside jail after create, each in its own "jexec"
> exec_poststart: run outside jail after create (after exec_afterstart)
> exec_prestop: run outside jail before destroy
> exec_stop: run inside jail before destroy
> exec_poststop: run outside jail after destroy
>
> Other:
>
> interface: interface to create/destroy all jail's IPs on
> fib: setfib ID
> devfs_enable: mount a /dev
> devfs_ruleset: /dev ruleset
> fdescfs_enable: mount a /dev/fs
> procfs_enable: mount a /proc
> mount_enable: mount arbitrary filesystems
> fstab: filesystems to mount
> consolelog: where to redirect start/stop command output
>
> Some of these parameters could use some cleaning up, and are only the
> way they are because of the constraints of the sh-based rc system.
> Notably "fib" may be better worked into the kernel as a true jail
> parameter. I wouldn't expect a one-for-one transfer of all these
> parameters from /etc/rc.d/jail into jail(8), but I'd want to provide
> their functionality in whatever way works best.
>
> This is where I start to need input. What works best? I was rather
> surprised at the proliferation of exec_* specifiers in the rc system
> (including the recent request for yet another), and I'm not sure what
> the real needs are for such things. The various filesystem parameters
> could probably be (mostly) merged into a single per-jail fstab, or
> perhaps a "mount" pseudo-parameter. Doubtless this config file format
> will grow with time, but I'd like it to get as clean a start as
> possible.
>
> Right now I don't have code I can share. I've made the code to read the
> config files, but not to do anything with them yet. But as I firm up
> just what configuration options will exist, something runnable should
> soon follow.
>
> I'm interested in hearing the needs of jail users, to make sure I do the
> right thing.
>
> - Jamie
> _______________________________________________
> freebsd-jail at freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-jail
> To unsubscribe, send any mail to "freebsd-jail-unsubscribe at freebsd.org"
>
More information about the freebsd-jail
mailing list