Welcome to the MacNN Forums.

If this is your first visit, be sure to check out the FAQ by clicking the link above. You may have to register before you can post: click the register link above to proceed. To start viewing messages, select the forum that you want to visit from the selection below.

You are here: MacNN Forums > Community > Team MacNN > [Ubero] Script compilation

[Ubero] Script compilation
Thread Tools
Moderator Emeritus
Join Date: Dec 2000
Location: College Park, MD
Status: Offline
Reply With Quote
Feb 18, 2002, 01:08 PM
 
Can people please list their ubero scripts and comment them, along with instructions?
That way they can all be easily used by others.

Thx,

Scott
My website
Help me pay for college. Click for more info.
     
Senior User
Join Date: Feb 2001
Location: Chattanooga, TN
Status: Offline
Reply With Quote
Feb 18, 2002, 02:33 PM
 
I'm using the dual processor script that mikkyo wrote. I'll leave it to him to post/comment the script. It works beautifully.
Yeah, about those TPS reports, didn't you get the memo?
--------------
2.3 Ghz Dual-Core G5/20" LCD/Life is Good!
Moo...
     
Senior User
Join Date: Jan 2001
Location: San Francisco, CA
Status: Offline
Reply With Quote
Feb 18, 2002, 07:27 PM
 
Originally posted by malson:
<STRONG>I'm using the dual processor script that mikkyo wrote. I'll leave it to him to post/comment the script. It works beautifully.</STRONG>
Does that speed up Ubero a lot? It seems slow to me right now...

Team MacNN :: Crush the competition :: crunching :: Dual Ghz G4/Radeon 9000/23" Cinema Display
     
Moderator Emeritus
Join Date: Dec 2000
Location: College Park, MD
Status: Offline
Reply With Quote
Feb 19, 2002, 02:03 AM
 
Please post them all.

We need them for the configuration app so that they are all installed behind the scenes.
Anyone who has or uses the script and can post it with comments/instructions, please do. The sooner this app is done, the sooner we can start another round of recruiting.
My website
Help me pay for college. Click for more info.
     
Senior User
Join Date: Feb 2001
Location: Chattanooga, TN
Status: Offline
Reply With Quote
Feb 19, 2002, 10:46 AM
 
Ok, here's the dual processor script commented as best that I could. Instuctions for compiling and running it are down below.

Ubero Client Dual Processor Script

Copy everything below this line:
#!/bin/sh
#
# ----- User config section
# set these variables to what you want
#min % of cpu used to assume client is stalled
minCPU=5
#directory where copy 1 of ubero is located
uberoDir=/Applications/Ubero
#directory where copy 2 of ubero is located
uberoDir2=/Applications/Ubero2
#memory tweak - you can change the numbers depending on the amount of RAM you have (1.12 gig RAM and my numbers are 900, 900, 300, 300)
# dont let this line wrap
uberoCommand="/usr/bin/java -Xms100m -Xmx100m -XX:NewSize=33m -XX:MaxNewSize=33m -cp Agent.jar ubero.agent.Agent -text"
# amount of niceness: -20 to +20: include the sign(-/+)
# +20 is very very nice: lets you use the machine for other stuff
# -20 is not at all nice: hogs as much CPU as possible
# you must launch the script as root to use negative values
myNice=-20

# script section
# change directory to the ubero client
cd $uberoDir
# execute the Ubero command with the myNice level
# set the process to not stop when everyone is logged out (nohup)
# redirect the output to nowhere (/dev/null) and error message too (2&gt;&1)
# and run in background (&
nice -n $myNice nohup $uberoCommand &gt; /dev/null 2&gt;&1 &
# sit idle for 60 seconds to ensure the process is running
sleep 60
# get the process ID of the last executed process (ubero)
myPID=$!

#same things as above for the 2nd processor
cd $uberoDir2
nice -n $myNice nohup $uberoCommand &gt; /dev/null 2&gt;&1 &
sleep 60
myPID2=$!

# loop forever
while [ 1 ]; do
# Get the CPU utilization percentage of the myPID(ubero) process via ps
# and grep chopping out all the other fields and put it in myCPU
myCPU=`ps uwp $myPID | grep "java" | grep -v grep | awk '{print $3}' | awk -F. '{print $1}'`

# Check to see if myCPU is less than our desired minimum (MinCPU)
if [ "$myCPU" -lt "$minCPU" ]; then
# if so assume ubero has stalled(again) and kill the process
kill -9 $myPID
# wait 3 seconds for process to die
sleep 3
#change directories to stalled client just to be sure
cd $uberoDir
# execute a new instance of the ubero client just like before
nice -n $myNice nohup $uberoCommand &gt; /dev/null 2&gt;&1 &
#wait 60 seconds and grab new process id
sleep 60
myPID=$!
fi

#same as above for second processor
myCPU2=`ps uwp $myPID2 | grep "java" | grep -v grep | awk '{print $3}' | awk -F. '{print $1}'`

if [ "$myCPU2" -lt "$minCPU" ]; then
kill -9 $myPID2
sleep 3
cd $uberoDir2
nice -n $myNice nohup $uberoCommand &gt; /dev/null 2&gt;&1 &
sleep 60
myPID2=$!
fi

# sit idle for 300 seconds (5 minutes) before checking to see if ubero has stalled
sleep 300
#run through check routine again
done
#this script actually never ends. It must be killed.

Ok, that's the script. In order to run it you need to do the following. Open TextEdit and create a new file. Copy the script above and paste it into the TextEdit window. Select Format and Make Plain Text. Now save the file to the same directory that you keep the Ubero application (in my case, ~/applications/dc/). You will name it something like runner.txt. Now, launch Terminal. CD to where you saved the script. We now need to make it executable. Type chmod a+x ./runner.txt or whatever you named the file. Now, all you have to do is type ./runner.txt and your Ubero clients will fire right up. If you set the nice level to be a negative number (i.e. more processor hungry) you will have to use sudo to launch the script. Simply type sudo ./runner.txt.

Hope this is informative. I didn't write the script or most of the commentary. It is the creation of mikkyo. Any questions, post back and I'll try to answer them. This script runs great on my Dual 800.
Yeah, about those TPS reports, didn't you get the memo?
--------------
2.3 Ghz Dual-Core G5/20" LCD/Life is Good!
Moo...
     
Fresh-Faced Recruit
Join Date: Feb 2002
Status: Offline
Reply With Quote
Feb 19, 2002, 03:24 PM
 
Originally posted by slipjack:
<STRONG>

Does that speed up Ubero a lot? It seems slow to me right now...</STRONG>
Hey Slipjack,

When you're using the memory tweak, you need to modify the values in this line:

-Xms100m -Xmx100m -XX:NewSize=33m -XX:MaxNewSize=33m

If you set these values too high you end up using virtual memory, which slows it way down. The way to tell if that's happening is, after you launch the script, enter:

top -d

And on the top of the screen you'll see two values, pagein and pageout. You want those to be zero. If you're getting pageins, kill the script, lower the Xms and Xmx values (the NewSize and MaxNewSize values should also be lowered, they should be about 1/3 of the Xms values), and run the script again.

In my experience the values work well a little below your RAM. For my powerbook with 256 megs RAM, my values are 240, 240, 80, 80.
     
Fresh-Faced Recruit
Join Date: Feb 2002
Status: Offline
Reply With Quote
Feb 19, 2002, 03:28 PM
 
Oops,

One more thing, you should try to optimize your settings so they're as high as possible without giving you pageins. I think.

B
     
<mikkyo>
Guest
Status:
Reply With Quote
Feb 22, 2002, 09:17 PM
 
I updated my scripts so that the runner would restart itself every half day.
I was getting occasional problems with leaving the runner going for a day or two at a time.
Here are the new versions.
     
<mikkyo>
Guest
Status:
Reply With Quote
Feb 22, 2002, 09:18 PM
 
Single Processor Version
-----------------------
<BLOCKQUOTE><font size="1"face="Geneva, Verdana, Arial">code:</font><HR><pre><font size=1 face=courier>
#!/bin/sh
#
# ----- User config section
# set these variables to what you want
# counter for restarting script after half a day
counter=<font color = blue>0</font>
# minimum amount of CPU to assume client is stalled
minCPU=<font color = blue>5</font>
# command you want to use to launch the Ubero client.
# This line MUST NOT wrap. Only one line!
uberoCommand=<font color = red>"/usr/bin/java -Xms100m -Xmx100m -XX:NewSize=33m -XX:MaxNewSize=33m -cp Agent.jar ubero.agent.Agent -text"</font>
# Directory where your Ubero client lives
uberoDir=<font color = red>"/Applications/Ubero"</font>
# amount of niceness: <font color = blue>-20</font> to <font color = blue>+20</font>: include the sign(-/+)
# <font color = blue>+20</font> is very very nice: lets you use the machine for other stuff
# <font color = blue>-20</font> is not at all nice: hogs as much CPU as possible
# you must launch the script as root to use negative values
myNice=<font color = blue>-20</font>

# end user config section

# ----- Begin script
#
# change directory to the ubero client
cd <font color = red>"$uberoDir"</font>
# execute the Ubero command with the myNice level
# set the process to not stop when everyone is logged out (nohup)
# redirect the output to nowhere (/dev/null) and error message too (<font color = blue>2</font>&gt;&<font color = blue>1</font>)
# and run in background (&
nice -n $myNice nohup $uberoCommand &gt; /dev/null <font color = blue>2</font>&gt;&<font color = blue>1</font> &
# sit idle for <font color = blue>60</font> seconds to ensure the process is running
sleep <font color = blue>60</font>
# get the process ID of the last executed process (ubero)
myPID=$!

# loop forever
while [ <font color = blue>1</font> ]; do
# increment count each time through this loop
counter=`expr $counter + <font color = blue>1</font>`

# Get the CPU utilization percentage of the myPID(ubero) process via ps
# and grep chopping out all the other fields and put it in myCPU
myCPU=`ps uwp $myPID | grep <font color = red>"java"</font> | grep -v grep | awk '{print $<font color = blue>3</font>}' | awk -F. '{print $<font color = blue>1</font>}'`

# Check to see if myCPU is less than our desired minimum (minCPU)
if [ <font color = red>"$myCPU"</font> -lt <font color = red>"$minCPU"</font> ]; then
# if so assume ubero has stalled(again) and kill the process
kill <font color = blue>-9</font> $myPID
# wait <font color = blue>3</font> seconds for process to die
sleep <font color = blue>3</font>
# change directory to the ubero client just to be sure
cd <font color = red>"$uberoDir"</font>
# execute a new instance of the ubero client just like before
nice -n $myNice nohup $uberoCommand &gt; /dev/null <font color = blue>2</font>&gt;&<font color = blue>1</font> &
# again wait <font color = blue>60</font> seconds to grab the process ID
sleep <font color = blue>60</font>
myPID=$!
fi

# sit idle for <font color = blue>300</font> seconds (<font color = blue>5</font> minutes) before checking to see if ubero has stalled
sleep <font color = blue>300</font>

# Check if we have run for half a day(<font color = blue>144</font>*<font color = blue>5</font>=750minutes) or so and kill
# the agents and restart the runner
if [ $counter -ge <font color = blue>144</font> ]; then
kill <font color = blue>-9</font> $myPID
cd <font color = red>"$uberoDir"</font>
./uberorunnerNew &
sleep <font color = blue>3</font>
exit [<font color = blue>0</font>]
fi
# repeat the above check for idleness
done
</font>[/code]
     
<mikkyo>
Guest
Status:
Reply With Quote
Feb 22, 2002, 09:20 PM
 
Dual Processor Script
---------------------
<BLOCKQUOTE><font size="1"face="Geneva, Verdana, Arial">code:</font><HR><pre><font size=1 face=courier>
#!/bin/sh
#
# ----- User config section
# set these variables to what you want
counter=<font color = blue>0</font>
minCPU=<font color = blue>5</font>
uberoDir=<font color = red>"/Applications/Ubero"</font>
uberoDir2=<font color = red>"/Applications/Ubero2"</font>
uberoCommand=<font color = red>"/usr/bin/java -Xms100m -Xmx100m -XX:NewSize=33m -XX:MaxNewSize=33m -cp Agent.jar ubero.agent.Agent -text"</font>
myNice=<font color = blue>-20</font>
cd <font color = red>"$uberoDir"</font>
nice -n $myNice nohup $uberoCommand &gt; /dev/null <font color = blue>2</font>&gt;&<font color = blue>1</font> &
sleep <font color = blue>60</font>
myPID=$!

cd <font color = red>"$uberoDir2"</font>
nice -n $myNice nohup $uberoCommand &gt; /dev/null <font color = blue>2</font>&gt;&<font color = blue>1</font> &
sleep <font color = blue>60</font>
myPID2=$!

while [ <font color = blue>1</font> ]; do
counter=`expr $counter + <font color = blue>1</font>`

myCPU=`ps uwp $myPID | grep <font color = red>"java"</font> | grep -v grep | awk '{print $<font color = blue>3</font>}' | awk -F. '{print $<font color = blue>1</font>}'`

if [ <font color = red>"$myCPU"</font> -lt <font color = red>"$minCPU"</font> ]; then
kill <font color = blue>-9</font> $myPID
sleep <font color = blue>3</font>
cd <font color = red>"$uberoDir"</font>
nice -n $myNice nohup $uberoCommand &gt; /dev/null <font color = blue>2</font>&gt;&<font color = blue>1</font> &
sleep <font color = blue>60</font>
myPID=$!
fi

myCPU2=`ps uwp $myPID2 | grep <font color = red>"java"</font> | grep -v grep | awk '{print $<font color = blue>3</font>}' | awk -F. '{print $<font color = blue>1</font>}'`

if [ <font color = red>"$myCPU2"</font> -lt <font color = red>"$minCPU"</font> ]; then
kill <font color = blue>-9</font> $myPID2
sleep <font color = blue>3</font>
cd <font color = red>"$uberoDir2"</font>
nice -n $myNice nohup $uberoCommand &gt; /dev/null <font color = blue>2</font>&gt;&<font color = blue>1</font> &
sleep <font color = blue>60</font>
myPID2=$!
fi

sleep <font color = blue>300</font>

if [ $counter -ge <font color = blue>144</font> ]; then
kill <font color = blue>-9</font> $myPID $myPID2
cd <font color = red>"$uberoDir"</font>
./uberorunnerDualNew &
sleep <font color = blue>3</font>
exit [<font color = blue>0</font>]
fi
done
</font>[/code]
     
<mikkyo>
Guest
Status:
Reply With Quote
Feb 22, 2002, 09:34 PM
 
About my scripts:

The uberorunner script (or whatever you call it) must be in the same directory as your Ubero agent (/Applications/Ubero by default).
If you have 2 agents, put it in the first agent's directory.
Make sure the name of your script (uberoRunner) matches the name in the script so it can relaunch itself.
If you have a default Ubero install and save the script as uberoRunner in the /Applications/Ubero directory, you only need to change the java memory tweaks and set the script as executable.
In Terminal do
cd /Applications/Ubero
chmod a+rx uberoRunner

Launch your agents in the Finder and configure them the first time then quit them.
Then go back to terminal and launch the runner.
Make sure you are in the Ubero directory.
cd /Applications/Ubero
sudo ./uberoRunner &

You need to enter your password if you use sudo.
You only need to use sudo if you are setting the nice value in the script to a negative number (default is -20 = hog CPU).

If you have 2 Agents, be sure to set the second agent to use a different monitor port in the agent.cfg (or via the GUI in Settings:Network). This way you can use a browser or the Monitor utility to check on your agents - Though you wont need to if you get the script working :-)

Using an AppleScript (below) to Quit the Finder when you aren't using it as this will speed things up more. (Quit all other apps except Terminal or something that doesnt use CPU (Sys Prefs).
<BLOCKQUOTE><font size="1"face="Geneva, Verdana, Arial">code:</font><HR><pre><font size=1 face=courier>
tell application <font color = red>"Finder"</font>
quit
end tell
</font>[/code]
Save the script as an Application, put it in your Dock and you can click it whenever you are done using the machine. Click the Finder Icon in the Dock to relaunch the Fidner after it has been quit.

Enjoy
     
Moderator Emeritus
Join Date: Dec 2000
Location: College Park, MD
Status: Offline
Reply With Quote
Mar 8, 2002, 10:07 PM
 
What does the XX:NewSize and XX:MaxNewSize mean?

Are they user set, or what?

--Scott
My website
Help me pay for college. Click for more info.
     
Senior User
Join Date: Feb 2002
Location: Silly Valley, Ca
Status: Offline
Reply With Quote
Mar 8, 2002, 11:52 PM
 
Originally posted by Scotttheking:
<STRONG>What does the XX:NewSize and XX:MaxNewSize mean?
Are they user set, or what?
--Scott</STRONG>
They are memory settings for the java virtual machine.
Yes they are user set which is what the scripts do.
Read the java developer doc or see man java at a prompt near you if you want to try to learn more.

[ 03-09-2002: Message edited by: mikkyo ]
     
Senior User
Join Date: Feb 2002
Location: Silly Valley, Ca
Status: Offline
Reply With Quote
Mar 20, 2002, 03:06 AM
 
People should be using the above scripts over the older scripts in the restarting ubero thread.
     
Fresh-Faced Recruit
Join Date: Jul 2001
Location: Rochester, NY
Status: Offline
Reply With Quote
Mar 22, 2002, 01:18 AM
 
I have spent the day playing around with the Ubero scripts above. I have a 800DP and got the multi-processor script to work. My question is how to i close the terminal window I launched the script in after its launched. I realized that if its running and I close that it closes the Ubero clients and if I control-c to close it before i close the window the clients run but they will not restart if they crash. Any help would be appreciated.
     
Senior User
Join Date: Feb 2002
Location: Silly Valley, Ca
Status: Offline
Reply With Quote
Mar 23, 2002, 04:25 AM
 
Originally posted by naprestsleep:
<STRONG>I have spent the day playing around with the Ubero scripts above. I have a 800DP and got the multi-processor script to work. My question is how to i close the terminal window I launched the script in after its launched. I realized that if its running and I close that it closes the Ubero clients and if I control-c to close it before i close the window the clients run but they will not restart if they crash. Any help would be appreciated.</STRONG>
Are you starting the script in the background as root?
Something like
&gt;sudo -s
Password:
root&gt; ./uberorunnerDual &
     
Senior User
Join Date: Feb 2002
Location: Silly Valley, Ca
Status: Offline
Reply With Quote
Mar 23, 2002, 09:52 PM
 
So how many people running my scripts are encountering the Job Table Full error after running continuously for 1.5-2 days?
I need to get an idea how bad this problem is.


WARNING what follows could make your machine restart when you are working on it and cause you to lose data which would be your own fault for following these instructions!

If you have dedicated machines you can up a cron job with the following commands:

------
@reboot cd /Applications/Ubero; ./uberorunner &
0 4 * * * /sbin/shutdown -r NOW
-----
Save the file as uberotab and put it in your Ubero folder.
Then as root(sudo -s) in Terminal do
crontab uberotab
which will install the cronjob for root.
You can check with crontab -l (thats an L).

Obviously the cd path must match the location of your Ubero directory and the uberorunner command must match the name of your runner script. You need a full path for the cd command, so if Ubero is in your home directory do cd /Users/you/Ubero or something like that.
This will make sure ubero is running after a reboot and restart the computer at 4am everyday.

NOTE THIS IS NOT A USER FRIENDLY RESTART!!!!
It will just restart the machine.
If you have unsaved work it is lost instantly.

This is good for work machines that you aren't using at 4am or home machines that you KNOW you wont be using.

If you use a machine every weekday but not weekends, you can set it to restart only on weekends(Sat,Sun,Mon) at 4am by doing this:
0 4 * * 1,6,7 /sbin/shutdown -r NOW
Remember 4am on Sat morning is Fri night to some folks and you might still be using the machine, if so remove the 6, so you have 1,7 (Mon, Sun).

I picked 4am because I am very unlikely to be using the machine at that hour. Remember this will just reboot. If you are using the machine it will just all of sudden restart on you and you might be really really pissed, lose all your work and complain to me, in which case I say, see I told you.

I'm working on better ways for this to occur.
It sounds like they will be or currently are rebooting the Ubero Server at a set time once a day, this may be a good time to do the same thing for your machines (of course it will be a bad time for some people).

If you just want to make sure Ubero gets run after a reboot, just put the first line in the file.
     
Senior User
Join Date: Feb 2001
Location: Chattanooga, TN
Status: Offline
Reply With Quote
Mar 24, 2002, 12:04 AM
 
I'm getting that error about every 2 days or so. It actually says :

./runner.txt: job table full [31]

and spits back out to a command prompt. It doesn't cause Ubero to quit or anything, but it is somewhat annoying. What causes this? I look at top and the pid's are only in the 5000 something range usually. Just now I lloked and it has given me the job table full error and the pid's are in the low 2000 range. Oh well, I'm not terribly thrilled about setting a cron job to restart my machine. I can do that myself until we get this whole thing figured out...
Yeah, about those TPS reports, didn't you get the memo?
--------------
2.3 Ghz Dual-Core G5/20" LCD/Life is Good!
Moo...
     
Senior User
Join Date: Feb 2002
Location: Silly Valley, Ca
Status: Offline
Reply With Quote
Mar 26, 2002, 05:17 PM
 
Originally posted by malson:
<STRONG>I'm getting that error about every 2 days or so. It actually says :

./runner.txt: job table full [31]

and spits back out to a command prompt. It doesn't cause Ubero to quit or anything, but it is somewhat annoying. What causes this? I look at top and the pid's are only in the 5000 something range usually. Just now I lloked and it has given me the job table full error and the pid's are in the low 2000 range. Oh well, I'm not terribly thrilled about setting a cron job to restart my machine. I can do that myself until we get this whole thing figured out...</STRONG>
The Job Table error isn' t the same as running out of available processes.
That number in brackets is the line number where the script died. It varies on my machines but is usually the line right after attempting to spawn a new java process.
     
Moderator Emeritus
Join Date: Dec 2000
Location: College Park, MD
Status: Offline
Reply With Quote
Mar 26, 2002, 06:00 PM
 
hmm, this could be a problem.
We'd been planning on having this script in the team config app, but it probably isn't good to have if it doesn't work

Hopefully you'll be able to fix it.

--Scott
My website
Help me pay for college. Click for more info.
     
Senior User
Join Date: Feb 2002
Location: Silly Valley, Ca
Status: Offline
Reply With Quote
Apr 8, 2002, 06:21 PM
 
Ok Ubero folks.
I have a new script and it is great.
Save it in your Ubero directory and make it executable
(chmod a+rx yourUberoScriptName)
As long as you have Ubero set up in the default way in
/Applications/Ubero
and if you have a Dual Processor, a second client in
/Applications/Ubero2
It will just work.
Just cd to /Applications/Ubero and as root do ./yourUberoScriptName
(or whatever you call it) To become root do sudo -s and enter your password when asked.

Here is what it does for you:
  • It doesn't care what you name it.
    It warns you and doesn't run unless your agents have already been configured via the GUI.
    It automagically sets up a cron job to launch Ubero at restart.
    (be sure to set energy saver to reboot after a power failure if you have that option).
    It auto configures the java memory tweaks based on how much RAM you have.
    It auto detects dual processors and launches/monitors the Agents.
    It restarts your agents if they stall.
    It runs the agents at the Nice level you set.
    It is fully commented (you can learn bourne shell scripting by reading through it ;-).
    It has a debug mode which helps you figure out where things are messed up if something is wrong.
    It will run under BASH as well as some folks have installed bash for their /bin/sh.
    It will restart itself once a day to keep Ubero running all the time.
    It is fully configurable if you want to turn on and off various options/features.
    It has a mode for running only one Agent on a Dual in case you want to use the other processor for another DC project or just using the machine.

See the next post for the script, read previous posts for help setting things up.
     
Senior User
Join Date: Feb 2002
Location: Silly Valley, Ca
Status: Offline
Reply With Quote
Apr 8, 2002, 06:24 PM
 
Here is the ubero runner script, I call it uberorunner, you can call it what you want. Make sure none of the long lines wrap.
Grab the StuffIt archive here
Or copy everything between the Code lines.
Your first line should be the #!/bin/sh line.
<BLOCKQUOTE><font size="1"face="Geneva, Verdana, Arial">code:</font><HR><pre><font size=1 face=courier>
#!/bin/sh
#
# Uberorunner version .<font color = blue>9</font>
# This script assumes Ubero is installed in /Applications/Ubero and
# if you have a Dual Processor a second copy is in /Applications/Ubero2
# It is assumed you have manually setup your ubero agent(s) by running
# them once from the Finder and entering your registration info.
# This script must be in the (first) Ubero directory.
#
# ---------------------------------
# User Config Section
#
# Comment out (put a # in front of the DEBUG) if you have run the script
# once and know everything is working fine.
# It will no longer builtin echo out what is going on.
DEBUG=<font color = blue>1</font>
# amount of niceness: <font color = blue>-20</font> to <font color = blue>+20</font>: include the sign(-/+)
# <font color = blue>+20</font> is very very nice: lets you use the machine for other stuff
# <font color = blue>-20</font> is not at all nice: hogs as much CPU as possible
# you must launch the script as root to use negative values
myNice=<font color = blue>-20</font>

# Directory where your Ubero client lives
uberoDir=<font color = red>"/Applications/Ubero"</font>
# Directory where your second Ubero client lives (only for dual)
uberoDir2=<font color = red>"/Applications/Ubero2"</font>
#
# The next three settings you probably don't need to mess with
#
# Uncomment (remove the #) the next line if you have a Dual yet only
# want to run one Ubero Agent.
#onlyOne=<font color = blue>1</font>
# Comment (Add a # in front of autoStart) the next line if you dont
# want this script to be run automatically at startup via cron.
# ie You don't want the Ubero agent to automatically start after reboot.
# If you have previously run the script with autoStart enabled you will
# need to delete root's crontab by doing crontab -r as root.
autoStart=<font color = blue>1</font>
#
# Comment out (add a # in front of reLaunch) if you do NOT want this
# script to restart itself once a day.
# This can keep the agent(s) going if there are problems with running
# this script for several days.
reLaunch=<font color = blue>1</font>
# end user config
# ---------------------------------
#
# Don't change anything below here unless you know what you are doing!!
# ==================================
#
# Get the name of this script in case the user didnt follow directions.
runnerName=$<font color = blue>0</font>
runnerName=`basename $runnerName`
if [ $DEBUG ]; then
builtin echo Script Name $runnerName
fi
# Check to be sure this script is in the first Ubero Directory
cd $uberoDir
if [ ! -e <font color = red>"$runnerName"</font> ]; then
builtin echo <font color = red>"The runner script must be in the Ubero directory."</font>
exit <font color = blue>1</font>
fi
# Check root's crontab and set Ubero to run at reboot
if [ $autoStart ]; then
if [ ! -e ./uberotab ]; then
builtin echo <font color = red>"@reboot cd \"</font>$uberoDir\<font color = red>"; ./$runnerName &"</font> &gt; uberotab
# Check if root already has a crontab so we don't mess with it.
if [ -e /var/cron/tabs/root ]; then
builtin echo <font color = red>"Root already has a crontab set up"</font>
builtin echo <font color = red>"You must manually add the line in "</font>
builtin echo <font color = red>"the file uberotab to root's crontab"</font>
else
# add uberotab as root's crontab
crontab ./uberotab
fi
else
# ubertab already exist so assume it was already set up by
# this script or the user
if [ $DEBUG ]; then
builtin echo <font color = red>"Assuming crontab is already set up."</font>
builtin echo <font color = red>"you can verify by doing crontab -l as root"</font>
builtin echo <font color = red>"If it is not, either add the line from the file"</font>
builtin echo <font color = red>"uberotab to your existing crontab file, or if you"</font>
builtin echo <font color = red>"have no crontab file, simply do crontab ./uberotab"</font>
builtin echo <font color = red>"as root while in the Ubero directory"</font>
fi
fi
fi

# up the number of allowed processes to avoid filling job table
# Check SHELL env since some folks have BASH as their /bin/sh and
# it uses different syntax.
if [ $ZSH_VERSION ]; then
ulimit -u <font color = blue>256</font>
else
limit maxproc <font color = blue>256</font>
fi

# Get the number of cpus
numCPU=`sysctl -n hw.ncpu`
if [ $onlyOne ]; then
numCPU=<font color = blue>1</font>
fi
if [ $DEBUG ]; then
builtin echo onlyOne is $onlyOne
builtin echo numCPU $numCPU
fi
# Get total physical RAM
totRAM=`sysctl -n hw.physmem`
# convert RAM bytes to MB
totRAM=`expr $totRAM / <font color = blue>1048756</font>`
if [ $DEBUG ]; then
builtin echo Total RAM $totRAM
fi
# check and set mem sizes
# This will set the java tweak to a maximum of <font color = blue>600</font>/<font color = blue>200</font> for a single
# and half that for a Dual. These settings have been determined to be ideal.
if [ <font color = red>"$totRAM"</font> -le <font color = red>"<font color = blue>150</font>"</font> ]; then
jvSize=<font color = blue>100</font>
apSize=<font color = blue>33</font>
fi

if [ <font color = red>"$totRAM"</font> -gt <font color = red>"<font color = blue>150</font>"</font> ]; then
if [ <font color = red>"$totRAM"</font> -le <font color = red>"<font color = blue>319</font>"</font> ]; then
jvSize=<font color = blue>200</font>
apSize=<font color = blue>66</font>
fi
fi

if [ <font color = red>"$totRAM"</font> -ge <font color = red>"<font color = blue>320</font>"</font> ]; then
jvSize=<font color = blue>300</font>
apSize=<font color = blue>100</font>
fi

if [ <font color = red>"$totRAM"</font> -gt <font color = red>"<font color = blue>640</font>"</font> ]; then
jvSize=<font color = blue>600</font>
apSize=<font color = blue>200</font>
fi
# If Dual divide tweak settings by <font color = blue>2</font>
if [ <font color = red>"$numCPU"</font> -gt <font color = red>"<font color = blue>1</font>"</font> ]; then
jvSize=`expr $jvSize / <font color = blue>2</font>`
apSize=`expr $apSize / <font color = blue>2</font>`
fi
# ==========================
# If you wish to manually set the java tweak sizes, uncomment the
# following <font color = blue>2</font> lines (remove the #) and set them to what you want.
# Remember for Duals these numbers get divided by <font color = blue>2</font>
#jvSize=<font color = blue>300</font>
#apSize=<font color = blue>100</font>
# ==========================
if [ $DEBUG ]; then
builtin echo java Size $jvSize
builtin echo App Size $apSize
fi
# Build Ubero Command
javaTweak=<font color = red>"-Xms${jvSize}m -Xmx${jvSize}m -XX:NewSize=${apSize}m -XX:MaxNewSize=${apSize}m"</font>
# Special case for only 64Mb RAM which is too little for tweaking
# (or much of anything) Get more RAM!
if [ <font color = red>"$totRAM"</font> -eq <font color = red>"<font color = blue>64</font>"</font> ]; then
javaTweak=<font color = red>""</font>
fi
if [ $DEBUG ]; then
builtin echo java Tweak $javaTweak
fi
uberoCommand=<font color = red>"/usr/bin/java $javaTweak -cp Agent.jar ubero.agent.Agent -text"</font>
# counter for restarting script after half a day
counter=<font color = blue>0</font>
# minimum amount of CPU to assume client is stalled
minCPU=<font color = blue>2</font>

# Do a couple of check to make sure things are configured
# Make sure user set uberoDir correctly
if [ ! -e $uberoDir ]; then
builtin echo Ubero is not in `dirname $uberoDir`
exit <font color = blue>1</font>
fi
# Make sure Ubero agent has been configured via the GUI
if [ -e $uberoDir/agent.def ]; then
builtin echo The Ubero Agent must be lauched from the Finder the first time
exit <font color = blue>1</font>
fi

# Do same checks if on a Dual
if [ <font color = red>"$numCPU"</font> -gt <font color = red>"<font color = blue>1</font>"</font> ]; then
# Make sure user set uberoDir2 correctly
if [ ! -e $uberoDir2 ]; then
builtin echo Ubero2 is not in `dirname $uberoDir2`
exit <font color = blue>1</font>
fi
# Make sure Ubero2 agent has been configured via the GUI
if [ -e <font color = red>"$uberoDir2/agent.def"</font> ];then
builtin echo The Ubero2 Agent must be lauched from the Finder the first time
exit <font color = blue>1</font>
fi
fi

# Start the agent(s)
if [ $DEBUG ]; then
builtin echo launching first agent
fi
cd <font color = red>"$uberoDir"</font>
/usr/bin/nice -n $myNice /usr/bin/nohup $uberoCommand &gt;&/dev/null &
myPID=$!
if [ $DEBUG ]; then
builtin echo myPID $myPID
fi
# If Dual processor, launch second agent.
if [ <font color = red>"$numCPU"</font> -gt <font color = red>"<font color = blue>1</font>"</font> ]; then
if [ $DEBUG ]; then
builtin echo launching second agent
fi
cd <font color = red>"$uberoDir2"</font>
/usr/bin/nice -n $myNice /usr/bin/nohup $uberoCommand &gt;&/dev/null &
myPID2=$!
if [ $DEBUG ]; then
builtin echo myPID2 $myPID2
fi
fi
# Wait a minute to allow agents to start running
if [ $DEBUG ]; then
builtin echo Giving agents a chance to get going
fi
/bin/sleep <font color = blue>60</font>
# loop forever checking for idle agents
while [ <font color = blue>1</font> ]; do
# Increment counter
counter=`expr $counter + <font color = blue>1</font>`
if [ $DEBUG ]; then
builtin echo Count is $counter
fi
# Get the CPU utilization percentage of the myPID (ubero agent) process via ps
# and grep chopping out all the other fields and put it in myCPU
myCPU=`ps uwp $myPID | grep <font color = red>"java"</font> | grep -v grep | awk '{print $<font color = blue>3</font>}' | awk -F. '{print $<font color = blue>1</font>}'`
if [ $DEBUG ]; then
builtin echo myCPU is $myCPU
fi
# Check to see if myCPU is less than our desired minimum (minCPU)
if [ <font color = red>"$myCPU"</font> -lt <font color = red>"$minCPU"</font> ]; then
# wait a bit and make sure we arent just receiving data
/bin/sleep <font color = blue>45</font>
fi
# Check for final time before killing
if [ <font color = red>"$myCPU"</font> -lt <font color = red>"$minCPU"</font> ]; then
# Assume ubero has stalled(again) and kill the process
if [ $DEBUG ]; then
builtin echo Killing first agent
fi
/bin/kill <font color = blue>-9</font> $myPID
# wait <font color = blue>3</font> seconds for process to die
/bin/sleep <font color = blue>3</font>
if [ $DEBUG ]; then
builtin echo Launching first agent
fi
# change directory to the ubero client
cd <font color = red>"$uberoDir"</font>
# execute a new instance of the ubero client just like before
/usr/bin/nice -n $myNice /usr/bin/nohup $uberoCommand &gt;&/dev/null &
myPID=$!
if [ $DEBUG ]; then
builtin echo myPID is $myPID
fi
fi
# If we have a Dual, run same checks as above on second agent
if [ <font color = red>"$numCPU"</font> -gt <font color = red>"<font color = blue>1</font>"</font> ]; then
myCPU2=`ps uwp $myPID2 | grep <font color = red>"java"</font> | grep -v grep | awk '{print $<font color = blue>3</font>}' | awk -F. '{print $<font color = blue>1</font>}'`
if [ $DEBUG ]; then
builtin echo myCPU2 is $myCPU2
fi
if [ <font color = red>"$myCPU2"</font> -lt <font color = red>"$minCPU"</font> ]; then
/bin/sleep <font color = blue>45</font>
fi
if [ <font color = red>"$myCPU2"</font> -lt <font color = red>"$minCPU"</font> ]; then
if [ $DEBUG ]; then
builtin echo killing second agent
fi
/bin/kill <font color = blue>-9</font> $myPID2
/bin/sleep <font color = blue>3</font>
if [ $DEBUG ]; then
builtin echo launching second agent
fi
cd <font color = red>"$uberoDir2"</font>
/usr/bin/nice -n $myNice /usr/bin/nohup $uberoCommand &gt;&/dev/null &
myPID2=$!
if [ $DEBUG ]; then
builtin echo myPID2 is $myPID2
fi
fi
fi
if [ $DEBUG ]; then
builtin echo /bin/sleeping
fi
# sit idle for <font color = blue>300</font> seconds (<font color = blue>5</font> minutes) and check to see if ubero has stalled
/bin/sleep <font color = blue>300</font>
if [ $DEBUG ]; then
builtin echo waking
fi
# If reLaunch is set then check if we have run for a day
# (<font color = blue>288</font>*<font color = blue>5</font>=1500minutes) or so and kill the agents and restart this script.
if [ $reLaunch ]; then
if [ <font color = red>"$counter"</font> -ge <font color = red>"<font color = blue>288</font>"</font> ]; then
if [ $DEBUG ]; then
builtin echo killing all
fi
/bin/kill <font color = blue>-9</font> $myPID
if [ <font color = red>"$numCPU"</font> -gt <font color = red>"<font color = blue>1</font>"</font> ]; then
/bin/kill <font color = blue>-9</font> $myPID2
fi
cd <font color = red>"$uberoDir"</font>
./<font color = red>"$runnerName"</font> &
/bin/sleep <font color = blue>3</font>
exit <font color = blue>0</font>
fi
fi
# Repeat the above check(s) for idleness forever.
done
</font>[/code]

[ 04-15-2002: Message edited by: mikkyo ]
     
Grizzled Veteran
Join Date: Sep 2000
Location: Florida
Status: Offline
Reply With Quote
Apr 8, 2002, 07:19 PM
 
Woo! That's a long one! Thanks for all the hard work. I'll stuffit and post it to my iDisk as soon as possible.

[ 04-08-2002: Message edited by: SkiBikeSki ]
-- SBS --
     
Grizzled Veteran
Join Date: Sep 2000
Location: Florida
Status: Offline
Reply With Quote
Apr 8, 2002, 07:43 PM
 
I hate to say it but I can't get it to work. Here's what I type:

[rlit-86-83:/Applications/ubero] mike% chmod a+rx uberorunner
[rlit-86-83:/Applications/ubero] mike% ./uberorunner
./uberorunner: Command not found.

Could it be a command in the script that doesn't work right? Or could I have made a mistake elsewhere?

[ 04-08-2002: Message edited by: SkiBikeSki ]
-- SBS --
     
Senior User
Join Date: Feb 2001
Location: Chattanooga, TN
Status: Offline
Reply With Quote
Apr 8, 2002, 08:56 PM
 
Mine isn't working either. I get the following...

[localhost:/applications/dc] malson% chmod a+rx uberorunner.txt
[localhost:/applications/dc] malson% sudo ./uberorunner.txt
sudo: unable to exec ./uberorunner.txt: No such file or directory

I copied the script above, opened TextEdit and pasted it in. Saved the file as plaintext to my DC directory. Did the chmod ok and then went to run it. No dice...Oh well, back to the old script.
Yeah, about those TPS reports, didn't you get the memo?
--------------
2.3 Ghz Dual-Core G5/20" LCD/Life is Good!
Moo...
     
Senior User
Join Date: Feb 2002
Location: Silly Valley, Ca
Status: Offline
Reply With Quote
Apr 12, 2002, 04:34 PM
 
The first line of a shell script needs to be the
#!/bin/sh
line or it won't work.
I made the post more clear on this.
It looks like when using the code tag, a few blank lines get put at the begining of the code.
That is most likely you guys problem.
     
Senior User
Join Date: Feb 2002
Location: Silly Valley, Ca
Status: Offline
Reply With Quote
Apr 12, 2002, 04:41 PM
 
Also, when doing sudo on a script you need to be root to run it in a root shell.
So do
sudo -s
then
./uberorunner

Sudo -s asks for your password and opens a shell as root.
If you dont do the -s the script will attempt to run before you become root sometimes.
So the whole thing should look like this:
% cd /Applications/Ubero
% sudo -s
Password:
root# ./uberorunner

Once you are sure it is working right you can comment out the Debug line and launch it in the background with
root# ./uberorunner &
     
Grizzled Veteran
Join Date: Sep 2000
Location: Florida
Status: Offline
Reply With Quote
Apr 12, 2002, 10:13 PM
 
Sorry but it still doesn't work. I checked the first line of the script, and it's ok. I ran it with sudo -s and I still get the "Command not found" error. What else could it be?
-- SBS --
     
Forum Regular
Join Date: Oct 2001
Location: Tbilisi, Georgia
Status: Offline
Reply With Quote
Apr 12, 2002, 10:47 PM
 
Sorry if this is really obvious, but what do you guys get when you do "ls -l" in the directory where the script is located?

[ 04-12-2002: Message edited by: Grozni Majmun ]
     
Grizzled Veteran
Join Date: Sep 2000
Location: Florida
Status: Offline
Reply With Quote
Apr 12, 2002, 11:32 PM
 
Originally posted by Grozni Majmun:
<STRONG>Sorry if this is really obvious, but what do you guys get when you do "ls -l" in the directory where the script is located?
</STRONG>
Technically the script can be any where since it uses the complete path to the ubero agent. But if what you want is the Ubero Directory then here is mine:

[rlit-86-83:~/ubero] mike% ls -l
total 544
drwxr-xr-x 4 mike admin 264 Apr 1 09:47 Agent.app
-rwxrwxr-x 1 mike admin 213026 Jan 15 20:33 Agent.jar
drwxrwxr-x 6 mike admin 264 Mar 20 16:03 UCIAlignment
-rwxrwxr-x 1 mike admin 236 Jan 15 20:33 UberIcon.gif
-rw-r--r-- 1 mike admin 2352 Jan 15 20:34 Ubero_Distributed_Computing_Agent_v0.7_InstallLog. log
drwxr-xr-x 3 mike admin 264 Jan 15 20:33 Uninstall Ubero Distributed Computing Agent v0.7.app
-rw-r--r-- 1 mike admin 2447 Mar 15 01:22 agent.cfg
-rw-r--r-- 1 mike admin 4710 Jan 15 21:13 errors.log
-rwxrwxr-x 1 mike admin 7256 Jan 15 20:33 license.txt
-rw-r--r-- 1 mike admin 120 Jan 15 22:15 uberocommand.txt
-rwxr-xr-x 1 mike admin 8917 Apr 12 23:17 uberorunner
-rwxr-xr-x 1 mike admin 2613 Apr 1 01:57 uberorunnerNew
-rwxr-xr-x 1 mike admin 8915 Apr 8 21:09 uberorunnercopy
-- SBS --
     
Senior User
Join Date: Feb 2002
Location: Silly Valley, Ca
Status: Offline
Reply With Quote
Apr 13, 2002, 06:38 PM
 
Originally posted by SkiBikeSki:
<STRONG>
[rlit-86-83:~/ubero] mike% ls -l
</STRONG>
You set the uberoDir in the script to
/Users/mike/ubero
?
     
Grizzled Veteran
Join Date: Sep 2000
Location: Florida
Status: Offline
Reply With Quote
Apr 13, 2002, 07:19 PM
 
I've tried both /Users/mike/ubero and /Applications/ubero and neither worked.
-- SBS --
     
Senior User
Join Date: Feb 2002
Location: Silly Valley, Ca
Status: Offline
Reply With Quote
Apr 13, 2002, 07:35 PM
 
Originally posted by SkiBikeSki:
<STRONG>I've tried both /Users/mike/ubero and /Applications/ubero and neither worked.</STRONG>
Well ubero is only in one place so you want the one that points to that.

As for the command not found error, it means it can't find the command you are executing. In this case it is the script which is the command. It appears you have called it "uberorunner" and it looks like it is executable and should work.
One thing you can try is;
make sure you are in the ubero directory where your script lives (It does need to be in the ubero directory as when the script relaunches itself it has to look somewhere it knows)
cd /Users/mike/ubero
become root
sudo -s
then type
rehash
then try
./uberorunner

If that doesn't work, type
which sh
which should return
/bin/sh
and make sure your file is saved with unix line breaks (BBEdit can do it, Text Edit can if it is plain text) and starts with
#!/bin/sh
Verify that with
head -n 1 uberorunner
     
Grizzled Veteran
Join Date: Sep 2000
Location: Florida
Status: Offline
Reply With Quote
Apr 13, 2002, 07:46 PM
 
what i meant by i've tried both is that i have moved ubero and tried the command. At not time did I have two copies of ubero.

Everything you said check out fine, but it still gives me the command not found error. Am I the only one with this problem?
-- SBS --
     
Senior User
Join Date: Feb 2002
Location: Silly Valley, Ca
Status: Offline
Reply With Quote
Apr 14, 2002, 01:35 AM
 
Try this
Ubero Runner Script
You will find a nice SuffIt archive with the script and a read me.
This should eliminate most of the user errors with copy and pasting the script. Just unstuff and drop the uberorunner in your Ubero directory. Then launch as before (see the Read Me).
     
Mac Elite
Join Date: Jan 2002
Location: Mile High City
Status: Offline
Reply With Quote
Apr 14, 2002, 02:05 AM
 
Originally posted by mikkyo:
<STRONG>Try this
Ubero Runner Script
You will find a nice SuffIt archive with the script and a read me.
This should eliminate most of the user errors with copy and pasting the script. Just unstuff and drop the uberorunner in your Ubero directory. Then launch as before (see the Read Me).</STRONG>
Thank you. Just what us unix rookies needed.
     
Senior User
Join Date: Feb 2002
Location: Silly Valley, Ca
Status: Offline
Reply With Quote
Apr 15, 2002, 05:40 PM
 
I updated the script to fix a couple of issues and edited the mesage containing it. Have at it. i updated the downloadable version as well.

I was thinking it would be good to remove all my previous script messages so only the current one is in the thread and people don't hit the thread read through and grab the first one they see, but I posted the others before registering so I can't.
     
Grizzled Veteran
Join Date: Sep 2000
Location: Florida
Status: Offline
Reply With Quote
Apr 15, 2002, 06:34 PM
 
Great work Mikkyo! After I changed the directory in the script, and re-chmod-ed it, it worked like a charm. I don't think that stuffit keeps UNIX permissions well. I'll look into .tgz it so that isn't a problem. Another stumbling block is that when I edited it in TextEdit, it really really wanted to add a .txt to the end. I had to eventually go into show info, and choose show extension and then also edit the name in show info and not in the finder window. It was really crazy! OS X really wants to hide extensions.

BTW Maybe autostart should be set to 0 by default. I was startled when I saw it was taking 50% of my CPU away from dFold.

[ 04-16-2002: Message edited by: SkiBikeSki ]
-- SBS --
     
Grizzled Veteran
Join Date: Sep 2000
Location: Florida
Status: Offline
Reply With Quote
Apr 16, 2002, 12:38 AM
 
I'm having a tough time removing the crontab the script created. I've tried it both as sudo and as the real root, and here's what i get.

root# crontab -r
remove crontab for root? yes
crontab: no crontab for root

But it still launches ubero at startup. I'm afraid to remove my(ie mike) crontab since I dont knot what's in there, nothing of mine, but possibly from Apple.

I've tried Cronnix, but it crashes upon launching it for some reason. I think it's unrelated to the problems I'm having now.
-- SBS --
     
Senior User
Join Date: Feb 2002
Location: Silly Valley, Ca
Status: Offline
Reply With Quote
Apr 16, 2002, 04:39 PM
 
Originally posted by SkiBikeSki:
<STRONG>I'm having a tough time removing the crontab the script created. I've tried it both as sudo and as the real root, and here's what i get.

root# crontab -r
remove crontab for root? yes
crontab: no crontab for root

But it still launches ubero at startup. I'm afraid to remove my(ie mike) crontab since I dont knot what's in there, nothing of mine, but possibly from Apple.
</STRONG>
Silly You!
When play with CLUI stuff alway try man!
man crontab tells all.
What you did is probably launch the uberorunner the first time as yourself not root.
Here is the short easy answer:
crontab -l (that's a lowercase L)
lists the current crontab
do it as your regular user.
Then crontab -r to remove.
Autostart is on by default cause, like, this is an Ubero runner script, if you are multirunning DCs that's your business and you can follow the directions in the script ;-)
     
Fresh-Faced Recruit
Join Date: Jul 2001
Status: Offline
Reply With Quote
Apr 16, 2002, 04:52 PM
 
Originally posted by SkiBikeSki:
<STRONG>I'm having a tough time removing the crontab the script created. I've tried it both as sudo and as the real root, and here's what i get.

root# crontab -r
remove crontab for root? yes
crontab: no crontab for root

But it still launches ubero at startup. I'm afraid to remove my(ie mike) crontab since I dont knot what's in there, nothing of mine, but possibly from Apple.

I've tried Cronnix, but it crashes upon launching it for some reason. I think it's unrelated to the problems I'm having now.</STRONG>
Cronnix has a bug which causes it to crash at startup if you have "@reboot" (or any of the @* modifiers)in your crontab file. I suspect uberorunner uses @reboot. The author of Cronnix is aware of this bug.
     
Grizzled Veteran
Join Date: Sep 2000
Location: Florida
Status: Offline
Reply With Quote
Apr 16, 2002, 08:57 PM
 
Thanks. As you can tell I posted that message at 1AM, and i wasn't thinking clearly. True man cron tells all, but it is very confusing sometimes.
-- SBS --
     
Mac Elite
Join Date: Dec 2001
Location: Atlanta, GA, USA
Status: Offline
Reply With Quote
Apr 17, 2002, 10:00 AM
 
The next release of MDC will include the latest ubero script as well.
Mac Pro 2x 2.66 GHz Dual core, Apple TV 160GB, two Windows XP PCs
     
   
Thread Tools
Forum Links
Forum Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts
BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On
Top
Privacy Policy
All times are GMT -5. The time now is 11:42 PM.
All contents of these forums © 1995-2011 MacNN. All rights reserved.
Branding + Design: www.gesamtbild.com
vBulletin v.3.8.7 © 2000-2011, Jelsoft Enterprises Ltd., Content Relevant URLs by vBSEO 3.3.2