Burger At The Mash Tun March 20, 2009
Posted by idimmu in food.For lunch today we all decided to go to the Mash Tun pub. I argued blind that they didn't do any food, but it turns out, fortunately, that they did!

I had a most fantastic burger, which was almost the size of my pint glass. The patty was really nicely flavoured, with onions and green bits and all sorts, and not over blown with pepper, which seems to be the norm nowadays. The chips were also really good, a lot of places seem to be mimicking the style of Heston's Thrice Cooked Chips!

My friends opted for the Wild Bore Sausage and Mash, which looked and smelled phenomenal.
I would definitely go back again, my only criticism was the waiting time, and lack of out door seats, but you can't win 'em all!!!
Resize LVM ReiserFS Partition March 13, 2009
Posted by idimmu in linux.Mucking about with LVM and partitions isn't really taxing, it's all well documented. Trusting it however is a different matter. I've resized loads of Ext3 LVM partitions in the past, but was asked to resize a ReiserFS one today, which made me ask the question:
"Is there anything writing to it currently, as I will have to unmount it first .."
Wrong assumption, or so says the guy sat next to me! ReiserFS can be dynamically resized on the fly! Woohoo says I, lets have a look at the resize_reiserfs man page!
DESCRIPTION
The resize_reiserfs tool resizes an unmounted reiserfs file system.
"Are you sure?" I ask .. "Yes", he promises!
anise:~# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg00-lv_slot_bbocp
10G 6.0G 4.1G 60% /opt/sem/slot/bbocp
anise:~# lvdisplay /dev/vg00/lv_slot_bbocp
--- Logical volume ---
LV Name /dev/vg00/lv_slot_bbocp
VG Name vg00
LV UUID P9nb4N-ED0Q-jSWh-xLbs-zP72-5QXL-DbyHiM
LV Write Access read/write
LV Status available
# open 2
LV Size 10.00 GB
Current LE 2560
Segments 1
Allocation inherit
Read ahead sectors 0
Block device 253:11
anise:~# vgdisplay vg00
--- Volume group ---
VG Name vg00
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 35
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 13
Open LV 12
Max PV 0
Cur PV 1
Act PV 1
VG Size 219.83 GB
PE Size 4.00 MB
Total PE 56276
Alloc PE / Size 53762 / 210.01 GB
Free PE / Size 2514 / 9.82 GB
VG UUID HDU1Dc-5i7l-wyGE-cEdM-YpdG-kskb-nw0JWm
There is 9GB of free space in the volume group, and our partition wants to grow by 5GB so thats Ok! Lets do this!
anise:~# lvextend -L+5G /dev/vg00/lv_slot_bbocp
Extending logical volume lv_slot_bbocp to 15.00 GB
Logical volume lv_slot_bbocp successfully resized
anise:~# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg00-lv_slot_bbocp
10G 6.0G 4.1G 60% /opt/sem/slot/bbocp
No change yet though! Lets do the resize, with it still mounted!!
anise:~# resize_reiserfs -f /dev/vg00/lv_slot_bbocp
resize_reiserfs 3.6.19 (2003 www.namesys.com)
resize_reiserfs: On-line resizing finished successfully.
anise:~# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg00-lv_slot_bbocp
15G 6.0G 9.1G 40% /opt/sem/slot/bbocp
Woo hoo! We did it, well it's 15GB in size, and apparently all the data is still there and working and not corrupt. Rejoice. Someone really needs to update that man page!!!
Tomcat HelloWorld Servlet with Eclipse March 11, 2009
Posted by idimmu in linux, java.I'm really trying to get in to this whole Java web development frame of mind, as it's a bit of fun, a bit of a giggle, and it's massive in this area of the world! So obviously my first port of call was dusting off Eclipse and kicking out a HelloWorld style Java servlet!

I grabbed a copy of O'Rielly's Java Servlet Programming to get started and found it really invaluable, and definitely recommend this book to anyone starting out in Java servlet programming.
Eclipse on Ubuntu, even Intrepid is well old, so rather than work with the out of date supplied package, I found it best to download the latest version direct from the site. Also the easiest way to hook Tomcat in to Eclipse is also to download that from the site.
Get the latest Eclipse IDE for Java EE Developers and Tomcat 6
Extract them both to somewhere reasonable, I like ~/local :
idimmu@boosh:~/local$ ls -al
total 173212
drwxr-xr-x 4 idimmu idimmu 4096 2009-03-11 15:01 .
drwxr-xr-x 63 idimmu idimmu 4096 2009-03-11 15:01 ..
drwxr-xr-x 9 idimmu idimmu 4096 2009-03-11 15:01 apache-tomcat-6.0.18
-rw-r--r-- 1 idimmu idimmu 6142197 2009-03-11 11:27 apache-tomcat-6.0.18.tar.gz
drwxr-sr-x 9 idimmu idimmu 4096 2009-02-23 19:36 eclipse
-rw-r--r-- 1 idimmu idimmu 171022452 2009-03-11 10:57 eclipse-jee-ganymede-SR2-linux-gtk.tar.gz
Start Eclipse! The first thing that Eclipse will do is ask you to create a new Workspace. Your home directory isn't a bad choice to put this!

Go to New->Project

Select 'Dynamic Web Project'

Set 'Project Name' to 'helloworld'

Create a 'New' 'Target Runtime'

Select 'Apache Tomcat v6.0'

Select the Tomcat Installation Directory you extracted Tomcat to earlier.

Then click 'Finish' to create the project.
Go to File->New->Servlet

Enter 'HelloWorld' as the 'Class name'
Click 'Finish'

A new 'HelloWorld.java' file will be created with most of the work done for you!

Look at all the shiny code the IDE has already written for you!
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class HelloWorld
*/
public class HelloWorld extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* Default constructor.
*/
public HelloWorld() {
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
}
}
This code does nothing on it's own, well, it will generate a completely empty web page if you build it and deploy it to Tomcat, not very exciting .. so ..
Import the following new class:
import java.io.PrintWriter;
Insert the following code in to the doGet function stub:
response.setContentType("text/html");
PrintWriter pw = response.getWriter();
pw.println("<html>");
pw.println("<head><title>Hello World</title></title>");
pw.println("<body>");
pw.println("<h1>Hello World</h1>");
pw.println("</body></html>");
The complete source code for the class will now look like this:
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class HelloWorld
*/
public class HelloWorld extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public HelloWorld() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter pw = response.getWriter();
pw.println("<html>");
pw.println("<head><title>Hello World</title></title>");
pw.println("<body>");
pw.println("<h1>Hello World</h1>");
pw.println("</body></html>");
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
}
}
'Save All' using Shift+Ctrl+S or the File menu.
Go to the 'Run' menu and select 'Run' or press Ctrl+F11 to build the servlet, deploy it to Tomcat and run it!

Make sure 'Tomcat v6.0 Server' is selected and click 'Always use this server when running this project' then click 'Finish'

Tada, Hello World! You might have to run it a few times to get Tomcat to sort itself out, as it's a bit wonky, but the very mundane site should now be available on http://localhost:8080/helloworld/HelloWorld!!
Nexus on Tomcat 5.5 on Ubuntu Hardy March 6, 2009
Posted by idimmu in linux, java.I'm trying out this Continuous Integration fun at the moment.
My end game is to get Hudson, Maven and Nexus working together to continuously build and run unit tests against code, which then gets turned in to Deb packages. A new Xen VM will then be created and configured using Puppet which the new Deb package is then deployed to. Finally Selenium will then be run to automate testing of the deployment.
Thats the plan anyway ..
I've been deploying everything on Ubuntu Hardy for the time being, and the latest app I am working on is Nexus. I'm deploying it as a War under Tomcat 5.5 and for a while was just getting the following error:
06-Mar-2009 20:29:08 org.apache.catalina.startup.HostConfig deployWAR
INFO: Deploying web application archive nexus.war
06-Mar-2009 20:29:12 org.apache.catalina.core.StandardContext start
SEVERE: Error listenerStart
06-Mar-2009 20:29:12 org.apache.catalina.core.StandardContext start
SEVERE: Context [/nexus] startup failed due to previous errors
I hate that error. It's rubbish. To make it a little more verbose I edited /var/lib/tomcat5.5/webapps/nexus/WEB-INF/log4j.properties and changed the rootLogger to DEBUG and fixed the appender path to go somewhere sensible (/var/log/tomcat55/nexus.log) and restarted Tomcat! This logged the following interesting error:
2009-03-06 20:42:01.066 ERROR [main:] - org.sonatype.nexus.configuration.application.source.ApplicationConfigurationSource:file:
******************************************************************************
* Could not create configuration file [ /usr/share/tomcat5.5/sonatype-work/nexus/conf/nexus.xml]!!!! *
* Nexus cannot start properly until the process has read+write permissions to this folder *
******************************************************************************
2009-03-06 20:42:01.091 ERROR [main:] - org.sonatype.nexus.Nexus:default: Could not start Nexus, bad IO exception!
java.io.FileNotFoundException: /usr/share/tomcat5.5/sonatype-work/nexus/conf/nexus.xml (No such file or directory)
Not exactly rocket science to se what is going on here!! And really easy to fix!
mkdir /usr/share/tomcat5.5/sonatype-work
chown tomcat55: /usr/share/tomcat5.5/sonatype-work
A quick restart of tomcat, after turning the logging back down to INFO and ta da! A working Nexus repo!
BGP: Building Reliable Networks with the BGP February 20, 2009
Posted by idimmu in reviews.
I recently had to learn BGP in order to fully understand what I was doing when migrating from our Linux based Zebra routers (crappy and unstable) to our nice shiny new Juniper routers.
We had a couple of books at work, but by far the best was BGP: Building Reliable Networks with the Border Gateway Protocol. It hasn't changed much since it was released in 2003, but neither has BGP so that really isn't an issue, and with the recent BGP issues that keep occuring, a good knowledge of it is pretty important to any network admins out there, especially those like me with their own AS numbers!
The book is full of real world examples and was all I needed to use in my migration.
The book is a bit of a bore to read though, it's not a comic, or a fun adventure book with a twist at the end. It's a solid information transmission system which will inject in to your brain how the many networks that make up the Internet actually talk to each other and how traffic flows between them, which is exactly what I wanted and why I give it a solid 8/10.
BGP: Building Reliable Networks with the Border Gateway Protocol is by Iljitsch van Beijnum and published by O'Reilly.



