Wednesday, October 15, 2008

Migrating subversion repository

I have a small subversion repository on my old server. I want to migrate it to the fit-PC.

Looking at the relevant section of Version Control with Subversion, it looks like it should be easy. Just create a dumpfile on the old box and load it to a new repository on the new one.

So on the old box
$ svnadmin dump repos > dumpfile
and copy the dumpfile onto the new box.

Last time I setup subversion + apache for HTTP access. This time I'm going to try svn+ssh.

As usual, Ubuntu provides a good general reference.

Install subversion
$ sudo apt-get install subversion 
Setup a subversion user and group, add myself to the group
$ sudo addgroup svn
$ sudo useradd -g svn -m -p <pwd> svn
$ sudo usermod -a -G svn <my_user>
Create the repository and load the dumpfile
$ sudo su svn
$ cd /home/svn
$ svnadmin create repos
$ svnadmin load repos < dumpfile
I want svnserve process to start when the box boots, so I added this line to /etc/rc.local:
sudo -u svn svnserve -d -r /home/svn
I'll make a proper init.d script like this one later.

Restart the box

Verify I am a member of the svn group
$ groups
Verify that svnserve process started
$ ps -ef | grep svnserve
Verify I can read the repository locally
$ svn list svn://localhost/repos/<project>/trunk

Setup access to the repository from Eclipse on my laptop

(I already have the subclipse plugin installed).

File / Import
Checkout Projects from SVN
Create a new repository location
svn+ssh://<hostname>/home/svn/repos

That fails with an error dialog and this message on the console:
    The system cannot find the file specified. 
svn: Can't create tunnel: The system cannot find the file specified.

Back to Google... The answer is here.

The problem was that Eclipse was not configured with an SSH client. Quick fix for me was to switch the Eclipse / Team / SVN configuration from JavaHL (which requires external SSH client) to SVNKit (which includes one). Now it works.

Edit! Actually, not quite there yet...

On attempting to commit to the repository, I got error
svn: Commit failed (details follow):
svn: Can't create directory '/home/svn/repos/db/transactions/1-1.txn':
Permission denied
It turns out that svn+ssh does not connect to the svnserve daemon I started above, but rather creates a temporary svnserve process (on each invocation) as the ssh user. And in the setup above, the ssh user has read access to the repos, but not write access. (Just like if you use subversion + apache and don't make the repository writable by the www-data user).

Temporary workaround (to commit my current work) is to make the whole repository writable by my ssh user
$ cd /home/svn
$ sudo chown <sshuser>:<sshuser> -R repos
Now the commit succeeds.

Next task is to read the relevant section of the Subversion manual more carefully. My original setup above will support working with the repository using svn://<host>/repos. I might just go with that for now.

Monday, October 13, 2008

Installing SqueezeCenter

Running SqueezeCenter to feed the Squeezebox music player is my old server's main duty. So it's first up for installation on my new fit-PC.

Edit /etc/apt/sources.list to add
deb http://debian.slimdevices.com stable main

$ sudo apt-get update
$ sudo apt-get install squeezecenter
The web interface is not available from my laptop until I restart the box (something to do with apparmor?). On restart, I can access the web interface fine.

SqueezeCenter installs mysql (unless you have it already) and SqueezeCenter then runs its own mysql instance, in addition to the default one. I don't want two mysql instances running on my little server, so I'll disable the default one for now:
$ cd /etc/rc2.d
$ cat README
$ sudo mv S18mysql-ndb K82mysql-ndb
$ sudo mv S19mysql K81mysql
$ sudo mv S17mysql-ndb-mgm K83mysql-ndb-mgm
Alternative would be to get squeezecenter to use the default mysql instance instead, and disable the dedicated squeezecenter one. Supposed to be possible. I'll try that whenever I end up with some other application which needs mysql.

Sunday, October 12, 2008

Initial setup

The first thing I want to do is get rid of the monitor and keyboard, so

$ sudo apt-get install openssh-server
$ sudo apt-get install screen

(Screen is great. I use it whenever I need to kick off some long-duration command. It means I can close the laptop, dropping my ssh session, but still reconnect to the console running the command whenever I want to.)

Edit /etc/network/interfaces to change from DHCP to static IP address, which is covered well here.

Serial console

I never tried this before...

I ordered the serial cable with my fit-PC and got a €3 generic USB RS-232 adapter cable from this store on ebay.

The instructions on the fit-PC wiki were great. On the other side, all I had to do was check which COM port the USB adapter was on using Windows device manager, and then create a serial PuTTY session using the same configuration.

With this setup, I get GRUB and kernel output to, and login from, the serial console. This is a real bonus compared to my old PC server.

I'd really like to be able to configure the fit-PC BIOS over the serial connection as well, but it sounds like that might be a bit more difficult.

Anyway, BIOS configuration changes aside, I can ditch the keyboard and monitor now. My fit-PC is ready to be a headless server.

Saturday, October 11, 2008

Ubuntu USB stick install, part 2

I finally got a successful install. But it took several attempts and a lot of Google.

First attempt

In the fit-PC BIOS setup, I set Drive C: Nand Flash but neglected to set Drive D: IDE. So when the installer got round to the partitioning stage it could only see the USB stick, not the hard disk. Hit reset button and start again...

Second attempt

I didn't create a separate ext3 /boot partition, just XFS root and /home partitions. Apparently installing GRUB on an XFS partition is not a good thing. Near the end of the install, the installer offers to install LILO for me. Now I dimly remembered going through LILO versus GRUB before and preferring GRUB, so I try to install GRUB anyway. The installer warns me that this is a bad idea. When I ignore that this makes a fatal error in the install which then hangs. Grit teeth, hit reset button and start again...

Third and fourth attempts

I created a separate ext3 /boot partition to stay sweet with GRUB. So I now have
#1 primary 100MB ext3 /boot
#1 primary 4GB XFS /
#5 logical 246GB XFS /home
Now the install completed successfully each time. But it all ended in tears when I tried to reboot the fit-PC. Each time, it immediately dropped to a debugger interface, saying Embedded BIOS Debugger Breakpoint Trap and refused to do anything else. Weep, hit the sack and try again in the morning...

I noticed that after each install attempt, I could no longer boot from the USB stick. It gave GRUB Error 21. I could fix the stick by reconnecting it to my old Linux box and doing install-mbr /dev/sdb. But why?

I finally guessed that the Ubuntu installer must be installing GRUB to the MBR of my USB stick, instead of the hard disk in my fit-PC where I needed it. Armed with that hunch, Google finally gave me some answers, like this, this and this.

Fifth attempt

I let the Ubuntu installer run to the very end, where it tells you to reboot. At that point, I opened a console and took a look around.

I found (fdisk) that my hard disk partitions were mounted on /target. So I did
# chroot /target
# grub-install /dev/sdb
to install GRUB into the MBR of the hard disk. Then I went back to the installer's console and let it finish.

On restart I removed the USB stick, hit DEL to enter the BIOS setup, reverted to Drive C: IDE and saved to reboot.

On first attempt GRUB started (phew) but said
Error 21: Selected disk does not exist
Press any key to continue...
So I did. Then GRUB gives the menu list of image it can boot and allows you to edit and boot them. I edited the entry for the first image. It's first line was root (hd1,0). I edited that to root (hd0,0) and the hit 'b' to boot. The system booted at last.

Once in, I took a look at /boot/grub/menu.list. All three had root (hd1,0).

I rebooted to confirm that GRUB would fail again with same error.
It did. I fixed as before. Once back in, I edited /boot/grub/menu.list to change all the hd1 to hd0 and rebooted again.

At last, the system boots successfully. Now I can get on with the more interesting stuff.

Friday, October 10, 2008

fit-PC BIOS notes

Once you have a bootable device attached to fit-PC, you enter the BIOS by holding down DEL key after resetting the box.

To reset the BIOS to factory defaults, hit down arrow 8 times, then hit enter. You never know when that might come in handy.

There's a "print out" of the BIOS menus here on the fit-PC wiki.

Ubuntu USB stick install on fit-PC, part 1

Hard disk installed. Bootable USB stick ready. Here we go...

Following the advice on the fit-PC forum I made the following BIOS settings:
Drive C: Nand Flash | Boot 1st
Drive D: IDE
It booted to the installer from the USB stick. I chose the cli boot option and set it off.

So that's the USB stick part over then, I thought. Just a normal install from here. (Wrong! See part 2 for the gory details.)

The installer's first big question is partitioning. I went with
#1 primary   4GB XFS /
#5 logical 246GB XFS /home
No swap. I can add it later if I need it.

I'm giving XFS a try this time because I might end up storing some ISO files on this disk. It's supposed to be a good file system for large files.

Thursday, October 9, 2008

Preparing to install from a USB stick

Since I ordered the diskless version of fit-PC, I need to add a hard disk and an operating system.

For the hard disk (2.5" IDE), I ordered a 250GB Western Digital Scorpio.

While I waited for the disk to arrive, I got ready to install the OS.

I'll stick with Ubuntu. I don't have a USB CD drive, so I'll try to install it from a USB memory stick. I followed the instructions here to make put a bootable installer on to my USB stick. The warnings about checking the correct device name are important! AFAIK the only way to be sure is to mount and list the device. Mine was /dev/sdb1.

I want a minimal server installation, so I just copied the netboot image and left it at that. I'll pull the packages I need from the network as I need them.

I initially tried
$ sudo zcat boot.img.gz > /dev/sdb1
but that was giving permission errors. So instead
$ sudo su
# zcat boot.img.gz > /dev/sdb1
did the job. I tried booting my laptop from the USB stick, but it said it was not a bootable device, so I followed the instructions on that same page to install an MBR.

I tried again to boot my laptop. This time it booted to a prompt
MBR FA:
Ummm... Back to Google. I found the answer here - first enter "a", then "1" and it launched the text-based installer. Good. Hopefully it'll do the same on the fit-PC.

Wednesday, October 8, 2008

I ordered a fit-PC

I ordered a mini PC to replace my old Linux server.

Ever since I got a Squeezebox network music player a couple of years ago, I've been running a vintage Pentium III desktop PC as a music server. It's currently running the Ubuntu OS (8.04 Server Edition) and is hosting
I also use it to transcode my music files from FLAC to MP3, which it does... slowly but surely.

It's been fine, but is a bit big, noisy and wasteful. So I've been looking for something small, quiet and energy efficient to replace it.

fit-PC SlimI settled on the new fit-PC Slim - a tiny, fanless PC with a 500MHz processor, 512MB RAM and 4-6W power consumption. It should be a drop in replacement for the old box, I hope, with a bit of room to spare.

The stock version comes with a smallish 60GB hard disk, so I ordered the diskless version and will get a bigger disk separately.

I asked them to ship me a cable for the mini RS-232 port, so I can try using the serial console. Which might be fun.