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