summaryrefslogtreecommitdiff
path: root/usr/src
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src')
-rw-r--r--usr/src/cmd/initpkg/init.d/sysetup9
-rw-r--r--usr/src/cmd/pools/Makefile17
-rw-r--r--usr/src/cmd/pools/poolcfg/poolcfg.y7
-rw-r--r--usr/src/cmd/pools/poold/Makefile14
-rw-r--r--usr/src/cmd/pools/poold/com/sun/solaris/domain/pools/Poold.java17
-rw-r--r--usr/src/cmd/pools/poold/com/sun/solaris/service/pools/Configuration.java12
-rw-r--r--usr/src/cmd/pools/poold/com/sun/solaris/service/pools/Pool.java3
-rw-r--r--usr/src/cmd/pools/poold/com/sun/solaris/service/pools/Resource.java3
-rw-r--r--usr/src/cmd/pools/poold/poold.c196
-rw-r--r--usr/src/cmd/pools/poold/poold.xml108
-rw-r--r--usr/src/cmd/pools/poold/svc-poold54
-rw-r--r--usr/src/cmd/pools/pools.xml105
-rw-r--r--usr/src/cmd/pools/svc-pools79
-rw-r--r--usr/src/lib/libpool/Makefile.com4
-rw-r--r--usr/src/lib/libpool/common/pool.c147
-rw-r--r--usr/src/lib/libpool/common/pool_kernel.c4
-rw-r--r--usr/src/lib/libpool/common/pool_xml.c14
-rw-r--r--usr/src/pkgdefs/Makefile1
-rw-r--r--usr/src/pkgdefs/SUNWpool/depend9
-rw-r--r--usr/src/pkgdefs/SUNWpool/prototype_com16
-rw-r--r--usr/src/pkgdefs/SUNWpoold/Makefile37
-rw-r--r--usr/src/pkgdefs/SUNWpoold/depend44
-rw-r--r--usr/src/pkgdefs/SUNWpoold/pkginfo.tmpl55
-rw-r--r--usr/src/pkgdefs/SUNWpoold/preremove41
-rw-r--r--usr/src/pkgdefs/SUNWpoold/prototype_com60
-rw-r--r--usr/src/pkgdefs/SUNWpoold/prototype_i38646
-rw-r--r--usr/src/pkgdefs/SUNWpoold/prototype_sparc46
-rw-r--r--usr/src/pkgdefs/SUNWpoolr/Makefile8
-rw-r--r--usr/src/pkgdefs/SUNWpoolr/pkginfo.tmpl9
-rw-r--r--usr/src/pkgdefs/SUNWpoolr/postinstall32
-rw-r--r--usr/src/pkgdefs/SUNWpoolr/prototype_com15
31 files changed, 893 insertions, 319 deletions
diff --git a/usr/src/cmd/initpkg/init.d/sysetup b/usr/src/cmd/initpkg/init.d/sysetup
index 24b97f24a1..b6fced4e9b 100644
--- a/usr/src/cmd/initpkg/init.d/sysetup
+++ b/usr/src/cmd/initpkg/init.d/sysetup
@@ -48,12 +48,3 @@ fi
if [ -f /etc/rctladm.conf ] && [ -x /usr/sbin/rctladm ]; then
/usr/sbin/rctladm -u
fi
-
-#
-# Run pooladm to configure system pools. See pooladm(1m) for more information.
-#
-if [ -f /etc/pooladm.conf ] && [ -x /usr/sbin/pooladm ] && \
- [ "$_INIT_ZONENAME" = "global" ]; then
- /usr/sbin/pooladm -e
- /usr/sbin/pooladm -c
-fi
diff --git a/usr/src/cmd/pools/Makefile b/usr/src/cmd/pools/Makefile
index a26d82631f..b22205e600 100644
--- a/usr/src/cmd/pools/Makefile
+++ b/usr/src/cmd/pools/Makefile
@@ -20,18 +20,23 @@
# CDDL HEADER END
#
#
-# Copyright 2003 Sun Microsystems, Inc. All rights reserved.
+# Copyright 2005 Sun Microsystems, Inc. All rights reserved.
# Use is subject to license terms.
#
-#ident "%Z%%M% %I% %E% SMI"
+# ident "%Z%%M% %I% %E% SMI"
#
# cmd/pools/Makefile
#
+MANIFEST= pools.xml
+SVCMETHOD= svc-pools
+
include ../Makefile.cmd
SUBDIRS= pooladm poolbind poolcfg poolstat poold
+ROOTMANIFESTDIR= $(ROOTSVCSYSTEM)
+
all := TARGET = all
install := TARGET = install
clean := TARGET = clean
@@ -39,9 +44,15 @@ clobber := TARGET = clobber
lint := TARGET = lint
_msg := TARGET = _msg
+$(ROOTMANIFEST):= FILEMODE= 444
+
.KEEP_STATE:
-all install lint clean clobber _msg: $(SUBDIRS)
+all lint clean clobber _msg: $(SUBDIRS)
+
+install: $(SUBDIRS) $(ROOTMANIFEST) $(ROOTSVCMETHOD)
+
+check: $(CHKMANIFEST)
$(SUBDIRS): FRC
@cd $@; pwd; $(MAKE) $(MFLAGS) $(TARGET)
diff --git a/usr/src/cmd/pools/poolcfg/poolcfg.y b/usr/src/cmd/pools/poolcfg/poolcfg.y
index 3fdd526805..cdb8acab9f 100644
--- a/usr/src/cmd/pools/poolcfg/poolcfg.y
+++ b/usr/src/cmd/pools/poolcfg/poolcfg.y
@@ -20,7 +20,7 @@
*
* CDDL HEADER END
*
- * Copyright 2004 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
@@ -328,6 +328,11 @@ create_command: PCC_CREATE entity name
switch ($2) {
case PCE_SYSTEM:
$$->cmd = &parser_conf_create;
+ /*
+ * When creating a new system element, ensure
+ * pre-existing errors are ignored.
+ */
+ conf_list_error = conf_edit_error = POE_OK;
break;
case PCE_POOL:
$$->cmd = &parser_pool_create;
diff --git a/usr/src/cmd/pools/poold/Makefile b/usr/src/cmd/pools/poold/Makefile
index 0dbe209449..bc8335c7ae 100644
--- a/usr/src/cmd/pools/poold/Makefile
+++ b/usr/src/cmd/pools/poold/Makefile
@@ -20,18 +20,20 @@
# CDDL HEADER END
#
#
-# Copyright 2004 Sun Microsystems, Inc. All rights reserved.
+# Copyright 2005 Sun Microsystems, Inc. All rights reserved.
# Use is subject to license terms.
#
#ident "%Z%%M% %I% %E% SMI"
#
# cmd/pools/poold/Makefile
-
PROG = poold
OBJS = poold.o
SRCS = $(OBJS:%.o=%.c)
+MANIFEST= poold.xml
+SVCMETHOD= svc-poold
+
include $(SRC)/cmd/Makefile.cmd
JAVA_SUBDIRS = com/sun/solaris/service/exception \
@@ -47,6 +49,8 @@ SUBDIRS = libjkstat \
libjpool \
libjsyslog
+ROOTMANIFESTDIR= $(ROOTSVCSYSTEM)
+
all := TARGET = all
install := TARGET = install
clean := TARGET = clean
@@ -54,6 +58,7 @@ clobber := TARGET = clobber
lint := TARGET = lint
msg := TARGET = msg
+$(ROOTMANIFEST):= FILEMODE= 444
JARFILE = JPool.jar
# JAVA_SUBDIRS and PACKAGEDOCS must be synchronized to ensure
@@ -108,7 +113,10 @@ lint: $(SUBDIRS)
msg: $(POFILES)
install: $(ROOTCMD) $(JAVA_SUBDIRS) $(JARFILE) \
- .WAIT $(SUBDIRS) $(ROOTJAVA)
+ .WAIT $(SUBDIRS) $(ROOTJAVA) $(ROOTMANIFEST) \
+ $(ROOTSVCMETHOD)
+
+check: $(CHKMANIFEST)
$(JAVA_SUBDIRS): FRC
@cd $@; pwd; $(MAKE) $(TARGET)
diff --git a/usr/src/cmd/pools/poold/com/sun/solaris/domain/pools/Poold.java b/usr/src/cmd/pools/poold/com/sun/solaris/domain/pools/Poold.java
index 8ff1bd7fd5..99beaba9bd 100644
--- a/usr/src/cmd/pools/poold/com/sun/solaris/domain/pools/Poold.java
+++ b/usr/src/cmd/pools/poold/com/sun/solaris/domain/pools/Poold.java
@@ -20,7 +20,7 @@
* CDDL HEADER END
*/
/*
- * Copyright 2004 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*
* ident "%Z%%M% %I% %E% SMI"
@@ -318,11 +318,6 @@ final class Poold
private AtomicBoolean firstInitialization = new AtomicBoolean(true);
/**
- * Ignore configuration updates for the next interval?
- */
- private boolean ignoreUpdates = true;
-
- /**
* Flags whether poold should run or exit.
*/
private AtomicBoolean shouldRun = new AtomicBoolean(true);
@@ -807,16 +802,6 @@ final class Poold
while (shouldRun.get()) {
try {
changed = conf.update();
- /*
- * poold modifies the configuration
- * during startup (updating the PID of
- * poold) so we have to ignore our
- * first ever configuration update.
- */
- if (ignoreUpdates) {
- ignoreUpdates = false;
- changed = 0;
- }
assert(!confRequired || confRequired &&
changed != 0);
if (changed != 0) {
diff --git a/usr/src/cmd/pools/poold/com/sun/solaris/service/pools/Configuration.java b/usr/src/cmd/pools/poold/com/sun/solaris/service/pools/Configuration.java
index ade169e78e..1597af088b 100644
--- a/usr/src/cmd/pools/poold/com/sun/solaris/service/pools/Configuration.java
+++ b/usr/src/cmd/pools/poold/com/sun/solaris/service/pools/Configuration.java
@@ -338,8 +338,7 @@ public class Configuration extends Element
if ((pools = PoolInternal.pool_query_pools(getConf(), values))
== null) {
- if (PoolInternal.pool_error() == 0 ||
- PoolInternal.pool_error() ==
+ if (PoolInternal.pool_error() ==
PoolInternal.POE_INVALID_SEARCH)
return new ArrayList();
else
@@ -447,8 +446,7 @@ public class Configuration extends Element
if ((resources = PoolInternal.pool_query_resources(getConf(),
values)) == null) {
- if (PoolInternal.pool_error() == 0 ||
- PoolInternal.pool_error() ==
+ if (PoolInternal.pool_error() ==
PoolInternal.POE_INVALID_SEARCH)
return new ArrayList();
else
@@ -525,8 +523,7 @@ public class Configuration extends Element
if ((components = PoolInternal.pool_query_components(getConf(),
values)) == null) {
- if (PoolInternal.pool_error() == 0 ||
- PoolInternal.pool_error() ==
+ if (PoolInternal.pool_error() ==
PoolInternal.POE_INVALID_SEARCH)
return new ArrayList();
else
@@ -586,8 +583,7 @@ public class Configuration extends Element
if ((components = PoolInternal.pool_query_components(getConf(),
values)) == null) {
- if (PoolInternal.pool_error() == 0 ||
- PoolInternal.pool_error() ==
+ if (PoolInternal.pool_error() ==
PoolInternal.POE_INVALID_SEARCH)
return new ArrayList();
else
diff --git a/usr/src/cmd/pools/poold/com/sun/solaris/service/pools/Pool.java b/usr/src/cmd/pools/poold/com/sun/solaris/service/pools/Pool.java
index f22f4b311f..113bf463e7 100644
--- a/usr/src/cmd/pools/poold/com/sun/solaris/service/pools/Pool.java
+++ b/usr/src/cmd/pools/poold/com/sun/solaris/service/pools/Pool.java
@@ -117,8 +117,7 @@ public class Pool extends Element {
if ((resources = PoolInternal.pool_query_pool_resources(
_conf.getConf(), getPool(), values)) == null) {
- if (PoolInternal.pool_error() == 0 ||
- PoolInternal.pool_error() ==
+ if (PoolInternal.pool_error() ==
PoolInternal.POE_INVALID_SEARCH)
return new ArrayList();
else
diff --git a/usr/src/cmd/pools/poold/com/sun/solaris/service/pools/Resource.java b/usr/src/cmd/pools/poold/com/sun/solaris/service/pools/Resource.java
index babe05c015..d09327e1bf 100644
--- a/usr/src/cmd/pools/poold/com/sun/solaris/service/pools/Resource.java
+++ b/usr/src/cmd/pools/poold/com/sun/solaris/service/pools/Resource.java
@@ -131,8 +131,7 @@ public class Resource extends Element
if ((components = PoolInternal.pool_query_resource_components(
_conf.getConf(), getResource(), values)) == null) {
- if (PoolInternal.pool_error() == 0 ||
- PoolInternal.pool_error() ==
+ if (PoolInternal.pool_error() ==
PoolInternal.POE_INVALID_SEARCH)
return new ArrayList();
else
diff --git a/usr/src/cmd/pools/poold/poold.c b/usr/src/cmd/pools/poold/poold.c
index 0e0fce2331..8be6ade7d1 100644
--- a/usr/src/cmd/pools/poold/poold.c
+++ b/usr/src/cmd/pools/poold/poold.c
@@ -53,6 +53,7 @@
#define POOLD_DEF_CLASSPATH "/usr/lib/pool/JPool.jar"
#define POOLD_DEF_LIBPATH "/usr/lib/pool"
+#define SMF_SVC_INSTANCE "svc:/system/pools/dynamic:default"
#if defined(sparc)
#define PLAT "sparc"
@@ -64,8 +65,6 @@
#endif
#endif
-#define PID_PROPERTY_NAME "system.poold.pid"
-
#define CLASS_FIELD_DESC(class_desc) "L" class_desc ";"
#define LEVEL_CLASS_DESC "java/util/logging/Level"
@@ -190,58 +189,6 @@ pu_die(const char *fmt, ...)
}
/*
- * Update the "system.poold.pid" to reflect this instance of poold only
- * if the property hasn't been set already to reflect an existing
- * process, and mode is not set to PGAS_GET_ONLY. Returns the
- * property's pre-existing value, or -1 otherwise.
- */
-static pid_t
-poold_get_and_set_pid(pgas_mode_t mode)
-{
- pool_conf_t *conf;
- pool_elem_t *pe;
- pool_value_t *val;
- int64_t ival;
-
- if (!(conf = pool_conf_alloc()))
- return ((pid_t)-1);
-
- if (pool_conf_open(conf, pool_dynamic_location(), PO_RDWR) != 0) {
- (void) pool_conf_free(conf);
- return ((pid_t)-1);
- }
-
- pe = pool_conf_to_elem(conf);
- if (!(val = pool_value_alloc())) {
- (void) pool_conf_close(conf);
- return ((pid_t)-1);
- }
-
- if (pool_get_property(conf, pe, PID_PROPERTY_NAME, val) == POC_INT) {
- if (pool_value_get_int64(val, &ival) != 0) {
- (void) pool_value_free(val);
- (void) pool_conf_close(conf);
- return ((pid_t)-1);
- }
- } else {
- ival = (pid_t)-1;
- }
-
- if (mode == PGAS_GET_AND_SET) {
- ival = getpid();
- pool_value_set_int64(val, ival);
- (void) pool_put_property(conf, pe, PID_PROPERTY_NAME, val);
- (void) pool_conf_commit(conf, 0);
- }
-
- (void) pool_value_free(val);
- (void) pool_conf_close(conf);
- pool_conf_free(conf);
-
- return ((pid_t)ival);
-}
-
-/*
* Reconfigure the JVM by simply updating a dummy property on the
* system element to force pool_conf_update() to detect a change.
*/
@@ -328,8 +275,20 @@ handle_sig(void *arg)
char buf[SIG2STR_MAX];
int detach_required = 0;
- if ((sig = sigwait(&hdl_set)) < 0)
+retry:
+ if ((sig = sigwait(&hdl_set)) < 0) {
+ /*
+ * We used forkall() previously to ensure that
+ * all threads started by the JVM are
+ * duplicated in the child. Since forkall()
+ * can cause blocking system calls to be
+ * interrupted, check to see if the errno is
+ * EINTR and if it is wait again.
+ */
+ if (errno == EINTR)
+ goto retry;
pu_die("unexpected error: %d\n", errno);
+ }
(void) sig2str(sig, buf);
switch (sig) {
case SIGHUP:
@@ -410,7 +369,6 @@ main(int argc, char *argv[])
{
char c;
char log_severity[16] = "";
- pid_t pid;
JavaVMInitArgs vm_args;
JavaVMOption vm_opts[5];
int nopts = 0;
@@ -429,6 +387,7 @@ main(int argc, char *argv[])
int explain_ex = 1;
JavaVM *jvm_tmp;
pthread_t hdl_thread;
+ FILE *p;
pname = pu_getpname(argv[0]);
openlog(pname, 0, LOG_DAEMON);
@@ -456,22 +415,61 @@ main(int argc, char *argv[])
}
/*
- * Verify no other poold is running. This condition is checked
- * again later, but should be checked now since it is more
- * serious (i.e. should be reported before) than a lack of
- * privileges.
- */
- if (((pid = poold_get_and_set_pid(PGAS_GET_ONLY)) != (pid_t)-1) &&
- pid != getpid() && kill(pid, 0) == 0)
- pu_die(gettext("poold is already active (process %ld)\n"), pid);
-
- /*
* Check permission
*/
if (!priv_ineffect(PRIV_SYS_RES_CONFIG))
pu_die(gettext(ERR_PRIVILEGE), PRIV_SYS_RES_CONFIG);
/*
+ * In order to avoid problems with arbitrary thread selection
+ * when handling asynchronous signals, dedicate a thread to
+ * look after these signals.
+ */
+ if (sigemptyset(&hdl_set) < 0 ||
+ sigaddset(&hdl_set, SIGHUP) < 0 ||
+ sigaddset(&hdl_set, SIGTERM) < 0 ||
+ sigaddset(&hdl_set, SIGINT) < 0 ||
+ pthread_sigmask(SIG_BLOCK, &hdl_set, NULL) ||
+ pthread_create(&hdl_thread, NULL, handle_sig, NULL))
+ pu_die(gettext("can't install signal handler"));
+
+ /*
+ * If the -l flag is supplied, terminate the SMF service and
+ * run interactively from the command line.
+ */
+ if (lflag) {
+ char *cmd = "/usr/sbin/svcadm disable -st " SMF_SVC_INSTANCE;
+
+ if (getenv("SMF_FMRI") != NULL)
+ pu_die("-l option illegal: %s\n", SMF_SVC_INSTANCE);
+ /*
+ * Since disabling a service isn't synchronous, use the
+ * synchronous option from svcadm to achieve synchronous
+ * behaviour.
+ * This is not very satisfactory, but since this is only
+ * for use in debugging scenarios, it will do until there
+ * is a C API to synchronously shutdown a service in SMF.
+ */
+ if ((p = popen(cmd, "w")) == NULL || pclose(p) != 0)
+ pu_die("could not temporarily disable service: %s\n",
+ SMF_SVC_INSTANCE);
+ } else {
+ /*
+ * Check if we are running as a SMF service. If we
+ * aren't, terminate this process after enabling the
+ * service.
+ */
+ if (getenv("SMF_FMRI") == NULL) {
+ char *cmd = "/usr/sbin/svcadm enable -s " \
+ SMF_SVC_INSTANCE;
+ if ((p = popen(cmd, "w")) == NULL || pclose(p) != 0)
+ pu_die("could not enable "
+ "service: %s\n", SMF_SVC_INSTANCE);
+ return (E_PO_SUCCESS);
+ }
+ }
+
+ /*
* Establish the classpath and LD_LIBRARY_PATH for native
* methods, and get the interpreter going.
*/
@@ -514,43 +512,6 @@ main(int argc, char *argv[])
vm_args.version = 0x00010002;
/*
- * XXX - Forking after the VM is created is desirable to
- * guarantee reporting of errors, but cannot be done (see
- * 4919246).
- *
- * If invoked by libpool(3LIB), it's set the system.poold.pid
- * property and forked already. If invoked directly and -l is
- * specified, forking is not desired.
- */
- if (!lflag && pid != getpid())
- switch (fork()) {
- case 0:
- (void) setsid();
- (void) fclose(stdin);
- (void) fclose(stdout);
- (void) fclose(stderr);
- break;
- case -1:
- pu_die(gettext("cannot fork"));
- /*NOTREACHED*/
- default:
- return (E_PO_SUCCESS);
- }
-
- /*
- * In order to avoid problems with arbitrary thread selection
- * when handling asynchronous signals, dedicate a thread to
- * look after these signals.
- */
- if (sigemptyset(&hdl_set) < 0 ||
- sigaddset(&hdl_set, SIGHUP) < 0 ||
- sigaddset(&hdl_set, SIGTERM) < 0 ||
- sigaddset(&hdl_set, SIGINT) < 0 ||
- pthread_sigmask(SIG_BLOCK, &hdl_set, NULL) ||
- pthread_create(&hdl_thread, NULL, handle_sig, NULL))
- pu_die(gettext("can't install signal handler"));
-
- /*
* Use jvm_tmp when creating the jvm to prevent race
* conditions with signal handlers. As soon as the call
* returns, assign the global jvm to jvm_tmp.
@@ -648,20 +609,23 @@ main(int argc, char *argv[])
log_dest = LD_JAVA;
/*
- * Now we're ready to start poold. Store our pid in the pools
- * configuration to mark that an instance of poold is active,
- * then invoke Poold.run(), which does not normally return.
- *
- * Note that the ignoreUpdates variable in Poold is used to
- * allow Poold to ignore the pools configuration update that
- * this change triggers. If this code is ever modified to
- * remove or modify this logic, then the Poold class must also
- * be modified to keep the actions synchronized.
+ * If invoked directly and -l is specified, forking is not
+ * desired.
*/
-
- if (((pid = poold_get_and_set_pid(PGAS_GET_AND_SET)) != (pid_t)-1) &&
- pid != getpid() && kill(pid, 0) == 0)
- pu_die(gettext("poold is already active (process %ld)\n"), pid);
+ if (!lflag)
+ switch (forkall()) {
+ case 0:
+ (void) setsid();
+ (void) fclose(stdin);
+ (void) fclose(stdout);
+ (void) fclose(stderr);
+ break;
+ case -1:
+ pu_die(gettext("cannot fork"));
+ /*NOTREACHED*/
+ default:
+ return (E_PO_SUCCESS);
+ }
(void) pthread_mutex_lock(&instance_running_lock);
instance_running = 1;
diff --git a/usr/src/cmd/pools/poold/poold.xml b/usr/src/cmd/pools/poold/poold.xml
new file mode 100644
index 0000000000..87d7ff1f2d
--- /dev/null
+++ b/usr/src/cmd/pools/poold/poold.xml
@@ -0,0 +1,108 @@
+<?xml version="1.0"?>
+<!DOCTYPE service_bundle SYSTEM "/usr/share/lib/xml/dtd/service_bundle.dtd.1">
+<!--
+ CDDL HEADER START
+
+ The contents of this file are subject to the terms of the
+ Common Development and Distribution License (the "License").
+ You may not use this file except in compliance with the License.
+
+ You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+ or http://www.opensolaris.org/os/licensing.
+ See the License for the specific language governing permissions
+ and limitations under the License.
+
+ When distributing Covered Code, include this CDDL HEADER in each
+ file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+ If applicable, add the following below this CDDL HEADER, with the
+ fields enclosed by brackets "[]" replaced with your own identifying
+ information: Portions Copyright [yyyy] [name of copyright owner]
+
+ CDDL HEADER END
+
+ Copyright 2005 Sun Microsystems, Inc. All rights reserved.
+ Use is subject to license terms.
+
+ ident "%Z%%M% %I% %E% SMI"
+
+ NOTE: This service manifest is not editable; its contents will
+ be overwritten by package or patch operations, including
+ operating system upgrade. Make customizations in a different
+ file.
+-->
+
+<service_bundle type='manifest' name='SUNWpoolr:poold'>
+
+<service
+ name='system/pools/dynamic'
+ type='service'
+ version='1'>
+
+ <create_default_instance enabled='false' />
+
+ <single_instance />
+
+ <dependency
+ name='var'
+ type='service'
+ grouping='require_all'
+ restart_on='none'>
+ <service_fmri value='svc:/system/filesystem/local' />
+ </dependency>
+
+ <!-- Resource Pools service must be active. -->
+ <!-- poold detects changes to the Resource Pools configuration,
+ so restart_on is set to 'none'. -->
+ <dependency
+ name='pools'
+ type='service'
+ grouping='require_all'
+ restart_on='none'>
+ <service_fmri value='svc:/system/pools:default' />
+ </dependency>
+
+ <exec_method
+ type='method'
+ name='start'
+ exec='/lib/svc/method/svc-poold %m'
+ timeout_seconds='60'>
+ <method_context>
+ <method_credential user='root' group='root' />
+ </method_context>
+ </exec_method>
+
+ <exec_method
+ type='method'
+ name='stop'
+ exec=':kill'
+ timeout_seconds='60'>
+ <method_context>
+ <method_credential user='root' group='root' />
+ </method_context>
+ </exec_method>
+
+ <exec_method
+ type='method'
+ name='refresh'
+ exec=':kill -HUP'
+ timeout_seconds='60'>
+ <method_context>
+ <method_credential user='root' group='root' />
+ </method_context>
+ </exec_method>
+
+ <stability value='Unstable' />
+
+ <template>
+ <common_name>
+ <loctext xml:lang='C'>
+ dynamic resource pools
+ </loctext>
+ </common_name>
+ <documentation>
+ <manpage title='poold' section='1M' manpath='/usr/share/man' />
+ </documentation>
+ </template>
+</service>
+
+</service_bundle>
diff --git a/usr/src/cmd/pools/poold/svc-poold b/usr/src/cmd/pools/poold/svc-poold
new file mode 100644
index 0000000000..77b2e32773
--- /dev/null
+++ b/usr/src/cmd/pools/poold/svc-poold
@@ -0,0 +1,54 @@
+#!/sbin/sh
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+#
+# Copyright 2005 Sun Microsystems, Inc. All rights reserved.
+# Use is subject to license terms.
+#
+# ident "%Z%%M% %I% %E% SMI"
+#
+# Method script for the pools service.
+#
+
+. /lib/svc/share/smf_include.sh
+
+check_requirements () {
+ if [ ! -x /sbin/zonename ] || [ ! -x /usr/lib/pool/poold ] ||
+ [ "${_INIT_ZONENAME:=`/sbin/zonename`}" != "global" ]; then
+ exit $SMF_EXIT_ERR_FATAL
+ fi
+}
+
+check_requirements
+case "$1" in
+'start')
+ /usr/lib/pool/poold
+ if [ $? -ne 0 ]; then
+ exit $SMF_EXIT_ERR_FATAL
+ fi
+ ;;
+*)
+ echo "Usage: $0 { start }"
+ exit $SMF_EXIT_ERR_FATAL
+ ;;
+esac
+
+exit $SMF_EXIT_OK
diff --git a/usr/src/cmd/pools/pools.xml b/usr/src/cmd/pools/pools.xml
new file mode 100644
index 0000000000..a9feaa7b39
--- /dev/null
+++ b/usr/src/cmd/pools/pools.xml
@@ -0,0 +1,105 @@
+<?xml version="1.0"?>
+<!DOCTYPE service_bundle SYSTEM "/usr/share/lib/xml/dtd/service_bundle.dtd.1">
+<!--
+ CDDL HEADER START
+
+ The contents of this file are subject to the terms of the
+ Common Development and Distribution License (the "License").
+ You may not use this file except in compliance with the License.
+
+ You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+ or http://www.opensolaris.org/os/licensing.
+ See the License for the specific language governing permissions
+ and limitations under the License.
+
+ When distributing Covered Code, include this CDDL HEADER in each
+ file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+ If applicable, add the following below this CDDL HEADER, with the
+ fields enclosed by brackets "[]" replaced with your own identifying
+ information: Portions Copyright [yyyy] [name of copyright owner]
+
+ CDDL HEADER END
+
+ Copyright 2005 Sun Microsystems, Inc. All rights reserved.
+ Use is subject to license terms.
+
+ ident "%Z%%M% %I% %E% SMI"
+
+ NOTE: This service manifest is not editable; its contents will
+ be overwritten by package or patch operations, including
+ operating system upgrade. Make customizations in a different
+ file.
+-->
+
+<service_bundle type='manifest' name='SUNWpoolr:pools'>
+
+<service
+ name='system/pools'
+ type='service'
+ version='1'>
+
+ <create_default_instance enabled='false' />
+
+ <single_instance />
+
+ <dependency
+ name='usr'
+ type='service'
+ grouping='require_all'
+ restart_on='none'>
+ <service_fmri value='svc:/system/filesystem/minimal' />
+ </dependency>
+
+ <exec_method
+ type='method'
+ name='start'
+ exec='/lib/svc/method/svc-pools %m'
+ timeout_seconds='60'>
+ <method_context>
+ <method_credential user='root' group='root' />
+ </method_context>
+ </exec_method>
+
+ <exec_method
+ type='method'
+ name='stop'
+ exec='/lib/svc/method/svc-pools %m'
+ timeout_seconds='60'>
+ <method_context>
+ <method_credential user='root' group='root' />
+ </method_context>
+ </exec_method>
+
+ <exec_method
+ type='method'
+ name='refresh'
+ exec='/lib/svc/method/svc-pools %m'
+ timeout_seconds='60'>
+ <method_context>
+ <method_credential user='root' group='root' />
+ </method_context>
+ </exec_method>
+
+ <property_group name='startd' type='framework'>
+ <propval name='duration' type='astring' value='transient' />
+ </property_group>
+
+ <stability value='Unstable' />
+
+ <template>
+ <common_name>
+ <loctext xml:lang='C'>
+ resource pools framework
+ </loctext>
+ </common_name>
+ <documentation>
+ <manpage title='libpool' section='3LIB' manpath='/usr/share/man' />
+ <manpage title='pooladm' section='1M' manpath='/usr/share/man' />
+ <manpage title='poolbind' section='1M' manpath='/usr/share/man' />
+ <manpage title='poolcfg' section='1M' manpath='/usr/share/man' />
+ <manpage title='poolstat' section='1M' manpath='/usr/share/man' />
+ </documentation>
+ </template>
+</service>
+
+</service_bundle>
diff --git a/usr/src/cmd/pools/svc-pools b/usr/src/cmd/pools/svc-pools
new file mode 100644
index 0000000000..53858cd0fd
--- /dev/null
+++ b/usr/src/cmd/pools/svc-pools
@@ -0,0 +1,79 @@
+#!/sbin/sh
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+#
+# Copyright 2005 Sun Microsystems, Inc. All rights reserved.
+# Use is subject to license terms.
+#
+# ident "%Z%%M% %I% %E% SMI"
+#
+# Method script for the pools service.
+#
+
+. /lib/svc/share/smf_include.sh
+
+check_requirements () {
+ if [ ! -x /sbin/zonename ] || [ ! -x /usr/sbin/pooladm ] ||
+ [ "${_INIT_ZONENAME:=`/sbin/zonename`}" != "global" ]; then
+ exit $SMF_EXIT_ERR_FATAL
+ fi
+}
+
+check_requirements
+case "$1" in
+'start')
+ /usr/sbin/pooladm -e
+ if [ $? -ne 0 ]; then
+ exit $SMF_EXIT_ERR_FATAL
+ fi
+ if [ -f /etc/pooladm.conf ]; then
+ /usr/sbin/pooladm -c
+ if [ $? -ne 0 ]; then
+ /usr/sbin/pooladm -d
+ exit $SMF_EXIT_ERR_CONFIG
+ fi
+ fi
+ ;;
+'stop')
+ /usr/sbin/pooladm -x
+ if [ $? -ne 0 ]; then
+ exit $SMF_EXIT_ERR_FATAL
+ fi
+ /usr/sbin/pooladm -d
+ if [ $? -ne 0 ]; then
+ exit $SMF_EXIT_ERR_FATAL
+ fi
+ ;;
+'refresh')
+ if [ -f /etc/pooladm.conf ]; then
+ /usr/sbin/pooladm -c
+ if [ $? -ne 0 ]; then
+ exit $SMF_EXIT_ERR_CONFIG
+ fi
+ fi
+ ;;
+*)
+ echo "Usage: $0 { start | stop | refresh}"
+ exit $SMF_EXIT_ERR_FATAL
+ ;;
+esac
+
+exit $SMF_EXIT_OK
diff --git a/usr/src/lib/libpool/Makefile.com b/usr/src/lib/libpool/Makefile.com
index 666d632327..76a1b880d3 100644
--- a/usr/src/lib/libpool/Makefile.com
+++ b/usr/src/lib/libpool/Makefile.com
@@ -20,7 +20,7 @@
# CDDL HEADER END
#
#
-# Copyright 2004 Sun Microsystems, Inc. All rights reserved.
+# Copyright 2005 Sun Microsystems, Inc. All rights reserved.
# Use is subject to license terms.
#
# ident "%Z%%M% %I% %E% SMI"
@@ -47,7 +47,7 @@ include ../../Makefile.lib
DYNFLAGS += -lxml2
LIBS = $(DYNLIB) $(LINTLIB)
-LDLIBS += -lc -lnvpair -lexacct -lc
+LDLIBS += -lnvpair -lexacct -lc
$(LINTLIB) := SRCS = $(SRCDIR)/$(LINTSRC)
SRCDIR = ../common
diff --git a/usr/src/lib/libpool/common/pool.c b/usr/src/lib/libpool/common/pool.c
index a27de7fdf8..098deb9c04 100644
--- a/usr/src/lib/libpool/common/pool.c
+++ b/usr/src/lib/libpool/common/pool.c
@@ -97,6 +97,7 @@
#define XFER_SUCCESS PO_SUCCESS
#define XFER_CONTINUE 1
+#define SMF_SVC_INSTANCE "svc:/system/pools:default"
#define E_ERROR 1 /* Exit status for error */
#ifndef TEXT_DOMAIN
@@ -145,7 +146,6 @@ static int pool_conf_check(const pool_conf_t *);
static void free_value_list(int, pool_value_t **);
static int setup_transfer(pool_conf_t *, pool_resource_t *, pool_resource_t *,
uint64_t, uint64_t *, uint64_t *);
-static int pool_start_poold(void);
/*
* Return the "static" location string for libpool.
@@ -709,70 +709,9 @@ pool_get_status(int *state)
}
int
-pool_start_poold()
-{
- pool_value_t val = POOL_VALUE_INITIALIZER;
- pool_conf_t *conf;
- pool_elem_t *pe;
- pid_t pid;
-
- switch (pid = fork()) {
- case 0:
- /*
- * Become a child of init.
- */
- switch (fork()) {
- case 0:
- break;
- case -1:
- dprintf("poold fork failed %d\n", errno);
- pool_seterror(POE_SYSTEM);
- return (PO_FAIL);
- default:
- exit(0);
- break;
- }
-
- /*
- * Store the pid as a property
- */
- conf = pool_conf_alloc();
- (void) pool_conf_open(conf,
- pool_dynamic_location(), PO_RDWR);
- pe = pool_conf_to_elem(conf);
- pool_value_set_int64(&val, getpid());
- (void) pool_put_property(conf, pe,
- "system.poold.pid", &val);
- (void) pool_conf_commit(conf, 0);
- (void) pool_conf_close(conf);
- pool_conf_free(conf);
- (void) setsid();
- (void) fclose(stdin);
- (void) fclose(stdout);
- (void) fclose(stderr);
- if (execl("/usr/lib/pool/poold", "usr/lib/pool/poold", NULL) <
- 0) {
- dprintf("poold exec() failed (errno %d)\n", errno);
- pool_seterror(POE_SYSTEM);
- exit(E_ERROR);
- }
- break;
- case -1:
- dprintf("poold fork failed %d\n", errno);
- pool_seterror(POE_SYSTEM);
- return (PO_FAIL);
- default:
- (void) waitpid(pid, NULL, 0);
- break;
- }
- return (PO_SUCCESS);
-}
-
-int
pool_set_status(int state)
{
int old_state;
- int64_t pid;
if (pool_get_status(&old_state) != PO_SUCCESS) {
pool_seterror(POE_SYSTEM);
@@ -783,24 +722,32 @@ pool_set_status(int state)
int fd;
pool_status_t status;
- if (state == 0) {
- pool_value_t val = POOL_VALUE_INITIALIZER;
- pool_conf_t *conf;
- pool_elem_t *pe;
-
- conf = pool_conf_alloc();
- (void) pool_conf_open(conf, pool_dynamic_location(),
- PO_RDWR);
- pe = pool_conf_to_elem(conf);
- if (pool_get_property(conf, pe, "system.poold.pid",
- &val) != POC_INVAL && pool_value_get_int64(&val,
- &pid) == PO_SUCCESS) {
- (void) kill((pid_t)pid, SIGTERM);
- (void) pool_rm_property(conf, pe,
- "system.poold.pid");
+ /*
+ * Changing the status of pools is performed by enabling
+ * or disabling the pools service instance. If this
+ * function has not been invoked by startd then we simply
+ * enable/disable the service and return success.
+ *
+ * There is no way to specify that state changes must be
+ * synchronous using the library API as yet, so we use
+ * the -s option provided by svcadm.
+ */
+ if (getenv("SMF_FMRI") == NULL) {
+ FILE *p;
+ if (state) {
+ char *cmd = "/usr/sbin/svcadm enable -st " \
+ SMF_SVC_INSTANCE;
+ if ((p = popen(cmd, "w")) == NULL ||
+ pclose(p) != 0)
+ return (PO_FAIL);
+ } else {
+ char *cmd = "/usr/sbin/svcadm disable -st " \
+ SMF_SVC_INSTANCE;
+ if ((p = popen(cmd, "w")) == NULL ||
+ pclose(p) != 0)
+ return (PO_FAIL);
}
- (void) pool_conf_close(conf);
- pool_conf_free(conf);
+ return (PO_SUCCESS);
}
if ((fd = open(pool_dynamic_location(), O_RDWR | O_EXCL)) < 0) {
@@ -818,38 +765,6 @@ pool_set_status(int state)
(void) close(fd);
- /*
- * Start/Stop poold.
- */
- if (state) {
- return (pool_start_poold());
- }
- } else {
- if (state) {
- pool_value_t val = POOL_VALUE_INITIALIZER;
- pool_conf_t *conf;
- pool_elem_t *pe;
- int ret = PO_SUCCESS;
-
- conf = pool_conf_alloc();
- (void) pool_conf_open(conf, pool_dynamic_location(),
- PO_RDWR);
- pe = pool_conf_to_elem(conf);
- if (pool_get_property(conf, pe, "system.poold.pid",
- &val) != POC_INVAL && pool_value_get_int64(&val,
- &pid) == PO_SUCCESS)
- if (kill((pid_t)pid, SIGHUP) < 0) {
- (void) pool_rm_property(conf, pe,
- "system.poold.pid");
- (void) pool_conf_close(conf);
- pool_conf_free(conf);
- ret = pool_start_poold();
- } else {
- (void) pool_conf_close(conf);
- pool_conf_free(conf);
- }
- return (ret);
- }
}
return (PO_SUCCESS);
}
@@ -1801,7 +1716,6 @@ pool_get_pool(const pool_conf_t *conf, const char *name)
}
rs = pool_query_pools(conf, &size, props);
if (rs == NULL) { /* Can't find a pool to match the name */
- pool_seterror(POE_BADPARAM);
return (NULL);
}
if (size != 1) {
@@ -1834,12 +1748,10 @@ pool_query_pools(const pool_conf_t *conf, uint_t *size, pool_value_t **props)
}
rs = pool_exec_query(conf, NULL, NULL, PEC_QRY_POOL, props);
if (rs == NULL) {
- pool_seterror(POE_BADPARAM);
return (NULL);
}
if ((*size = pool_rs_count(rs)) == 0) {
(void) pool_rs_close(rs);
- pool_seterror(POE_INVALID_SEARCH);
return (NULL);
}
if ((result = malloc(sizeof (pool_t *) * (*size + 1))) == NULL) {
@@ -1912,7 +1824,6 @@ pool_get_resource(const pool_conf_t *conf, const char *sz_type,
free_char_buf(cb);
rs = pool_query_resources(conf, &size, props);
if (rs == NULL) {
- pool_seterror(POE_BADPARAM);
return (NULL);
}
if (size != 1) {
@@ -1949,12 +1860,10 @@ pool_query_resources(const pool_conf_t *conf, uint_t *size,
rs = pool_exec_query(conf, NULL, NULL, PEC_QRY_RES, props);
if (rs == NULL) {
- pool_seterror(POE_BADPARAM);
return (NULL);
}
if ((*size = pool_rs_count(rs)) == 0) {
(void) pool_rs_close(rs);
- pool_seterror(POE_INVALID_SEARCH);
return (NULL);
}
if ((result = malloc(sizeof (pool_resource_t *) * (*size + 1)))
@@ -2617,12 +2526,10 @@ pool_query_pool_resources(const pool_conf_t *conf, const pool_t *pp,
rs = pool_exec_query(conf, pe, "res", PEC_QRY_RES, props);
if (rs == NULL) {
- pool_seterror(POE_BADPARAM);
return (NULL);
}
if ((*size = pool_rs_count(rs)) == 0) {
(void) pool_rs_close(rs);
- pool_seterror(POE_INVALID_SEARCH);
return (NULL);
}
if ((result = malloc(sizeof (pool_resource_t *) * (*size + 1)))
@@ -2694,12 +2601,10 @@ pool_query_resource_components(const pool_conf_t *conf,
rs = pool_exec_query(conf, pe, NULL, PEC_QRY_COMP, props);
if (rs == NULL) {
- pool_seterror(POE_BADPARAM);
return (NULL);
}
if ((*size = pool_rs_count(rs)) == 0) {
(void) pool_rs_close(rs);
- pool_seterror(POE_INVALID_SEARCH);
return (NULL);
}
if ((result = malloc(sizeof (pool_component_t *) * (*size + 1)))
diff --git a/usr/src/lib/libpool/common/pool_kernel.c b/usr/src/lib/libpool/common/pool_kernel.c
index 7acfe95fd4..f84d6f2ba5 100644
--- a/usr/src/lib/libpool/common/pool_kernel.c
+++ b/usr/src/lib/libpool/common/pool_kernel.c
@@ -20,7 +20,7 @@
* CDDL HEADER END
*/
/*
- * Copyright 2004 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
@@ -1357,6 +1357,8 @@ pool_knl_exec_query(const pool_conf_t *conf, const pool_elem_t *src,
} else
dict_map(prov->pkc_elements, build_result_set, &qo);
+ if (rs->pkr_count == 0)
+ pool_seterror(POE_INVALID_SEARCH);
return ((pool_result_set_t *)rs);
}
diff --git a/usr/src/lib/libpool/common/pool_xml.c b/usr/src/lib/libpool/common/pool_xml.c
index f5309d5174..31cbe2add0 100644
--- a/usr/src/lib/libpool/common/pool_xml.c
+++ b/usr/src/lib/libpool/common/pool_xml.c
@@ -20,7 +20,7 @@
* CDDL HEADER END
*/
/*
- * Copyright 2004 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
@@ -2141,7 +2141,6 @@ pool_xml_exec_query(const pool_conf_t *conf, const pool_elem_t *src,
if (pool_build_xpath_buf(prov, src, PEC_SYSTEM,
props, cb, PO_TRUE) == PO_FAIL) {
free_char_buf(cb);
- pool_seterror(POE_INVALID_SEARCH);
return (NULL);
}
}
@@ -2149,7 +2148,6 @@ pool_xml_exec_query(const pool_conf_t *conf, const pool_elem_t *src,
if (pool_build_xpath_buf(prov, src, PEC_POOL,
props, cb, PO_TRUE) == PO_FAIL) {
free_char_buf(cb);
- pool_seterror(POE_INVALID_SEARCH);
return (NULL);
}
}
@@ -2158,7 +2156,6 @@ pool_xml_exec_query(const pool_conf_t *conf, const pool_elem_t *src,
PEC_RES_COMP, props, cb, PO_TRUE)
== PO_FAIL) {
free_char_buf(cb);
- pool_seterror(POE_INVALID_SEARCH);
return (NULL);
}
} else if ((classes & PEC_QRY_RES_AGG) != 0) {
@@ -2166,7 +2163,6 @@ pool_xml_exec_query(const pool_conf_t *conf, const pool_elem_t *src,
PEC_RES_AGG, props, cb, PO_TRUE)
== PO_FAIL) {
free_char_buf(cb);
- pool_seterror(POE_INVALID_SEARCH);
return (NULL);
}
}
@@ -2186,7 +2182,6 @@ pool_xml_exec_query(const pool_conf_t *conf, const pool_elem_t *src,
if (pool_build_xpath_buf(prov, src, PEC_SYSTEM, props,
cb, PO_FALSE) == PO_FAIL) {
free_char_buf(cb);
- pool_seterror(POE_INVALID_SEARCH);
return (NULL);
}
}
@@ -2194,7 +2189,6 @@ pool_xml_exec_query(const pool_conf_t *conf, const pool_elem_t *src,
if (pool_build_xpath_buf(prov, src, PEC_POOL, props,
cb, PO_FALSE) == PO_FAIL) {
free_char_buf(cb);
- pool_seterror(POE_INVALID_SEARCH);
return (NULL);
}
}
@@ -2202,7 +2196,6 @@ pool_xml_exec_query(const pool_conf_t *conf, const pool_elem_t *src,
if (pool_build_xpath_buf(prov, src, PEC_RES_COMP, props,
cb, PO_FALSE) == PO_FAIL) {
free_char_buf(cb);
- pool_seterror(POE_INVALID_SEARCH);
return (NULL);
}
}
@@ -2210,7 +2203,6 @@ pool_xml_exec_query(const pool_conf_t *conf, const pool_elem_t *src,
if (pool_build_xpath_buf(prov, src, PEC_RES_AGG, props,
cb, PO_FALSE) == PO_FAIL) {
free_char_buf(cb);
- pool_seterror(POE_INVALID_SEARCH);
return (NULL);
}
}
@@ -2218,7 +2210,6 @@ pool_xml_exec_query(const pool_conf_t *conf, const pool_elem_t *src,
if (pool_build_xpath_buf(prov, src, PEC_COMP, props,
cb, PO_FALSE) == PO_FAIL) {
free_char_buf(cb);
- pool_seterror(POE_INVALID_SEARCH);
return (NULL);
}
}
@@ -2255,6 +2246,8 @@ pool_xml_exec_query(const pool_conf_t *conf, const pool_elem_t *src,
/*
* Generate the result set and wrap the results as pool_elem_t
*/
+ if (rs->pxr_path->nodesetval->nodeNr == 0)
+ pool_seterror(POE_INVALID_SEARCH);
return ((pool_result_set_t *)rs);
}
@@ -2392,6 +2385,7 @@ pool_build_xpath_buf(pool_xml_connection_t *prov, const pool_elem_t *src,
break;
default:
free(type_prefix);
+ pool_seterror(POE_INVALID_SEARCH);
return (PO_FAIL);
}
if (last_prop_name != NULL) {
diff --git a/usr/src/pkgdefs/Makefile b/usr/src/pkgdefs/Makefile
index 1852a8cf8b..c08f161205 100644
--- a/usr/src/pkgdefs/Makefile
+++ b/usr/src/pkgdefs/Makefile
@@ -251,6 +251,7 @@ COMMON_SUBDIRS= \
SUNWpl5u \
SUNWpl5v \
SUNWpool \
+ SUNWpoold \
SUNWpoolr \
SUNWppm \
SUNWpppd \
diff --git a/usr/src/pkgdefs/SUNWpool/depend b/usr/src/pkgdefs/SUNWpool/depend
index 0c07cdcd5e..76f3951c15 100644
--- a/usr/src/pkgdefs/SUNWpool/depend
+++ b/usr/src/pkgdefs/SUNWpool/depend
@@ -1,6 +1,3 @@
-#pragma ident "%Z%%M% %I% %E% SMI"
-# Copyright 2005 Sun Microsystems, Inc. All rights reserved.
-# Use is subject to license terms.
#
# CDDL HEADER START
#
@@ -23,6 +20,11 @@
# CDDL HEADER END
#
#
+# Copyright 2005 Sun Microsystems, Inc. All rights reserved.
+# Use is subject to license terms.
+#
+# ident "%Z%%M% %I% %E% SMI"
+#
# This package information file defines software dependencies associated
# with the pkg. You can define three types of pkg dependencies with this file:
# P indicates a prerequisite for installation
@@ -39,6 +41,5 @@
# <type> <pkg.abbr> <name>
# ...
P SUNWcsl Core Solaris, (Shared Libs)
-P SUNWj5rt JDK 1.5 runtime environment
P SUNWlxml The XML library
P SUNWpoolr Resource Pools (Root)
diff --git a/usr/src/pkgdefs/SUNWpool/prototype_com b/usr/src/pkgdefs/SUNWpool/prototype_com
index c83bc59691..9c4558f6ee 100644
--- a/usr/src/pkgdefs/SUNWpool/prototype_com
+++ b/usr/src/pkgdefs/SUNWpool/prototype_com
@@ -20,10 +20,10 @@
# CDDL HEADER END
#
#
-# Copyright 2004 Sun Microsystems, Inc. All rights reserved.
+# Copyright 2005 Sun Microsystems, Inc. All rights reserved.
# Use is subject to license terms.
#
-#pragma ident "%Z%%M% %I% %E% SMI"
+# ident "%Z%%M% %I% %E% SMI"
#
# This required package information file contains a list of package contents.
# The 'pkgmk' command uses this file to identify the contents of a package
@@ -62,18 +62,6 @@ d none usr/sbin 755 root bin
f none usr/sbin/pooladm 555 root bin
f none usr/sbin/poolcfg 555 root bin
f none usr/sbin/poolbind 555 root bin
-d none usr/lib/pool 755 root bin
-f none usr/lib/pool/poold 555 root bin
-f none usr/lib/pool/libjkstat.so.1 755 root bin
-s none usr/lib/pool/libjkstat.so=./libjkstat.so.1
-f none usr/lib/pool/libjlgrp.so.1 755 root bin
-s none usr/lib/pool/libjlgrp.so=./libjlgrp.so.1
-f none usr/lib/pool/libjpool.so.1 755 root bin
-s none usr/lib/pool/libjpool.so=./libjpool.so.1
-f none usr/lib/pool/libjsyslog.so.1 755 root bin
-s none usr/lib/pool/libjsyslog.so=./libjsyslog.so.1
-f none usr/lib/pool/JPool.jar 444 root bin
-f none usr/lib/pool/poold.properties 444 root bin
d none usr/share 755 root sys
d none usr/share/lib 755 root sys
d none usr/share/lib/xml 755 root sys
diff --git a/usr/src/pkgdefs/SUNWpoold/Makefile b/usr/src/pkgdefs/SUNWpoold/Makefile
new file mode 100644
index 0000000000..a4c95af71e
--- /dev/null
+++ b/usr/src/pkgdefs/SUNWpoold/Makefile
@@ -0,0 +1,37 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+#
+# Copyright 2005 Sun Microsystems, Inc. All rights reserved.
+# Use is subject to license terms.
+#
+#pragma ident "%Z%%M% %I% %E% SMI"
+#
+
+include ../Makefile.com
+
+.KEEP_STATE:
+
+all: $(FILES) depend preremove
+
+install: all pkg
+
+include ../Makefile.targ
+
diff --git a/usr/src/pkgdefs/SUNWpoold/depend b/usr/src/pkgdefs/SUNWpoold/depend
new file mode 100644
index 0000000000..b4c33ee5ef
--- /dev/null
+++ b/usr/src/pkgdefs/SUNWpoold/depend
@@ -0,0 +1,44 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+# Copyright 2005 Sun Microsystems, Inc. All rights reserved.
+# Use is subject to license terms.
+#
+#pragma ident "%Z%%M% %I% %E% SMI"
+#
+# This package information file defines software dependencies associated
+# with the pkg. You can define three types of pkg dependencies with this file:
+# P indicates a prerequisite for installation
+# I indicates an incompatible package
+# R indicates a reverse dependency
+# <pkg.abbr> see pkginfo(4), PKG parameter
+# <name> see pkginfo(4), NAME parameter
+# <version> see pkginfo(4), VERSION parameter
+# <arch> see pkginfo(4), ARCH parameter
+# <type> <pkg.abbr> <name>
+# (<arch>)<version>
+# (<arch>)<version>
+# ...
+# <type> <pkg.abbr> <name>
+# ...
+P SUNWcsl Core Solaris, (Shared Libs)
+P SUNWj5rt JDK 1.5 runtime environment
+P SUNWpoolr Resource Pools (Root)
+P SUNWpool Resource Pools
diff --git a/usr/src/pkgdefs/SUNWpoold/pkginfo.tmpl b/usr/src/pkgdefs/SUNWpoold/pkginfo.tmpl
new file mode 100644
index 0000000000..53a8a076de
--- /dev/null
+++ b/usr/src/pkgdefs/SUNWpoold/pkginfo.tmpl
@@ -0,0 +1,55 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+#
+# Copyright 2005 Sun Microsystems, Inc. All rights reserved.
+# Use is subject to license terms.
+#
+# ident "%Z%%M% %I% %E% SMI"
+#
+# This required package information file describes characteristics of the
+# package, such as package abbreviation, full package name, package version,
+# and package architecture.
+#
+PKG="SUNWpoold"
+NAME="Dynamic Resource Pools"
+ARCH="ISA"
+VERSION="ONVERS,REV=0.0.0"
+SUNW_PRODNAME="SunOS"
+SUNW_PRODVERS="RELEASE/VERSION"
+SUNW_PKGTYPE="usr"
+MAXINST="1000"
+CATEGORY="system"
+DESC="core software for dynamic resource pools"
+VENDOR="Sun Microsystems, Inc."
+HOTLINE="Please contact your local service provider"
+EMAIL=""
+CLASSES="none"
+BASEDIR=/
+SUNW_PKGVERS="1.0"
+SUNW_PKG_ALLZONES="true"
+SUNW_PKG_HOLLOW="false"
+#VSTOCK="<reserved by Release Engineering for package part #>"
+#ISTATES="<developer defined>"
+#RSTATES='<developer defined>'
+#ULIMIT="<developer defined>"
+#ORDER="<developer defined>"
+#PSTAMP="<developer defined>"
+#INTONLY="<developer defined>"
diff --git a/usr/src/pkgdefs/SUNWpoold/preremove b/usr/src/pkgdefs/SUNWpoold/preremove
new file mode 100644
index 0000000000..2003e458c9
--- /dev/null
+++ b/usr/src/pkgdefs/SUNWpoold/preremove
@@ -0,0 +1,41 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+#
+# Copyright 2005 Sun Microsystems, Inc. All rights reserved.
+# Use is subject to license terms.
+#
+#pragma ident "%Z%%M% %I% %E% SMI"
+
+#
+# Make sure that dynamic pools are not enabled before removing this package.
+#
+if [ "${PKG_INSTALL_ROOT:-/}" = "/" ]; then
+ if [ -x /usr/bin/svcs ]; then
+ STATE=`/usr/bin/svcs -Ho STA svc:/system/pools/dynamic`
+ if [ $? -eq 0 ]; then
+ if [ "$STATE" != "DIS" ]; then
+ echo "ERROR: unable to remove package" \
+ "while dynamic pools are enabled."
+ exit 1
+ fi
+ fi
+ fi
+fi
diff --git a/usr/src/pkgdefs/SUNWpoold/prototype_com b/usr/src/pkgdefs/SUNWpoold/prototype_com
new file mode 100644
index 0000000000..846aa2daa4
--- /dev/null
+++ b/usr/src/pkgdefs/SUNWpoold/prototype_com
@@ -0,0 +1,60 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+#
+# Copyright 2005 Sun Microsystems, Inc. All rights reserved.
+# Use is subject to license terms.
+#
+#pragma ident "%Z%%M% %I% %E% SMI"
+#
+# This required package information file contains a list of package contents.
+# The 'pkgmk' command uses this file to identify the contents of a package
+# and their location on the development machine when building the package.
+# Can be created via a text editor or through use of the 'pkgproto' command.
+
+#!search <pathname pathname ...> # where to find pkg objects
+#!include <filename> # include another 'prototype' file
+#!default <mode> <owner> <group> # default used if not specified on entry
+#!<param>=<value> # puts parameter in pkg environment
+
+# packaging files
+i pkginfo
+i copyright
+i depend
+i preremove
+#
+# source locations relative to the prototype file
+#
+# SUNWpoold
+#
+d none usr 755 root sys
+d none usr/lib 755 root bin
+d none usr/lib/pool 755 root bin
+f none usr/lib/pool/poold 555 root bin
+f none usr/lib/pool/libjkstat.so.1 755 root bin
+s none usr/lib/pool/libjkstat.so=./libjkstat.so.1
+f none usr/lib/pool/libjlgrp.so.1 755 root bin
+s none usr/lib/pool/libjlgrp.so=./libjlgrp.so.1
+f none usr/lib/pool/libjpool.so.1 755 root bin
+s none usr/lib/pool/libjpool.so=./libjpool.so.1
+f none usr/lib/pool/libjsyslog.so.1 755 root bin
+s none usr/lib/pool/libjsyslog.so=./libjsyslog.so.1
+f none usr/lib/pool/JPool.jar 444 root bin
+f none usr/lib/pool/poold.properties 444 root bin
diff --git a/usr/src/pkgdefs/SUNWpoold/prototype_i386 b/usr/src/pkgdefs/SUNWpoold/prototype_i386
new file mode 100644
index 0000000000..502f31cc06
--- /dev/null
+++ b/usr/src/pkgdefs/SUNWpoold/prototype_i386
@@ -0,0 +1,46 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+#
+# Copyright 2005 Sun Microsystems, Inc. All rights reserved.
+# Use is subject to license terms.
+#
+# ident "%Z%%M% %I% %E% SMI"
+#
+# This required package information file contains a list of package contents.
+# The 'pkgmk' command uses this file to identify the contents of a package
+# and their location on the development machine when building the package.
+# Can be created via a text editor or through use of the 'pkgproto' command.
+
+#!search <pathname pathname ...> # where to find pkg objects
+#!include <filename> # include another 'prototype' file
+#!default <mode> <owner> <group> # default used if not specified on entry
+#!<param>=<value> # puts parameter in pkg environment
+#
+# Include ISA independent files (prototype_com)
+#
+!include prototype_com
+#
+# List files which are i386 specific here
+#
+# source locations relative to the prototype file
+#
+# SUNWpoold
+#
diff --git a/usr/src/pkgdefs/SUNWpoold/prototype_sparc b/usr/src/pkgdefs/SUNWpoold/prototype_sparc
new file mode 100644
index 0000000000..28fb112ebc
--- /dev/null
+++ b/usr/src/pkgdefs/SUNWpoold/prototype_sparc
@@ -0,0 +1,46 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+#
+# Copyright 2005 Sun Microsystems, Inc. All rights reserved.
+# Use is subject to license terms.
+#
+#ident "%Z%%M% %I% %E% SMI"
+#
+# This required package information file contains a list of package contents.
+# The 'pkgmk' command uses this file to identify the contents of a package
+# and their location on the development machine when building the package.
+# Can be created via a text editor or through use of the 'pkgproto' command.
+
+#!search <pathname pathname ...> # where to find pkg objects
+#!include <filename> # include another 'prototype' file
+#!default <mode> <owner> <group> # default used if not specified on entry
+#!<param>=<value> # puts parameter in pkg environment
+#
+# Include ISA independent files (prototype_com)
+#
+!include prototype_com
+#
+# List files which are SPARC specific here
+#
+# source locations relative to the prototype file
+#
+# SUNWpoold
+#
diff --git a/usr/src/pkgdefs/SUNWpoolr/Makefile b/usr/src/pkgdefs/SUNWpoolr/Makefile
index 4942e4f6f6..7ddbe5ba2a 100644
--- a/usr/src/pkgdefs/SUNWpoolr/Makefile
+++ b/usr/src/pkgdefs/SUNWpoolr/Makefile
@@ -20,7 +20,7 @@
# CDDL HEADER END
#
#
-# Copyright 2003 Sun Microsystems, Inc. All rights reserved.
+# Copyright 2005 Sun Microsystems, Inc. All rights reserved.
# Use is subject to license terms.
#
#pragma ident "%Z%%M% %I% %E% SMI"
@@ -28,9 +28,13 @@
include ../Makefile.com
+DATAFILES += \
+ i.manifest \
+ r.manifest
+
.KEEP_STATE:
-all: $(FILES) depend preremove
+all: $(FILES) depend preremove postinstall
install: all pkg
diff --git a/usr/src/pkgdefs/SUNWpoolr/pkginfo.tmpl b/usr/src/pkgdefs/SUNWpoolr/pkginfo.tmpl
index f7ddc99a6d..e2209827ea 100644
--- a/usr/src/pkgdefs/SUNWpoolr/pkginfo.tmpl
+++ b/usr/src/pkgdefs/SUNWpoolr/pkginfo.tmpl
@@ -1,7 +1,4 @@
#
-# Copyright 2005 Sun Microsystems, Inc. All rights reserved.
-# Use is subject to license terms.
-#
# CDDL HEADER START
#
# The contents of this file are subject to the terms of the
@@ -22,6 +19,10 @@
#
# CDDL HEADER END
#
+#
+# Copyright 2005 Sun Microsystems, Inc. All rights reserved.
+# Use is subject to license terms.
+#
#ident "%Z%%M% %I% %E% SMI"
#
# This required package information file describes characteristics of the
@@ -41,7 +42,7 @@ DESC="core software for resource pools (Root)"
VENDOR="Sun Microsystems, Inc."
HOTLINE="Please contact your local service provider"
EMAIL=""
-CLASSES="none"
+CLASSES="none manifest"
BASEDIR=/
SUNW_PKGVERS="1.0"
SUNW_PKG_ALLZONES="true"
diff --git a/usr/src/pkgdefs/SUNWpoolr/postinstall b/usr/src/pkgdefs/SUNWpoolr/postinstall
new file mode 100644
index 0000000000..160febc4e6
--- /dev/null
+++ b/usr/src/pkgdefs/SUNWpoolr/postinstall
@@ -0,0 +1,32 @@
+#
+# CDDL HEADER START
+#
+# The contents of this file are subject to the terms of the
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
+#
+# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+# or http://www.opensolaris.org/os/licensing.
+# See the License for the specific language governing permissions
+# and limitations under the License.
+#
+# When distributing Covered Code, include this CDDL HEADER in each
+# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+# If applicable, add the following below this CDDL HEADER, with the
+# fields enclosed by brackets "[]" replaced with your own identifying
+# information: Portions Copyright [yyyy] [name of copyright owner]
+#
+# CDDL HEADER END
+#
+#
+# Copyright 2005 Sun Microsystems, Inc. All rights reserved.
+# Use is subject to license terms.
+#
+# ident "%Z%%M% %I% %E% SMI"
+#
+
+if [ -x /usr/sbin/svcadm ] && [ "$UPDATE" = yes ] &&
+ [ -f /etc/pooladm.conf ]; then
+ echo "/usr/sbin/svcadm enable svc:/system/pools" >> \
+ $BASEDIR/var/svc/profile/upgrade
+fi
diff --git a/usr/src/pkgdefs/SUNWpoolr/prototype_com b/usr/src/pkgdefs/SUNWpoolr/prototype_com
index d1c95290ed..47c856d8b9 100644
--- a/usr/src/pkgdefs/SUNWpoolr/prototype_com
+++ b/usr/src/pkgdefs/SUNWpoolr/prototype_com
@@ -20,7 +20,7 @@
# CDDL HEADER END
#
#
-# Copyright 2003 Sun Microsystems, Inc. All rights reserved.
+# Copyright 2005 Sun Microsystems, Inc. All rights reserved.
# Use is subject to license terms.
#
#pragma ident "%Z%%M% %I% %E% SMI"
@@ -39,11 +39,24 @@
i pkginfo
i copyright
i depend
+i postinstall
i preremove
#
# source locations relative to the prototype file
#
# SUNWpoolr
#
+d none lib 755 root bin
+d none lib/svc 0755 root bin
+d none lib/svc/method 0755 root bin
+f none lib/svc/method/svc-poold 555 root bin
+f none lib/svc/method/svc-pools 555 root bin
+d none var 755 root sys
d none var/adm/pool 755 root sys
d none var/log/pool 755 root sys
+d none var/svc 755 root sys
+d none var/svc/manifest 755 root sys
+d none var/svc/manifest/system 755 root sys
+f manifest var/svc/manifest/system/poold.xml 444 root sys
+f manifest var/svc/manifest/system/pools.xml 444 root sys
+