Le script de démarrage ci-après est fourni avec le système (fichier /etc/init.d/init.srm). Il est exécuté avec un argument de start lorsque le système passe au niveau d'exécution 2 ou 3 (mode multi-utilisateur). Il est également exécuté avec un argument stop lors de l'arrêt du système.
#!/bin/sh
#
# Copyright (c) 1998-1999 by Sun Microsystems, Inc.
# All rights reserved.
#
# Copyright 1995-1997 Softway Pty. Ltd.
#
# Start/stop Solaris Resource Manager v1.1
#
#ident "@(#)init.srm 1.24 99/02/10 SMI"
#######################################################################
# Default values.
DATADIR=/var/srm
ShareDb=$DATADIR/srmDB
LimdaemonOptions=
ChargeOptionsOn="limits=y:share=y:adjgroups=y:limshare=y"
ChargeOptionsOff="limits=n:share=n:adjgroups=n:limshare=n"
DaemonLnode=daemon
LostLnode=srmlost
IdleLnode=srmidle
OtherLnode=srmother
#######################################################################
# ECHO=echo # For a verbose startup and shutdown
ECHO=: # For a quiet startup and shutdown
SRMDIR=/usr/srm
SRMBIN=$SRMDIR/bin
SRMSBIN=$SRMDIR/sbin
SRMLIB=$SRMDIR/lib
ETCSRM=/etc/srm
PATH=/sbin:/usr/sbin:/bin:$PATH:$SRMSBIN:$SRMBIN:$SRMLIB
export PATH
case "$1" in
'start')
if [ ! -x $SRMSBIN/srmadm ]; then
echo "Solaris Resource Manager *not* installed." \
"Missing srmadm command."
exit
fi
# Only bother if sched/SHR is loaded.
if [ `$SRMSBIN/srmadm` != yes ]
then
#
# Usually this is because /etc/system doesn't have the usual
# set initclass="SHR"
# or at least a set extraclass="SHR"
#
echo "Solaris Resource Manager *not* loaded."
exit
else
echo "Enabling Solaris Resource Manager"
if [ `$SRMSBIN/srmadm show fileopen` = yes ]; then
echo "SRM database file already open - stopping first."
limdaemon -k
sleep 2
srmadm set $ChargeOptionsOff
sync
srmadm set fileopen=n
$ECHO "SRM inactive"
fi
$ECHO "Starting SRM..."
fi
# Check the limconf file.
if [ ! -s $ETCSRM/limconf ]; then
echo "SRM - file $ETCSRM/limconf is missing ">&2
echo "SRM not started."
exit 1
fi
if [ ! -f "$ShareDb" ]; then
echo "SRM database '$ShareDb' not present - " \
"creating empty database"
if [ ! -d "$DATADIR" ]; then
mkdir "$DATADIR"
chmod 400 "$DATADIR"
chown root "$DATADIR"
chgrp root "$DATADIR"
fi
touch "$ShareDb" ||
{
echo "Failed to create '$ShareDb'">&2
echo "SRM not started"
exit 1
}
chmod 400 "$ShareDb"
chown root "$ShareDb"
chgrp root "$ShareDb"
fi
CreateLnodes=0
if [ ! -s "$ShareDb" ]; then
$ECHO "SRM Warning: Using empty database">&2
CreateLnodes=1
fi
$ECHO "SRM starting ... \c"
# Open Lnode file.
srmadm set -f "$ShareDb" fileopen=y
if [ $? != 0 ]; then
echo
echo "srmadm set -f $ShareDb failed">&2
echo "SRM not started"
exit 1
fi
# Set SRM global options.
srmadm set $ChargeOptionsOn
if [ $? != 0 ]; then
echo
echo "srmadm set $ChargeOptionsOn failed">&2
echo "SRM not completely enabled"
exit 1
fi
# Create if needed the daemon lnode.
liminfo "$DaemonLnode" 2>/dev/null | \
grep "^Login name: *$DaemonLnode ">/dev/null 2>&1
if [ $? -ne 0 ]; then
# If daemon lnode does not, create one.
limadm set cpu.shares=1 "$DaemonLnode" 2>/dev/null
limadm set sgroup=root "$DaemonLnode" 2>/dev/null
fi
# Create if needed the other lnode.
liminfo "$OtherLnode" 2>/dev/null | \
grep "^Login name: *$OtherLnode ">/dev/null 2>&1
if [ $? -ne 0 ]; then
# If "other" sgroup exists but has no lnode, create one.
limadm set cpu.shares=1 "$OtherLnode" 2>/dev/null
limadm set sgroup=root "$OtherLnode" 2>/dev/null
fi
# Create if needed, and set the lost lnode.
if [ x"$LostLnode" != x ]; then
liminfo "$LostLnode" 2>/dev/null | \
grep "^Login name: *$LostLnode ">/dev/null 2>&1
if [ $? -ne 0 ]; then
limadm set cpu.shares=1 "$LostLnode"
limadm set sgroup=root "$LostLnode"
fi
srmadm set lost="$LostLnode" ||
$ECHO "SRM - Warning: No user '$LostLnode' for lost lnode"
fi
# Create if needed, and set the idle lnode.
if [ x"$IdleLnode" != x ]; then
liminfo "$IdleLnode" 2>/dev/null | \
grep "^Login name: *$IdleLnode ">/dev/null 2>&1
if [ $? -ne 0 ]; then
limadm set cpu.shares=0 "$IdleLnode"
limadm set sgroup=root "$IdleLnode"
fi
srmadm set idle="$IdleLnode" ||
$ECHO "SRM - Warning: No user '$IdleLnode' for idle lnode"
fi
# If creating SRM database, set up existing users.
if [ "$CreateLnodes" -eq 1 ]; then
echo "SRM - creating user lnodes; may take a while"
# We now want to catch any other users which were not found
# on the filesystems. First we need to decide what the maximum
# uid value we will create an l-node entry for in the database.
# We choose less than the uid for 'nobody' so that we can try
# and minimise the apparent size of the database (which is a sparse
# file). If the user 'nobody' does not exist then we just have
# to take our chances with using all possible uid values.
# Unfortunately all this means that there are certain circumstances
# where not all users will be taken into account.
MaxUID=`awk -F: "\\$1==\"nobody\" { print \\$3 - 100 }" /etc/passwd`
if [ $? -eq 0 -a x"$MaxUID" != x ] ; then
Cond="uid>= 0 && uid < $MaxUID && !flag.real"
else
Cond="uid>= 0 && !flag.real"
fi
UIDS=`limreport "$Cond" '%d\n' uid | wc -l`
if [ $UIDS -gt 0 ]; then
$ECHO "$UIDS other lnodes to be created" \
"due to passwd entries"
CMDS="limadm set cpu.shares=1:sgroup=$OtherLnode"
limreport "$Cond" "$CMDS %d\necho ' uid %7d\r\c'\n" \
uid uid | sh
echo
fi
fi
limdaemon $LimdaemonOptions
echo "Solaris Resource Manager Enabled."
;;
'stop')
# SRM shutdown should be done as late as possible before
# filesystems are unmounted.
if [ -x $SRMSBIN/srmadm ] && $SRMSBIN/srmadm show fileopen> /dev/null
then
limdaemon -k
sleep 2
srmadm set $ChargeOptionsOff
srmadm set fileopen=n
sync
$ECHO "Solaris Resource Manager Disabled"
fi
;;
*)
echo "Usage: $0 {start|stop}"
;;
esac
Le script par défaut "no Inode" (absence de noeud limite) crée le noeud limite dans le groupe d'ordonnancement par défaut (other, si un tel utilisateur existe dans la table des mots de passe, sinon root) et rappelle par courrier à l'administrateur système de déplacer le nouveau noeud limite à l'endroit approprié dans la hiérarchie d'ordonnancement.
#!/bin/sh
#
#ident "@(#)nolnode.sh 1.10 99/05/07 SMI"
#
# Copyright (c) 1998-1999 by Sun Microsystems, Inc.
# All rights reserved.
#
# Copyright 1995-1997 Softway Pty. Ltd.
#
# A script that called by the PAM module to create a lnode
#
PATH=/usr/srm/sbin:/usr/srm/bin:/sbin:/bin export PATH
LOCALE=C export LOCALE
if [ "$DEBUG" = "true" ]
then
exec>> /tmp/nolnodelog 2>&1
echo
date
echo "Attempting to create lnode for $USER"
else
exec> /dev/null 2>&1
fi
err=`limadm set -u cpu.shares=1 "$UID" 2>&1`
if [ $? -eq 0 ]
then
SRM_GROUP=`liminfo -v $USER | grep '^sgroupname' | awk '{ print $2 }'`
SRM_SHARE=`liminfo -v $USER | grep '^cpu.shares' | awk '{ print $2 }'`
export SRM_GROUP SRM_SHARE
cat <<-EOF | /usr/lib/sendmail root
Subject: New lnode created for "$USER"
Remember to change scheduling group and shares for
"$USER". Currently in group "$SRM_GROUP" with $SRM_SHARE share.
EOF
else
cat <<-EOF | /usr/lib/sendmail root
Subject: Could not create lnode for "$USER"
after "$SERVICE" attempt on tty "$TTY", uid "$UID",
rhost "$RHOST",
limadm said "$err"
EOF
exit 1 # deny access
fi
# permit access
exit 0