Archive for the ‘scripting’ Category

Perl - Text::Diff

Friday, March 14th, 2008

As I stated in my About page I am not a programmer by trade but I can and do code when the need arises. One of my favorite languages to code in is Perl as it provides a ton of functionality thanks to CPAN, is platform-indepandant, and at times very natural and easy going for most tasks I need to accomplish. The thing about Perl though is its Perl and it can be very intimidating at times. Luckily what I needed to do earlier today was not one of those times. Theres always something new to discover using Perl and I’m always glad when I find something new in Perl that is useful or any other language for that matter and today I came across a module that I had never used before so I’d figured I’d share even though it may be a household module for the hardcore perl monks out there.

So my problem was I needed to diff two files and determine if they were identical in order to apply logic based on the output of the diff. Now I do this all the time on the command line using the GNU diff utility but I needed its functionality within Perl. At first I was thinking I could execute a system or exec function but I figured there has to be a better way right? This is Perl after all surely this functionality is available. Well it wasn’t hard to find Text::Diff with a simple search and and after a few minutes of reading the documentation it is exactly what I needed. First things first though. I need to install the module first either via CPAN or my package manager.

Installing on OpenBSD via pkg manager was a snap as long as you have exported the PKG_PATH first.

#export PKG_PATH="ftp://ftp.openbsd.org/pub/OpenBSD/pub/4.2/packages/i386/"
#pkg_add -v p5-Text-Diff

If your on Debian it should be as simple as
#apt-get install libtext-diff-perl

…or from the CPAN shell

cpan>install Text::Diff

With that installed now I just needed the code in my script…

use Text::Diff

my $diff = diff "file1.txt", "file2.txt", { STYLE => "Context" };

if($diff) {
#files are different
...
}
else{
# files are the same.
...
}

…and there it is. I will be sharing the script where I needed this functionality in the near future as part of a feature article I plan to write once my project is near completion. I hope someone may find this to be useful in the meantime.

Xen - Disk based Dom-U Cloning

Thursday, February 28th, 2008

Heres a quick little script for automating the creation of Dom-U’s and there corresponding configuration files. Nothing to fancy, but it helps for users who may be unfamiliar with the process or just need to fire up a new Dom-U quickly without going thru an installation process.

This script assumes that when you first build a Dom-U either by d’bootstrapping or windows installation or whatever it may be, you shut the Dom-U down and move the “template” to /home/xen/templates and that your running Dom-U’s are running from /home/xen/domains . Lastly make sure the template configuration file has the <> strings so sed can replace them with your intended variables. This can be extended as you see fit, if you need to change values for networking, kernel, etc… Happy cloning.

./clone.sh

#!/bin/bash

function syntax {
           echo "Syntax: ./clone.sh source_image destination_image memory(mb)"
           echo " where source_image is the name of the directory in this folder                                                              "
           echo "  destination_image is the name of your new DomU "
           echo "  and memory(mb) is the ammount of memory you want to provision                                                              ."
           echo ""
           echo "Example: ./clone.sh debian_etch_x86 v-debian-etch-x 512"
           echo "Example: ./clone.sh winxp_pro_x86 v-winxp-pro-x 512"
}

if [ $1 ]; then
        if [ $2 ]; then
                if [ $3 ]; then
                        echo "Cloning Template $1 to DomU $2 with $3 MB of memor                                                              y."

                        echo "Copyig Disk Images... This will take a few minutes                                                              ..."
                        cp -R /home/xen/templates/$1 /home/xen/domains/$2

                        echo "Creating Configuration file."
                        sed 's/<domU>/'"$2"'/' /home/xen/templates/$1/$1.cfg > /                                                              home/xen/domains/$2/$2.cfg.tmp
                        sed 's/<domU-mem>/'"$3"'/' /home/xen/domains/$2/$2.cfg.t                                                              mp > /home/xen/domains/$2/$2.cfg
                        echo "Cleaning up temporary files..."
                        rm /home/xen/domains/$2/$2.cfg.tmp
                        rm /home/xen/domains/$2/$1.cfg
                        echo "All Done."
                else
                        syntax
                fi
        else
                syntax
        fi
else
        syntax
fi

./template.cfg

kernel = ‘/boot/vmlinuz-2.6.18-5-xen-vserver-amd64′
ramdisk = ‘/boot/initrd.img-2.6.18-5-xen-vserver-amd64′
memory = ‘<domU-mem>’
root = ‘/dev/sda1 ro’
disk = [ ‘file:/home/xen/domains/<domU>/disk.img,sda1,w’,
‘file:/home/xen/domains/<domU>/swap.img,sda2,w’ ]
name = ‘<domU>’
dhcp = ‘dhcp’
vif = [ ” ]
on_poweroff = ‘destroy’
on_reboot = ‘restart’
on_crash = ‘restart’