Archive for the ‘Solaris’ Category

SMF support for Apache on Solaris

Wednesday, July 18th, 2007

Good tutorial on this topic here: http://blogs.sun.com/shanti/entry/smf_support_for_apache_in

Cloning Solaris Zone tutorial

Thursday, July 12th, 2007

James over at mernin.com has posted a bunch of excellent Solaris tutorials. The latest is on Cloning a Solaris Zone could prove useful to the Solaris articles I’ve posted here.

Nice one James!

SMF support for MySQL in Cool Stack

Wednesday, July 4th, 2007

The post derives heavily from Shanti’s Sun Micro Systems blog.

For a succinct explanation from www.oreillynet.com .

SMF try this from or Solaris 10, Sun introduced the Service Management Facility. SMF is a framework that handles system boot-up, process management, and self-healing. It addresses the shortcomings of startup scripts and creates an infrastructure to manage daemons after the host has booted.

The following steps are required to add MySQL as a service into Solaris SMF. We added the 32-bit version on MySQL that comes with the Cool Stack CSKAmp package.

 

Create the manifest

A service needs a file called a manifest.  A service manifest describes the service and its management needs. It lists the service dependencies, the control scripts, and the actions to take when the service fails. The manifest starts out as an XML file that SMF imports into a central repository, which records the properties of all the services.

Create a file named /var/svc/manifest/network/cskmysql.xml with the following contents :

 <?xml version=’1.0′?>
 <!DOCTYPE service_bundle SYSTEM ‘/usr/share/lib/xml/dtd/service_bundle.dtd.1′>
<!–
    Copyright 2006,2007 Sun Microsystems, Inc.  All rights reserved.
    Manifest for CSKmysql - should reside in /var/svc/manifest/network
–>

<service_bundle type=’manifest’ name=’CSKmysql:mysql’>
<service
        name=’network/csk-mysql’
        type=’service’
        version=’1′>
        <create_default_instance enabled=’false’ />
        <single_instance />

       <!–
         Wait for network interfaces to be initialized.
        –>
       <dependency name=’network’
           grouping=’require_all’
           restart_on=’error’
           type=’service’>
           <service_fmri  
           value=’svc:/milestone/network:default’/>
        </dependency>

        <!–
          Wait for all local filesystems to be mounted.
        –>
        <dependency name=’filesystem-local’
            grouping=’require_all’
            restart_on=’none’
            type=’service’>
            <service_fmri
               value=’svc:/system/filesystem/local:default’/>
         </dependency>

         <exec_method
             type=’method’
             name=’start’
             exec=’/opt/coolstack/lib/svc/method/svc-cskmysql start’
             timeout_seconds=’60′>
             <method_context
working_directory=’/opt/coolstack’>
                 <method_credential
                   user=’mysql’ group=’mysql’
                   privileges=’basic,!proc_session,!proc_info,!file_link_any,net_privaddr’ />
             </method_context>
         </exec_method>

         <exec_method
             type=’method’
             name=’stop’
             exec=’/opt/coolstack/lib/svc/method/svc-cskmysql stop’
             timeout_seconds=’60′>
             <method_context />
         </exec_method>

         <exec_method
             type=’method’
             name=’refresh’
             exec=’/opt/coolstack/lib/svc/method/svc-cskmysql restart’
             timeout_seconds=’60′>
             <method_context working_directory=’/opt/coolstack’>
                 <method_credential
                   user=’mysql’ group=’mysql’
                   privileges=’basic,!proc_session,!proc_info,!file_link_any,net_privaddr’ />
             </method_context>
         </exec_method>

 </service>
 </service_bundle>

 

Create the method

Create the file /opt/coolstack/lib/svc/method/svc-cskmysql referenced in the manifest with the following contents and make it executable. You may have to create the directories below /opt/coolstack/lib first. This file needs to be edited to set DB_DIR to the path of your data directory (where data files reside), and MYSQL_DIR if you are usi
ng the 64-bit MySQL version.
Create the file /opt/coolstack/lib/svc/method/svc-cskmysql.

You will also have to manually create directories if they don’t already exist.

/opt/coolstack/lib
/opt/coolstack/lib/svc
/opt/coolstack/lib/method

This file needs to be edited to set DB_DIR to the path of your data directory ( normally /opt/coolstack/mysql_32bit), and MYSQL_DIR if you are using the 64-bit MySQL version.
Copy and past the following into the file named above. It assumes the paths of the  default installation of Cool Stack. If you have changed the paths you’ll need to reflect those changes here.

 

#!/usr/bin/sh
#
#   Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
#        Method file for CSKMySQL
#
# This uses the MySQL packages from CoolStack 1.1 (CSKmysql)
# If you’re using the 32bit mysql from CSKamp, change MYSQL_DIR below to mysql_32bit.
# This file should reside in /opt/coolstack/lib/svc/method
#
# NOTE: Make sure DB_DIR is owned BY the mysql user and group and chmod 700
#

. /lib/svc/share/smf_include.sh

DB_DIR=/data
PIDFILE=${DB_DIR}/`/usr/bin/uname -n`.pid
MYSQL_DIR=/opt/coolstack/mysql_32bit

mysql_stop () {
        if [ -f ${PIDFILE} ]; then
            /usr/bin/pkill mysqld_safe >/dev/null 2>&1
            /usr/bin/kill `cat ${PIDFILE}` > /dev/null 2>&1 && echo -n ‘ mysqld’
        fi
}

mysql_start () {
        $MYSQL_DIR/bin/mysqld_safe –user=mysql –datadir=${DB_DIR} –pid-file=${PIDFILE} > /dev/null &
}

##
# Start of script
#
case "$1" in
    start)
        mysql_start
        ;;
    stop)
        mysql_stop
        ;;
    restart)
        mysql_stop
        while pgrep mysqld > /dev/null
        do
            sleep 1
        done
        mysql_start
        ;;
    *)
        echo ""
        echo "Usage: `basename $0` { start | stop | restart }"
        echo ""
        exit 64
        ;;
esac

 

Change file ownership  

Ensure that the MySQL user and group exist and this user owns $DB_DIR. It’s also a good idea to chmod 0700 all files in $DB_DIR.

Cool Stack MySQL runs as user:group mysql:mysql.

 # cd /opt/coolstack/ /mysql_32bit
# chown -R mysql ./data
# chgrp -R mysql ./data
# Chmod –R 077 ./data

Start the csk-mysql service
Import the new MySQL config :

# svccfg -v import /var/svc/manifest/network/cskmysql.xml

Start MySQL as a  service::

# svcadm -v enable csk-mysql

A log file available at /var/svc/log/network-csk-mysql:CSKmysql.log file.
More detailed information for troubleshooting startup failures can be obtained from the command svcs -x.

If the services does not start and/or goes into maintenance mode then you will need to go through the steps above again verifying it’s correct. I initially had a problem due to incorrect privileges on  /opt/coolstack.mysql_32bit/data.  
More information on SMF can be found at  http://www.sun.com/bigadmin/content/selfheal/smf-quickstart.html

Cool Stack Apache with Solaris SMF

Monday, July 2nd, 2007

The post derives heavily from Shanti’s Sun MicroSystems blog post.

For a succinct explanation from www.oreillynet.com .

SMF try this from or Solaris 10, Sun introduced the Service Management Facility. SMF is a framework that handles system boot-up, process management, and self-healing. It addresses the shortcomings of startup scripts and creates an infrastructure to manage daemons after the host has booted.

The following steps are required to add cool stack apache as a service into Solaris SMF

1. Create the manifest

A service needs a file called a manifest.  A service manifest describes the service and its management needs. It lists the service dependencies, the control scripts, and the actions to take when the service fails. The manifest starts out as an XML file that SMF imports into a central repository, which records the properties of all the services.

Create a file named /var/svc/manifest/network/cskapache2.xml with the following contents :

<?xml version="1.0"?>
<!DOCTYPE service_bundle SYSTEM "/usr/share/lib/xml/dtd/service_bundle.dtd.1">
<!–
    Copyright 2006-2007 Sun Microsystems, Inc.  All rights reserved.
    CSKapache2 manifest - should reside in /var/svc/manifest/network.
–>

<service_bundle type=’manifest’ name=’CSKamp:apache’>

<service
    name=’network/csk-http’
    type=’service’
    version=’1′>

    <!–
       Because we may have multiple instances of network/http
       provided by different implementations, we keep dependencies
       and methods within the instance.
    –>

    <instance name=’CSKapache2′ enabled=’false’>
    <!–
       Wait for network interfaces to be initialized.
    –>
       <dependency name=’network’
           grouping=’require_all’
           restart_on=’error’
           type=’service’>
           <service_fmri value=’svc:/milestone/network:default’/>
       </dependency>

       <!–
          Wait for all local filesystems to be mounted.
       –>
       <dependency name=’filesystem-local’
           grouping=’require_all’
           restart_on=’none’
           type=’service’>
           <service_fmri
               value=’svc:/system/filesystem/local:default’/>
       </dependency>

       <!–
           Wait for automounting to be available, as we may be
           serving data from home directories or other remote
           filesystems.
       –>
       <dependency name=’autofs’
           grouping=’optional_all’
           restart_on=’error’
           type=’service’>
           <service_fmri
               value=’svc:/system/filesystem/autofs:default’/>
       </dependency>

       <exec_method
           type=’method’
           name=’start’
           exec=’/opt/coolstack/lib/svc/method/svc-cskapache2 start’
           timeout_seconds=’60′>
           <method_context>
               <method_credential
                   user=’webservd’ group=’webservd’
                   privileges=’basic,!proc_session,!proc_info,!file_link_any,net_privaddr’ />
           </method_context>
      </exec_method>

      <exec_method
           type=’method’
           name=’stop’
           exec=’/opt/coolstack/lib/svc/method/svc-cskapache2 stop’
           timeout_seconds=’60′>
           <method_context />
      </exec_method>

       <exec_method
           type=’method’
           name=’refresh’
           exec=’/opt/coolstack/lib/svc/method/svc-cskapache2 refresh’
           timeout_seconds=’60′>
           <method_context />
      </exec_method>

        <property_group name=’httpd’ type=’application’>
            <stability value=’Evolving’ />
            <propval name=’ssl’ type=’boolean’ value=’false’ />
        </property_group>

        <property_group name=’st
artd’ type=’framework’>
            <!– sub-process core dumps shouldn’t restart session –>
            <propval name=’ignore_error’ type=’astring’
                     value=’core,signal’ />
        </property_group>

    </instance>

    <stability value=’Evolving’ />
    <template>
        <common_name>
            <loctext xml:lang=’C'>
                Apache 2 HTTP server
            </loctext>
        </common_name>
        <documentation>
            <manpage title=’httpd’ section=’8′
                manpath=’/opt/coolstack/apache2/man’ />
            <doc_link name=’apache.org’
                uri=’http://httpd.apache.org’ />
        </documentation>
    </template>
</service>

</service_bundle>

2. Create the method

Create the file /opt/coolstack/lib/svc/method/svc-cskapache2 .

You will also have to manually create directories

/opt/coolstack/lib
/opt/coolstack/lib/svc
/opt/coolstack/lib/method

Copy and past the following into the file named above. It assumes the paths of the  default installation of Cool Stack. If you have changed the paths you’ll need to reflect those changes here.

#!/sbin/sh
#
# Copyright 2004-2007 Sun Microsystems, Inc.  All rights reserved.
# Use is subject to license terms.
#
# ident "@(#)http-apache2       1.2     04/11/11 SMI"
# Modified for apache in CSKamp package of Cool Stack
# This file should reside in /opt/coolstack/lib/svc/method

. /lib/svc/share/smf_include.sh

APACHE_HOME=/opt/coolstack/apache2
CONF_FILE=$APACHE_HOME/conf/httpd.conf
PIDFILE=$APACHE_HOME/logs/httpd.pid

[ ! -f ${CONF_FILE} ] &&  exit $SMF_EXIT_ERR_CONFIG

case "$1" in
    start)
        /bin/rm -f ${PIDFILE}
        cmd="start"
        ;;
    refresh)
        cmd="graceful"
        ;;
    stop)
        cmd="stop"
        ;;
    *)
        echo "Usage: $0 {start|stop|refresh}"
        exit 1
        ;;
esac

exec ${APACHE_HOME}/bin/apachectl $cmd 2>&1

 

3. Change file ownership

Cool Stack apache runs as user:group webservd:webservd. We need to ensure that this user can write to the log directory and the pid file. All these files  reside in /opt/coolstack/apache2/logs by default.

# cd /opt/coolstack/apache2
# chown -R webservd logs
# chgrp -R webservd logs

 

4. Disable the Solaris http service

Disable any apache processes running at present.
 You can check if it is enabled as follows :

 

# svcs |grep http

 

If no output is printed, then it is disabled. If you see something like :

maintenance    11:47:11 svc:/network/http:apache2
or
online    11:47:11 svc:/network/http:apache2
then, the service is up.

Disable the service as follows :

# svcadm -v disable http
svc:/network/http:apache2 disabled.

 

5. Start the csk-http service

Import the new service config, the manifest xml file as follows :

 

# svccfg -v import /var/svc/manifest/network/cskapache2.xml

Resulting output

svccfg: Taking "initial" snapshot for svc:/network/csk-http:CSKapache2.
svccfg: Taking "last-import" snapshot for svc:/network/csk-http:CSKapache2.
svccfg: Refreshed svc:/network/csk-http:CSKapache2.
svccfg: Successful import.

We are now ready to start our service. Start it as follows :

 

 

# svcadm -v enable csk-http

 

A log of the service startup will be in /var/svc/log/network-csk-http:CSKapache2.log file.

Installing Pureftpd on Solaris 10

Friday, June 15th, 2007

We will use pkgget to install the Pureftpd software.

Install pkg-get.

Skip this if you already have it installed.

Reference: http://www.blastwave.org/howto.html

# pkgadd -d http://www.blastwave.org/pkg_get.pkg

Add the pureftpd package.

# pkg-get –i pureftpd

This downloads and complies the Pureftpd package.
The binary is located here:

# /opt/csw/sbin/pure-ftpd

To run try this:

#/opt/csw/sbin/pure-ftpd -j -lpuredb:/opt/csw/etc/pureftpd.pdb &

Or better yet use the supplied start up script located here:

# /etc/init.d/cswpureftp

Configure Pureftpd

Configuration file the start script looks at:

# /opt/csw/etc/pureftpd.conf.CSW

Rename to pureftpd.conf

# cd /opt/csw/etc/

# cp ./pureftpd.conf.CSW ./pureftpd.conf

Edit config file. We wanted anonymous ftp access turned off and vistual users activated.

So uncomment

PureDB /etc/pureftpd.pdb

And

NoAnonymous yes

Next we’ll complete the steps needed to enable Virtual Users.

We need to create the pureftpd.pdb file from /opt/csw/etc/pureftpd.passwd.

First create a password file

# /opt/csw/etc
# touch pureftpd.passwd

Make the pureftpd.pdb file

# pure-pw mkdb

Or

# /opt/csw/bin/pure-pw mkdb

The start up script expects the files to appear in /etc/
Copy files there:

cp /opt/csw/etc/Pureftpd.passwd  /etc/

and

cp /opt/csw/etc/pureftpd.pdb /etc/

Start Pureftpd

Start the Pureftpd program

# /etc/init.d/cswpureftp

For further documentation on using and configuring, take  a look at www.pureftpd.org

Installing Coolstack on Solaris 10

Wednesday, May 30th, 2007

 

Reference: http://cooltools.sunsource.net/coolstack/

 

Install Coolstack

Download the x86 version of Coolstack

bunzip2 [package.pkg.bz2]

 

For example: bunzip2 CSKmysql_sparc.pkg.bz2

pkgadd -d [package.pkg]

 

This process will install the package in /opt/coolstack, along with all dependent libraries.

 

Document root is located at: /opt/coolstack/apache2/htdocs

 

Solaris zone has several instances of apache and apache2 preinstalled. These may be running and will prevent the coolstack apache from running. Disable all other apaches

Kill the currently running apache services.

# ps –ef | grep apache2

 

Kill <number> corresponding to apache process given above or do apache stop but since the httpd.conf file is not configured this gives an error so use kill instead.

 

Next ensure preinstalled apaches do not start up.

# cd /etc/rc3.d

 

Rename the following:

S50apache, S50cswapache and  S50cswapache2 to OFF-S50apache, OFF-S50cswapache and  OFF-S50cswapache2 .

 

This stops these apache services from restarting on boot up.

 

Configure CoolStack Apache

 

Edit /opt/coolstack/apache2/conf/httpd.conf

ServerName ims-arcs-zone:80

Add index.php directory index

<IfModule dir_module>

    DirectoryIndex index.html index.php

</IfModule>

Start apache

#/opt/coolstack/apache2/bin/apachectl start

 

 

Configure Mysql

 

Add /opt/coolstack/mysql_32bit/bin /bin to your path, and /opt/coolstack/mysql/man to your manpath.

#export PATH=/opt/coolstack/mysql_32bit/bin:$PATH

 

Install the db and mysql user:

# /opt/coolstack/mysql/bin/mysql_install_db

# groupadd mysql

# useradd -c "MySQL Server" -g mysql mysql

 

Change ownership

# chown -R mysql:mysql /opt/coolstack/mysql_32bit

 # cp /opt/coolstack/mysql_32bit/share/mysql/my-large.cnf /etc/my.cnf

 

Edit my.cnf if necessary. Consider uncomment skip-networking to prevent network access to the database.

 

Start up the server:

 

# su – mysql  (this line may not be necessary)

$ /opt/coolstack/mysql_32bit/bin/mysqld_safe &

$ ps -ef | grep mysql | grep –v grep  <– Make sure the mysqld process is running

$ /opt/coolstack/mysql_32bit/bin/mysqladmin -u root password ‘yourrootpassword’

$ /opt/coolstack/mysql/bin/mysqladmin -u root -h ‘yourhostname’ password ‘yourrootpassword’

 

Install Extra PHP Libraries.

 

Dowbload load from here: Packages CSKtds, CSKncurses, CSKphplibs, English

 

The above PHP libraries contain the useful GD graphics library for PHP. We’ll need that for the Drupal CMS which I will post next week.. Download the x86 version of Coolstack

 

#bunzip2 [package.pkg.bz2]

 

For example: bunzip2 CSKmysql_sparc.pkg.bz2

#tar -xvf ./CSKphplibsBundle_x86.tar

#pkgadd -d ./CSKphplibs_x86.pkg

 

Edit #/opt/coolstack/php5/lib/php.ini

 

Add the following line.

extension="gd.so"

 

Restart Apache

#/opt/coolstack/apache2/bin/apachectl start

 

 

Disable unnecessary Solaris Services

Services that you may want to disable once the Zone has booted are listed below. This procedure as the effect of locking the zone down and making it more secure.

svcadm disable ftp
svcadm disable telnet

svcadm disable ssh (left this on if you need ssh)

svcadm disable sendmail (left this on for Drupal  CMS sending emails)

svcadm disable finger
svcadm disable rlogin
svcadm disable nfs/client
svcadm disable nfs/status
svcadm disable nfs/nlockmgr
svcadm disable rpc/bind
svcadm disable rpc/gss
svcadm disable rpc/rstat
svcadm disable rpc/rusers
svcadm disable rpc/smserver
svcadm disable shell:default (left this on for us)
svcadm disable svc:/network/cde-spc:default
svcadm disable svc:/application/graphical-login/cde-login:default
svcadm disable inetdsvcadm disable rpc-100235_1/rpc_ticotsord:defaultsvcadm disable rpc-100068_2-5/rpc_udp:default
svcadm disable rpc-100083_1/rpc_tcp:default
svcadm disable x11/xfs
svcadm disable font/fc-cache