Archive for category Video Games

Minecraft Server is coming back

UPDATE 20120806 0746 hours:  Since some folks have asked, here’s the init script I’m using to control the minecraft server.  It runs on CentOS (royalty-free rebranding of Red Hat Enterprise Linux):

#!/bin/bash
# /etc/init.d/minecraft
# version 0.3.7 2012-03-06 (YYYY-MM-DD)

### BEGIN INIT INFO
# Provides:   minecraft
# Required-Start: $local_fs $remote_fs
# Required-Stop:  $local_fs $remote_fs
# Should-Start:   $network
# Should-Stop:    $network
# Default-Start:  2 3 4 5
# Default-Stop:   0 1 6
# Short-Description:    Minecraft server
# Description:    Starts the minecraft server
### END INIT INFO

#Settings
SERVICE='minecraft_server.jar'
OPTIONS='nogui'
USERNAME='miner'
WORLD='world'
MCPATH='/opt/minecraft'
BACKUPPATH='/media/archive/minecraft.backup'
CPU_COUNT=1
INVOCATION="java -Xmx1024M -Xms1024M -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalPacing -XX:ParallelGCThreads=$CPU_COUNT -XX:+AggressiveOpts -jar $SERVICE $OPTIONS"

ME=`whoami`
as_user() {
  if [ $ME == $USERNAME ] ; then
    bash -c "$1"
  else
    su - $USERNAME -c "$1"
  fi
}

mc_start() {
  if  pgrep -u $USERNAME -f $SERVICE > /dev/null
  then
    echo "$SERVICE is already running!"
  else
    echo "Starting $SERVICE..."
    cd $MCPATH
    as_user "cd $MCPATH && screen -dmS minecraft $INVOCATION"
    sleep 7
    if pgrep -u $USERNAME -f $SERVICE > /dev/null
    then
      echo "$SERVICE is now running."
    else
      echo "Error! Could not start $SERVICE!"
    fi
  fi
}

mc_saveoff() {
  if pgrep -u $USERNAME -f $SERVICE > /dev/null
  then
    echo "$SERVICE is running... suspending saves"
    as_user "screen -p 0 -S minecraft -X eval 'stuff \"say SERVER BACKUP STARTING. Server going readonly...\"\015'"
    as_user "screen -p 0 -S minecraft -X eval 'stuff \"save-off\"\015'"
    as_user "screen -p 0 -S minecraft -X eval 'stuff \"save-all\"\015'"
    sync
    sleep 10
  else
    echo "$SERVICE is not running. Not suspending saves."
  fi
}

mc_saveon() {
  if pgrep -u $USERNAME -f $SERVICE > /dev/null
  then
    echo "$SERVICE is running... re-enabling saves"
    as_user "screen -p 0 -S minecraft -X eval 'stuff \"save-on\"\015'"
    as_user "screen -p 0 -S minecraft -X eval 'stuff \"say SERVER BACKUP ENDED. Server going read-write...\"\015'"
  else
    echo "$SERVICE is not running. Not resuming saves."
  fi
}

mc_stop() {
  if pgrep -u $USERNAME -f $SERVICE > /dev/null
  then
    echo "Stopping $SERVICE"
    as_user "screen -p 0 -S minecraft -X eval 'stuff \"say SERVER SHUTTING DOWN IN 10 SECONDS. Saving map...\"\015'"
    as_user "screen -p 0 -S minecraft -X eval 'stuff \"save-all\"\015'"
    sleep 10
    as_user "screen -p 0 -S minecraft -X eval 'stuff \"stop\"\015'"
    sleep 7
  else
    echo "$SERVICE was not running."
  fi
  if pgrep -u $USERNAME -f $SERVICE > /dev/null
  then
    echo "Error! $SERVICE could not be stopped."
  else
    echo "$SERVICE is stopped."
  fi
}

mc_update() {
  if pgrep -u $USERNAME -f $SERVICE > /dev/null
  then
    echo "$SERVICE is running! Will not start update."
  else
    MC_SERVER_URL=http://s3.amazonaws.com/MinecraftDownload/launcher/minecraft_server.jar?v=`date | sed "s/[^a-zA-Z0-9]/_/g"`
    as_user "cd $MCPATH && wget -q -O $MCPATH/minecraft_server.jar.update $MC_SERVER_URL"
    if [ -f $MCPATH/minecraft_server.jar.update ]
    then
      if `diff $MCPATH/$SERVICE $MCPATH/minecraft_server.jar.update >/dev/null`
      then
        echo "You are already running the latest version of $SERVICE."
      else
        as_user "mv $MCPATH/minecraft_server.jar.update $MCPATH/$SERVICE"
        echo "Minecraft successfully updated."
      fi
    else
      echo "Minecraft update could not be downloaded."
    fi
  fi
}

mc_backup() {
   mc_saveoff

   NOW=`date "+%Y-%m-%d_%Hh%M"`
   BACKUP_FILE="$BACKUPPATH/${WORLD}_${NOW}.tar"
   echo "Backing up minecraft world..."
   #as_user "cd $MCPATH && cp -r $WORLD $BACKUPPATH/${WORLD}_`date "+%Y.%m.%d_%H.%M"`"
   as_user "tar -C \"$MCPATH\" -cf \"$BACKUP_FILE\" $WORLD"

   echo "Backing up $SERVICE"
   as_user "tar -C \"$MCPATH\" -rf \"$BACKUP_FILE\" $SERVICE"
   #as_user "cp \"$MCPATH/$SERVICE\" \"$BACKUPPATH/minecraft_server_${NOW}.jar\""

   mc_saveon

   echo "Compressing backup..."
   as_user "gzip -f \"$BACKUP_FILE\""
   echo "Done."
}

mc_command() {
  command="$1";
  if pgrep -u $USERNAME -f $SERVICE > /dev/null
  then
    pre_log_len=`wc -l "$MCPATH/server.log" | awk '{print $1}'`
    echo "$SERVICE is running... executing command"
    as_user "screen -p 0 -S minecraft -X eval 'stuff \"$command\"\015'"
    sleep .1 # assumes that the command will run and print to the log file in less than .1 seconds
    # print output
    tail -n $[`wc -l "$MCPATH/server.log" | awk '{print $1}'`-$pre_log_len] "$MCPATH/server.log"
  fi
}

#Start-Stop here
case "$1" in
  start)
    mc_start
    ;;
  stop)
    mc_stop
    ;;
  restart)
    mc_stop
    mc_start
    ;;
  update)
    mc_stop
    mc_backup
    mc_update
    mc_start
    ;;
  backup)
    mc_backup
    ;;
  status)
    if pgrep -u $USERNAME -f $SERVICE > /dev/null
    then
      echo "$SERVICE is running."
    else
      echo "$SERVICE is not running."
    fi
    ;;
  command)
    if [ $# -gt 1 ]; then
      shift
      mc_command "$*"
    else
      echo "Must specify server command (try 'help'?)"
    fi
    ;;

  *)
  echo "Usage: $0 {start|stop|update|backup|status|restart|command \"server command\"}"
  exit 1
  ;;
esac

exit 0

[[Category:Server]]

And then this is the crontab entry to run the backup every 30 minutes:

0,30 * * * * mount /media/archive && /etc/init.d/minecraft backup; umount /media/archive

UPDATE 20120703 1110 hours:  The server is open for business at IP 67.53.8.172.  I will register a DNS entry shortly.  Currently we have only Bjorn and myself whitelisted.  Post a comment to this page to add your name and tell me who you are.  ATM, only IRL friends are welcome here.

Read the rest of this entry »

38 Comments

Poll: Monsters?

Do we want to turn on monsters?  This is a yes or no question – I can’t nerf creepers.

Leave a comment

The Adventures of Pheege, Gnomish Engineer

WoW runs smooth as glass on my box at max settings.  Who know having a big enough PSU would make a big difference in graphics performance.

3 Comments

Happy May 1!

Warning:  NSFW Read the rest of this entry »

Leave a comment

Random thought

I’m guessing many/most/all of us have Steam accounts, but I’m not actually connected with any of you.  So I guess this is a call-out for Steam names with which to flesh out my friendlist.  I’m under “kiij_kasa” oddly enough.

Related, if people are into it, should we throw together a “Teh Table” Steam Group?

10 Comments

Reboot of SavageChicken

Dear Minecraft Users:

I need to schedule a reboot of the server that hosts Minecraft.  It’s due for a kernel upgrade:

 
******************************
* A new kernel is available. *
* Please schedule a reboot.  *
******************************

Kernel release 2.6.18-274.12.1.el5.centos.plus is available in /boot.
Current release is 2.6.18-274.7.1.el5.centos.plus.

-root on SavageChicken

Please let me know if anyone objects to me scheduling a reboot for midnight tonight.  Thanks!

 

Sincerely,
Your friendly neighborhood sysadmin.

4 Comments

Minecraft Logs

Here are some anomalies from the Minecraft log files:
Read the rest of this entry »

2 Comments

Minecraft 1.8 on our server

Alright, so as you may know (because I’ve been stumbling links and video lately), Minecraft [Beta] 1.8 is releasing soon (I think the most recent news I heard said Monday).  What you may not have heard is that 1.8 is not going to be fully backward compatible with older maps.  This isn’t to say that the old maps are scrapped, but rather that with maps created pre-1.8, a fair number of the functions and features being introduced just won’t work/show up.  This means that we’ve reached a point where we can and should ask ourselves:  Do we want to start a new map for the server?

I know traffic on the server is not what it once was.  Perhaps we have other responsibilities, or simply built what we wanted and moved on.  Likewise, it’s possible that any works we establish will be negated again with the release of the full (non-Beta) version of the game.  Still, I ask all of you to participate in the poll, and decide whether we start a new land.

In the event of a new map, I suggest we still have a timeframe in which to save pictures or diagrams of anything we built that we feel deserves saving.  Also, perhaps get Josh to zip up the map such that we can get copies if we so desire.

33 Comments

More WoW Screenies

This time I’ll do them with narrative.

Read the rest of this entry »

Leave a comment

WoW Screenies

I’m playing WoW again.  I figured it’d be neat to start a new character under Cataclysm.  I decided on a Retribution Paladin:

Read the rest of this entry »

Leave a comment