Packaging Ruby Apps for Ubuntu: Dissecting an existing Ruby Ubuntu Package
One of the best ways to learn about how a Ubuntu package is put together is reverse engineer the package into it's constituent components. We are going to take a look at how to do this for the chef application and it's related libchef library is packaged as a Debian package.
* Visit the page http://packages.ubuntu.com/karmic/ruby/chef
* Under the Download chef section, download the package via the 'All' link into a directory called chef
* Visit the page http://packages.ubuntu.com/karmic/ruby/libchef-ruby1.8
* Under the Download libchef-ruby1.8 section, download the package via the 'All' link into a directory called libchef1.8
From the following guide (http://www.g-loaded.eu/2008/01/28/how-to-extract-rpm-or-deb-packages) you can learn how to 'unzip' a Debian package. This is easy as they are pure ar archives. Here's what we need to do
* In the chef directory, run the commands
ar vx chef_0.7.8-0ubuntu2_all.deb tar -zxvf data.tar.gz* In the libchef1.8 directory, run the commands
ar vx libchef-ruby_0.7.8-0ubuntu2_all.deb tar -zxvf data.tar.gzNow you can study the layout of the of the data payload of the package (this is where to look in order to study the anatomy of the application as it was being packaged). This layout is what will be of most interest to you.
If you have an application in a particular programming language that you wish to package, pick a similar application for which a package already exists and dissect it as shown above. Then bend your app into a similar shape in terms of directory layout before attempting to package it. To find out more about how to create your own Ubuntu packages check out this great video by Horst Jens Ubuntu: Making a .deb package out of a python program. It's worth the effort of watching it to the end!
Happy packaging!
Bringing Back the Spirit of the Amateur Programmer
In a blog post this month, Richard Dale (the man behind Qt/KDE's Smoke bindings) eloquently phrased a noble goal,
"In the 1980s there were lots of computer magazines that used to publish programming articles with BASIC code, that everyone could input and run on their own computers. However, in the 1990s such large scale end user computer programming pretty much died out - tweaking the odd web page isn't quite the same thing. One of the assumptions that the Free Software movement makes is that every user is also a programmer of some sort, who is able to tweak the software on their computers. I hope we can get back to that spirit, and change the way that people think about KDE programming, because at the moment there is a tendency to think it is hard and that only the 'C++ gods' like David Faure or Thiago Macieira can do it. In fact it is pretty easy to write small Python and Ruby apps and plasmoids, or to write a little script to message an app over DBus. We just need to get communities of like minded people together who write tutorials on TechBase, create blog entries with code (like the 1980s BASIC articles), and help beginners get started. These ubiquitous end user programming environments in Kubuntu (and other distributions I hope) will make it possible to do that."
This really sums up something that would be fantastic to see over the next few years. There's so many gadget lovers and technology geeks out there - the type of people who would've probably punched those BASIC tutorials into a Commodore 64, an Amstrad CPC464 or ZX Spectrum back in the good old days - that feel left behind as they perceive professional programmers to have blazed ahead a path that cannot be caught. But in many ways nothing could be further from the truth. For any programmer, there's always some guy or gal that's coding something more challenging or doing cleverer(er) stuff on the next machine. It's all relative. And since software turned into a mainstream industry over the last couple of decades, it's been the programmers doing the simplest tasks that have made the megabucks whilst the hardcore wizards of machine code and assembly have seen their demand dimish.
So next time you think there's no point in picking up a few programming skills give a language like Ruby or Python a shot. Hopefully, with the continuing progress of Kubuntu and other distro's to make programming more accessible, you'll have the perfect environment to do so!
VirtualBox and Running a Virtual Ubuntu Image within an Ubuntu Host
"What?" you say, "that's a lot of Ubuntu going on! Why would you want to do such a thing?" The answer - for testing applications, replicating environments or perhaps running a few servers on one box.
This guide should work pretty well for any Linux distro, though you may need to replace the aptitude commands with the package manager of your choice. Here we'll install a Hardy Heron guest inside an Intrepid Ibex host. Afterwards, we'll also use dselect with apt in order to clone the packages on a machine we wish to replicate onto our guest OS. Oh ho the fun! Here goes...
We'll start from scratch on your developer (host) machine with no prerequisites. Here are the steps
* Install the VirtualBox program
sudo aptitude install virtualbox
* Install 7zip, needed to extract downloaded image
sudo aptitude install p7zip
* Download Ubuntu 8.04 Hardy Heron iso image from http://virtualbox.wordpress.com/images/ubuntu/
* Make a new folder called my_temp
Move the downloaded file into my_temp
cd into my_temp
* Extract image
p7zip -d downloaded_imagefile
This should yield a folder called something like ubuntu-8.04-x86.
cd into this directory and run
- 'mv VDI/ubuntu-8.04-x86 ~/.VirtualBox/VDI'
* Create a new virtual machine
- Run VirtualBox (should be in Accessories under the Applications menu or just type 'virtualbox' at the command line)
- Click the New button to create a new virtual machine
- Create a name for your Virtual Machine and set it's OS Type
- Set the base memory to 256MB
- Elect to add an 'Existing Hard Disk', you the Add button and choose the ubuntu-8.04-x86.vdi under the ~/.VirtualBox/VDI directory
* Run and customise new virtual machine
- You should now have a new Virtual Ubuntu machine at your disposal. Start it up by clicking the Start button.
- Log in with ubuntu/reverse as username password. Double check that this is correct by looking at the site you downloaded the image from
- Once logged in change the password through the System/Administration/Users and Groups menu
- Install 'Guest Host Additions' from the Devices menu of the running window of you virtual machine. GHA allow you to copy and paste between the host and guest OS's, along with a raft of other improvements. Tip: If your mouse gets stuck in the virtual machine window then use the right control key to let it escape.
If the GHA install does not work (due to a timeout) then you will need to install the Guest Host Additions manually, as follows
i) On your real Ubuntu machine (ie. the host) download the file that was specified as a URL in the popup that was displayed when you previously tried to install Guest Host Additions - if you forget the URL try to download the GHA again from the Devices menu and when the URL appears copy and paste it into FireFox running on your host machine. Note: The GHA are installed onto your host machine.
ii) Once downloaded, move the file to /usr/share/virtualbox on your host machine and create the following symlink (as virtualbox won't recognise the file if it has the revision number in the filename)
sudo ln -s /usr/share/virtualbox/VBoxGuestAdditions_2.0.4.iso /usr/share/virtualbox/VBoxGuestAdditions.iso
iv) Once again try to install 'Guest Host Additions' from the Devices menu of the running window of you virtual machine. This time it will pick up the local file you downloaded.
* Create a shared folder - to swap files between your host and your VM
- On your host machine create a directory you will use for sharing
- On your running virtual machine create a directory you will use for sharing
- From the Devices menu of the running VirtualBox windows select Shared Folders and set the 'folder path' to the folder you just created on your host. Give it a friendly name in the 'folder name' field and elect to make it permanent. Then on your VM run
mount -t vboxsf the_friendly_name /path/to/folder/on/virtual/machine
Note: That vboxsf is the filesystem type that VirtualBox is using for shared folders
Now you should be ready to go with your VM. Congratulations!
As a final step you may want to take this vanilla Ubuntu machine update it so that it has the same packages as another machine, in the case where you are looking to replicate an environment. Use dselect and apt to do this as laid out in the following guide Restore Packages using dselect on Kevin von Zonneveld's blog.
As a final step you may want to install any other software that is not covered by aptitude packages - such as programs for which no debian package exists or for things like Ruby on Rails gems. It shouldn't take you long to put these on your new virtual machine and "hey presto!" you're ready to rock!
Blackout Ireland Campaign Begins – No to Irish Internet Censorship
The battle for control of the Internet has begun within Ireland. In the red corner, Eircom has sided with the Big Four record companies - Sony-BMG, Universal and Warner and EMI - who are seeking to control the Irish Internet using coporate censorship and civil law techniques. In the blue corner, the Blackout Ireland campaign is looking to highlight the dangers of this censorship and has used social networking tools such as Twitter and Facebook to build support to protest this decision. A similar campaign was succesful in New Zealand, will it work again here?
Read more on OpenWriters.org.
Installing Drupal on Ubuntu (Gutsy) in a few easy steps
Drupal is a great solution if you're looking for a CMS system. In order to sneakily install LAMP with the minimum of fuss, I usually just install mod php and mod mysql (the apache related modules for php and mysql respectively) and that triggers pretty much everything else to be pulled automatically! So, from the command line...
sudo aptitude install libapache2-mod-php5
sudo aptitude install php5-mysql
... should give you Apache, MySQL and PHP in one fell swoop. Just to be sure that all is well run the following install commands
sudo apt-get install mysql-server
sudo apt-get install apache2
sudo apt-get install php5
sudo apt-get install php5-mysql
Then download and install Drupal (version 6.6 at time of writing) at http://drupal.org and follow their install guide.
One final tip, if there's any problem with your apache installation's configuration, you can install phpMyAdmin in order to plough through these problems as it will supply its own configuration. For example, I got the database configuration error when I was trying to connect to my database for the first time using Drupal
"Your web server does not appear to support any common database types. Check with your hosting provider to see if they offer any databases that Drupal supports."
Turns out my apache config was dodge as when I did a 'sudo apache2ctl restart' I got the following...
"apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName"
Installing phpMyAdmin and choosing apache2 when prompted during this process did the trick. Now go forth and Drupal!
3 Cheers for OSS Barcamp Dublin!
Another exciting event has just been announced for Dublin next year with an Open Source Software Barcamp planned for Dublin March 28th next year. And you could be one of the speakers! The idea behind a barcamp is to have a casual relaxed atmosphere where the attendees can help drive the schedule - like a conference done in the spirit of Digg. For more info check out Laura Czajkowski's blog post and if you want to keep up to date with further details you can track things on ossbarcamp on twitter.
File downloads over the command line via CURL
This could be a pretty obvious one to a lot of people but it's just so handy. This will download a file from somewhere.com to your local directory
curl -O http://somewhere.com/somefile.tar.gz
Really handy when you're administering a remote server and need to pull down files.
Recording Sound in Kubuntu 8.10 (running KDE 4.1)
Exciting times ahoy! This weeks mystery was to get sound recording with the minimum of fuss. We're not sure what soundcard is running inside the Dell Inspiron 1520 which was our test laptop but it seems to report itself as an HDA Intel SigmaTel STAC9205 in the system settings. Anyway, the first thing to do was to apt install audacity which can then be used for testing the recording functionality. Not being sure if the laptops builtin in mic had been detected correctly, we jacked in an external microphone into the mic socket.
This didn't produce any encouraging results initially when we tried recording in audacity so we opened up the KDE volume controls by clicking the speaker icon on the taskbar and electing to open the mixer. Unfortunately the GUI controls for the mixer doesn't have the full complement of volume controls so it was the good ol command line to the rescue - typing alsamixer in terminal brings up a nice range of controls. You can navigate between screens of controls with the tab key and jump from control to control using the left/right arrow keys. The trick was to navigate to the two controls marked 'Capture' and bump up the volume (they also need to be activated by pressing the spacebar when you're on the control). Additionally, there were two controls marked 'Digital'. One of these controlled the volume of the mic (via the up and down arrows) and the other switched between analog and digital mode (again via the up and down arrows). We found that the latter had to be set to 'Analog I' for the best result.
Then it was back to audacity to record a bit of chatter - and then lament how weird ones voice sounds when recorded! Now get mixing mon amis!
QUICK UPDATE (14 Sep 08)
One issue that occurred was that after recording a sample, it couldn't be played back("Error while opening sound device. Please check the output device settings and the project sample rate."). Additionally, a second track couldn't be recorded. The solution to these problems was to open the Preferences dialog and set both the Playback and Record devices to ALSA (default). Reference: http://audacityteam.org/forum/viewtopic.php?f=18&t=3377
Just Diff the Internet
Woke up this morning and found myself dead... Well, more to the point, my Internet connection dead. So being a Nymphobyte - someone feverously attracted to a reliable high bandwidth connection - there was little else to do than ponder the state of broadband in Ireland. Options are limited in the land currently home to the so called 'Pariahs' of Europe. Just make our broadband better and we'll vote Yes! to Lisbon II and even Lisbon III 'The Search for Spock'. Until then, you're better off sending your packets of data back and forth via carrier pigeon rather than trying to connect via the empty promises of the current providers.
At least things aren't as bad as in Sweden, oft thought of as land of the liberal and freedom loving Swedes, where their elected leaders are trying to sell them down the river - forcing a copy of all networked communications to be forwarded on the government so that they can, presumably, check for things like terrorists trying to share the latest episode of Desperate Housewives over Bittorrent. Sweden is now being mentioned in the same breath as China and Saudi Arabia with respect to Internet Freedom. According to an Information Age article even Google, not known to be adverse to collecting data on people, has been heavily critical of the crippling legislation. Blogger Oscar Swartz has a rallying mayday call on his site. Yes, that's right, even the Scandinavians have given up on civil rights - now we know the world is doomed! They're kind of like a civil liberties version of those budgies that used to warn of noxious fumes down the mine shafts in the old days - once they go tits up then you know the game is over.
Nope, freedom is not on the menu anywhere this week. An article in The Economist took stock of the scale of civil liberties that have been eroded under the Labour government and the relative apathy that this has been met with by the people. Gordon Brown, despite the having the popularity of Brian Cowan at a Eurocrat orgy, has even managed to push through legislation in Parliament to the effect that one can now be detained for 45 days at a go without charge. That's over 6 weeks! You could miss the whole European championships if you're unlucky enough! Which might suit you if you're a Portuguese or Croatian fan, after their sides painful exists. But 6 weeks! Perhaps Gordon just has a secret repressed side that he didn't know about - which is subconsciously upset that Ireland is now seen as more Eurosceptic than Britain. Forty five days isn't so bad though. After all, Tony Blair wanted to lock 'em up for 90 days without charge. Why not go the whole hog and just lock people up at birth? It saves all that awkward decision making and you wouldn't even need National Identity Cards anymore. Mind you, who needs ID cards when everyone one has already gotten their own copy of secret government dossiers that they picked up on the Tube on the way to work. Now there's a government I wouldn't trust mind my dog for the weekend, never mind my confidential information. And I don't even own a dog...
It's been a tough week all right. It's hard to know how to stay on top of things. My great plan is to do away with RSS feeds and subscriptions and just diff the Internet each morning before going to work. If there was some interesting news found it could be managed using git and deltas emailed to friends to keep them informed. Sure, it would be a lot of data to contend with, but there would be some scant satisfaction knowing that it would make those draconian Swedish government servers that spy on their citizens work that little bit harder!
Mercurial, Python and a Packet of Crisps
Came across this exciting bit of news on the ol wireless just recently that rails is moving from SVN to Git. Exciting times indeed as more and more developers are realising the merits of distributed source control to manage an ever expanding code base. This Irish Penguin's been in the fortunate position of working a lot with Mercurial, an alternative to Git, for the last few weeks and these types of tools are just a great way to work.
One of the big pluses is that your code and your repository (the history of all edits you've ever made to the code) is all in one directory which makes the process of source control really filesystem based. This is great when you're learning and just experimenting as you become more familiar with your new favourite toy. If you want to try something out, you just copy the directory somewhere and if it all goes to pot then it's just a quick copy command to restore it back to its original state!
If you're a Ruby or Python dev one of the really nice things about Mercurial (also known as hg - after the chemical symbol) is that it's done in Python, which means that it's pretty easy to hack a bit of code together if you want to extend functionality. A whole Saturday was lost to the cause of hacking Mercurial in Dublin's Central Hotel last weekend - as your host recovered from a bout of Extreme Coughing (there are more germs going round here at the moment than sheep in New Zealand!) over a pint of orange and a packet of crisps. Good fun! It was kind of weird though. As soon as urs truly had booted up the laptop, a bunch of folks grabbed seats to the back of the room muttering about Ubuntu cds and wifi. Sounds like Linux is all over Dublin like a rash. A very nice rash of course!