The system works

I decided to go the “traditional” route and set root’s shell to “/bin/sh” instead of “/bin/bash” because on old school Unices, root always used the Bourne shell. So I added another user “toor,” the recommended Bourne-Again superuser to use “/bin/bash.” I knew it would trip a script I have running nightly to check for backdoor logins:

********************************************************************************
*                                                                              *
*                ALERT! Login ID toor has uid 0                        *
*                Detected On Date :08/09/12 Time :12:00:03 AM                       *
*                                                                              *
********************************************************************************

I’ll be updating the script to ignore the ‘toor’ login.

Advertisements

Leave a comment

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

Priorities

Since I have no money to spend on camera gear, I’ve been reading the fora and reviews online of different lenses I’m thinking of getting at some point and I’ve come up with a set of priorities based on what I’m currently using and the kind of shots I like to take:

Priority

EF 50mm f/1.8 II         $125.00
EF-S 55-250mm f/4-5.6 IS II     $299.00
EF 85mm f/1.8 USM        $419.99
EF-S 60mm f/2.8 Macro USM    $469.99
EF-S 10-22mm f/2.5-4.5 USM    $859.99
EF 28mm f/2.8 USM        $509.99
EF 100mm f/2 USM        $499.99

Read the rest of this entry »

Leave a comment

Sysadmin Day Celebration

On Friday, July 27, I will be celebrating System Administrator Appreciation Day (and potentially getting a job, depending).  My default place to celebrate is Old German Beer Hall.  But there are some others.  As I am fond of polls, here’s one:

3 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

How do I know what primes to buy?

I’m a big advocate of prime lenses in place of zooms.  But if you’re not sure which focal lengths you use the most, here’s a way to find out:  Extract the EXIF data from your images, find the FocalLength entry, and count the number of occurrences of each focal length:
Read the rest of this entry »

8 Comments

Canon Standard Lens Lineups

I’ve put together a few packages of Canon EF lens lineups for standard photography:

Read the rest of this entry »

1 Comment

Gift Ideas ;)

If anyone is thinking of spending a few thousand dollars on a gift for me (XD), this page has the lenses that will fit my camera body.  Any lens on that page would be a welcome addition to my gear except the following:

  • EF 8-15mm f/4L Fisheye USM
  • EF-S 18-55mm f/3.5-5.6 IS II (came with my camera body)
  • EF-S 18-135mm f/3.5-5.6 IS STM
  • EF 15mm f/2.8 Fisheye
  • EF 40mm f/2.8 STM
  • Any of the TS-E lenses.

Leave a comment

First Organ

I’ve decided to reproduce Raphi Giangiulio’s homemade all-wood pipe organ.  With two exceptions:  One is renaming the stops and another is adding electromagnetic switches to the 8′ octave keys to enable controlling a single-octave carillon from the organ console.  This organ will be all wood but the voicing is impressive and I’d never have known that there wasn’t a single metal rank in the organ! Read the rest of this entry »

,

Leave a comment

You need this bag!!

Image

Uhh…  Bags aren’t incredible.  They hold my shit.  I really don’t need them to do any more than that.

Leave a comment