Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src Add rump_wmd, a utility to resolve rump kernel component dep...



details:   https://anonhg.NetBSD.org/src/rev/57c90e7c0f36
branches:  trunk
changeset: 326023:57c90e7c0f36
user:      pooka <pooka%NetBSD.org@localhost>
date:      Thu Jan 16 01:54:47 2014 +0000

description:
Add rump_wmd, a utility to resolve rump kernel component dependencies.

diffstat:

 distrib/sets/lists/base/mi   |    3 +-
 distrib/sets/lists/man/mi    |    5 +-
 usr.bin/Makefile             |    5 +-
 usr.bin/rump_wmd/Makefile    |    7 +
 usr.bin/rump_wmd/rump_wmd.1  |   94 +++++++++++++++++++++++++
 usr.bin/rump_wmd/rump_wmd.sh |  158 +++++++++++++++++++++++++++++++++++++++++++
 6 files changed, 268 insertions(+), 4 deletions(-)

diffs (truncated from 340 to 300 lines):

diff -r b8458070778e -r 57c90e7c0f36 distrib/sets/lists/base/mi
--- a/distrib/sets/lists/base/mi        Thu Jan 16 01:19:46 2014 +0000
+++ b/distrib/sets/lists/base/mi        Thu Jan 16 01:54:47 2014 +0000
@@ -1,4 +1,4 @@
-# $NetBSD: mi,v 1.1058 2014/01/14 18:52:19 christos Exp $
+# $NetBSD: mi,v 1.1059 2014/01/16 01:54:47 pooka Exp $
 #
 # Note:        Don't delete entries from here - mark them as "obsolete" instead,
 #      unless otherwise stated below.
@@ -672,6 +672,7 @@
 ./usr/bin/rump.sockstat                                base-util-bin           rump
 ./usr/bin/rump_allserver                       base-util-bin           rump
 ./usr/bin/rump_server                          base-util-bin           rump
+./usr/bin/rump_wmd                             base-util-bin           rump
 ./usr/bin/rup                                  base-netutil-bin
 ./usr/bin/ruptime                              base-netutil-bin
 ./usr/bin/rusers                               base-netutil-bin
diff -r b8458070778e -r 57c90e7c0f36 distrib/sets/lists/man/mi
--- a/distrib/sets/lists/man/mi Thu Jan 16 01:19:46 2014 +0000
+++ b/distrib/sets/lists/man/mi Thu Jan 16 01:54:47 2014 +0000
@@ -1,4 +1,4 @@
-# $NetBSD: mi,v 1.1456 2013/12/28 03:27:01 christos Exp $
+# $NetBSD: mi,v 1.1457 2014/01/16 01:54:47 pooka Exp $
 #
 # Note: don't delete entries from here - mark them as "obsolete" instead.
 #
@@ -484,6 +484,7 @@
 ./usr/share/man/cat1/rump.halt.0                       man-netutil-catman      .cat,rump
 ./usr/share/man/cat1/rump_allserver.0                  man-netutil-catman      .cat,rump
 ./usr/share/man/cat1/rump_server.0                     man-netutil-catman      .cat,rump
+./usr/share/man/cat1/rump_wmd.0                        man-netutil-catman      .cat,rump
 ./usr/share/man/cat1/rup.0                     man-netutil-catman      .cat
 ./usr/share/man/cat1/ruptime.0                 man-netutil-catman      .cat
 ./usr/share/man/cat1/rusers.0                  man-netutil-catman      .cat
@@ -3550,6 +3551,7 @@
 ./usr/share/man/html1/rump.halt.html                   man-netutil-htmlman     html,rump
 ./usr/share/man/html1/rump_allserver.html                      man-netutil-htmlman     html,rump
 ./usr/share/man/html1/rump_server.html                 man-netutil-htmlman     html,rump
+./usr/share/man/html1/rump_wmd.html                    man-netutil-htmlman     html,rump
 ./usr/share/man/html1/rup.html                 man-netutil-htmlman     html
 ./usr/share/man/html1/ruptime.html             man-netutil-htmlman     html
 ./usr/share/man/html1/rusers.html              man-netutil-htmlman     html
@@ -6266,6 +6268,7 @@
 ./usr/share/man/man1/rump.halt.1                       man-netutil-man         .man,rump
 ./usr/share/man/man1/rump_allserver.1                  man-netutil-man         .man,rump
 ./usr/share/man/man1/rump_server.1                     man-netutil-man         .man,rump
+./usr/share/man/man1/rump_wmd.1                        man-netutil-man         .man,rump
 ./usr/share/man/man1/rup.1                     man-netutil-man         .man
 ./usr/share/man/man1/ruptime.1                 man-netutil-man         .man
 ./usr/share/man/man1/rusers.1                  man-netutil-man         .man
diff -r b8458070778e -r 57c90e7c0f36 usr.bin/Makefile
--- a/usr.bin/Makefile  Thu Jan 16 01:19:46 2014 +0000
+++ b/usr.bin/Makefile  Thu Jan 16 01:54:47 2014 +0000
@@ -1,4 +1,4 @@
-#      $NetBSD: Makefile,v 1.215 2013/12/28 02:32:01 rjs Exp $
+#      $NetBSD: Makefile,v 1.216 2014/01/16 01:54:47 pooka Exp $
 #      from: @(#)Makefile      8.3 (Berkeley) 1/7/94
 
 .include <bsd.own.mk>
@@ -44,7 +44,8 @@
 .endif
 
 .if (${MKRUMP} != "no")
-SUBDIR+= rump_allserver rump_dhcpclient rump_halt rump_server shmif_dumpbus
+SUBDIR+= rump_allserver rump_dhcpclient rump_halt rump_server shmif_dumpbus \
+       rump_wmd
 .endif
 
 .if (${MKBSDGREP} != "no")
diff -r b8458070778e -r 57c90e7c0f36 usr.bin/rump_wmd/Makefile
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/usr.bin/rump_wmd/Makefile Thu Jan 16 01:54:47 2014 +0000
@@ -0,0 +1,7 @@
+#      $NetBSD: Makefile,v 1.1 2014/01/16 01:54:47 pooka Exp $
+#
+
+MAN=   rump_wmd.1
+SCRIPTS=rump_wmd.sh
+
+.include <bsd.prog.mk>
diff -r b8458070778e -r 57c90e7c0f36 usr.bin/rump_wmd/rump_wmd.1
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/usr.bin/rump_wmd/rump_wmd.1       Thu Jan 16 01:54:47 2014 +0000
@@ -0,0 +1,94 @@
+.\"    $NetBSD: rump_wmd.1,v 1.1 2014/01/16 01:54:47 pooka Exp $
+.\"
+.\" Copyright (c) 2014 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.
+.\"
+.Dd January 16, 2014
+.Dt RUMP_WMD 1
+.Os
+.Sh NAME
+.Nm rump_wmd
+.Nd Resolve rump kernel component dependencies
+.Sh SYNOPSIS
+.Nm
+.Op Fl L Ar libdir
+.Op Fl v
+.Fl l Ar component
+.Sh DESCRIPTION
+The
+.Nm
+utility can be used to resolve the link dependencies of rump kernel
+components.
+This functionality is useful when desiring to run a rump kernel with
+a given set of drivers, but not being sure what the dependencies of
+those drivers are.
+The output of
+.Nm
+is accepted as command line input by
+.Xr rump_server 1 .
+.Pp
+The command line options are:
+.Bl -tag -width indent
+.It Fl L Ar libdir
+By default, rump kernel components in
+.Pa /usr/lib
+are examined.
+If this option is supplied, components in
+.Ar libdir
+are examined instead.
+.It Fl v
+Increase debug output from the utility.
+This option may be given multiple times.
+.It Fl l Ar component
+Resolve dependencies for the given component.
+This option may be given multiple time.
+.El
+.Sh EXAMPLES
+Resolve dependencies for FFS:
+.Bd -literal -offset indent
+$ rump_wmd -lrumpfs_ffs
+DEBUG0: Searching component combinations. This may take a while ...
+DEBUG0: Found a set
+-lrumpdev -lrumpdev_disk -lrumpvfs -lrumpfs_ffs
+.Ed
+.Pp
+Resolve dependencies for NFS, use IPv6 networking and the virtif
+network interface:
+.Bd -literal -offset indent
+$ rump_wmd -lrumpfs_nfs -lrumpnet_netinet6 -lrumpnet_virtif
+DEBUG0: Searching component combinations. This may take a while ...
+DEBUG0: Found a set
+-lrumpnet -lrumpnet_net -lrumpvfs -lrumpfs_nfs -lrumpnet_netinet6 -lrumpnet_virtif
+.Ed
+.Sh CAVEATS
+Since
+.Nm
+uses trial-and-error brute force resolution, it runs somewhat slow.
+If several seconds are spent for dependency resolution, the benefit of
+a rump kernel booting in 10ms is somewhat lost.
+Caching the output is highly recommended.
+.Sh FUNFACTS
+.Nm
+is short for "rump, where's my dependency".
+.Sh SEE ALSO
+.Xr rump_server 1
diff -r b8458070778e -r 57c90e7c0f36 usr.bin/rump_wmd/rump_wmd.sh
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/usr.bin/rump_wmd/rump_wmd.sh      Thu Jan 16 01:54:47 2014 +0000
@@ -0,0 +1,158 @@
+#!/bin/sh
+#
+# Copyright (c) 2014 Antti Kantee <pooka%iki.fi@localhost>
+#
+# 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 ``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.
+#
+
+: ${CC:=cc}
+DEBUGLEVEL=0
+LIBDIR=/usr/lib
+
+die ()
+{
+
+       echo $* >&2
+       exit 1
+}
+
+usage ()
+{
+
+       die "Usage: $0 [-v] [-L libdir] -lrump_component [...]"
+}
+
+unset FIRSTLIB
+while getopts 'l:L:v' opt; do
+       case "${opt}" in
+       l)
+               : ${FIRSTLIB:=${OPTIND}}
+               ;;
+       L)
+               [ -z "${FIRSTLIB}" ] || usage
+               LIBDIR=${OPTARG}
+               ;;
+       v)
+               [ -z "${FIRSTLIB}" ] || usage
+               DEBUGLEVEL=$((DEBUGLEVEL + 1))
+               ;;
+       -h|*)
+               usage
+               ;;
+       esac
+done
+shift $((${FIRSTLIB} - 2))
+[ $# -eq 0 ] && usage
+
+debug ()
+{
+
+       [ ${DEBUGLEVEL} -ge ${1} ] && \
+           { lvl=$1; shift; echo DEBUG${lvl}: $* >&2; }
+}
+
+# filters from list
+filter ()
+{
+
+       filtee=$1
+       vname=$2
+       tmplist=''
+       found=false
+       for x in $(eval echo \${${vname}}); do
+               if [ "${filtee}" = "${x}" ]; then
+                       found=true
+               else
+                       tmplist="${tmplist} ${x}"
+               fi
+       done
+       ${found} || die \"${1}\" not found in \$${2}
+
+       eval ${vname}="\${tmplist}"
+}
+
+SEEDPROG='int rump_init(void); int main() { rump_init(); }'
+CCPARAMS='-Wl,--no-as-needed -o /dev/null -x c -'
+
+# sanity-check
+for lib in $* ; do
+       [ "${lib#-l}" = "${lib}" -o -z "${lib#-l}" ] \
+           && die Param \"${lib}\" is not of format -llib
+done
+
+# starting set and available components
+WANTEDCOMP="$*"
+RUMPBASE='-lrump -lrumpuser'
+CURCOMP="${WANTEDCOMP}"
+NEEDEDCOMP=''
+ALLCOMP=$(ls ${LIBDIR} 2>/dev/null \
+    | sed -n '/^librump.*.so$/{s/lib/-l/;s/\.so//p;}')
+[ -z "${ALLCOMP}" ] && die No rump kernel components in \"${LIBDIR}\"
+
+# filter out ones we'll definitely not use
+for f in ${CURCOMP} -lrumphijack -lrumpclient; do
+       filter ${f} ALLCOMP
+done
+
+# put the factions first so that they'll be tried first.
+# this is an optimization to minimize link attempts.
+FACTIONS='-lrumpvfs -lrumpnet -lrumpdev'



Home | Main Index | Thread Index | Old Index