add this startup script to MOL ??


Subject: add this startup script to MOL ??
From: Vinai (vroopcha@mcw.edu)
Date: Sun Jan 28 2001 - 18:06:05 MST


Hi All,

I came across this script a while ago, and I thought it was distributed
with MOL. But on checking my last install (0.9-53), it was not part of
the mol.src.rpm. It allows the kernel to be run-time patched at boot,
and loads all the relevent modules, so that a non-root user can use the
"startmol" script to start MOL. All you would need to do is to call
this script at the end of rc.local on start-up. It has been working for
me from the 0.9-48 up till the 0.9-53 release. I have not had a chance
to check the 0.9-55 release.

I should say right now - I did not write this script. Just came across
it a while back. Would it be too difficult to incorporate it into the
MOL package ? BTW - the script is attached to this message.

cheers
vinai

#!/bin/bash
#
# Shell script to start Mac-on-Linux
#
# Usage: startmol [mol-options] [-- [vmlinux] [System.map] ]
#

# We look for the mol lib directory in three places,
# ./lib, /usr/lib/mol and /usr/local/lib
# (in that particular order)

MOL_LIB_DIR=""
if [ -d ./lib/pci_roms ] ; then
    MOL_LIB_DIR=`pwd`/lib
elif [ -d /usr/lib/mol ] ; then
    MOL_LIB_DIR=/usr/lib/mol
elif [ -d /usr/local/lib/mol ] ; then
    MOL_LIB_DIR=/usr/local/lib/mol
fi

if [ ! -d "$MOL_LIB_DIR/pci_roms" ] ; then
    echo "The Mac-on-Linux library directory /usr/lib/mol is missing!"
    exit 1
fi
echo "Using MOL library directory $MOL_LIB_DIR"
export MOL_LIB_DIR

# Run the mol.sh script if available
if [ -f /etc/mol.sh ] ; then
/etc/mol.sh start
fi

SHEEP_MOD_PATHS="./NetDriver /lib/modules/`uname -r`/net $MOL_LIB_DIR/modules"
MOL_MOD_PATHS="./kernel_module /lib/modules/`uname -r`/misc $MOL_LIB_DIR/modules"

VERS=`cat /proc/version | awk -- '{ print $3 }' | sed s/[a-zA-Z].*// | sed s/\-.*//`
VERS_MAJOR=`echo $VERS | awk -F . -- '{ print $2 }'`
VERS_MINOR=`echo $VERS | awk -F . -- '{ print $3 }'`

# The 2.2.6 kernel is now supported (probably any 2.2 kernel works)
#if [ $VERS_MINOR -le 6 -o $VERS_MAJOR -lt 2 ] ; then
# echo "*** Warning: Mac-on-Linux preferes a kernel version > 2.2.6 ***"
# sleep 1;
#fi

# Make sure the mol kernel module is loaded
#
/sbin/lsmod | grep mol > /dev/null

if [ $? != 0 ] ; then
    # Has the kernel Mac-on-Linux support?

    grep mol_interface /proc/ksyms > /dev/null
    if [ $? != 0 ] ; then

        $MOL_LIB_DIR/bin/ismolpatched
        RET="$?"
        if [ $RET == 2 ] ; then
            echo "Please run 'startmol' as root"
            exit 1
        fi
        if [ $RET != 0 ] ; then
            echo "Trying to apply MOL runtime patches."

            #perhaps we should not use all arguments here
            $MOL_LIB_DIR/bin/molpatching $*

            if [ $? != 0 ] ; then
                exit 1;
            fi
        fi
    fi

    echo "Trying to load the Mac-on-Linux kernel module."
    echo

    MMOD=""
    for x in $MOL_MOD_PATHS ; do
        x=$x/mol.o
        if [ -f $x ] ; then
            MMOD=$x
            break
        fi
    done
    if [ "$MMOD" = "" ] ; then
        MMOD=mol
    fi

    if [ $UID != 0 ] ; then
        echo "The Mac-on-Linux kernel module is not loaded. Please run 'startmol' as root"
        exit 1
    fi

    /sbin/insmod -f $MMOD

    if [ $? != 0 ] ; then
        echo
        echo 'An error occured while trying to load the Mac-on-Linux kernel module'
        exit 1;
    fi
fi

# Install the ethernet driver
/sbin/lsmod | grep sheep_net > /dev/null

if [ $? != 0 -a $UID == 0 ] ; then
    SHEEP_NET=""
    for x in $SHEEP_MOD_PATHS ; do
        x=$x/sheep_net.o
        if [ -f "$x" ] ; then
            SHEEP_NET=$x
            break
        fi
    done
    if [ "$SHEEP_NET" = "" ] ; then
        SHEEP_NET=sheep_net
    fi
    /sbin/insmod -f $SHEEP_NET
fi

# Detect common misconfigurations

if [ -f /var/lock/mol ] ; then
    ps `cat /var/lock/mol` | grep mol > /dev/null
    if [ $? != 0 ] ; then
        echo "Removing stale lockfile /var/lock/mol"
        rm -f /var/lock/mol
    else
        echo "Mac-on-Linux is already running with pid `cat /var/lock/mol`"
        echo "according to the lockfile /var/lock/mol."
        exit 1;
    fi
fi

if [ ! -c /dev/sheep_net ] ; then
    echo "The ethernet interface /dev/sheep_net is missing."
    echo "Run 'mknod /dev/sheep_net c 10 198' to create it"
    echo
fi

if [ ! -c /dev/fb0 ] ; then
    echo "The framebuffer device /dev/fb0 is missing."
    echo "Run 'mknod /dev/fb0 c 29 0' to create it"
    exit 1
fi

#if [ "$MOLRC" == "" -a -f molrc ] ; then
# MOLRC=`pwd`/molrc
# echo $MOLRC
#fi

export MOLRC
cd $MOL_LIB_DIR
# $MOL_LIB_DIR/bin/mol $*

# give MOL time to create the lock file with the appropriate PID
sleep 1

if [ -f /var/lock/mol ] ; then
    MOLPID=`cat /var/lock/mol`
    trap "kill -INT $MOLPID" SIGINT

    while [ -d /proc/$MOLPID ] ; do
        sleep 3;
    done

    # finally run the user script
    if [ -f /etc/mol.sh ] ; then
        /etc/mol.sh stop
    fi
fi



This archive was generated by hypermail 2a24 : Sun Jan 28 2001 - 18:08:01 MST