haiku/data/system/boot/Bootscript
Ingo Weinhold f23d0a6242 Implement shm_open() and shm_unlink(). The shared memory objects are
simply created as files in /boot/var/shared_memory/. The Bootscript
clears the directory.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25374 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-08 13:42:33 +00:00

165 lines
3.1 KiB
Plaintext

## The system's main boot script.
##
## Some functions used by the main script
##
# launch <executable path> [ <thread to wait for> [ <program args> ] ]
launch() {
toLaunch="$1"
shift
toWaitFor="$1"
shift
if [ -f "/boot/$toLaunch" ]
then
"/boot/$toLaunch" $* &
[ "$toWaitFor" != "" ] && waitfor "$toWaitFor"
return 1
else
echo There is no "$toLaunch"
fi
return 0
}
# launchscript <script path>
launchscript() {
if [ -f "/boot/$1" ]
then
. "/boot/$1"
fi
}
# runprog <executable path>
runprog() {
if [ -f "/boot/$1" ]
then
"/boot/$1"
return 1
else
echo There is no "$1"
fi
return 0
}
##
## Main script starts here
##
# Set up stdin/out/err to nirvana
exec </dev/null
exec >/dev/null 2>&1
# Standard locations of boot files
SCRIPTS=beos/system/boot
SERVERS=beos/system/servers
# clean the shared memory dir
shmDir=/boot/var/shared_memory
rm -rf $shmDir
mkdir $shmDir
chmod 777 $shmDir
# Set up the environment
export SAFEMODE=`/bin/safemode`
launchscript $SCRIPTS/SetupEnvironment
# If the boot volume is a CD we use another script
iw=`/bin/isvolume -readonly /boot`
if [ "$iw" = "yes" ]; then
launchscript $SCRIPTS/Bootscript.cd
exit 0 # and return
fi
# Sets timezone etc.
runprog beos/bin/clockconfig
# Launch servers
# We must wait for the app_server and registrar to be ready
launch $SERVERS/registrar _roster_thread_ # launch registrar
launch $SERVERS/debug_server # launch debug_server
# Init Network
if [ "$SAFEMODE" != "yes" ]; then
launch $SERVERS/net_server # launch net_server
fi
if [ "$SAFEMODE" != "yes" ]; then
launch $SERVERS/app_server picasso # launch app_server
else
launch $SERVERS/fake_app_server picasso
fi
if [ "$SAFEMODE" != "yes" ]; then
launch $SERVERS/syslog_daemon
waitfor _input_server_event_loop_ # wait for input devices
fi
# Launch Terminal or consoled depending on $SAFEMODE
if [ "$SAFEMODE" != "yes" ]; then
if [ -e /etc/users ]; then
launch beos/system/Login
# nothing more
else
launch beos/system/Tracker
launch beos/system/Deskbar
# install ProcessController in the deskbar
(sleep 7; /boot/beos/apps/ProcessController -deskbar) &
fi
launch beos/apps/Terminal
else
launch beos/bin/consoled
fi
if [ "$SAFEMODE" != "yes" ]; then
launch $SERVERS/media_server
launch $SERVERS/midi_server
fi
# Launch Print Server
if [ "$SAFEMODE" != "yes" ]; then
launch $SERVERS/print_server
fi
# Launch Mail Daemon (if enabled on startup)
if [ "$SAFEMODE" != "yes" ]; then
launch $SERVERS/mail_daemon "" -E
fi
# Check for daily saving time
launch beos/bin/dstcheck
if [ "$SAFEMODE" != "yes" ]; then
# Start user boot script
if [ -f $HOME/config/boot/UserBootscript ]; then
. $HOME/config/boot/UserBootscript
fi
fi
# Check for fresh install and run post install scripts.
postInstallDir=/boot/common/boot/post_install
freshInstallIndicator=/boot/common/settings/fresh_install
if [ -e $freshInstallIndicator ]; then
# wait a moment for things to calm down a bit
sleep 3
# execute scripts
for f in $postInstallDir/*.sh; do
if [ -f $f ]; then
echo "Running post install script $f ..." > /dev/dprintf
$f
fi
done
sync
rm $freshInstallIndicator
fi