More into /etc/rc.d/jail

Stefan Bethke stb at lassitu.de
Tue Aug 9 21:30:37 GMT 2005


Am 09.08.2005 um 21:10 schrieb drvince at Safe-mail.net:

> Hi,
> I'm using jails inside md devices to limit the disk space each jail  
> can use.  It's working great but I have to start manually all of  
> them at startup.  Here's my drill:
>
> mdconfig -a -t vnode -f ${IMAGE} -u ${ID}
> fsck_ufs /dev/md${ID}c
> mount /dev/md${ID}c ${DEST}
> mount_devfs devfs ${DEST}/dev
> jail -l -U root ${DEST} ${FQDN} ${IP} /bin/sh /etc/rc
>
> Therefore, I can't use the /etc/rc.d/jail facility.  So I thought,  
> it would be good to add *fsck before mounting* and an optional  
> mdconfig beforehand.
>
> jail_${NAME}_md_device=""    # The device to attach or NO
> jail_${NAME}_image=""        # The image file containing the jail,  
> used with md_device
> jail_${NAME}_fsck_options="" # Options to pass to fsck
>
> In fsck_options I could put "-t ufs".  Of course, /dev/md${ID}c  
> must be present before mounting, could happen if the image isn't  
> bsdlabel'ed.
>
> I'm a terrible coder, I could do it, but I'll need coaching and  
> I've never made a patch.  I would gladly hand that to someone else  
> but I also need it to be done, I can't babysit the server forever.   
> So, how does it sound?

I've attached the rc.d script and a sample config file we're using at  
work. We're only using md-based file systems for actual data; all  
jails share the same file system. (We're not renting out jails, but  
use them internally to separate various services on the main multi- 
user machine.)

-------------- next part --------------
#
#
#
10	/data/00/fs/devhome.fs	ufs	rw	/data/vnd/devhome
11	/data/00/fs/home.fs	ufs	rw	/data/vnd/home
12	/data/00/fs/install.fs	ufs	rw	/data/vnd/install
13	/data/00/fs/scratch.fs	ufs	rw	/data/vnd/scratch
14	/data/00/fs/tallence.fs	ufs	rw	/data/vnd/tallence
-------------- next part --------------
#!/bin/sh
#
# $Id$
#

# PROVIDE: mdconfig
# REQUIRE: mountcritlocal
# BEFORE: jail
# KEYWORD: nojail shutdown

. /etc/rc.subr

name="mdconfig"
start_cmd="mdconfig_start"
stop_cmd="mdconfig_stop"

mdconfig_start()
{
	if ! checkyesno mdconfig_enable; then
		return 0
	fi
	sed -e 's/#.*$//' <${mdconfig_conf} |grep -v '^[[:space:]]*$' >/tmp/mdconfig.$$
	echo -n 'Mounting vn filesystems:'
	while read _unit _file _type _opts _path; do
		echo -n " ${_file}"
		mdconfig -a -t vnode -f ${_file} -u ${_unit}
		if fsck -t ${_type} -p /dev/md${_unit}; then
			mount -t ${_type} -o "${_opts}" /dev/md${_unit} ${_path}
		fi
	done </tmp/mdconfig.$$
	rm /tmp/mdconfig.$$
	echo '.'
}


mdconfig_stop()
{
	sed -e 's/#.*$//' <${mdconfig_conf} |grep -v '^[[:space:]]*$' >/tmp/mdconfig.$$
	echo -n 'Unmounting vn filesystems:'
	while read _unit _file _type _opts _path; do
		echo -n " ${_file}"
		umount /dev/md${_unit}
		mdconfig -du ${_unit}
	done </tmp/mdconfig.$$
	rm /tmp/mdconfig.$$
	echo '.'
}


load_rc_config $name
run_rc_command "$1"
-------------- next part --------------

/etc/rc.conf:
mdconfig_enable="YES"
mdconfig_conf="/etc/md.conf"


Cheers,
Stefan

-- 
Stefan Bethke <stb at lassitu.de>   Fon +49 170 346 0140



More information about the freebsd-current mailing list