In these days I was thinking on a way to implement concurrent startup.

I wrote a daemon that may receive requests through TCP. I called it "bogoserver" because now it's simple and bogus, but it may become a very powerful daemon.

/ect/init.d/rc can launch startup scripts with "startup $i start &", so scripts are executed concurrently; but startup() must be modified and should ask to bogoserver if the script dependencies are satisfied. After the script is executed, startup() must notify this to bogoserver.

To do this, startup() must execute a function that gets the dependencies of this script. Dependencies may be obtained parsing the script as defined on LSB, but I think the function may also read dependencies from a config file, so we don't need to edit every script and we may override easily the dependencies.

Then startup() can send a message to bogoserver for each dependency. Unfortunately, Debian's bash doesn't supports TCP, so we must use netcat and execute "echo wait wantedService | nc localhost $BOGOSERVER_PORT". This will lock this istance of startup() until bogoserver returns a message and closes the socket. This may happen immediately, or after the execution of wantedService.

After the execution of the script, startup() must do "echo started $1 | nc localhost $BOGOSERVER_PORT", so bogoserver can unlock other istances of startup and the boot can go on.

This is the new startup():
startup() {
#getDependencies not yet implemented
  DEPENDS=$(getDependencies $1);
  for i in $DEPENDS; do
    echo "wait $i" | nc localhost $BOGOSERVER_PORT
  done
  case "$1" in
    *.sh)
        $debug sh "$@"
        ;;
    *)
        $debug "$@"
        ;;
  esac
  echo started $1 | nc localhost $BOGOSERVER_PORT
  fi
}

You can download the source of bogoserver from http://bootster.berlios.de/bogoserver/bogoserver-0.0.1.c

I think it may be improved in some way, for example it uses a linked lists to keep track of services. However, the number of startup services is generally low, and structure with lower computational complexity may have lower performances!

Then bogoserver doesn't handle yet change of runlevel or shutdown, but just boot. This is just the first version, you can help me and improve it!

Please ask if I was not clear, and send some feedback!

Regards
Fabio

_______________________________________________
initscripts-ng-devel mailing list
[email protected]
http://lists.alioth.debian.org/mailman/listinfo/initscripts-ng-devel

Reply via email to