#!/bin/sh
#
#       $NetBSD: makerumpmanpages.sh,v 1.14 2020/04/04 17:05:06 christos Exp $
#

IFS=' '
COPYRIGHT='.\"  WARNING: GENERATED FILE, DO NOT EDIT
\"      INSTEAD, EDIT makerumpmanpages.sh AND REGEN
\"      from: $NetBSD: makerumpmanpages.sh,v 1.14 2020/04/04 17:05:06 christos Exp $
\"
\" Copyright (c) 2008-2010 Antti Kantee.  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.
\"'

MANTMPL1='.Dd November 21, 2010
Dt RUMP_XXXFSXXX 8
Os
Sh NAME
Nm rump_xxxfsxxx
Nd mount a xxxfsxxx xxxfssrcxxx with a userspace server
Sh SYNOPSIS
Cd "file-system PUFFS"
Cd "pseudo-device putter"
Pp
Nm
Op options
Ar xxximagexxx
Ar mountpoint
Sh DESCRIPTION
Em NOTE!
This manual page describes features specific to the
Xr rump 3
file server.
Please see
Xr mount_xxxfsxxx 8
for a full description of the available command line options.
Pp
The
Nm
utility can be used to mount xxxfsxxx file systems.
It uses
Xr rump 3
and
Xr p2k 3
to facilitate running the file system as a server in userspace.
As opposed to
Xr mount_xxxfsxxx 8 ,
Nm
does not use file system code within the kernel and therefore does
not require kernel support except
Xr puffs 4 .
Apart from a minor speed penalty there is no downside with respect to
in-kernel code.'

MANTMPL_BLK='.Pp
Nm
does not require using
Xr vnconfig 8
for mounts from regular files and the file path can be passed
directly as the
Ar xxximagexxx
parameter.
In fact, the use of
Xr vnconfig 8
is discouraged, since it is unable to properly deal with images on
sparse files.
Pp
In case the image contains multiple partitions, the desired partition
must be indicated by appending the token
Dq %DISKLABEL:p%
to the
Ar xxximagexxx
path.
The letter
Dq p
specifies the partition as obtained via
Xr disklabel 8 .
For example, to mount partition
Dq e
from image
Pa /tmp/wd0.img ,
use
Dq /tmp/wd0.img%DISKLABEL:e% .
Pp
It is recommended that untrusted file system images be mounted with
Nm
instead of
Xr mount_xxxfsxxx 8 .
Corrupt file system images commonly cause the file system
to crash the entire kernel, but with
Nm
only the userspace server process will dump core.'

MANTMPL_NET='.Pp
Even though the
Nm
file system client runs within a virtual rump kernel in userspace,
it uses host network services
Pq by means of Dq rump sockin .
This means that regardless of whether using
Nm
or
Xr mount_xxxfsxxx 8 ,
the same network configurations will be used.
Currently,
Dq sockin
supports IPv4.'

MANTMPL2='.Pp
To use
Nm
via
Xr mount 8 ,
the flags
Fl o Ar rump
and
Fl t Ar xxxfsxxx
should be given.
Similarly,
Nm
is used instead of
Xr mount_xxxfsxxx 8
if
Dq rump
is added to the options field of
Xr fstab 5 .
Sh SEE ALSO
Xr p2k 3 ,
Xr puffs 3 ,
Xr rump 3 ,
Xr mount_xxxfsxxx 8
Sh HISTORY
The
Nm
utility first appeared in
Nx xxxfirstxxx .'

# vary manpages slightly based on the type of server in question
disk="cd9660 efs ext2fs ffs hfs lfs msdos ntfs sysvbfs udf v7fs"
net="nfs"
fictional="fdesc kernfs tmpfs"
special="au-naturel nqmfs syspuffs"

first5="cd9660 efs ext2fs ffs hfs lfs msdos nfs ntfs syspuffs sysvbfs tmpfs udf"

member ()
{

       what=$1
       shift

       while [ $# -gt 0 ] ; do
               [ "$1" = "${what}" ] && return 0
               shift
       done
       return 1
}

sedsub='s/xxxfsxxx/$fs/g\;s/XXXFSXXX/$fsc/g\;s/xxximagexxx/$image/g\;'\
's/xxxfirstxxx/$first/g\;s/xxxfssrcxxx/$fssrc/g\;'

# auto manual pages
for x in rump_*
do
       fs=${x#rump_}

       # see if we are dealing with a new server
       if ! member $fs $disk $net $fictional $special ; then
               echo ERROR: $fs not found in any class!
               exit 1
       fi

       # special file systems have special manpages
       member $fs $special && continue

       # figure out our type
       if member $fs $disk ; then
               mytype=disk
               image=image
               fssrc=image
       fi
       if member $fs $net ; then
               mytype=net
               image=share
               fssrc=share
       fi
       if member $fs $fictional ; then
               mytype=special
               image=$fs
               fssrc='fictional fs'
       fi

       # which version did server first appear?
       if member $fs $first5 ; then
               first=5.0
       else
               first=6.0
       fi

       fsc=`echo $fs | tr '[:lower:]' '[:upper:]'`
       eval sedstr="${sedsub}"

       printf '.\\"    $NetBSD: makerumpmanpages.sh,v 1.14 2020/04/04 17:05:06 christos Exp $\n.\\"\n' > rump_${fs}/rump_${fs}.8
       echo ${COPYRIGHT} | sed -e 's/\$//g' >> rump_${fs}/rump_${fs}.8

       echo ${MANTMPL1} | sed -e "$sedstr" >> rump_${fs}/rump_${fs}.8
       [ ${mytype} = disk ] && \
           echo ${MANTMPL_BLK} | sed -e "$sedstr" >> rump_${fs}/rump_${fs}.8
       [ ${mytype} = net ] && \
           echo ${MANTMPL_NET} | sed -e "$sedstr" >> rump_${fs}/rump_${fs}.8
       echo ${MANTMPL2} | sed -e "$sedstr" >> rump_${fs}/rump_${fs}.8
done