Saturday, March 28, 2009

Linksys & DD-WRT Tinkering

I actually performed this upgrade quite a while ago. Just trying to play catch-up with some documentation.

In this post I cover installation, general setup, OpenDNS, and Dynamic DNS.

DD-WRT is a free firmware upgrade for most consumer routers. It adds a great deal of functionality and control to your router that otherwise might not be available.

I was in need of a wireless router and knew I wanted to put DD-WRT on it, so I bought a Linksys WRT54GL - reported to be the most compatible and easiest to upgrade. And indeed it is.

Installation

Following the instructions on the install page for WRT54GL I was able to flash the firmware without any problems and had a new, stable, and better router. (Each router install is different depending on the model. Instructions for other routers can be found here.)

After I had been using it for a few months a new version was released so I performed an upgrade to v24-sp1. The following setup instructions are specific to v24-sp1.

Setup

When making changes in the setup I found that it works best if, after making all the changes needed on a page, click the Save button, then click the Apply Settings button. If you don't click on the Save button then the changes made will be lost if you change pages. And I have run into problems of the router hanging and not responding if I click on Apply Settings before clicking on Save. (In these cases the router continues to function but doesn't respond to the web interface, even days later. Only a reboot snaps it out of this state.)

Some of the changes I made to the router setup are as follows (your needs may vary):

Administration - Management
Obviously, the first thing to do is change the default password.

Wireless - Basic Settings
Wireless mode - AP
Wireless network mode - mixed
Wireless Network Name (SSID) - (change this, don't leave it as default)

I had originally set Wireless SSID broadcast to Disable (for additional security), but our Wii game console can't find wireless networks that aren't broadcasting the SSID, so I had to change it back to Enable.

Wireless - Wireless Security
Security mode - WPA Personal
WPA Algorithms - TKIP
WPA Shared Key - ************* (Right - like I'm giving this out, but be sure to set it and remember it. If you forget it then you can unmask it.)

Wireless - Advanced Settings
The TX power can be changed here. It's default is 70 and I left it there. But it can be boosted for better performance if necessary. The older version used to recommend a max, but I can't remember what it was. 100 I think. But it can be cranked up to 251mW which is probably not a good idea.

Services - Services

DHCP Server
The router has a built in DHCP server, but in addition to leasing dynamic IPs I wanted it to lease static IPs to the known computers on the network. I looked up each computer's MAC address under Status - LAN and assigned each one a static IP address. This way each computer can continue to use DHCP (for easier setup) but use a static IP so I can find them on the network.

DNSMasq
DNSMasq - Enable
Local DNS - Enable
Additional DNSMasq Options: strict-order

These settings are for use with OpenDNS. See below.

RFlow / MACupd
This service is for use with RFlow Collector. I've got a Windows server setup with RFlow Collector that I can use to monitor network and internet traffic. Yes, I snoop on my own network. I do this mainly because I can (like most things I do) and because I'm curious. Also partially because if I experience network problems it's another place to look when troubleshooting.

RFlow - Enable
Server IP - (enter server IP here)
Port - 2055 (default)
MACupd - Enable
Server IP - (same as above)
Port - 2056 (default)
Interface - LAN & WLAN
Interval - 10

On the server side I had to setup MySQL and RFlow Collector. Instructions here.

To view the logs I created a Microsoft Access front-end that imports the data from the MySQL tables (shared over an ODBC link) with queries that help to make sense out of it.

Secure Shell
I want to be able to SSH into the router. This is for a variety of reasons: troubleshooting, remote network access, etc. With a dynamic DNS service (more on that later) I could SSH from anywhere in the world with internet access.

SSHd - enable
SSH TCP Forwarding - Disable
Password Login - Disable
Port - (changed) I did not leave these as the default 22 for security reasons
Authorized Keys - (enter public key here)

A few notes: I used public key authentication instead of password authentication here. Again, for security reasons. Without password authentication the router can't be hacked by guessing the password. The one disadvantage is that without my private key, I can't get into it either. More information on this and how to setup public/private key pairs can be found here.

NAT/QoS - Portforwarding
I have a webserver (that I'm really not doing anything noteworthy with at the moment, but have plans) so I use portforwarding to make the webserver visible to the internet.

Application - webserver
Port from - 80
Protocol - Both
IP Address - (IP address of webserver)
Port to - 80
Enable - check

OpenDNS

In order to filter internet content and be somewhat in control of what my kids have access to on the internet, I decided to use OpenDNS for DNS service instead of the default DNS my ISP provides.

After creating an OpenDNS account I made the following setup changes:

Setup - Basic Setup
Static DNS 1 - 208.67.222.222
Static DNS 2 - 208.67.220.220
Use DNSMasq for DHCP - check
Use DNSMasq for DNS - check
DHCP-Authoritative - check

To plug one of the holes used to get around these DNS filters I added the following command to the firewall:
Administration - Commands
Firewall
iptables -t nat -A PREROUTING -p udp -i br0 --dport 53 -j DNAT --to $(nvram get lan_ipaddr)
iptables -t nat -A PREROUTING -p tcp -i br0 --dport 53 -j DNAT --to $(nvram get lan_ipaddr)

In order to take full advantage of OpenDNS's filter capabilities, the router's WAN IP address needs to be registered with the OpenDNS account. But if the IP address changes (which is likely to happen with most ISPs) then the filter won't work. OpenDNS has a client-side application you can run on your computer that auto-updates the IP address with OpenDNS, or you can take advantage of the built-in functions of DD-WRT to do the same thing. See below.

Dynamic DNS

In addition to updating my dynamic IP address with OpenDNS, I wanted to have a human usable domain name to see my webserver or SSH to my router whenever I'm away from the network. So I need a domain name and a dynamic DNS service to keep track of my IP address.

First I registered a domain name with DynDNS (it's free). DD-WRT has the ability to interface with DynDNS and auto-update my IP address with them directly, but I also needed to register my IP with OpenDNS. The router can't manage both at the same time.

That's where DNS-O-Matic comes in, an awesome service, also provided by OpenDNS, that can update your dynamic IP with several dynamic DNS providers. After setting up my DNS-O-Matic account to forward my IP to both OpenDNS and DynDNS, I just need to setup the router for the one service.

Following the instructions from DNS-O-Matic:

Setup - DDNS
DDNS Service - Custom
DYNDNS Server - updates.dnsomatic.com
Username - (enter username)
Password - (enter password)
Hostname - all.dnsomatic.com
URL - /nic/update?
Force Update Interval - 10 (default)

Conclusion

DD-WRT has so much more functionality that I'm not using. It's a very interesting and exciting platform to play around with.

Sunday, March 22, 2009

Setting Up Shop

I received Setting Up Shop by Sandor Nagyszalanczy as a gift from my parents recently. I've been wanting to do a complete overhaul of my garage workshop since we moved here, but just never got to it. So I decided recently that this was the year I was going to try to make it happen. Since I'm only in the "dreaming" stage of the project right now, this was a very timely gift.

It's a great book for anyone in the planning stages of a workshop or just trying to get the best use out of an existing shop. Don't expect to find detailed plans and layouts though. It keeps ideas and plans general to be flexible to everyone's needs, budget, and workspace. It also covers pretty much every aspect of workshop design. While it's geared more toward a woodshop, many of the concepts could be applied to any kind of shop.

It has chapters on where to build a shop, construction, electrical, heating, equipment, layout, work areas, storage, dust collection, and safety. Each chapter is full of a variety of pictures that give great ideas on shop organization and construction for any shop, small or large. It covers everything from space saving tips for those working in a one-car garage to central dust collection for large pro shops. There are even charts for helping size equipment or design circuits.

I thought I knew enough from my own experience to take on this workshop redo without a problem, and I probably would have been okay. But this book has really helped fill in a few gaps and got me thinking about other ways of doing things that will really help me to make my future workshop even better. Thanks Mom & Dad!

Monday, March 16, 2009

Streaming Webcam Tinkering

Last Friday a friend showed me his chicken-cam. He got a wireless IP webcam and mounted it looking down into his chicken coop (currently just baby chicks in an indoor cage). That got me thinking (and something to do over the weekend). I had an unused PC sitting around that already had Ubuntu installed on it, and an old but decent webcam that I hardly use. I figured it wouldn't be too hard to put them both together and get some streaming video up and running. We've got some cockatiels sitting on some eggs right now. I could mount the camera there.

I had to make a trip into Portland on Saturday for a coin show (for David's coin collecting merit badge) and I was right next to Free Geek so I made a stop there to visit the thrift store. I picked up a couple USB webcams ($3 each) so I could use those instead of the better one I already have. These will be going into or on a bird cage and I'm not sure how well I'll be able to protect them...if you know what I mean. (I also picked up a 250GB drive for my Windows server for just $35, but that's not related.)

Stage 1: Getting the camera working in Ubuntu

Piece of cake. I plugged it in to the USB port. Done. Well, I actually did install some software just to make sure it worked.
   sudo apt-get install camorama

Camorama is just a simple webcam viewer. That's really all it does.

Stage 2: Install a webserver
   sudo apt-get install apache2 php5

I don't really have need of the PHP right now. I'm just slapping together some HTML pages to get things going. So, webserver...done.

Stage 3: Install Motion

Motion is a webcam application for linux that turns a simple webcam into a motion activated security camera. When it detects motion it will save still images and video to the hard drive for later viewing. It can be setup to take intermittent still shots. It will do timelapse videos. It even has a built in webserver for streaming video. Installing this was also a piece of cake in Ubuntu. I guess it's popular enough that it's available in the Ubuntu repositories.
   sudo apt-get install motion

Some minor modifications to the configuration files was needed. (Config files located in /etc/motion) The following changes were made, everything else was left as default. Explanations of each setting are giving in the config file. I set it up to run with 2 webcams.

motion.conf
   daemon on
framerate 2
max_mpeg_time 600
output_normal best
output_motion off
ffmpeg_cap_new on
ffmpeg_timelapse 60
ffmpeg_video_codec msmpeg4
snapshot_interval 60
target_dir /var/www/motion
webcam_port 8081
webcam_localhost off
control_port 8080
thread /etc/motion/thread1.conf
thread /etc/motion/thread2.conf

thread1.conf
   videodevice /dev/video0
text_left CAMERA 1
target_dir /var/www/motion/cam1
webcam_port 8081

thread2.conf
   videodevice /dev/video1
text_left CAMERA 2
target_dir /var/www/motion/cam2
webcam_port 8082

Running motion:

sudo motion -n

The -n option forces it into non-daemon mode (where it doesn't release the console so I can turn if off easier). I'll set it up to run automatically in the background once I get it setup exactly where I want it.

At this point I just started goofing around with it and having fun playing with the motion capture portion. Basically acting like a 13-year-old with some "spy" toys.

Once everybody was sick of me and I had had my fun it was time to move on to...

Stage 4: Get it streaming

The harder part.

It took some scouring of the web and looking at the code behind some example web pages to get this going. But with a little trial and error things worked out with less effort than I thought it was going to take.

I actually did get it streaming right away after installing Motion. But it didn't work quite right on Firefox (my browser of choice) and it wasn't embedded into a webpage the way I wanted it to. There was also no way it was going to be accessible outside my network without poking a bunch of holes in my firewall. No thanks. So I had to find another way. Other people were doing it. I figured it couldn't be all that hard.

Stage 4a: Installing a Java applet to make a clean and embedded stream.

The creator of Motion recommended Cambozola. I was thrown off by the install. It just involved a simple "move this directory to where you want it." Not what I was expecting, but it worked. I moved the whole thing to my /var/www directory.

The following code gets a nice looking stream onto a web page.

<applet code=com.charliemouse.cambozola.Viewer
archive=/cambozola-0.70/dist/cambozola6.jar
width=325 height=245
style="border-width:1 border-color:gray; border-style:solid;">
<param name="url" value="127.0.0.1:8081">
</applet>

Stage 4b: Get it working outside the network

The problem with the above code is that end value "127.0.0.1:8081". Any computer that is not the computer running Motion won't find anything at that address. I could change the address to the IP of the computer running Motion but then it only works inside my network. If I want to see the stream from anywhere outside my network I had to find another way.

Fortunately, the creator of Motion also made a nice little app that proxies the Motion webserver. MjpegProxyGrab. This install was very easy. Just follow the instructions on that page.

One mistake I made was not knowing where my cgi-bin was. I thought I could just make a cgi-bin in the /var/www directory. But when I tried viewing the web page I just got an error that the application couldn't be found. I dug through the server error log (/var/log/apache2/error.log) and found that it was looking in the wrong place. Instead of trying to redirect everything to the cgi-bin that I put in the wrong place I just moved the apps to the right bin in /usr/lib/cgi-bin. After that things were working perfectly. Use the new code to embed in a web page.

<applet code=com.charliemouse.cambozola.Viewer
archive=/cambozola-0.70/dist/cambozola6.jar
width=325 height=245
style="border-width:1 border-color:gray; border-style:solid;">
<param name="url" value="/cgi-bin/nph-mjprox?1">
</applet>

I do still need to figure out how to get the digital certificate warning to go away though.

Stage 5: Locate cameras and begin streaming

Actually, this stage is yet to come. I don't want to make too many changes to the nest right now while the birds are still tending the eggs. We don't want them to panic and abandon them. So I'm going to do this part later. Maybe after the eggs hatch. Meanwhile, I've got to find some other use for this new toy. Maybe we'll also do a butterfly-cam soon.

I also verified that the cameras can see infrared (I just pointed a TV remote control at the camera and could see the light emitted by the IR LEDs), so I plan to make a ring of IR LEDs to go around the lenses of the cameras for night viewing inside the bird nest. I just need to verify that cockatiels don't see infrared so they won't be disturbed by it.

Saturday, February 21, 2009

Arcade Tinkering

Technical content ahead. This is going to be one of those super geeky posts where most people may not follow. Remember, I'm documenting my projects in case I need to revisit them in the future and do things over again or figure out how I did it in the first place. Or maybe someone out there is going through the same thing and is doing research of their own. This post is also very long. You have been warned.


A couple of years ago I built an arcade cabinet. It was a very fun project. I had been researching everything I wanted to build into it for a few years before I began. I was just waiting for the day when I had both the money and the time to build it. It took a little while to complete mainly due to weather (you can't laminate below 60 degrees) but I finally completed it and we've been having lots of fun with it.

Or was it complete? In order to simplify the first install and get things running to thoroughly test the hardware, I installed Windows XP on it and was running Mame32 for arcade emulation. But I was really never happy with that setup. It worked okay. No problems with game play or emulation. But I hated having Windows on it. Now, I'm not anti-Microsoft at all. But the computer I installed in the arcade is older hardware and Windows XP is a bit of a hog. It also requires quite a bit of maintenance just to keep it virus free. And since I've got it hooked up to my network, for security's sake it needs constant updates. Startup times are very poor. From zero to ready-to-play takes 7 minutes, 40 seconds. And that's if there are no updates to apply. It really takes the fun out of playing a quick game of Galaga when you have to turn it on and walk away for 10 minutes waiting for the dinosaur to wake.

Ever since day 1 I've been wanting to use Linux instead. So a few weeks ago I finally decided to just go for it. And this redo took quite a bit of tinkering indeed. Lots of trial and almost an equal amount of error. But after much CD burning, Googling, head scratching, and hacking away I have got it working in much better condition.

(I didn't want to completely lose my Windows install in case things didn't work out with Linux and I wanted to go back to the original setup, so I just swapped hard drives with a spare I had laying around. The old one is standing by if things go wrong.)

Problem #1: Which Linux distribution do I want to use?

One of the great (and sometimes confusing) things about Linux is the availability of a variety of distributions (or distros). Each one is unique in their own way and ultimately caters to a different audience. I've used Ubuntu and Debian before and really like them (Ubuntu is built off Debian). So both of those were a definite option I wanted to try out. I also wanted to give Lincade a try. It's a Linux distro (built off Gentoo) built specifically for arcade emulation, with support for the unique type of arcade hardware I had installed in my cabinet.

Linux pros: Stable. Secure, unlikely to get viruses or other malicious software. Very customizable. Runs great on older hardware without much overhead (faster boot times).

Linux cons: Harder to use than Windows.

When it comes to desktop computing, Linux has come a long way. Distros like Ubuntu and Debian are very easy to install and very easy to use for your regular desktop use. But for non-regular use it's not a simple plug-and-play solution.

One of the big roadblocks I could see ahead of me was the fact that I was using non-standard hardware in my cabinet. Non-standard for a computer desktop that is. I have a monitor built specifically for arcade use. Many arcade games use low resolution graphics and slow scan rates that regular computer monitors cause to appear fuzzy. I wanted sharp, accurate reproduction of the games. Since Windows is a more popular platform there were utilities available for such monitors. But there wasn't anything to my knowledge for Linux.

Since Lincade is supposed to have been built specifically for uses such as mine I was hoping it would be the solution I was looking for.

Problem #2: Faulty USB hub.

While trying to install Lincade I was getting the following error.

hub 1-0:1.0: connect-debounce failed, port 1 disabled


After unplugging the USB hub (a necessary component to use the arcade control panel, trackball, and spinner) I was finally able to complete the installation. I wasn't sure if it was really a USB error or just something wrong with Lincade. So I gave Xubuntu (a variation of Ubuntu) a try.

Xubuntu installed without error, but it wasn't recognizing the trackball (my only current option for a mouse). That's no good. Time to try Debian.

Debian installed perfectly too, but also wasn't recognizing the trackball.

This time I swapped out the USB hub for another I had around and reinstalled Xubuntu. Installed fine, I had a working trackball. Must have been something weird about that hub. Windows doesn't seem to have a problem with it (as I'm using it now with my main office computer running Windows), but Linux just doesn't seem to like it.

During the troubleshooting of the USB hub I tried flashing the computer BIOS thinking that might solve the problem and during that process I discovered...

Problem #3: Dead floppy drive

Or it might be a dead floppy drive cable...or both. Xubuntu had given me the following (occasional) error during install:

Buffer I/O error on device fd0, logical block 0
End request: I/O error, dev fd0, sector 0


In Linux, "dev fd0" is the floppy drive ("device floppy drive zero"). So once I had flashed the BIOS (by temporarily putting in a floppy drive from another computer) I didn't need it anymore and just unplugged it and disabled it in the BIOS.

No more error.

I decided to give Lincade another try and reinstalled it. Unfortunately it doesn't have the slick graphical interface that Ubuntu and Debian have which makes it harder to use. Also, it requires you to boot into a "PC-mode" in order to setup certain options. The PC-mode doesn't display on my main arcade monitor though and requires me to setup a secondary monitor. That's a big pain. So, thinking I'm just going to completely give up on what I thought would be my best option...I set Lincade aside and went back to Xubuntu.

Problem #4: It's a pain in the %#$ to install a MAME emulator in Linux!

I could not for the life of me get this thing working. I did successfully install XMAME and sort of got it working from a command line. But it's no fun having to type "xmame galaga" or "xmame tmnt" or "xmame pacman" every time I (or the kids) want to play a game. That's no easy-to-use option. And the graphics weren't right either. There are frontends available to use so I tried installing WahCade. There's a deb file available for that which I downloaded and tried installing. But for some reason it didn't install all the dependencies. It wasn't until after I installed a totally seperate mp3 player (Rhythmbox...love it) that the dependencies for WahCade got installed.

(Quick Linux for newbies Lesson #1: There's no such thing as a simple "installer" in Linux like there is in Windows...at least not exactly the same thing. You can't just download an executable, run it, and have everything magically install. Sometimes you have to download the source code and compile it. Which wouldn't really be all that bad if the source code doesn't depend on other packages to be installed...which it usually does. Then it's a huge pain trying to track down all the missing packages and compile and install those...and in the proper order...while standing on your head, crossing your eyes, and holding incense in your toes. Fortunately, Debian (and Ubuntu as well) has a package manager called Aptitude that can make installing common packages a breeze. You do have to know the name of the package though, and that's where Google really comes in handy. Just type in the command line (as root):

apt-get install rhythmbox


and you've just installed a fully functioning iTunes clone. Very easy. There are also "deb" files available for Debian and Ubuntu that almost behave like simple installers and are supposed to eliminate the need to satisfy dependencies. Some other Linux distros have their own package managers as well.)


Once I satisfied the WahCade dependencies it seemed to work a little, but I couldn't get it to behave properly for my arcade monitor. Xubuntu wanted to ignore the xorg.conf file and for some reason in Debian the image just squished down.

(Quick Linux for newbies Lesson #2: The graphical display environment in Linux (called "X") is handled by the X server. An important file for configuring the X server is the xorg.conf file located in the /etc/X11 directory. This handles things like the graphics driver, the monitor resolutions available, etc. I really only understand enough to get me in trouble...and sometimes get myself out of trouble.)

I tried to also install AdvanceMame with the AdvanceMenu frontend. That was completely useless. There was no deb file available for that and I couldn't satisfy the dependencies to get it to compile correctly. Too many vague requirements for framebuffer support or SDL libraries. The installation documentation was completely useless. It was a bigger pain than WahCade.

By this point I had spent a good 3 days on the project and had installed Lincade 3 times, Xubuntu 3 or 4 times (I lost count), and Debian something like 5 or 6 (hundred?) times. I was beginning to get fed up and was almost ready to throw in the towel. But that's not me, and I decided to give it a day's rest and see if I can't come to some solution after separating myself from the problem and giving it more thought (see Tinkering Tip #1).

While I was "not thinking about it" I came upon the realization that even though Lincade was lacking the main feature that I was trying to get out of Ubuntu and Debian (an easy to use GUI) I figured that since it can easily handle the hardest parts (installing the correct monitor support and emulation software) I could probably just work around the rest and get it all worked out. It turns out that this was ultimately the easiest solution.

With the previous hardware issues already worked out I forged ahead with one more Lincade install. Everything installed fine. It turns out the PC-mode may not be so bad afterall as I only need to use it for the first time configuration. Everything after that I can modify in Cabinet-mode without having to use a secondary PC monitor.

PC-mode has the option to copy ROMS from a CD or a USB stick. I didn't want to waste burning a CD (and all my ROMS wouldn't fit on one CD anyway), so I just copied them to a USB stick I had. I don't like this option much just because it takes so long. The USB port on this computer is 1.1 so it's slow. And I also don't like that the games are automatically copied to the /usr/share/games/advance/roms directory. I wanted them to go into the /home/mame/.advance/roms directory instead.

I have a NAS on my network running Linux and sharing folders with NFS. I already had all my ROMS on the NAS in a shared directory, so instead of using a USB stick or CD to copy files I figured I'd just do it over the network.

First I had to install NFS support in Lincade. (Gentoo has a package manager called Portage. The command to run is "emerge.")

emerge –av nfs-utils


Then mount the NFS directory. ("pippin" is the name of my NAS.)

mount –t nfs pippin:/home /mnt/nfs/pippin/home


Put a line in the /etc/fstab file for auto mounting on boot.

pippin:/home /mnt/nfs/pippin/home nfs rw,sync 0 0


Now I could copy all the files I needed from one folder to another over the network. Much faster and easier to use later on when there are more to add.

But even though I didn't like PC-mode's ROM loading utility, everything else is really nice. The monitor resolution tool is awesome, automatically loading all the modelines you need in xorg.conf. The sound card setup works perfectly. All other setup in PC-mode was a breeze.

Finally things were all setup and I could run the emulator. It comes with AdvanceMame and AdvanceMenu, as well as MESS and DAPHNE. I primarily use MAME and haven't quite found a use for MESS or DAPHNE yet. And the AdvanceMame and Menu work great...once I got the resolutions figured out.

In xorg.conf I had to set the default resolution to 640x480. It first defaults to 480x480 which doesn't work out to any usable resolution so it defaults to some other higher resolution that causes my arcade monitor to flicker and look really bad. After much trial and error I found 640x480 to be the perfect resolution for my setup. Then if the games aren't displayed in the correct size I can change their individual settings within the game menu.

Press Tab to open the menu -> Move down to VIDEO -> change resize to "fractional"

Now the games play in the proper resolution, frame and scan rates, and have the correct size and proportion.

But there were more issues to be fixed still.

Problem #5: Slow trackball movement

The trackball was moving very slowly. This made games like Centipede completely unplayable. At first I thought it was more USB hardware going wonky on me, but it turned out to be an easy fix. In the BIOS I had to enable legacy USB support. I'm not entirely sure why that made a difference but I tried it on a hunch and it worked.

Problem #6: The spinner wasn't working

Well, actually it worked, but not in the games. I verified that it works because just before the AdvanceMenu comes up there's an "X" cursor that I could indeed move with both the trackball and the spinner. The spinner made it move vertically, just like in Windows. It turns out that AdvanceMame wants it to move horizontally for games that use the spinner. I couldn't figure out any way to switch the Y-axis to the X-axis in the software. But after much more Googling I learned that there's a jumper on the spinner that switches the axis.

So I opened up the control panel (good thing I made this relatively easy to do) and sure enough there's a jumper with one side marked "H" and the other side marked...we'll I actually don't know because I couldn't read it, but I'm going to assume it was marked with a "V" and that's the side that had the jumper. So I moved it to the "H" side and started the computer back up again. And, the spinner works now.

While I was doing some digging around in the documentation directories installed by the Lincade CD I found that some of the documents are HTML formated. So I figured it would be a really easy thing to just install Apache and make this thing into a webserver so I can more easily read the documentation. I've already got SSH running on it (it comes that way "out of the box"). Why not take it one step further?

emerge -av apache
/etc/init.d/apache2 start
rc-update add apache2 default


Problem #7: The font size in AdvanceMenu was too small to read

This was easily fixed (although difficult to figure out) by adding a line to the advmenu.rc file.

ui_fontsize 30


The number indicates how many rows of text to use for the font. The smaller the number, the bigger the font. I found 30 rows to be just right on my 27" monitor at 640x480.

Even though it's now playable and works great I'm sure I'm still not done with it. This is going to be one of those on-going projects that I return to again and again to make a few tweaks and changes now and then. For example, I'd like to make a few personalized modifications to the AdvanceMenu front end.

Since I had several hardware issues during these changes I'm a little worried about the longevity of this computer. I'd like to change it out sometime soon. I don't need a high-end model since it's only running really old arcade games. I just need a computer that can last longer. Also, the special Arcade VGA graphics card I have installed requires an AGP port, which isn't a standard option on newer computers. Ideally the computer I replace it with will also be silent (so I don't hear fans running inside the cabinet) and maybe use a solid-state drive for even faster boot times.

Conclusion

It took a lot of work and a great deal of frustration (which I actually enjoy on projects like this). I learned a lot more through the process and got things working even smoother. I'm pretty sure that when the computer is replaced that I can do the reinstall even easier and faster than this one took.

The new boot time, from zero to ready-to-play has been reduced to 1 minute, 32 seconds. (And that includes a built-in 5 second delay in the Grub menu.) It's not "instant on" but it's pretty good. A faster hard drive will improve that as well.

Relevant Hardware Specs

Betson Monitor 44-4070-RT
Arcade VGA
Tornado Spinner (USB)
Trackball
Opti-Pac (USB)
I-Pac (USB)

Most Helpful Online Resources

http://www.pc2jamma.org/
http://advancemame.sourceforge.net/doc-advmenu.html
http://en.gentoo-wiki.com/wiki/NFS/Client
http://beans.seartipy.com/2006/04/18/apache-php-mysql-on-gentoo/