diff --git a/build/doxyfile.api b/build/doxyfile.api
new file mode 100644
index 0000000000000000000000000000000000000000..4b8b1037510215cd437c13a37c13f3a9d15392d2
--- /dev/null
+++ b/build/doxyfile.api
@@ -0,0 +1,244 @@
+# Doxyfile 1.5.3
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+DOXYFILE_ENCODING      = UTF-8
+PROJECT_NAME           = Lustre
+PROJECT_NUMBER         = 1.10
+OUTPUT_DIRECTORY       = apidoc.api
+CREATE_SUBDIRS         = NO
+OUTPUT_LANGUAGE        = English
+BRIEF_MEMBER_DESC      = YES
+REPEAT_BRIEF           = YES
+ABBREVIATE_BRIEF       = "The $name class" \
+                         "The $name widget" \
+                         "The $name file" \
+                         is \
+                         provides \
+                         specifies \
+                         contains \
+                         represents \
+                         a \
+                         an \
+                         the
+ALWAYS_DETAILED_SEC    = NO
+INLINE_INHERITED_MEMB  = NO
+FULL_PATH_NAMES        = YES
+STRIP_FROM_PATH        = 
+STRIP_FROM_INC_PATH    = 
+SHORT_NAMES            = NO
+JAVADOC_AUTOBRIEF      = YES
+QT_AUTOBRIEF           = NO
+MULTILINE_CPP_IS_BRIEF = NO
+DETAILS_AT_TOP         = NO
+INHERIT_DOCS           = YES
+SEPARATE_MEMBER_PAGES  = NO
+TAB_SIZE               = 8
+ALIASES                = 
+OPTIMIZE_OUTPUT_FOR_C  = YES
+OPTIMIZE_OUTPUT_JAVA   = NO
+BUILTIN_STL_SUPPORT    = NO
+CPP_CLI_SUPPORT        = NO
+DISTRIBUTE_GROUP_DOC   = NO
+SUBGROUPING            = YES
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+EXTRACT_ALL            = NO
+EXTRACT_PRIVATE        = NO
+EXTRACT_STATIC         = NO
+EXTRACT_LOCAL_CLASSES  = NO
+EXTRACT_LOCAL_METHODS  = NO
+EXTRACT_ANON_NSPACES   = NO
+HIDE_UNDOC_MEMBERS     = NO
+HIDE_UNDOC_CLASSES     = NO
+HIDE_FRIEND_COMPOUNDS  = NO
+HIDE_IN_BODY_DOCS      = NO
+INTERNAL_DOCS          = NO
+CASE_SENSE_NAMES       = YES
+HIDE_SCOPE_NAMES       = NO
+SHOW_INCLUDE_FILES     = YES
+INLINE_INFO            = YES
+SORT_MEMBER_DOCS       = YES
+SORT_BRIEF_DOCS        = NO
+SORT_BY_SCOPE_NAME     = NO
+GENERATE_TODOLIST      = YES
+GENERATE_TESTLIST      = YES
+GENERATE_BUGLIST       = YES
+GENERATE_DEPRECATEDLIST= YES
+ENABLED_SECTIONS       = 
+MAX_INITIALIZER_LINES  = 30
+SHOW_USED_FILES        = YES
+SHOW_DIRECTORIES       = NO
+FILE_VERSION_FILTER    = 
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+QUIET                  = NO
+WARNINGS               = YES
+WARN_IF_UNDOCUMENTED   = YES
+WARN_IF_DOC_ERROR      = YES
+WARN_NO_PARAMDOC       = NO
+WARN_FORMAT            = "$file:$line: $text"
+WARN_LOGFILE           = 
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+INPUT                  = lustre/ \
+                         lnet/   \
+                         libcfs/
+INPUT_ENCODING         = UTF-8
+FILE_PATTERNS          = *.h \
+                         *.c
+RECURSIVE              = YES
+EXCLUDE                = 
+EXCLUDE_SYMLINKS       = NO
+EXCLUDE_PATTERNS       = 
+EXCLUDE_SYMBOLS        = EXPORT_SYMBOL*
+EXAMPLE_PATH           = 
+EXAMPLE_PATTERNS       = *
+EXAMPLE_RECURSIVE      = NO
+IMAGE_PATH             = 
+INPUT_FILTER           = 
+FILTER_PATTERNS        = 
+FILTER_SOURCE_FILES    = NO
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+SOURCE_BROWSER         = YES
+INLINE_SOURCES         = YES
+STRIP_CODE_COMMENTS    = YES
+REFERENCED_BY_RELATION = YES
+REFERENCES_RELATION    = YES
+REFERENCES_LINK_SOURCE = YES
+USE_HTAGS              = NO
+VERBATIM_HEADERS       = YES
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+ALPHABETICAL_INDEX     = YES
+COLS_IN_ALPHA_INDEX    = 5
+IGNORE_PREFIX          = 
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+GENERATE_HTML          = YES
+HTML_OUTPUT            = html
+HTML_FILE_EXTENSION    = .html
+HTML_HEADER            = build/doxygen-header.html
+HTML_FOOTER            = build/doxygen-footer.html
+HTML_STYLESHEET        = build/doxygen-stylesheet.css
+HTML_ALIGN_MEMBERS     = YES
+GENERATE_HTMLHELP      = NO
+HTML_DYNAMIC_SECTIONS  = NO
+CHM_FILE               = 
+HHC_LOCATION           = 
+GENERATE_CHI           = NO
+BINARY_TOC             = NO
+TOC_EXPAND             = NO
+DISABLE_INDEX          = NO
+ENUM_VALUES_PER_LINE   = 4
+GENERATE_TREEVIEW      = YES
+TREEVIEW_WIDTH         = 250
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+GENERATE_LATEX         = NO
+LATEX_OUTPUT           = latex
+LATEX_CMD_NAME         = latex
+MAKEINDEX_CMD_NAME     = makeindex
+COMPACT_LATEX          = NO
+PAPER_TYPE             = a4wide
+EXTRA_PACKAGES         = 
+LATEX_HEADER           = 
+PDF_HYPERLINKS         = YES
+USE_PDFLATEX           = YES
+LATEX_BATCHMODE        = NO
+LATEX_HIDE_INDICES     = NO
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+GENERATE_RTF           = NO
+RTF_OUTPUT             = rtf
+COMPACT_RTF            = NO
+RTF_HYPERLINKS         = YES
+RTF_STYLESHEET_FILE    = 
+RTF_EXTENSIONS_FILE    = 
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+GENERATE_MAN           = NO
+MAN_OUTPUT             = man
+MAN_EXTENSION          = .3
+MAN_LINKS              = NO
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+GENERATE_XML           = NO
+XML_OUTPUT             = xml
+XML_SCHEMA             = 
+XML_DTD                = 
+XML_PROGRAMLISTING     = YES
+#---------------------------------------------------------------------------
+# configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+GENERATE_AUTOGEN_DEF   = NO
+#---------------------------------------------------------------------------
+# configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+GENERATE_PERLMOD       = NO
+PERLMOD_LATEX          = NO
+PERLMOD_PRETTY         = YES
+PERLMOD_MAKEVAR_PREFIX = 
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor   
+#---------------------------------------------------------------------------
+ENABLE_PREPROCESSING   = YES
+MACRO_EXPANSION        = NO
+EXPAND_ONLY_PREDEF     = NO
+SEARCH_INCLUDES        = YES
+INCLUDE_PATH           = 
+INCLUDE_FILE_PATTERNS  = 
+PREDEFINED             = 
+EXPAND_AS_DEFINED      = 
+SKIP_FUNCTION_MACROS   = YES
+#---------------------------------------------------------------------------
+# Configuration::additions related to external references   
+#---------------------------------------------------------------------------
+TAGFILES               = 
+GENERATE_TAGFILE       = 
+ALLEXTERNALS           = NO
+EXTERNAL_GROUPS        = YES
+PERL_PATH              = /usr/bin/perl
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool   
+#---------------------------------------------------------------------------
+CLASS_DIAGRAMS         = YES
+MSCGEN_PATH            = 
+HIDE_UNDOC_RELATIONS   = YES
+HAVE_DOT               = YES
+CLASS_GRAPH            = YES
+COLLABORATION_GRAPH    = YES
+GROUP_GRAPHS           = YES
+UML_LOOK               = YES
+TEMPLATE_RELATIONS     = NO
+INCLUDE_GRAPH          = YES
+INCLUDED_BY_GRAPH      = YES
+CALL_GRAPH             = YES
+CALLER_GRAPH           = YES
+GRAPHICAL_HIERARCHY    = YES
+DIRECTORY_GRAPH        = YES
+DOT_IMAGE_FORMAT       = png
+DOT_PATH               = 
+DOTFILE_DIRS           = 
+DOT_GRAPH_MAX_NODES    = 50
+MAX_DOT_GRAPH_DEPTH    = 1000
+DOT_TRANSPARENT        = NO
+DOT_MULTI_TARGETS      = NO
+GENERATE_LEGEND        = YES
+DOT_CLEANUP            = YES
+#---------------------------------------------------------------------------
+# Configuration::additions related to the search engine   
+#---------------------------------------------------------------------------
+SEARCHENGINE           = YES
diff --git a/build/doxyfile.ref b/build/doxyfile.ref
new file mode 100644
index 0000000000000000000000000000000000000000..7b5e7904ab1f1f73d056445debcf223f608930ab
--- /dev/null
+++ b/build/doxyfile.ref
@@ -0,0 +1,244 @@
+# Doxyfile 1.5.3
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+DOXYFILE_ENCODING      = UTF-8
+PROJECT_NAME           = Lustre
+PROJECT_NUMBER         = 1.10
+OUTPUT_DIRECTORY       = apidoc.ref
+CREATE_SUBDIRS         = NO
+OUTPUT_LANGUAGE        = English
+BRIEF_MEMBER_DESC      = YES
+REPEAT_BRIEF           = YES
+ABBREVIATE_BRIEF       = "The $name class  " \
+                         "The $name widget  " \
+                         "The $name file  " \
+                         is \
+                         provides \
+                         specifies \
+                         contains \
+                         represents \
+                         a \
+                         an \
+                         the
+ALWAYS_DETAILED_SEC    = NO
+INLINE_INHERITED_MEMB  = NO
+FULL_PATH_NAMES        = YES
+STRIP_FROM_PATH        = 
+STRIP_FROM_INC_PATH    = 
+SHORT_NAMES            = NO
+JAVADOC_AUTOBRIEF      = YES
+QT_AUTOBRIEF           = NO
+MULTILINE_CPP_IS_BRIEF = NO
+DETAILS_AT_TOP         = NO
+INHERIT_DOCS           = YES
+SEPARATE_MEMBER_PAGES  = NO
+TAB_SIZE               = 8
+ALIASES                = 
+OPTIMIZE_OUTPUT_FOR_C  = YES
+OPTIMIZE_OUTPUT_JAVA   = NO
+BUILTIN_STL_SUPPORT    = NO
+CPP_CLI_SUPPORT        = NO
+DISTRIBUTE_GROUP_DOC   = NO
+SUBGROUPING            = YES
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+EXTRACT_ALL            = YES
+EXTRACT_PRIVATE        = YES
+EXTRACT_STATIC         = YES
+EXTRACT_LOCAL_CLASSES  = YES
+EXTRACT_LOCAL_METHODS  = YES
+EXTRACT_ANON_NSPACES   = NO
+HIDE_UNDOC_MEMBERS     = NO
+HIDE_UNDOC_CLASSES     = NO
+HIDE_FRIEND_COMPOUNDS  = NO
+HIDE_IN_BODY_DOCS      = NO
+INTERNAL_DOCS          = NO
+CASE_SENSE_NAMES       = YES
+HIDE_SCOPE_NAMES       = NO
+SHOW_INCLUDE_FILES     = YES
+INLINE_INFO            = YES
+SORT_MEMBER_DOCS       = YES
+SORT_BRIEF_DOCS        = NO
+SORT_BY_SCOPE_NAME     = NO
+GENERATE_TODOLIST      = YES
+GENERATE_TESTLIST      = YES
+GENERATE_BUGLIST       = YES
+GENERATE_DEPRECATEDLIST= YES
+ENABLED_SECTIONS       = 
+MAX_INITIALIZER_LINES  = 30
+SHOW_USED_FILES        = YES
+SHOW_DIRECTORIES       = NO
+FILE_VERSION_FILTER    = 
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+QUIET                  = NO
+WARNINGS               = YES
+WARN_IF_UNDOCUMENTED   = YES
+WARN_IF_DOC_ERROR      = YES
+WARN_NO_PARAMDOC       = NO
+WARN_FORMAT            = "$file:$line: $text  "
+WARN_LOGFILE           = 
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+INPUT                  = lustre/ \
+                         lnet/   \
+                         libcfs/
+INPUT_ENCODING         = UTF-8
+FILE_PATTERNS          = *.h \
+                         *.c
+RECURSIVE              = YES
+EXCLUDE                = 
+EXCLUDE_SYMLINKS       = NO
+EXCLUDE_PATTERNS       = 
+EXCLUDE_SYMBOLS        = EXPORT_SYMBOL*
+EXAMPLE_PATH           = 
+EXAMPLE_PATTERNS       = *
+EXAMPLE_RECURSIVE      = NO
+IMAGE_PATH             = 
+INPUT_FILTER           = 
+FILTER_PATTERNS        = 
+FILTER_SOURCE_FILES    = NO
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+SOURCE_BROWSER         = YES
+INLINE_SOURCES         = NO
+STRIP_CODE_COMMENTS    = YES
+REFERENCED_BY_RELATION = YES
+REFERENCES_RELATION    = YES
+REFERENCES_LINK_SOURCE = YES
+USE_HTAGS              = NO
+VERBATIM_HEADERS       = YES
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+ALPHABETICAL_INDEX     = YES
+COLS_IN_ALPHA_INDEX    = 5
+IGNORE_PREFIX          = 
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+GENERATE_HTML          = YES
+HTML_OUTPUT            = html
+HTML_FILE_EXTENSION    = .html
+HTML_HEADER            = build/doxygen-header.html
+HTML_FOOTER            = build/doxygen-footer.html
+HTML_STYLESHEET        = build/doxygen-stylesheet.css
+HTML_ALIGN_MEMBERS     = YES
+GENERATE_HTMLHELP      = NO
+HTML_DYNAMIC_SECTIONS  = NO
+CHM_FILE               = 
+HHC_LOCATION           = 
+GENERATE_CHI           = NO
+BINARY_TOC             = NO
+TOC_EXPAND             = NO
+DISABLE_INDEX          = NO
+ENUM_VALUES_PER_LINE   = 4
+GENERATE_TREEVIEW      = YES
+TREEVIEW_WIDTH         = 250
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+GENERATE_LATEX         = NO
+LATEX_OUTPUT           = latex
+LATEX_CMD_NAME         = latex
+MAKEINDEX_CMD_NAME     = makeindex
+COMPACT_LATEX          = NO
+PAPER_TYPE             = a4wide
+EXTRA_PACKAGES         = 
+LATEX_HEADER           = 
+PDF_HYPERLINKS         = YES
+USE_PDFLATEX           = YES
+LATEX_BATCHMODE        = NO
+LATEX_HIDE_INDICES     = NO
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+GENERATE_RTF           = NO
+RTF_OUTPUT             = rtf
+COMPACT_RTF            = NO
+RTF_HYPERLINKS         = YES
+RTF_STYLESHEET_FILE    = 
+RTF_EXTENSIONS_FILE    = 
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+GENERATE_MAN           = NO
+MAN_OUTPUT             = man
+MAN_EXTENSION          = .3
+MAN_LINKS              = NO
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+GENERATE_XML           = NO
+XML_OUTPUT             = xml
+XML_SCHEMA             = 
+XML_DTD                = 
+XML_PROGRAMLISTING     = YES
+#---------------------------------------------------------------------------
+# configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+GENERATE_AUTOGEN_DEF   = NO
+#---------------------------------------------------------------------------
+# configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+GENERATE_PERLMOD       = NO
+PERLMOD_LATEX          = NO
+PERLMOD_PRETTY         = YES
+PERLMOD_MAKEVAR_PREFIX = 
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor   
+#---------------------------------------------------------------------------
+ENABLE_PREPROCESSING   = YES
+MACRO_EXPANSION        = NO
+EXPAND_ONLY_PREDEF     = NO
+SEARCH_INCLUDES        = YES
+INCLUDE_PATH           = 
+INCLUDE_FILE_PATTERNS  = 
+PREDEFINED             = 
+EXPAND_AS_DEFINED      = 
+SKIP_FUNCTION_MACROS   = YES
+#---------------------------------------------------------------------------
+# Configuration::additions related to external references   
+#---------------------------------------------------------------------------
+TAGFILES               = 
+GENERATE_TAGFILE       = 
+ALLEXTERNALS           = NO
+EXTERNAL_GROUPS        = YES
+PERL_PATH              = /usr/bin/perl
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool   
+#---------------------------------------------------------------------------
+CLASS_DIAGRAMS         = NO
+MSCGEN_PATH            = 
+HIDE_UNDOC_RELATIONS   = YES
+HAVE_DOT               = YES
+CLASS_GRAPH            = YES
+COLLABORATION_GRAPH    = NO
+GROUP_GRAPHS           = NO
+UML_LOOK               = YES
+TEMPLATE_RELATIONS     = NO
+INCLUDE_GRAPH          = NO
+INCLUDED_BY_GRAPH      = NO
+CALL_GRAPH             = NO
+CALLER_GRAPH           = NO
+GRAPHICAL_HIERARCHY    = NO
+DIRECTORY_GRAPH        = YES
+DOT_IMAGE_FORMAT       = png
+DOT_PATH               = 
+DOTFILE_DIRS           = 
+DOT_GRAPH_MAX_NODES    = 50
+MAX_DOT_GRAPH_DEPTH    = 1000
+DOT_TRANSPARENT        = NO
+DOT_MULTI_TARGETS      = NO
+GENERATE_LEGEND        = YES
+DOT_CLEANUP            = YES
+#---------------------------------------------------------------------------
+# Configuration::additions related to the search engine   
+#---------------------------------------------------------------------------
+SEARCHENGINE           = YES
diff --git a/build/kabi b/build/kabi
new file mode 100755
index 0000000000000000000000000000000000000000..6a134d54f9705983612f8d0c31de887a0cece583
--- /dev/null
+++ b/build/kabi
@@ -0,0 +1,365 @@
+#! /usr/bin/perl
+# kabi - Linux Kernel Application Binary Interface manager
+#
+# Copyright  2008 Sun Microsystems, Inc. All rights reserved
+# Use is subject to license terms.
+#
+# Gordon Matzigkeit <gord@clusterfs.com>, 2005-10-21
+
+use warnings;
+use strict;
+
+my $VERSION = '0.2';
+
+my $CC = $ENV{'CC'} || 'gcc';
+my $LINUX = '/usr/src/linux';
+my $MODE;
+my $OUTPUT;
+my @ARGS;
+my $VERBOSE = 0;
+
+my $progname = $0;
+$progname =~ s/^.*\///;
+my $modename = $progname;
+
+sub usage
+{
+    my ($status) = @_;
+    if ($status) {
+	print STDERR "Try \`$0 --help' for more information\n";
+    } else {
+	print <<EOF;
+Usage: [CC=COMPILER] $0 [OPTION]... MODE ARGS...
+
+Manage binary compatibility between a Linux kernel and kernel modules.
+
+The CC environment variable specifies the compiler used to build the
+kernel and modules.
+
+    --help            display this message and exit
+-o, --output=KABI     specify the name of the KABI file created by the
+                      \`module\' mode [default=strip .ko and add .kabi]
+-v, --verbose         give reasons for rejecting KABI matches
+    --version         print version information
+    --with-linux=DIR  set the path to the kernel sources
+
+MODE and ARGS can be one of the following:
+
+    archive DIR KMOD  install a KABI and kernel module in a unique place in DIR
+    match FILE...     print a list of KABI files which are compatible with
+                      the specified kernel and any specified kernel modules
+
+    module KMOD       generate a KABI file for the specified kernel module
+
+Written by Gordon Matzigkeit <gord\@clusterfs.com> for Sun Microsystems, Inc.
+EOF
+    }
+    exit $status;
+}
+
+my @args = @ARGV;
+while ($#args >= 0) {
+    if ($args[0] =~ /^--with-l(i(n(u(x)?)?)?)?=(.*)/) {
+	$LINUX = $5;
+    } elsif ($args[0] =~ /^--with-l(i(n(u(x)?)?)?)?$/) {
+	shift @args;
+	$LINUX = $args[0];
+    } elsif ($args[0] =~ /^--h(e(l(p)?)?)?$/) {
+	usage(0);
+    } elsif ($args[0] =~ /^--vers(i(o(n)?)?)?$/) {
+	print "KABI $VERSION\n";
+	exit 0;
+    } elsif ($args[0] eq '-v' || $args[0] =~ /^--verb(o(s(e)?)?)?$/) {
+	$VERBOSE = 1;
+    } elsif ($args[0] =~ /^-/) {
+	print STDERR "$progname: unrecognized option \`$args[0]'\n";
+	usage(1);
+    } elsif (!defined $MODE) {
+	$MODE = $args[0];
+    } else {
+	push @ARGS, $args[0];
+    }
+    shift @args;
+}
+
+
+if (!defined $MODE) {
+    print STDERR "$progname: you must specify a MODE\n";
+    usage(1);
+}
+
+$modename .= ": $MODE";
+if ($MODE eq 'archive') {
+    if ($#ARGS != 1) {
+	print STDERR "$modename: you must specify a DIR and KMOD\n";
+	usage(1);
+    }
+
+    my $ARCHIVE = $ARGS[0];
+    my $KMOD = $ARGS[1];
+
+    my $KABI = $KMOD;
+    $KABI =~ s/\.k?o$//;
+    $KABI .= '.kabi';
+
+    open(MD5SUM, "md5sum $KABI|") or
+	die "$modename: cannot execute \`md5sum': $!\n";
+    my $hash = <MD5SUM>;
+    close(MD5SUM);
+    $hash =~ s/\s+.*//s;
+
+    my $TAG = '';
+    if (-d 'CVS') {
+	open(TAG, '<CVS/Tag') or
+	    die "$modename: cannot read \`CVS/Tag': $!\n";
+	$TAG = <TAG>;
+	close(TAG);
+	chomp $TAG;
+	$TAG = "/$TAG";
+    }
+
+    my ($dir, @sh_c, @cp);
+    if ($ARCHIVE =~ /^([^:][^:]+):(.*)$/) {
+	$dir = $2;
+	@sh_c = ('ssh', '-o', 'BatchMode=yes', $1);
+	@cp = ('scp', '-B');
+    } else {
+	$dir = $ARCHIVE;
+	@sh_c = ('sh', '-c');
+	@cp = ('cp');
+    }
+
+    system(@sh_c, "test -d $dir");
+    if ($? >> 8 != 0) {
+	print STDERR "$modename: warning: \`$dir' is not reachable or does not exist\n";
+	exit 0;
+    }
+
+    print "archiving $KMOD in $ARCHIVE$TAG/$KMOD/$hash\n"
+	if $VERBOSE;
+    foreach my $d ("$dir$TAG", "$dir$TAG/$KMOD", "$dir$TAG/$KMOD/$hash") {
+	system(@sh_c, "test -d $d || mkdir $d");
+	if ($? >> 8 != 0) {
+	    exit $? >> 8;
+	}
+    }
+    system(@cp, $KMOD, $KABI, "$ARCHIVE$TAG/$KMOD/$hash");
+    exit $? >> 8;
+} elsif ($MODE eq 'module') {
+    
+    if ($#ARGS != 0) {
+	print STDERR "$modename: you must specify exactly one KMOD\n";
+	usage(1);
+    }
+
+    my $KMOD = $ARGS[0];
+
+    if (!defined $OUTPUT) {
+	$OUTPUT = $KMOD;
+	$OUTPUT =~ s/\.k?o$//;
+	$OUTPUT .= '.kabi';
+    }
+    print "create $OUTPUT\n" if $VERBOSE;
+    open(OUT, ">$OUTPUT") or
+	die "$modename: cannot create \`$OUTPUT': $!\n";
+
+    my $outname = $OUTPUT;
+    $outname =~ s/^.*\///;
+    print OUT <<EOF;
+# $outname - Kernel module ABI descriptor file
+# DO NOT EDIT - Automatically generated by $progname $VERSION
+EOF
+
+    # Get the kernel version.
+    print OUT "kver " . kernel_version() . "\n";
+
+    # Gather the undefined symbols with version numbers from the
+    # kernel module.
+    my %vers;
+    my @undefs;
+
+    # Gather the version numbers, if any.
+    my $modfile = $KMOD;
+    if ($modfile =~ s/\.ko$/.mod.c/) {
+	open(MOD, "<$modfile") or
+	    die "$modename: cannot read \`$modfile': $!\n";
+	my $versions = 0;
+	while ($_ = <MOD>) {
+	    if (/\"__versions\"/) {
+		$versions = 1;
+	    } elsif ($versions) {
+		if (/^\s*\{\s*(0x[0-9a-f]+)\s*,\s*\"([^\"]*)\"\s*\}\s*,\s*$/) {
+		    $vers{$2} = $1;
+		    push(@undefs, $2);
+		} elsif (/^\s*\}\s*;\s*$/) {
+		    $versions = 0;
+		}
+	    }
+	}
+	close(MOD);
+    } else {
+	open(NM, "nm $KMOD |") or
+	    die "$modename: cannot execute \`nm $KMOD': $!\n";
+	while ($_ = <NM>) {
+	    if (/^\s*U\s*(.*\S)\s*$/) {
+		push @undefs, $1;
+	    }
+	}
+	close(NM);
+    }
+
+    foreach my $undef (sort @undefs)
+    {
+	print OUT "usym $undef";
+	if (defined $vers{$undef}) {
+	    print OUT " ", $vers{$undef};
+	}
+	print OUT "\n";
+    }
+
+    close(OUT) or
+	die "$modename: cannot write \`$OUTPUT': $!\n";
+
+} elsif ($MODE eq 'match') {
+    my @KABIS;
+    my @KMODS;
+
+    my @todo = @ARGS;
+    while ($#todo >= 0) {
+	my $t = shift @todo;
+	if ($t =~ /\.kabi$/) {
+	    push @KABIS, $t;
+	} elsif (-d $t) {
+	    # Add all the contents of the directory to our todo list.
+	    opendir(DIR, $t);
+	    while (my $ent = readdir(DIR)) {
+		if ($ent =~ /^\./) {
+		    # Skip dotfiles.
+		} elsif (-d "$t/$ent") {
+		    # Recurse into subdirectories.
+		    unshift @todo, "$t/$ent";
+		} elsif ($ent =~ /\.k?o$/) {
+		    # Add kernel modules.
+		    unshift @todo, "$t/$ent";
+		}
+	    }
+	    closedir(DIR);
+	} else {
+	    # It's an explicit kernel module.
+	    push @KMODS, $t;
+	}
+    }
+
+    if ($#KABIS < 0) {
+	print STDERR "$modename: you must specify at least one KABI\n";
+	usage(1);
+    }
+
+    my %dsyms;
+
+    if (-f "$LINUX/Module.symvers") {
+	# Look up the version numbers in Module.symvers.
+	open(VERS, "<$LINUX/Module.symvers") or
+	    die "$modename: cannot read \`$LINUX/Module.symvers': $!\n";
+	while ($_ = <VERS>) {
+	    if (/^(0x[0-9a-f]+)\s+(\S+)/) {
+		$dsyms{$2} = hex($1);
+	    }
+	}
+	close(VERS);
+    } else {
+	# Read in all the non-versioned symbols defined by this kernel.
+	open(MAP, "<$LINUX/System.map") or
+	    die "$modename: cannot read \`$LINUX/System.map': $!\n";
+	while ($_ = <MAP>) {
+	    if (/^[0-9a-fA-F]*\s+[ABCDGIRSTW]+\s*(.*\S)\s*$/) {
+		$dsyms{$1} = 0;
+	    }
+	}
+	close(MAP);
+    }
+
+    # Find the symbols for the installed modules, too.
+    foreach my $mod (@KMODS) {
+	open(NM, "nm $mod |") or
+	    die "$modename: cannot execute \`nm $mod': $!\n";
+	while ($_ = <NM>) {
+	    if (/^[0-9a-fA-F]*\s+[ABCDGIRSTW]+\s*(.*\S)\s*$/) {
+		$dsyms{$1} = 0;
+	    }
+	}
+	close(NM);
+    }
+
+    # Also get the kernel version.
+    my $kver = kernel_version();
+
+    # Read each kabi file and print out the ones that are plausible
+    # matches.
+    foreach my $kabi (@KABIS) {
+	open(KABI, "<$kabi") or
+	    die "$modename: cannot read \`$kabi': $!\n";
+	my $possible = 1;
+	while ($possible && ($_ = <KABI>)) {
+	    if (/^\s*#/) {
+		# Skip comments.
+	    } elsif (/^\s*kver\s+(.*\S)\s*$/) {
+		my $modkver = $1;
+		if ($modkver ne $kver) {
+		    print STDERR "$kabi:$.: module version \`$modkver' differs from \`$kver'\n"
+			if $VERBOSE;
+		    $possible = 0;
+		}
+	    } elsif (/^\s*usym\s+(\S+)\s*(\S+)?\s*$/) {
+		my ($modsym, $symver) = ($1, hex($2));
+		if (!defined $dsyms{$modsym}) {
+		    print STDERR "$kabi:$.: module symbol \`$modsym' is not defined\n"
+			if $VERBOSE;
+		    $possible = 0;
+		} elsif (defined $symver && $dsyms{$modsym} != 0 && $dsyms{$modsym} != $symver) {
+		    printf STDERR "$kabi:$.: module symbol \`$modsym' is version 0x%x, not 0x%x\n", $dsyms{$modsym}, $symver
+			if $VERBOSE;
+		    $possible = 0;
+		}
+	    } elsif (/^\s*(\S+)/) {
+		print STDERR "$kabi:$.: unrecognized descriptor line \`$1'\n";
+	    }
+	}
+	close(KABI);
+	
+	if ($possible) {
+	    # We got a match.
+	    print "$kabi\n";
+	}
+    }
+
+} else {
+    print STDERR "$progname: unrecognized mode \`$MODE'\n";
+    usage(1);
+}
+
+
+# Read the kernel version from its built source tree.
+sub kernel_version
+{
+    my $verfile = "$LINUX/include/linux/version.h";
+    open(VERSION, "<$verfile") or
+	die "$modename: cannot read \`$verfile': $!\n";
+
+    my $ver;
+    while ($_ = <VERSION>) {
+	if (/^\s*#\s*define\s+UTS_RELEASE\s+"(.*)"\s*$/) {
+	    $ver = $1;
+	    last;
+	}
+    }
+
+    close(VERSION);
+
+    if (!defined $ver) {
+	die "$modename: cannot find UTS_RELEASE in \`$verfile'\n";
+    }
+    return "linux-$ver";
+}
+
+exit 0;
diff --git a/build/osxpack/License.txt b/build/osxpack/License.txt
new file mode 100644
index 0000000000000000000000000000000000000000..3b8ff2b634d31493e5722b22e1e4da99f0298546
--- /dev/null
+++ b/build/osxpack/License.txt
@@ -0,0 +1,8 @@
+Lustre(R) for OS X
+
+This software is a proprietary product of Sun Microsystems, Inc. which owns all intellectual property rights to this software.
+
+You must obtain a license from Sun Microsystems, Inc. and agree to its terms before using this software.  Contact http://www.lustre.org/
+
+This software is beta software modifying and running kernel code.  Back up all systems before use.  This software is provided to you without any warranty, without even the implied warranty of merchantability, or fitness for a particular purpose.  Consult your license agreement for more details.
+