Commit 480fdc70 authored by Mike Hibler's avatar Mike Hibler

Updates for new FreeBSD 10.1 based servers.

Big changes a comin' to try to get us back on the supported path.

 * perl 5.14 -> 5.20
 * mysql 5.1 -> 5.5
 * php 5.4   -> 5.6
 * tcl 8.4   -> 8.6
 * number of vim patches up to 683.

Not everything tested yet, but getting there.

Specific changes:

 * New install/ports directory. New packages for FreeBSD 10.1 are version
   6.1. Cleaned up the ports' Makefiles getting rid of conditionals for
   all older versions. Also got rid of ports we don't use. Old ports tree
   is now install/oports.

 * Install script changes. Make sure /usr/bin/perl and /usr/local/bin/python
   links exist. Ports no longer make these but we use them in '#!'. Changes
   to mysql install and startup script--mysql has changed a LOT since we did
   the support in 4.x. Create syslog entry for named.log. Make sure php.conf
   loads the legacy "mysql" module rather than using "mysqli".

 * Elabinelab support. reflect new packages, remove all old packages
   (except perl) before installing new versions, install "extras" package,
   make sure sendmail cert get regenerated, make sure /usr/bin/perl link
   exists, make sure /usr/local/bin/python link exists.

 * Custom ports. otcl and xerces-c2 have both been removed from the ports
   tree as of Q2 2015. ipmitool-devel is a port for the latest version of
   ipmitool. The FreeBSD port is still a rev behind here. We need the
   newer version as it appears to make our SOL consoles more stable.

 * Random. Fixed prerender as neato output has changed again. Tweak to
   sslxmlrpc_server to reflect change in an underlying library. Tweak to
   db/libdb.py.in to turn on autocommit which matters now as mysql 5.5 will
   hang on a metadata lock otherwise. Remade eventsys perl/python stubs
   with SWIG 2.0. SWIG 1.3 did not produce working stubs for perl 5.20.

Specific un-changes:

 * Apache is still at 2.2. I lack the guts and skilz to upgrade to 2.4.

 * Xerces library is still at (now unsupported) 2.8. Assign will need
   changes before we can move to 3.x.

 * Python is still 2.7.

Thanks to Keith Sklower for all the work he did converting ports!
parent b9d8f28b
# #
# Copyright (c) 2000-2012 University of Utah and the Flux Group. # Copyright (c) 2000-2015 University of Utah and the Flux Group.
# #
# {{{EMULAB-LICENSE # {{{EMULAB-LICENSE
# #
...@@ -39,6 +39,9 @@ endif ...@@ -39,6 +39,9 @@ endif
SYSTEM := $(shell uname -s) SYSTEM := $(shell uname -s)
ARCH := $(shell uname -m) ARCH := $(shell uname -m)
# For the swig-*wrappers targets
SWIG = swig2.0
# We should be able to use va_copy everywhere, but be conservative # We should be able to use va_copy everywhere, but be conservative
SWIGCFLAGS = SWIGCFLAGS =
ifeq ($(ARCH),amd64) ifeq ($(ARCH),amd64)
...@@ -127,7 +130,7 @@ util.So: util.c ...@@ -127,7 +130,7 @@ util.So: util.c
# instructions # instructions
# #
swig-wrappers: event.i event.c event.pm.tail swig-wrappers: event.i event.c event.pm.tail
swig -exportall -perl5 -shadow -I$(SRCDIR) $(SRCDIR)/event.i $(SWIG) -exportall -perl5 -shadow -I$(SRCDIR) $(SRCDIR)/event.i
cat $(SRCDIR)/event.pm.tail >> $(SRCDIR)/event.pm cat $(SRCDIR)/event.pm.tail >> $(SRCDIR)/event.pm
event_wrap.o: $(SRCDIR)/event_wrap.c event_wrap.o: $(SRCDIR)/event_wrap.c
...@@ -140,7 +143,7 @@ event_wrap.So: $(SRCDIR)/event_wrap.c ...@@ -140,7 +143,7 @@ event_wrap.So: $(SRCDIR)/event_wrap.c
# same problems as the perl one. # same problems as the perl one.
# #
swig-pywrappers: event.i event.h event.c tbevent.py.tail swig-pywrappers: event.i event.h event.c tbevent.py.tail
swig -python -I$(SRCDIR) -o $(SRCDIR)/event_wrap_py.c -module tbevent \ $(SWIG) -python -I$(SRCDIR) -o $(SRCDIR)/event_wrap_py.c -module tbevent \
$(SRCDIR)/event.i $(SRCDIR)/event.i
cat $(SRCDIR)/tbevent.py.tail >> $(SRCDIR)/tbevent.py cat $(SRCDIR)/tbevent.py.tail >> $(SRCDIR)/tbevent.py
touch $@ touch $@
......
# This file was automatically generated by SWIG (http://www.swig.org). # This file was automatically generated by SWIG (http://www.swig.org).
# Version 1.3.39 # Version 2.0.12
# #
# Do not make changes to this file unless you know what you are doing--modify # Do not make changes to this file unless you know what you are doing--modify
# the SWIG interface file instead. # the SWIG interface file instead.
...@@ -645,6 +645,17 @@ sub EventFork() { ...@@ -645,6 +645,17 @@ sub EventFork() {
$event::EventSendHandle = undef; $event::EventSendHandle = undef;
} }
#
# When we exit, unregister with the event system if we're connected
#
END {
if ($event::EventSendHandle) {
if (event_unregister($event::EventSendHandle) == 0) {
warn "Could not unregister with event system";
}
}
}
push @EXPORT, qw(event_subscribe event_poll event_poll_blocking EventSend push @EXPORT, qw(event_subscribe event_poll event_poll_blocking EventSend
EventSendFatal EventSendWarn EventFork EventRegister); EventSendFatal EventSendWarn EventFork EventRegister);
1; 1;
......
This diff is collapsed.
This diff is collapsed.
# This file was automatically generated by SWIG (http://www.swig.org). # This file was automatically generated by SWIG (http://www.swig.org).
# Version 1.3.39 # Version 2.0.12
# #
# Do not make changes to this file unless you know what you are doing--modify # Do not make changes to this file unless you know what you are doing--modify
# the SWIG interface file instead. # the SWIG interface file instead.
# This file is compatible with both classic and new-style classes.
from sys import version_info from sys import version_info
if version_info >= (2,6,0): if version_info >= (2,6,0):
...@@ -21,7 +24,7 @@ if version_info >= (2,6,0): ...@@ -21,7 +24,7 @@ if version_info >= (2,6,0):
_mod = imp.load_module('_tbevent', fp, pathname, description) _mod = imp.load_module('_tbevent', fp, pathname, description)
finally: finally:
fp.close() fp.close()
return _mod return _mod
_tbevent = swig_import_helper() _tbevent = swig_import_helper()
del swig_import_helper del swig_import_helper
else: else:
...@@ -39,7 +42,7 @@ def _swig_setattr_nondynamic(self,class_type,name,value,static=1): ...@@ -39,7 +42,7 @@ def _swig_setattr_nondynamic(self,class_type,name,value,static=1):
return return
method = class_type.__swig_setmethods__.get(name,None) method = class_type.__swig_setmethods__.get(name,None)
if method: return method(self,value) if method: return method(self,value)
if (not static) or hasattr(self,name): if (not static):
self.__dict__[name] = value self.__dict__[name] = value
else: else:
raise AttributeError("You cannot add attributes to %s" % self) raise AttributeError("You cannot add attributes to %s" % self)
...@@ -503,6 +506,7 @@ event_notification_get_sender = _tbevent.event_notification_get_sender ...@@ -503,6 +506,7 @@ event_notification_get_sender = _tbevent.event_notification_get_sender
def event_notification_set_sender(*args): def event_notification_set_sender(*args):
return _tbevent.event_notification_set_sender(*args) return _tbevent.event_notification_set_sender(*args)
event_notification_set_sender = _tbevent.event_notification_set_sender event_notification_set_sender = _tbevent.event_notification_set_sender
# This file is compatible with both classic and new-style classes.
cvar = _tbevent.cvar cvar = _tbevent.cvar
......
This diff is collapsed.
# -*- python -*- # -*- python -*-
# #
# Copyright (c) 2000-2011 University of Utah and the Flux Group. # Copyright (c) 2000-2015 University of Utah and the Flux Group.
# #
# {{{EMULAB-LICENSE # {{{EMULAB-LICENSE
# #
...@@ -142,6 +142,9 @@ def TBDBConnect(dbnum=0,db=None,user=None,host=None,passwd=None): ...@@ -142,6 +142,9 @@ def TBDBConnect(dbnum=0,db=None,user=None,host=None,passwd=None):
if cargs.has_key('passwd'): if cargs.has_key('passwd'):
cargs['passwd'] = None cargs['passwd'] = None
pass pass
# XXX we need this for mysql 5.5 and above to avoid metadata
# lock hangs, even when using MyISAM tables.
__DB[dbnum].autocommit(True)
__DBConnectArgs[dbnum] = cargs __DBConnectArgs[dbnum] = cargs
except: except:
if debug: if debug:
......
#!/usr/bin/perl -w #!/usr/bin/perl -w
# #
# Copyright (c) 2010-2014 University of Utah and the Flux Group. # Copyright (c) 2010-2015 University of Utah and the Flux Group.
# #
# {{{EMULAB-LICENSE # {{{EMULAB-LICENSE
# #
...@@ -243,8 +243,7 @@ elsif ($server eq "boss") { ...@@ -243,8 +243,7 @@ elsif ($server eq "boss") {
'exports', 'nfsmounts', 'boss/mibs', 'boss/crontab', 'sudoers', 'exports', 'nfsmounts', 'boss/mibs', 'boss/crontab', 'sudoers',
'samba', 'boss/ssh', 'boss/hostkeys', 'samba', 'boss/ssh', 'boss/hostkeys',
'boss/rndc', 'boss/loaderconf', 'boss/sysctlconf', 'boss/rndc', 'boss/loaderconf', 'boss/sysctlconf',
'boss/sslcerts', 'boss/mailman', 'boss/pubsub', 'boss/sslcerts', 'boss/pubsub', 'boss/software',
'boss/software',
# #
# The next few items must be after the software install since # The next few items must be after the software install since
# they use testbed libraries and such. # they use testbed libraries and such.
...@@ -268,7 +267,7 @@ elsif ($server eq "ops") { ...@@ -268,7 +267,7 @@ elsif ($server eq "ops") {
'ops/ports', 'ops/portfix', 'ops/patches', 'ntpd', 'ops/rcconf', 'ops/ports', 'ops/portfix', 'ops/patches', 'ntpd', 'ops/rcconf',
'ops/sendmail', 'ops/syslog', 'exports', 'nfsmounts', 'ops/sendmail', 'ops/syslog', 'exports', 'nfsmounts',
'ops/crontab', 'sudoers', 'samba', 'ops/ssh', 'capture', 'ops/crontab', 'sudoers', 'samba', 'ops/ssh', 'capture',
'ops/rcfiles', 'apache', 'ops/database', 'ops/mailman', 'ops/rcfiles', 'apache', 'ops/database',
'ops/cvsd', 'ops/flyspray', 'ops/twiki', 'ops/firewall' 'ops/cvsd', 'ops/flyspray', 'ops/twiki', 'ops/firewall'
); );
} }
......
...@@ -64,7 +64,11 @@ $BOSS_PORT = "emulab-boss-1.8"; ...@@ -64,7 +64,11 @@ $BOSS_PORT = "emulab-boss-1.8";
$OPS_PORT = "emulab-ops-1.4"; $OPS_PORT = "emulab-ops-1.4";
$FS_PORT = "emulab-fs-1.4"; $FS_PORT = "emulab-fs-1.4";
if ($FBSD_MAJOR > 4) { if ($FBSD_MAJOR > 4) {
if ($FBSD_MAJOR > 9) { if ($FBSD_MAJOR > 10 || ($FBSD_MAJOR == 10 && $FBSD_MINOR > 0)) {
$BOSS_PORT = "emulab-boss-6.1";
$OPS_PORT = "emulab-ops-6.1";
$FS_PORT = "emulab-fs-6.1";
} elsif ($FBSD_MAJOR > 9) {
$BOSS_PORT = "emulab-boss-6.0"; $BOSS_PORT = "emulab-boss-6.0";
$OPS_PORT = "emulab-ops-6.0"; $OPS_PORT = "emulab-ops-6.0";
$FS_PORT = "emulab-fs-6.0"; $FS_PORT = "emulab-fs-6.0";
...@@ -104,7 +108,10 @@ $PHP_VERSION = 4; ...@@ -104,7 +108,10 @@ $PHP_VERSION = 4;
$PHP_PORT = "php4-extensions-1.0"; $PHP_PORT = "php4-extensions-1.0";
if ($FBSD_MAJOR > 7 || ($FBSD_MAJOR == 7 && $FBSD_MINOR > 2)) { if ($FBSD_MAJOR > 7 || ($FBSD_MAJOR == 7 && $FBSD_MINOR > 2)) {
$PHP_VERSION = 5; $PHP_VERSION = 5;
if ($FBSD_MAJOR > 9 || ($FBSD_MAJOR == 9 && $FBSD_MINOR > 1)) { # there is no longer an explict extensions package
if ($FBSD_MAJOR > 10 || ($FBSD_MAJOR == 10 && $FBSD_MINOR > 0)) {
$PHP_PORT = "php56-5.6.9";
} elsif ($FBSD_MAJOR > 9 || ($FBSD_MAJOR == 9 && $FBSD_MINOR > 1)) {
$PHP_PORT = "php5-extensions-1.7"; $PHP_PORT = "php5-extensions-1.7";
} elsif ($FBSD_MAJOR > 8 || ($FBSD_MAJOR == 8 && $FBSD_MINOR > 2)) { } elsif ($FBSD_MAJOR > 8 || ($FBSD_MAJOR == 8 && $FBSD_MINOR > 2)) {
$PHP_PORT = "php5-extensions-1.6"; $PHP_PORT = "php5-extensions-1.6";
...@@ -133,7 +140,10 @@ $SELFLOAD_PATCH = "$main::TOP_SRCDIR/patches/SelfLoader.patch"; ...@@ -133,7 +140,10 @@ $SELFLOAD_PATCH = "$main::TOP_SRCDIR/patches/SelfLoader.patch";
# #
$PYM2_PKG = "py25-m2crypto-0.19.1"; $PYM2_PKG = "py25-m2crypto-0.19.1";
$PY_VER = "python2.5"; $PY_VER = "python2.5";
if ($FBSD_MAJOR > 9) { if ($FBSD_MAJOR > 10 || ($FBSD_MAJOR == 10 && $FBSD_MINOR > 0)) {
$PYM2_PKG = "py27-m2crypto-0.22.3";
$PY_VER = "python2.7";
} elsif ($FBSD_MAJOR > 9) {
$PYM2_PKG = "py27-m2crypto-0.21.1_1"; $PYM2_PKG = "py27-m2crypto-0.21.1_1";
$PY_VER = "python2.7"; $PY_VER = "python2.7";
} elsif ($FBSD_MAJOR > 8 || ($FBSD_MAJOR == 8 && $FBSD_MINOR > 2)) { } elsif ($FBSD_MAJOR > 8 || ($FBSD_MAJOR == 8 && $FBSD_MINOR > 2)) {
...@@ -205,6 +215,19 @@ $NEEDMROUTED = 0; ...@@ -205,6 +215,19 @@ $NEEDMROUTED = 0;
$ARCHSUPPORT = @ARCHIVESUPPORT@; $ARCHSUPPORT = @ARCHIVESUPPORT@;
$BROWSER_CONSOLE_ENABLE = @BROWSER_CONSOLE_ENABLE@; $BROWSER_CONSOLE_ENABLE = @BROWSER_CONSOLE_ENABLE@;
#
# Python/Perl paths
#
# EMULAB* are the paths we expect and use in '#!'
# PORT* are the paths that the ports install and should always exist
#
# We make sure the former is symlinked to the latter.
#
$EMULAB_PERL_PATH = "/usr/bin/perl";
$EMULAB_PYTHON_PATH = "/usr/local/bin/python";
$PORT_PERL_PATH = "/usr/local/bin/perl5";
$PORT_PYTHON_PATH = "/usr/local/bin/python2";
# #
# Some programs we use # Some programs we use
# #
...@@ -271,6 +294,7 @@ $AUTHKEYS = "/root/.ssh/authorized_keys"; ...@@ -271,6 +294,7 @@ $AUTHKEYS = "/root/.ssh/authorized_keys";
$RCCAPTURE = "$PREFIX/etc/rc.capture"; $RCCAPTURE = "$PREFIX/etc/rc.capture";
$RCLOCAL = "/etc/rc.local"; $RCLOCAL = "/etc/rc.local";
$PHP_INI = "/usr/local/etc/php.ini"; $PHP_INI = "/usr/local/etc/php.ini";
$PHP_CONF = "/usr/local/etc/php.conf";
$SENDMAIL_CF = "/etc/mail/sendmail.cf"; $SENDMAIL_CF = "/etc/mail/sendmail.cf";
$INETD_CONF = "/etc/inetd.conf"; $INETD_CONF = "/etc/inetd.conf";
$ETCSSH = "/etc/ssh"; $ETCSSH = "/etc/ssh";
......
#!/usr/bin/perl -w #!/usr/bin/perl -w
# #
# Copyright (c) 2003-2014 University of Utah and the Flux Group. # Copyright (c) 2003-2015 University of Utah and the Flux Group.
# #
# {{{EMULAB-LICENSE # {{{EMULAB-LICENSE
# #
...@@ -399,6 +399,18 @@ sub DoneIfDoesntExist($) { ...@@ -399,6 +399,18 @@ sub DoneIfDoesntExist($) {
} }
} }
#
# Check to see if the phase is already done, as evidenced by the existance
# and executability of a file.
#
sub DoneIfExecutable($) {
my ($filename) = @_;
if (!$filename) { PhaseFail("Bad filename passed to DoneIfExecutable"); }
if (-x "$filename") {
PhaseSkip("File already exists and is executable");
}
}
# #
# Check to see if the phase is already done, as evidenced by the existance of # Check to see if the phase is already done, as evidenced by the existance of
# comments within a file # comments within a file
...@@ -829,7 +841,7 @@ sub InstalledPackage($$) { ...@@ -829,7 +841,7 @@ sub InstalledPackage($$) {
$args = $exact ? "-I" : "-I -X"; $args = $exact ? "-I" : "-I -X";
@foo = `pkg_info $args $pname 2>/dev/null`; @foo = `pkg_info $args $pname 2>/dev/null`;
} elsif (-x "/usr/sbin/pkg") { } elsif (-x "/usr/sbin/pkg") {
$args = $exact ? "" : "-x"; $args = $exact ? "-E" : "-E -x";
@foo = `pkg info $args $pname 2>/dev/null`; @foo = `pkg info $args $pname 2>/dev/null`;
} else { } else {
PhaseFail("No package tools found!?"); PhaseFail("No package tools found!?");
......
This directory contains meta-ports that install the various ports needed for
boss and ops nodes. Copy these directories to /usr/ports/misc .
This diff is collapsed.
#
# Common settings for Emulab ports.
#
.if !defined(EMULAB_PORTVERSION)
OSMAJOR!= /usr/bin/uname -r | /usr/bin/sed -e 's/\..*//'
OSMINOR!= /usr/bin/uname -r | /usr/bin/sed -e 's/[0-9][0-9]*\.\([0-9][0-9]*\).*/\1/'
OSARCH != /usr/bin/uname -m
.if ${OSMAJOR} > 9
EMULAB_PORTVERSION= 6.0
.elif ${OSMAJOR} > 8
. if ${OSMINOR} >= 2
EMULAB_PORTVERSION= 5.1
. else
EMULAB_PORTVERSION= 5.0
. endif
.elif ${OSMAJOR} > 7
. if ${OSMINOR} >= 3
EMULAB_PORTVERSION= 5.0
. else
EMULAB_PORTVERSION= 4.0
. endif
.elif ${OSMAJOR} > 6
. if ${OSMINOR} > 2
EMULAB_PORTVERSION= 3.1
. else
EMULAB_PORTVERSION= 3.0
. endif
.elif ${OSMAJOR} > 5
. if ${OSMINOR} >= 3
EMULAB_PORTVERSION= 2.1
. else
EMULAB_PORTVERSION= 2.0
. endif
.else
EMULAB_PORTVERSION= 1.7
.endif
#
# Select PHP and Apache versions
# Fix up some port diffs
#
.if ${EMULAB_PORTVERSION} == "6.0"
DEFAULT_VERSIONS= perl=5.14 python=2.7 php=5.4 mysql=5.1 apache=2.2 tcltk=8.4
PHP_VER= 5
PERL_ARCH= mach
PERL_VER= 5.14
PERL_VERSION= 5.14.4
PYTHON_DEFAULT_VERSION=python2.7
APACHE_PORT= www/apache22
BOOST_PORT= devel/boost-all
P5SNMP_PORT= misc/p5-SNMP
MYSQL_VER= 51
.elif ${EMULAB_PORTVERSION} == "5.1"
PHP_VER= 5
PERL_VER= 5.12
PERL_VERSION= 5.12.5
PYTHON_DEFAULT_VERSION=python2.7
APACHE_PORT= www/apache22
BOOST_PORT= devel/boost-all
P5SNMP_PORT= misc/p5-SNMP
MYSQL_VER= 51
.elif ${EMULAB_PORTVERSION} == "5.0"
PHP_VER= 5
PERL_VER= 5.12.4
PYTHON_DEFAULT_VERSION=python2.7
APACHE_PORT= www/apache22
BOOST_PORT= devel/boost-all
P5SNMP_PORT= misc/p5-SNMP
MYSQL_VER= 50
.elif ${EMULAB_PORTVERSION} == "4.0"
PHP_VER= 5
PERL_VER= 5.10.1
APACHE_PORT= www/apache22
BOOST_PORT= devel/boost-all
P5SNMP_PORT= misc/p5-SNMP
MYSQL_VER= 50
.elif ${EMULAB_PORTVERSION} == "3.1"
PHP_VER= 5
PERL_VER= 5.10.1
APACHE_PORT= www/apache13-modssl
BOOST_PORT= devel/boost-all
P5SNMP_PORT= misc/p5-SNMP
MYSQL_VER= 50
.else
PHP_VER= 4
APACHE_PORT= www/apache13-modssl
BOOST_PORT= devel/boost
P5SNMP_PORT= net-mgmt/p5-SNMP
MYSQL_VER= 50
.endif
.endif
Meta-port for an emulab boss node. This port does not install the emulab
software itself - it just ensures that the requisite ports are installed.
This diff is collapsed.
Extra convenience packages for Emulab
This diff is collapsed.
Meta-port for an emulab fs node. This port does not install the emulab software
itself - it just ensures that the requisite ports are installed.
@comment This packing list left intentionally empty
This diff is collapsed.
Meta-port for an emulab ops node. This port does not install the emulab software
itself - it just ensures that the requisite ports are installed.
@comment This packing list left intentionally empty
@comment This packing list left intentionally empty
@comment This packing list left intentionally empty
This diff is collapsed.
Meta-port for an emulab Protogeni site.
@comment This packing list left intentionally empty
# ports collection makefile for: emulab-pubsub
PORTNAME= pubsub
PORTVERSION= 0.99
CATEGORIES= misc
MASTER_SITES= http://www.emulab.net/distributions/
DISTFILES= ${PORTNAME}-${PORTVERSION}.tar.gz
WRKSRC= ${WRKDIR}/${PORTNAME}-${PORTVERSION}
MAINTAINER= testbed-ops@flux.utah.edu
COMMENT= "Simple publish subscribe system for Emulab"
USE_AUTOTOOLS= autoconf
USE_GMAKE= yes
INSTALLS_SHLIB= yes
CONFLICTS= pubsub-elvincompat-[0-9]*
MAKE_FLAGS= ELVIN_COMPAT= ELVIN_NOELVIN=1
NO_STAGE= yes
.include <bsd.port.mk>
MD5 (pubsub-0.9.tar.gz) = 25216f20821bb7094a1853b1771cb5b8
MD5 (pubsub-0.95.tar.gz) = 9e012e65ebb4979e99f686e5f8fa8104
MD5 (pubsub-0.98.tar.gz) = 469a834a6c062f0c7af2c829e50a6180
SHA256 (pubsub-0.95.tar.gz) = 7b8eb4f495a531454b16abb8e8399e031fa17a31e09c4ce47486cedaa3ae4410
SHA256 (pubsub-0.98.tar.gz) = 6a8239102c65643ce19cb3b205401e1b3cd25dc1e647f32e7de88df7175dbde5
SHA256 (pubsub-0.99.tar.gz) = 2f7ca366b120217158e4de75a1cec3d9aa65e89adb9be67461a6f4d936153d40
Simple publish subscribe system for Emulab
libexec/pubsubd
libexec/clusterd
include/pubsub/pubsub.h
include/pubsub/elvin_hash.h
lib/libpubsub.a
lib/libpubsub.so.1
lib/libpubsub.so
lib/libpubsub_r.a
etc/rc.d/2.pubsubd.sh
@dirrm include/pubsub
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.