Parallel Booting
Vikram Goyal
vikigoyal at gmail.com
Sun Jun 24 08:37:09 UTC 2007
On Fri, Jun 22, 2007 at 05:18:54PM +0200, Harald Hoyer wrote:
> Hello,
>
> some of you may have read some wiki pages about the plans for the new init system [1]. As a first step in
> this direction [2], I packaged prcsys from Mandriva, patched initscripts with a very small patch, and uploaded
> the src.rpm to [3]. To enable parallel booting just build and install both packages and edit
> /etc/sysconfig/init. Set PARALLEL_STARTUP=yes and there we go.
>
> The next step would be to modify all initscripts in /etc/init.d to be LSB compliant [4]. This will speed up
> booting, because they can and will be started in parallel. You should file bugzillas against the component, to
> which this initscript belongs, with a patch (this has to be done anyway to be LSB compliant in regards to
> initscripts over time). Especially the exit codes need to be fixed (which will make status queries a lot
> easier and more robust).
>
> Early login [5] is also a next step towards a "fast boot" user experience.
>
> Alternatives to SysVInit (like upstart/initng) can live in Fedora as well, but we are very conservative in
> changing the startup mechanism that proved to function for a long time now. Unless the "real" killer feature
> is absolutly needed, we would like to keep backwards compatibility as long as possible.
>
> I hope many of you try and test [3] and write patches to improve our service initscripts to be LSB compliant
> :-) Parallel booting is the reward.
>
> Happy testing,
> Harald
>
> [1] http://fedoraproject.org/wiki/FCNewInit
> [2] http://fedoraproject.org/wiki/FCNewInit/RC
> [3] http://people.redhat.com/harald/downloads/initscripts/parallel/
> [4] http://fedoraproject.org/wiki/FCNewInit/Initscripts
> [5] http://fedoraproject.org/wiki/FCNewInit/xdm
> -------------- next part --------------
> A non-text attachment was scrubbed...
> Name: smime.p7s
> Type: application/x-pkcs7-signature
> Size: 3623 bytes
> Desc: S/MIME Cryptographic Signature
> Url : https://www.redhat.com/archives/fedora-devel-list/attachments/20070622/1a38ff1b/smime.bin
>
> ------------------------------
>
Is it something like the script attached? If so then that'll be a really
great idea.
#-----------------------------------------------------------------------
#/bin/bash
# NAME: forfastboot
# PLACE: /root/bin/
# AUTHOR: vikram goyal <vikigoyal at gmail.com> 230407
#
# The file is to be called as:
# The first time call is the filename itself and then its through service call
#
# service staggered start
#
# So that these services load up in the background & save boot time
#
[ -z "$STLOG" ] && STLOG=/dev/tty
# DEBUGGING
#echo \$1=$1 >> $STLOG
SERVICEDIR=/etc/init.d
SERVICENAME=staggered
addchkserv()
{
# ADD/CHK THE SERVICE
# ~~~~~~~~~~~~~~~~~~~
# If service file has changed copy the new one. If it does not
# exist yet make a new one.
if [ -f $SERVICEDIR/$SERVICENAME ]; then
fchk=`mktemp`
createserv $fchk
[ -n "`diff $fchk $SERVICEDIR/$SERVICENAME`" ] && \
/sbin/chkconfig --del staggered && \
mv -f $fchk $SERVICEDIR/$SERVICENAME
setperms
else
createserv $SERVICEDIR/$SERVICENAME
echo service staggered added.
setperms
fi
}
addlogrotate()
{
if [ ! -f /etc/logrotate.d/$SERVICENAME ]; then
eval cat >/etc/logrotate.d/$SERVICENAME <<EOF
/var/log/$SERVICENAME.log {
weekly
notifempty
missingok
}
EOF
fi
}
addservnames()
{
# Add the sample file staggered services names list in /etc/sysconfig
servicesnames=`cat /etc/init.d/staggered|grep servicesnames=|cut -d = -f2`
if [ ! -f $servicesnames ]; then
eval cat >$servicesnames <<EOF
#
# Services to be staggered by STAGGERETIME in seconds.
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
STAGGERTIME=7
#
# The services mentioned here should be in the right priority
# as mentioned in chkconfig.
#
# This is the list of services which one may want to stagger now
# or in future. So include any service which you want staggered.
#
# In general no service should be here below around 25 start priority
#
STAGGERED_SERVICES=' 26: lm_sensors 55: cups 58: ntpd 60: apcupsd 61: clamav 65: dovecot 80: sendmail spamassassin 88: nasd 95: jexec 98: avahi-daemon wine 99: smartd '
#
# This is the services list which tells staggerd to stay away.
#
# 1} Service may not be in use at the moment.
# 2} Temporarily you may want it out of staggerd.
#
# NOTE: One must switch on the service if it was staggered but
# has been excluded and you want to use it.
#
EXCLUDE=' lm_sensors cups apcupsd dovecot sendmail spamassassin nasd jexec avahi-daemon wine smartd '
EOF
echo $servicesnames was created. >> $STLOG
fi
}
setperms()
{
/bin/chmod +x $SERVICEDIR/$SERVICENAME
/sbin/chkconfig staggered on
}
createserv()
{
# Create service file in /etc/init.d/
eval cat >$1 <<EOF
#!/bin/sh
#
# chkconfig: 2345 99 2
# description: This is modification of boot process. It staggeres \\
# the boot services mentioned in /etc/sysconfig/staggered
# Source function library.
. /etc/rc.d/init.d/functions
[ -f /etc/sysconfig/staggered ] && \
export servicesnames=/etc/sysconfig/staggered
name='staggered'
exec='/root/bin/forfastboot'
lockfile="/var/lock/subsys/\$name"
export STLOG=/var/log/staggered.log
RETVAL=0
start() {
echo -n \$"Starting service staggered: "
#if [ -f \$lockfile ]; then
# echo_failure
# echo
# return
#fi
\$exec servicecall & > /dev/null 2>&1
#touch \$lockfile
echo_success && echo
}
stop() {
echo -n \$"Stopping service staggered: "
#rm -f \$lockfile
echo_success && echo
}
case "\$1" in
start|stop)
\$1
;;
restart)
stop
start
;;
*)
echo $"Usage: \$0 {start|stop|restart}"
exit 1
;;
esac
exit \$RETVAL
EOF
}
START ()
{
FN="$1"
R=`/sbin/runlevel|cut -d ' ' -f2`
echo -e "\n\t`date`\nSTART:" >> $STLOG
# DEBUGGING
#echo \$R=$R >> $STLOG
for x in $STAGGERED_SERVICES
do
[ -n "`echo $x|egrep [0-9]\{1,2\}:?$`" ] && continue
echo >> $STLOG
[ ! -f $SERVICEDIR/$x ] && echo "error: file $SERVICEDIR/$x not found" >> $STLOG && continue
[ -n "$EXCLUDE" ] && \
[ -n "`echo $EXCLUDE|grep -w $x`" ] && echo "service $x in exclude list" >> $STLOG && continue
# Switch off the service. We will manage it ourselves.
/sbin/chkconfig $x off >> $STLOG 2>&1 &
unset C
C=`cat $SERVICEDIR/$x|grep chkconfig|tr '[ ]' '[:]'|tr -s '[:]'|cut -d ":" -f3|grep [\-$R]`
# DEBUGGING
#echo \$C=$C \$R=$R >> $STLOG
# Since the service x has been turned off. Check if it is supposed
# to run in this level. If yes start it.
if [ -n "$C" ]; then
if [ -n "`echo $C|grep \-`" -a -z "`echo $R|grep [2345]`" ]; then
echo "$R not one of 2,3,4,5 :$x not started" >> $STLOG
continue
fi
/sbin/service $x status >> $STLOG 2>&1 && continue
[ $? -gt 0 ] && \
( /sbin/service $x start >> $STLOG & 2>&1; sleep ${STAGGERTIME}s )
else
echo "error: $x not to start in $R" >> $STLOG
fi
done
rm -f "/tmp/$FN"
echo -e "\n\t`date`\nEND:" >> $STLOG
}
if [ -n "$servicesnames" ]; then
. $servicesnames
else
# Not called from service file. It may not exist yet.
addchkserv
addservnames
addlogrotate
fi
if [ -f "$1" ]; then
# Tmp lock file has been created, so call the function.
[ -z "$STAGGERTIME" ] && STAGGERTIME=7
# DEBUGGING
#echo "loop \$1=$1 exe" >> $STLOG
START $1
exit 0
elif [ "$1" != servicecall ]; then
echo "call $0 from service staggered."
exit 1
fi
LF=`mktemp`
touch "$LF" || exit 1
$0 "$LF" &
exit
#-----------------------------------------------------------------------
--
vikram...
||||||||
||||||||
^^'''''^^||root||^^^'''''''^^
// \\ ))
//(( \\// \\
// /\\ || \\
|| / )) (( \\
--
My own business always bores me to death; I prefer other people's.
-- Oscar Wilde
--
~|~
=
Registered Linux User #285795
More information about the fedora-devel-list
mailing list