pki-ca

pki-ca#

After updating an existing Dogtag installation from CA version 1.2.0 to 1.3.6, the CA would no longer start. The following packages were updated:

=============================================================================================================================================================================
 Package                                            Arch                                 Version                                  Repository                            Size
=============================================================================================================================================================================
Installing:
 pki-symkey                                         i386                                 1.3.2-4                                  dogtag                                33 k
     replacing  symkey.i386 1.2.0-2

Updating:
 dogtag-pki-ca-ui                                   noarch                               1.3.2-1                                  dogtag                               311 k
 dogtag-pki-common-ui                               noarch                               1.3.3-1                                  dogtag                                70 k
 osutil                                             i386                                 1.3.1-3                                  dogtag                                25 k
 pki-ca                                             noarch                               1.3.6-1                                  dogtag                               214 k
 pki-common                                         noarch                               1.3.8-1                                  dogtag                               2.5 M
 pki-java-tools                                     noarch                               1.3.1-1                                  dogtag                               115 k
 pki-native-tools                                   i386                                 1.3.0-5                                  dogtag                               129 k
 pki-selinux                                        noarch                               1.3.5-1                                  dogtag                                33 k
 pki-setup                                          noarch                               1.3.4-1                                  dogtag                                50 k
 pki-util                                           noarch                               1.3.2-1                                  dogtag                               541 k
Installing for dependencies:
 pki-silent                                         noarch                               1.2.0-1                                  dogtag                               264 k

This CA was installed and configured as the default instance pki-ca. The upgrade left all the data and configuration intact, the CA just wouldn’t start when running /etc/init.d/pki-ca start. The user is greeted with the following scary message:

# /etc/init.d/pki-ca start
This machine is missing all PKI subsystems!

I realized there was now a /etc/init.d/pki-cad that also wouldn’t start the CA:

# /etc/init.d/pki-cad start
This machine contains no registered 'pki-ca' subsystem instances!

To get around this and allow the existing CA to start with the new pki-cad, you need to modify 2 existing config files and create one new one.

  • Create the folder that is now referred to as the PKI_REGISTRY:

# mkdir -p /etc/sysconfig/pki/ca/
  • In this folder, create a file that has the same name as the instance of your CA (for example, my ca is pki-ca so I create the file /etc/sysconfig/pki/ca/pki-ca

  • Add the following as the contents of the file, making sure to edit references to pki-ca to be your instance name (These should be PKI_INSTANCE_ID,PKI_INSTANCE_PATH, and PKI_SERVER_XML_CONF):

# Establish PKI Variable "Slot" Substitutions

PKI_FLAVOR=pki
export PKI_FLAVOR

PKI_GROUP=pkiuser
export PKI_GROUP

PKI_INSTANCE_ID=pki-ca
export PKI_INSTANCE_ID

PKI_INSTANCE_PATH=/var/lib/pki-ca
export PKI_INSTANCE_PATH

PKI_SERVER_XML_CONF=/etc/pki-ca/server.xml
export PKI_SERVER_XML_CONF

PKI_SUBSYSTEM_TYPE=ca
export PKI_SUBSYSTEM_TYPE

PKI_USER=pkiuser
export PKI_USER

# Use CATALINA_BASE

CATALINA_BASE=${PKI_INSTANCE_PATH}
export CATALINA_BASE

# Get Tomcat config

TOMCAT_CFG="${PKI_INSTANCE_PATH}/conf/tomcat5.conf"
export TOMCAT_CFG

[ -r "$TOMCAT_CFG" ] && . "${TOMCAT_CFG}"

# Path to the tomcat launch script (direct don't use wrapper)
TOMCAT_SCRIPT=/usr/bin/dtomcat5-${PKI_INSTANCE_ID}
export TOMCAT_SCRIPT

# Path to the script that will refresh jar symlinks on startup
if [ ${OS} = "Linux" ] ; then
    TOMCAT_RELINK_SCRIPT="/usr/share/tomcat5/bin/relink"
    export TOMCAT_RELINK_SCRIPT
fi

# Tomcat name :)
TOMCAT_PROG=${PKI_INSTANCE_ID}
export TOMCAT_PROG

# if TOMCAT_USER is not set, use tomcat5 like Apache HTTP server
if [ -z "$TOMCAT_USER" ]; then
    TOMCAT_USER="${PKI_USER}"
    export TOMCAT_USER
fi

# if TOMCAT_GROUP is not set, use tomcat5 like Apache HTTP server
if [ -z "$TOMCAT_GROUP" ]; then
    TOMCAT_GROUP="${PKI_GROUP}"
    export TOMCAT_GROUP
fi

# Since the daemon function will sandbox $tomcat
# no environment stuff should be defined here anymore.
# Please use the ${PKI_INSTANCE_PATH}/conf/tomcat5.conf
# file instead ; it will be read by the $tomcat script

PKI_LOCKDIR="/var/lock/pki/ca"
export PKI_LOCKDIR
PKI_LOCKFILE="${PKI_LOCKDIR}/${PKI_INSTANCE_ID}.pid"
export PKI_LOCKFILE
PKI_PIDFILE="${PKI_INSTANCE_ID}.pid"
export PKI_PIDFILE
pki_instance_configuration_file=${PKI_INSTANCE_PATH}/conf/CS.cfg
export pki_instance_configuration_file

RESTART_SERVER=${PKI_INSTANCE_PATH}/conf/restart_server_after_configuration
export RESTART_SERVER
  • Replace the contents of /etc/pki-ca/tomcat5.conf with the following (again, edit references to pki-ca to apply to your ca instance, and the filename may be different depending on your instance name):

# tomcat5 service configuration file

# Check to insure that this configuration file's associated PKI
# subsystem currently resides on this system.
PKI_SUBSYSTEM_TYPE=ca
if [ ! -d /usr/share/pki/${PKI_SUBSYSTEM_TYPE} ] ; then
    echo "This machine is missing the '${PKI_SUBSYSTEM_TYPE}' subsystem!"
    exit 255
fi

# you could also override JAVA_HOME here
# Where your java installation lives
JAVA_HOME="/usr/lib/jvm/jre"

# You can pass some parameters to java
# here if you wish to
#JAVA_OPTS="-Xminf0.1 -Xmaxf0.3"

# Where your tomcat installation lives
# That change from previous RPM where TOMCAT_HOME
# used to be /var/tomcat.
# Now /var/tomcat will be the base for webapps only
CATALINA_HOME="/usr/share/tomcat5"
JASPER_HOME="/usr/share/tomcat5"
CATALINA_TMPDIR="/usr/share/tomcat5/temp"
JAVA_ENDORSED_DIRS="/usr/share/tomcat5/common/endorsed"

# What user should run tomcat
TOMCAT_USER="pkiuser"
TOMCAT_GROUP="pkiuser"

# You can change your tomcat locale here
#LANG=en_US

# Time to wait in seconds, while starting process
STARTUP_WAIT=30

# Time to wait in seconds, before killing process
SHUTDOWN_WAIT=30


# If you wish to further customize your tomcat environment,
# put your own definitions here
# (i.e. LD_LIBRARY_PATH for some jdbc drivers)
# Just do not forget to export them :)

OS=`uname -s`
if [ $OS = "Linux" ]; then
    PLATFORM=`uname -i`
    if [ $PLATFORM = "i386" ]; then
        # 32-bit Linux
        LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/dirsec:/usr/lib
    elif [ $PLATFORM = "x86_64" ]; then
        # 64-bit Linux
        LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib64/dirsec:/usr/lib64:/usr/lib
    fi
    export LD_LIBRARY_PATH
elif [ $PLATFORM = "SunOS" ]; then
    PLATFORM=`uname -p`
    if  [ "${PLATFORM}" = "sparc" ] &&
        [ -d "/usr/lib/sparcv9/" ] ; then
        PLATFORM="sparcv9"
    fi
    if [ $PLATFORM = "sparc" ]; then
        # 32-bit Solaris
        LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/dirsec:/usr/lib
    elif [ $PLATFORM = "sparcv9" ]; then
        # 64-bit Solaris
        JAVA_OPTS="-d64"
        export JAVA_OPTS
        LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/sparcv9/dirsec:/usr/lib/sparcv9:/usr/lib/dirsec:/usr/lib
    fi
    export LD_LIBRARY_PATH
fi
  • Replace the contents of /usr/bin/dtomcat5-pki-ca with the following (again, edit references to pki-ca to apply to your ca instance and the filename may be different depending on your instance name):

#!/bin/bash
#
# --- BEGIN COPYRIGHT BLOCK ---
# Copyright (C) 2006 Red Hat, Inc.
# All rights reserved.
# --- END COPYRIGHT BLOCK ---
#
# -----------------------------------------------------------------------------
# Start/Stop Script for the CATALINA Server
#
# Environment Variable Prequisites
#
#   CATALINA_HOME   May point at your Catalina "build" directory.
#
#   CATALINA_BASE   (Optional) Base directory for resolving dynamic portions
#                   of a Catalina installation.  If not present, resolves to
#                   the same directory that CATALINA_HOME points to.
#
#   CATALINA_OPTS   (Optional) Java runtime options used when the "start",
#                   "stop", or "run" command is executed.
#
#   CATALINA_TMPDIR (Optional) Directory path location of temporary directory
#                   the JVM should use (java.io.tmpdir).  Defaults to
#                   $CATALINA_BASE/temp.
#
#   JAVA_HOME       Must point at your Java Development Kit installation.
#                   Required to run the with the "debug" or "javac" argument.
#
#   JRE_HOME        Must point at your Java Development Kit installation.
#                   Defaults to JAVA_HOME if empty.
#
#   JAVA_OPTS       (Optional) Java runtime options used when the "start",
#                   "stop", or "run" command is executed.
#
#   JPDA_TRANSPORT  (Optional) JPDA transport used when the "jpda start"
#                   command is executed. The default is "dt_socket".
#
#   JPDA_ADDRESS    (Optional) Java runtime options used when the "jpda start"
#                   command is executed. The default is 8000.
#
#   JSSE_HOME       (Optional) May point at your Java Secure Sockets Extension
#                   (JSSE) installation, whose JAR files will be added to the
#                   system class path used to start Tomcat.
#
#   CATALINA_PID    (Optional) Path of the file which should contains the pid
#                   of catalina startup java process, when start (fork) is used
#
# $Id: catalina.sh,v 1.19 2005/03/03 15:13:39 remm Exp $
# -----------------------------------------------------------------------------

# Disallow 'others' the ability to 'write' to new files
umask 00002

# Check to insure that this script's original invocation directory
# has not been deleted!
CWD=`/bin/pwd > /dev/null 2>&1`
if [ $? -ne 0 ] ; then
    echo "Cannot invoke '$0' from non-existent directory!"
    exit 255
fi

# Check to insure that this script's associated PKI
# subsystem currently resides on this system.
PKI_SUBSYSTEM_TYPE=ca
if [ ! -d /usr/share/pki/${PKI_SUBSYSTEM_TYPE} ] ; then
    echo "This machine is missing the '${PKI_SUBSYSTEM_TYPE}' subsystem!"
    exit 255
fi

# OS specific support.  $var _must_ be set to either true or false.
OS=`uname -s`
cygwin=false
os400=false
case "${OS}" in
CYGWIN*) cygwin=true;;
OS400*) os400=true;;
esac

TOMCAT_CFG=/var/lib/pki-ca/conf/tomcat5.conf
JAVADIR="/usr/share/java"

# resolve links - $0 may be a softlink
PRG="$0"

while [ -h "$PRG" ]; do
  ls=`ls -ld "$PRG"`
  link=`expr "$ls" : '.*-> \(.*\)$'`
  if expr "$link" : '.*/.*' > /dev/null; then
    PRG="$link"
  else
    PRG=`dirname "$PRG"`/"$link"
  fi
done

# Get standard environment variables
PRGDIR=`dirname "$PRG"`

# Only set CATALINA_HOME if not already set
[ -z "$CATALINA_HOME" ] && CATALINA_HOME=`cd "$PRGDIR/.." ; pwd`

if [ -r "$CATALINA_HOME"/bin/setenv.sh ]; then
  . "$CATALINA_HOME"/bin/setenv.sh
fi

# For Cygwin, ensure paths are in UNIX format before anything is touched
if $cygwin; then
  [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
  [ -n "$JRE_HOME" ] && JRE_HOME=`cygpath --unix "$JRE_HOME"`
  [ -n "$CATALINA_HOME" ] && CATALINA_HOME=`cygpath --unix "$CATALINA_HOME"`
  [ -n "$CATALINA_BASE" ] && CATALINA_BASE=`cygpath --unix "$CATALINA_BASE"`
  [ -n "$CLASSPATH" ] && CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
  [ -n "$JSSE_HOME" ] && JSSE_HOME=`cygpath --absolute --unix "$JSSE_HOME"`
fi

# For OS400
if $os400; then
  # Set job priority to standard for interactive (interactive - 6) by using
  # the interactive priority - 6, the helper threads that respond to requests
  # will be running at the same priority as interactive jobs.
  COMMAND='chgjob job('$JOBNAME') runpty(6)'
  system $COMMAND

  # Enable multi threading
  export QIBM_MULTI_THREADED=Y
fi

[ -r "$TOMCAT_CFG" ] && . "${TOMCAT_CFG}"

### Set up defaults if they were omitted in TOMCAT_CFG
###  JVM lookup
if [ -z "$JAVA_HOME" ]; then
    # Search for java in PATH
    JAVA=`which java`
    if [ -z "$JAVA" ] ; then
        JAVA_BINDIR=`dirname ${JAVA}`
        JAVA_HOME="${JAVA_BINDIR}/.."
    fi
    # Default clean JAVA_HOME
    [ -z "$JAVA_HOME" -a -d "/usr/lib/java" ] && JAVA_HOME="/usr/lib/java"
    # Default IBM JAVA_HOME
    [ -z "$JAVA_HOME" -a -d "/opt/IBMJava2-13" ] && \
        JAVA_HOME="/opt/IBMJava2-13"
    [ -z "$JAVA_HOME" -a -d "/opt/IBMJava2-131" ] && \
        JAVA_HOME="/opt/IBMJava2-131"
    [ -z "$JAVA_HOME" -a -d "/opt/IBMJava2-14" ] && \
        JAVA_HOME="/opt/IBMJava2-14"
    [ -z "$JAVA_HOME" -a -d "/opt/IBMJava2-141" ] && \
        JAVA_HOME="/opt/IBMJava2-141"
    # Another solution
    [ -z "$JAVA_HOME" -a -d "/usr/java/jdk" ] && \
        JAVA_HOME="/usr/java/jdk"
    # madeinlinux JAVA_HOME
    [ -z "$JAVA_HOME" -a -d "/usr/local/jdk1.2.2" ] && \
        JAVA_HOME="/usr/local/jdk1.2.2"
    # Kondara JAVA_HOME
    [ -z "$JAVA_HOME"  -a -d "/usr/lib/java/jdk1.2.2" ] && \
        JAVA_HOME="/usr/lib/java/jdk1.2.2"
    # Other commonly found JAVA_HOMEs
    [ -z "$JAVA_HOME"  -a -d "/usr/jdk1.2" ] && JAVA_HOME="/usr/jdk1.2"
    # Default Caldera JAVA_HOME
    [ -z "$JAVA_HOME"  -a -d "/opt/java-1.3" ] && \
        JAVA_HOME="/opt/java-1.3"
    # Add other locations here
    if [ -z "$JAVA_HOME" ]; then
        echo "No JAVA_HOME specified in ${TOMCAT_CFG} and no java found"
        exit 1
    else
        echo "Found JAVA_HOME: ${JAVA_HOME}"
        echo "Please complete your ${TOMCAT_CFG} so we won't have to look for it next time"
    fi
fi

# Set juli LogManager if it is present
if [ -r "$CATALINA_HOME"/bin/tomcat-juli.jar ]; then
  JAVA_OPTS="$JAVA_OPTS "-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
fi

# Set standard commands for invoking Java.
_RUNJAVA="$JAVA_HOME"/bin/java
_RUNJAVAC="$JAVA_HOME"/bin/javac
_RUNJDB="$JAVA_HOME"/bin/jdb

# Set standard CLASSPATH
# (always inherit any preset values from the PKI start script)
if [ ${OS} = "Linux" ] ; then
    # Checking for OpenJDK JVM
    OPENJDK_JVM="`java -version 2>&1 | tail -1 | awk '{print $1};'`"
    if  [ "${OPENJDK_JVM}" = "OpenJDK" ] ||
        [ "${OPENJDK_JVM}" = "IcedTea" ]; then
        # using OpenJDK
        CLASSPATH="$CLASSPATH":"$JAVA_HOME"/lib/rt.jar

        # add required classes to the CLASSPATH for OpenJDK
        CLASSPATH="$CLASSPATH":"$JAVADIR"/commons-collections.jar
    else
        # NOT using OpenJDK
        CLASSPATH="$CLASSPATH":"$JAVA_HOME"/lib/tools.jar
    fi
elif [ ${OS} = "SunOS" ] ; then
    CLASSPATH="$CLASSPATH":"$JAVA_HOME"/lib/rt.jar
fi

# Add on extra jar files to CLASSPATH
if [ -n "$JSSE_HOME" ]; then
  CLASSPATH="$CLASSPATH":"$JSSE_HOME"/lib/jcert.jar:"$JSSE_HOME"/lib/jnet.jar:"$JSSE_HOME"/lib/jsse.jar
fi

# JPackage JSSE location check
if [ -r "$JAVADIR/jsse/jcert.jar" ]; then
  CLASSPATH="$CLASSPATH":"$JAVADIR"/jsse/jcert.jar:"$JAVADIR"/jsse/jnet.jar:"$JAVADIR"/jsse/jsse.jar
fi

if [ ${OS} = "Linux" ] ; then
    CLASSPATH="$CLASSPATH":"$CATALINA_HOME"/bin/bootstrap.jar:"$CATALINA_HOME"/bin/commons-logging-api.jar:`/usr/bin/build-classpath mx4j/mx4j-impl`:`/usr/bin/build-classpath mx4j/mx4j-jmx`

        # add jars in required components for velocity >= 1.6 (just in case)
        VELOCITY=`rpm -q velocity|sed 's/velocity-\([0-9]*\)\.\([0-9]*\).*/\1\2/'`
        if [ "$VELOCITY" -ge 16 ]; then
            CLASSPATH="$CLASSPATH":`/usr/bin/build-classpath bcel hsqldb commons-collections commons-lang commons-logging commons-logging-api jdom junit oro servletapi5 werken.xpath`
        fi
elif [ ${OS} = "SunOS" ] ; then
    # The following definitions are provided for Solaris
    # platforms since they are unable to execute the
    # "/usr/bin/build-classpath" and
    # "/usr/share/java-utils/java-functions" files . . .

    CLASSPATH="$CLASSPATH":"$CATALINA_HOME"/bin/bootstrap.jar
    CLASSPATH="$CLASSPATH":"$CATALINA_HOME"/bin/commons-logging-api.jar
    CLASSPATH="$CLASSPATH":/usr/share/java/mx4j/mx4j-impl.jar
    CLASSPATH="$CLASSPATH":/usr/share/java/mx4j/mx4j-jmx.jar
    CLASSPATH="$CLASSPATH":/usr/share/java/pki/base.jar
    CLASSPATH="$CLASSPATH":/usr/share/java/pki/certsrv.jar
    CLASSPATH="$CLASSPATH":/usr/share/java/pki/cms.jar
    CLASSPATH="$CLASSPATH":/usr/share/java/pki/cms72.jar
    CLASSPATH="$CLASSPATH":/usr/share/java/pki/cms72_en.jar
    CLASSPATH="$CLASSPATH":/usr/share/java/pki/cmsbundle.jar
    CLASSPATH="$CLASSPATH":/usr/share/java/pki/cmscore.jar
    CLASSPATH="$CLASSPATH":/usr/share/java/pki/cmsutil.jar
    CLASSPATH="$CLASSPATH":/usr/share/java/pki/mcc70.jar
    CLASSPATH="$CLASSPATH":/usr/share/java/pki/mcc70_en.jar
    CLASSPATH="$CLASSPATH":/usr/share/java/pki/nmclf70.jar
    CLASSPATH="$CLASSPATH":/usr/share/java/pki/nmclf70_en.jar
    CLASSPATH="$CLASSPATH":/usr/share/java/pki/nsutil.jar

    if [ -f /usr/share/java/pkitools.jar ]; then
        CLASSPATH="$CLASSPATH":/usr/share/java/pkitools.jar
    elif [ -f /usr/share/java/cstools.jar ]; then
        CLASSPATH="$CLASSPATH":/usr/share/java/cstools.jar
    elif [ -f /usr/share/java/pki/cstools.jar ]; then
        CLASSPATH="$CLASSPATH":/usr/share/java/pki/cstools.jar
    fi

    if [ -f /usr/share/java/ca.jar ]; then
        CLASSPATH="$CLASSPATH":/usr/share/java/ca.jar
    elif [ -f /usr/share/java/pki/ca/ca.jar ]; then
        CLASSPATH="$CLASSPATH":/usr/share/java/pki/ca/ca.jar
    fi
    if [ -f /usr/share/java/kra.jar ]; then
        CLASSPATH="$CLASSPATH":/usr/share/java/kra.jar
    elif [ -f /usr/share/java/pki/kra/kra.jar ]; then
        CLASSPATH="$CLASSPATH":/usr/share/java/pki/kra/kra.jar
    fi
    if [ -f /usr/share/java/ocsp.jar ]; then
        CLASSPATH="$CLASSPATH":/usr/share/java/ocsp.jar
    elif [ -f /usr/share/java/pki/ocsp/ocsp.jar ]; then
        CLASSPATH="$CLASSPATH":/usr/share/java/pki/ocsp/ocsp.jar
    fi
    if [ -f /usr/share/java/tks.jar ]; then
        CLASSPATH="$CLASSPATH":/usr/share/java/tks.jar
    elif [ -f /usr/share/java/pki/tks/tks.jar ]; then
        CLASSPATH="$CLASSPATH":/usr/share/java/pki/tks/tks.jar
    fi

        # add jars for velocity 1.6 (just in case)
        CLASSPATH="$CLASSPATH":/usr/share/java/bcel.jar
        CLASSPATH="$CLASSPATH":/usr/share/java/hsqldb.jar
        CLASSPATH="$CLASSPATH":/usr/share/java/commons-collections.jar
        CLASSPATH="$CLASSPATH":/usr/share/java/commons-lang.jar
        CLASSPATH="$CLASSPATH":/usr/share/java/commons-logging.jar
        CLASSPATH="$CLASSPATH":/usr/share/java/commons-logging-api.jar
        CLASSPATH="$CLASSPATH":/usr/share/java/jdom.jar
        CLASSPATH="$CLASSPATH":/usr/share/java/junit.jar
        CLASSPATH="$CLASSPATH":/usr/share/java/oro.jar
        CLASSPATH="$CLASSPATH":/usr/share/java/servletapi5.jar
        CLASSPATH="$CLASSPATH":/usr/share/java/werken.xpath.jar
fi

if [ -z "$CATALINA_BASE" ] ; then
  CATALINA_BASE="$CATALINA_HOME"
fi

if [ -z "$CATALINA_TMPDIR" ] ; then
  # Define the java.io.tmpdir to use for Catalina
  CATALINA_TMPDIR="$CATALINA_BASE"/temp
fi

if [ -z "$CATALINA_PID" ] ; then
    export CATALINA_PID=/var/run/tomcat5.pid
fi

# For Cygwin, switch paths to Windows format before running java
if $cygwin; then
  JAVA_HOME=`cygpath --absolute --windows "$JAVA_HOME"`
  JRE_HOME=`cygpath --absolute --windows "$JRE_HOME"`
  CATALINA_HOME=`cygpath --absolute --windows "$CATALINA_HOME"`
  CATALINA_BASE=`cygpath --absolute --windows "$CATALINA_BASE"`
  CATALINA_TMPDIR=`cygpath --absolute --windows "$CATALINA_TMPDIR"`
  CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
  [ -n "$JSSE_HOME" ] && JSSE_HOME=`cygpath --absolute --windows "$JSSE_HOME"`
  JAVA_ENDORSED_DIRS=`cygpath --path --windows "$JAVA_ENDORSED_DIRS"`
fi

# ----- Execute The Requested Command -----------------------------------------
echo "Using CATALINA_PID $CATALINA_PID"
echo "Using CATALINA_BASE:   $CATALINA_BASE"
echo "Using CATALINA_HOME:   $CATALINA_HOME"
echo "Using CATALINA_TMPDIR: $CATALINA_TMPDIR"
if [ "$1" = "debug" -o "$1" = "javac" ] ; then
  echo "Using JAVA_HOME:       $JAVA_HOME"
else
  echo "Using JRE_HOME:       $JRE_HOME"
fi

if [ "$1" = "jpda" ] ; then
  if [ -z "$JPDA_TRANSPORT" ]; then
    JPDA_TRANSPORT="dt_socket"
  fi
  if [ -z "$JPDA_ADDRESS" ]; then
    JPDA_ADDRESS="8000"
  fi
  if [ -z "$JPDA_OPTS" ]; then
    JPDA_OPTS="-Xdebug -Xrunjdwp:transport=$JPDA_TRANSPORT,address=$JPDA_ADDRESS,server=y,suspend=n"
  fi
  CATALINA_OPTS="$CATALINA_OPTS $JPDA_OPTS"
  shift
fi

if [ "$1" = "debug" ] ; then
  if $os400; then
    echo "Debug command not available on OS400"
    exit 1
  else
    shift
    if [ "$1" = "-security" ] ; then
      echo "Using Security Manager"
      shift
      exec "$_RUNJDB" $JAVA_OPTS $CATALINA_OPTS \
        -Djava.endorsed.dirs="$JAVA_ENDORSED_DIRS" -classpath "$CLASSPATH" \
        -sourcepath "$CATALINA_HOME"/../../jakarta-tomcat-catalina/catalina/src/share \
        -Djava.security.manager \
        -Djava.security.policy=="$CATALINA_BASE"/conf/catalina.policy \
        -Dcatalina.base="$CATALINA_BASE" \
        -Dcatalina.home="$CATALINA_HOME" \
        -Djava.io.tmpdir="$CATALINA_TMPDIR" \
        org.apache.catalina.startup.Bootstrap "$@" start
    else
      exec "$_RUNJDB" $JAVA_OPTS $CATALINA_OPTS \
        -Djava.endorsed.dirs="$JAVA_ENDORSED_DIRS" -classpath "$CLASSPATH" \
        -sourcepath "$CATALINA_HOME"/../../jakarta-tomcat-catalina/catalina/src/share \
        -Dcatalina.base="$CATALINA_BASE" \
        -Dcatalina.home="$CATALINA_HOME" \
        -Djava.io.tmpdir="$CATALINA_TMPDIR" \
        org.apache.catalina.startup.Bootstrap "$@" start
    fi
  fi

elif [ "$1" = "run" ]; then

  shift
  if [ "$1" = "-security" ] ; then
    echo "Using Security Manager"
    shift
    exec "$_RUNJAVA" $JAVA_OPTS $CATALINA_OPTS \
      -Djava.endorsed.dirs="$JAVA_ENDORSED_DIRS" -classpath "$CLASSPATH" \
      -Djava.security.manager \
      -Djava.security.policy=="$CATALINA_BASE"/conf/catalina.policy \
      -Dcatalina.base="$CATALINA_BASE" \
      -Dcatalina.home="$CATALINA_HOME" \
      -Djava.io.tmpdir="$CATALINA_TMPDIR" \
      org.apache.catalina.startup.Bootstrap "$@" start
  else
    exec "$_RUNJAVA" $JAVA_OPTS $CATALINA_OPTS \
      -Djava.endorsed.dirs="$JAVA_ENDORSED_DIRS" -classpath "$CLASSPATH" \
      -Dcatalina.base="$CATALINA_BASE" \
      -Dcatalina.home="$CATALINA_HOME" \
      -Djava.io.tmpdir="$CATALINA_TMPDIR" \
      org.apache.catalina.startup.Bootstrap "$@" start
  fi

elif [ "$1" = "start" ] ; then

  shift
  touch "$CATALINA_BASE"/logs/catalina.out
  if [ "$1" = "-security" ] ; then
    echo "Using Security Manager"
    shift
    "$_RUNJAVA" $JAVA_OPTS $CATALINA_OPTS \
      -Djava.endorsed.dirs="$JAVA_ENDORSED_DIRS" -classpath "$CLASSPATH" \
      -Djava.security.manager \
      -Djava.security.policy=="$CATALINA_BASE"/conf/catalina.policy \
      -Dcatalina.base="$CATALINA_BASE" \
      -Dcatalina.home="$CATALINA_HOME" \
      -Djava.io.tmpdir="$CATALINA_TMPDIR" \
      org.apache.catalina.startup.Bootstrap "$@" start \
      >> "$CATALINA_BASE"/logs/catalina.out 2>&1 &

      if [ ! -z "$CATALINA_PID" ]; then
        echo $! > $CATALINA_PID
      fi
  else
    "$_RUNJAVA" $JAVA_OPTS $CATALINA_OPTS \
      -Djava.endorsed.dirs="$JAVA_ENDORSED_DIRS" -classpath "$CLASSPATH" \
      -Dcatalina.base="$CATALINA_BASE" \
      -Dcatalina.home="$CATALINA_HOME" \
      -Djava.io.tmpdir="$CATALINA_TMPDIR" \
      org.apache.catalina.startup.Bootstrap "$@" start \
      >> "$CATALINA_BASE"/logs/catalina.out 2>&1 &

      if [ ! -z "$CATALINA_PID" ]; then
        echo $! > $CATALINA_PID
      fi
  fi

elif [ "$1" = "stop" ] ; then

  shift
  FORCE=0
  if [ "$1" = "-force" ]; then
    shift
    FORCE=1
  fi

  "$_RUNJAVA" $JAVA_OPTS $CATALINA_OPTS \
    -Djava.endorsed.dirs="$JAVA_ENDORSED_DIRS" -classpath "$CLASSPATH" \
    -Dcatalina.base="$CATALINA_BASE" \
    -Dcatalina.home="$CATALINA_HOME" \
    -Djava.io.tmpdir="$CATALINA_TMPDIR" \
    org.apache.catalina.startup.Bootstrap "$@" stop

  if [ $FORCE -eq 1 ]; then
    if [ ! -z "$CATALINA_PID" ]; then
       echo "Killing: `cat $CATALINA_PID`"
       kill -9 `cat $CATALINA_PID`
    fi
  fi

elif [ "$1" = "version" ] ; then

    "$_RUNJAVA"   \
      -classpath "$CATALINA_HOME/server/lib/catalina.jar" \
      org.apache.catalina.util.ServerInfo

else

  echo "Usage: dtomcat5 ( commands ... )"
  echo "commands:"
  if $os400; then
    echo "  debug             Start Catalina in a debugger (not available on OS400)"
    echo "  debug -security   Debug Catalina with a security manager (not available on OS400)"
  else
    echo "  debug             Start Catalina in a debugger"
    echo "  debug -security   Debug Catalina with a security manager"
  fi
  echo "  jpda start        Start Catalina under JPDA debugger"
  echo "  run               Start Catalina in the current window"
  echo "  run -security     Start in the current window with security manager"
  echo "  start             Start Catalina in a separate window"
  echo "  start -security   Start in a separate window with security manager"
  echo "  stop              Stop Catalina"
  echo "  stop -force       Stop Catalina (followed by kill -KILL)"
  echo "  version           What version of tomcat are you running?"
  exit 1

fi
  • At this point you should be able to start the CA successfully:

# /etc/init.d/pki-cad start pki-ca
Starting pki-ca:                                           [  OK  ]

pki-ca (pid 30194) is running ...


pki-ca Status Definitions not found

I assume “Status Definitions” are the listing of ports/urls that it used to dump out on stdout when starting the CA. I haven’t dug into figuring out how to fix that one.