/etc/rc.d/ramdisk script for review
masta
diz at linuxpowered.com
Mon Apr 12 14:48:53 PDT 2004
Wes Peters wrote:
>A question came up on the mimedefang-users mailing list today. One
>user who has recently converted from 4.8 to 5.2.1 was lamenting the
>fact there is no way to control ownership and permission of memory
>disks in 5.x. The MIMEdefang spool area, often placed on a ramdisk
>for speed, needs to be owned by the MIMEdefang user and group.
>
>I poked around at mdmfs, aka mount_mfs, and thought there should be
>a more 5.x-ish way to create ramdisks early enough in the boot process
>to just put them in /etc/fstab directly. Here's what I came up with.
>
>
I like the notion of having rc.conf nobs to do this stuff with, but we
can already use /etc/fstab to configure a ramdisk as such:
md /tmp mfs
rw,-s3m 0 0
md /var mfs
rw,-s7m 0 0
That is how I engineered wifibsd prior to the changes Brooks did to the
diskless script of Matt's. It would seem to me that we
could have the ownership options next to the "rw,-s7m" options fields
which already exists. Something like "rw,-s7m,-Owes:staff", or similare.
Since mount_md, or mdmfs, or whatever mount uses to do the task, could
be changed to facilitate that one needful thing or using chown/chgrp,
right?
>This is configured from /etc/rc.conf, as in:
>
>ramdisk_units="10 11 12"
>ramdisk_10_config="-t swap -s 128m"
>ramdisk_10_owner="wes:staff"
>ramdisk_10_perms="1755"
>ramdisk_11_config="-t malloc -s 32m"
>ramdisk_11_newfs="-b 4096 -f 1024"
>
>This results in /dev/md10 (with ownership and permissions as specified)
>and /dev/md11 (with default ownership and permissions, 4K/1K block/frag
>size), but not a /dev/md12 as its type has not been specified.
>
>Here is the script:
>
>---- ramdisk
>
>#!/bin/sh -
>#
># Copyright (c) 2004 The FreeBSD Project
># All rights reserved.
>#
># Redistribution and use in source and binary forms, with or without
># modification, are permitted provided that the following conditions
># are met:
># 1. Redistributions of source code must retain the above copyright
># notice, this list of conditions and the following disclaimer.
># 2. Redistributions in binary form must reproduce the above copyright
># notice, this list of conditions and the following disclaimer in the
># documentation and/or other materials provided with the distribution.
>#
># THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
># ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
># IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
># ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
># FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
># DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
># OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
># HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
># LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
># OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
># SUCH DAMAGE.
>#
># $FreeBSD$
>#
>
># PROVIDE: ramdisk
># REQUIRE: localswap
># BEFORE: mountcritlocal
># KEYWORD: FreeBSD
>
>. /etc/rc.subr
>
>name="ramdisk"
>stop_cmd="ramdisk_stop"
>start_cmd="ramdisk_start"
>
>ramdisk_start()
>{
> for unit in $ramdisk_units
> do
> eval mdoptions=\$ramdisk_${unit}_config
> if [ "$mdoptions" = "${mdoptions##-t}" ]
> then
> echo "Type not specified for md$unit"
> continue
> fi
> eval fsoptions=\$ramdisk_${unit}_newfs
> eval owner=\$ramdisk_${unit}_owner
> eval perms=\$ramdisk_${unit}_perms
>
> echo Configuring ramdisk /dev/md$unit
>
> mdconfig -a $mdoptions -u $unit
> newfs $fsoptions /dev/md$unit
> [ "X$owner" != "X" ] && chown $owner /dev/md$unit
> [ "X$perms" != "X" ] && chmod $perms /dev/md$unit
> done
>}
>
>ramdisk_stop()
>{
> for unit in $ramdisk_units
> do
> if [ -c /dev/md$unit ] ; then
> umount -f /dev/md$unit > /dev/null 2>&1
> mdconfig -d -u $unit
> echo Recovered ramdisk /dev/md$unit
> fi
> done
>}
>
>load_rc_config $name
>run_rc_command "$1"
>
>---- ramdisk
>
>
Brooks already has something like this in rc.subr, we could just alter
that, right?
I mean there is no need for duplication of the same task, right? Just
need the chown parts.
>Gordon Tetlow suggested creating a mount_md program instead, which
>would probably be a hackup of mdmfs. To some extent, just linking
>/sbin/mount_md to /sbin/mdmfs would allow all of the options in mdmfs
>to be used in /etc/fstab. Does anyone have strong preferences for
>one approach vs. the other?
>
>
I belive both methods have their place, and they do not have to be
mutually exlusive.
-Jon Disnard (aka masta)
masta at wifibsd.org
diz at linuxpowered.com
http://www.wifibsd.org
More information about the freebsd-current
mailing list