– Full Frontal Nerdity

Clint Byrum's Personal Stuff

Drizzle, Maverick, PPA’s, and you

So, this week, Drizzle released its beta, which is really exciting. But at the same time, I decided to ask the Ubuntu MOTU pull it out of Ubuntu 10.10 (a.k.a. maverick) entirely. The reasons, may not be entirely obvious.

  • Licensing: There is some ambiguity on the licensing of certain non-critical source code in Drizzle that we weren’t certain Debian archive admins would accept. Since we like to follow Debian as closely as possible in Ubuntu, the MOTU sponsor we had was requesting that we upload into Debian first. Upon review of earlier packages, the debian archive maintainers pointed out some ambiguities in the copyright documentation, and it turns out, there are some ambiguities still in the source code. These things take time to sort out, though I’m confident we’ve figured most, if not all, of them out.
  • Beta status: Drizzle released their first beta just yesterday. This is great, and would be a good release to have in Maverick, but its going to change *a lot* before the “elliot” milestone is released in early 2011. Monty Taylor assures me that they’re going to be ready to release before feature freeze of Natty (11.04). Until then, they’re going to be fixing bugs in the betas and releasing those fixes. In the face of that, its probably better to point people at a PPA that will have the latest bug fix release in it, and tools included to help debug/fix the release as well.
  • Quality: Even though its clear that drizzle is beta to those following drizzle closely, it may not be entirely clear to everyone. Beta versions make it into Ubuntu all the time, but being a database engine, I’m hesitant to have the casual user try it out. In 6 months, Drizzle will be at a stable release stage, and all users should be feeling pretty good about running on it. That seems like the right time to put it into Debian and Ubuntu.

So, what should you do if you want to run Drizzle on Maverick?

There are two package archives maintained by the drizzle developers just for ubuntu.

The PPA for drizzle development – This should have the latest stable release, and all of the build-depends to rebuild it.
The Drizzle Trunk PPA – This should have the latest daily build of drizzle from the source code repository, which may have fixes made since the last stable release.

Those links include instructions for adding the PPA’s to your system, after that, just

apt-get install drizzle-server drizzle-client

And have fun!

Also, we’ll be discussing drizzle sometime at UDS-N in Orlando. So make sure to check the schedule out and join us (remotely or on site) if you want to chime in or hear what we’re going to do with the Narwhal and Drizzle.

September 30, 2010 at 7:12 pm Comments (0)

I learned ruby last week

Time to give myself a little pat on the back.

Last week I sat down to work for a whole working day on “whatever I wanted to”, as part of the Canonical Server Team’s pilot “Fedex Day” program. Mathias Gug and I both looked at this idea from Dan Pink’s book “Drive” and thought it made sense to try it out.

Management approved, and we set about on a day of “work on one thing, make it go, and then show it off the following week”.

I was originally going to work on improving the search capabilities of the MoinMoin wiki software that we use at Canonical. But it turns out, somebody already did that by adding Xapian support, and so we really just need to backport that to whatever version of Ubuntu canonical’s servers run on.

So, I decided to tackle another issue that has been nagging at me.

I love perl. I’ve used it for years, and I have always found that the ease with which one can get software from perl’s central repository, CPAN, was a huge differentiator from other languages.

So much so, that PHP, Python, and Ruby have in many ways gone even further than CPAN with their respective tools, PEAR, pypi, and rubygems.

Well one thing Debian developers love is perl too. So for a long time now, its been relatively simple, even braindead simple, to create a debian source package from a CPAN module.

Simply download the tarball, unpack, and ‘dh-make-perl’, that gets you 90% of the way there. All that is left is renaming a few dependencies, making sure the copyrights are done, and verifying that the module doesn’t do anything nasty.

How cool is that?

Python has a few tools like this too, like sdist, so they’re covered.

But Ruby had no such thing for rubygems. There are definitely tools to create debs from ruby source distributions, but often times projects don’t actually distribute source any other way than a .gem file or code repository. To make matters worse, there is a bit of confusion between some users of rubygems on Debian and Ubuntu about how it should work. Many people feel that gems is a poor way to distribute software, or that it lacks certain features. Others would just like to use it like any other developer tool.

Well I happen to think that many ruby users would probably grow to love .debs if they covered a large portion of rubygems software.

So, DebiGem is born! I created this project in about 8 working hours, with zero Ruby knowledge beforehand. I’m sure that shows in my style of Ruby. With some help from perusing the rubygems code base and about 80 Ruby tutorial pages on the net, I think I’ve created something that actually works.

If you want to try it, go ahead and fire it up, simply install the debs available in my PPA on Launchpad, and then download a .gem, and turn it into a source package (apologies for all the debug output, we’re talking about v0.0.2 here!).

clint@ubuntu:~/testgem$ wget
--2010-09-07 15:58:46--
Connecting to||:80... connected.
HTTP request sent, awaiting response... 302 Found
Location: /gems/a2ws-0.1.9.gem [following]
--2010-09-07 15:58:46--
Reusing existing connection to
HTTP request sent, awaiting response... 302 Found
Location: [following]
--2010-09-07 15:58:46--
Resolving,,, ...
Connecting to||:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 7168 (7.0K) []
Saving to: `a2ws-0.1.9.gem'

100%[================================================================================================================================================================>] 7,168 --.-K/s in 0.07s

2010-09-07 15:58:46 (94.9 KB/s) - `a2ws-0.1.9.gem' saved [7168/7168]

clint@ubuntu:~/testgem$ dh-make-gem a2ws-0.1.9.gem
Extracting gem file a2ws-0.1.9.gem
tar -xvf a2ws-0.1.9.gem data.tar.gz
tar: data.tar.gz: implausibly old time stamp 1969-12-31 16:00:00
tar -C liba2ws-ruby-0.1.9 -zxf data.tar.gz
tar: .document: implausibly old time stamp 1969-12-31 16:00:00
tar: .gitignore: implausibly old time stamp 1969-12-31 16:00:00
tar: LICENSE: implausibly old time stamp 1969-12-31 16:00:00
tar: README.rdoc: implausibly old time stamp 1969-12-31 16:00:00
tar: Rakefile: implausibly old time stamp 1969-12-31 16:00:00
tar: VERSION.yml: implausibly old time stamp 1969-12-31 16:00:00
tar: a2ws.gemspec: implausibly old time stamp 1969-12-31 16:00:00
tar: lib/a2ws.rb: implausibly old time stamp 1969-12-31 16:00:00
tar: lib/a2ws/base.rb: implausibly old time stamp 1969-12-31 16:00:00
tar: lib/a2ws/image.rb: implausibly old time stamp 1969-12-31 16:00:00
tar: lib/a2ws/image_search.rb: implausibly old time stamp 1969-12-31 16:00:00
tar: lib/a2ws/item.rb: implausibly old time stamp 1969-12-31 16:00:00
tar: lib/a2ws/item_search.rb: implausibly old time stamp 1969-12-31 16:00:00
tar: lib/a2ws/methodize.rb: implausibly old time stamp 1969-12-31 16:00:00
tar: spec/a2ws_spec.rb: implausibly old time stamp 1969-12-31 16:00:00
tar: spec/spec_helper.rb: implausibly old time stamp 1969-12-31 16:00:00
tar -zcf liba2ws-ruby_0.1.9.orig.tar.gz --exclude=liba2ws-ruby-0.1.9/debian liba2ws-ruby-0.1.9
changing working dir to liba2ws-ruby-0.1.9
DEBUG: a2ws-0.1.9.gem.gemspec
WARNING: no description specified
WARNING: no rubyforge_project specified
DEBUG: req = libhttparty-ruby (>= 0.4.3)
DEBUG: type=runtime
DEBUG: req = libactivesupport-ruby (>= 2.2.2)
DEBUG: type=runtime
Successfully built Debian source package from gemspec
Name: a2ws
Version: 0.1.9
PackageName: liba2ws-ruby
clint@ubuntu:~/testgem$ cat liba2ws-ruby-0.1.9/debian/control
Source: liba2ws-ruby
Section: ruby
Priority: optional
Maintainer: foo
Build-Depends: ruby, debhelper (>= 7), dh-rubygems,
Standards-Version: 3.9.1

Package: liba2ws-ruby
Section: ruby
Architecture: all
Depends: ruby, ${shlibs:Depends}, libhttparty-ruby (>= 0.4.3), libactivesupport-ruby (>= 2.2.2)
Description: Wrapper for Amazon Associates Web Service (A2WS).

clint@ubuntu:~/testgem$ cat liba2ws-ruby-0.1.9/debian/rules
#!/usr/bin/make -f
# This file was generated by 'gem debsrc'
dh $@

dh_rubygems build

dh_rubygems install

dh_rubygems clean
clint@ubuntu:~/testgem$ ls -l liba2ws-ruby-0.1.9/debian
total 20
-rw-r--r-- 1 clint clint 151 2010-09-07 15:58 changelog
-rw-r--r-- 1 clint clint 2 2010-09-07 15:58 compat
-rw-r--r-- 1 clint clint 410 2010-09-07 15:58 control
-rw-r--r-- 1 clint clint 2078 2010-09-07 15:58 liba2ws-ruby.gemspec
-rw-r--r-- 1 clint clint 213 2010-09-07 15:58 rules

It also includes the dh_rubygems tool and dh-rubygems package you see mentioned above.

Given this tool, its relatively easy to create .deb files and focus on the real work of creating packages, which is reviewing licensing and code, rather than turning them into the actual .deb. Sure you still have to update the maintainer field, and will probably want to check those dependencies, but for the most part, this works and gets the gem into an installable state.

I do hope someone finds this useful, it was great fun implementing it.

September 7, 2010 at 11:09 pm Comments (0)

Love for my sponsors

No not New Deal Tobacco & Candy Company, nor Nike or Pepsi (though, I can’t wait forever guys, come on!)

No, I’m talking about my Debian and Ubuntu sponsors. Without you, all of my hard work would be sitting in a queue somewhere with no love.

You see, just because I work for Canonical, doesn’t mean I get an automatic berth in the Ubuntu Developer community, nor does it give me any clout with the Debian Developers. The beauty of the open source community, is that it is and probably always will be, a meritocracy. What have you done? What is your level of commitment? How well you can answer those questions at any given time defines how much people trust you, and therefore, your level of autonomy and leadership.

So, folks like me who have just entered the fray in Ubuntu, and who only dabbled in Debian, must prove ourselves. And, to whom will we prove ourselves? Why, sponsor developers.

So, without further ado, These are a few of the sponsors who have made sure that my work has gotten out there in the past few weeks and months, and a few who have made sure that my * shoddy* work has not. THANKS GUYS!

  • Chuck Short (zul) – Ubuntu uploads of bug fixes and warranted critiques of half-assed PHP solutions.
  • Dustin Kirkland (kirkland) – Ubuntu uploads of bug fixes.
  • Scott Moser (smoser) – merging changes for cloud-utils and uploading to Ubuntu
  • Chris Cheney (ccheney) – Upload of gearman-interface source package into Debian (my first debian upload!)
  • Bernd Zeimetz (bzed) – Reviewed first gearman-interface package and convinced me to upload a proper gearman-interface package w/ swig bindings
  • Piotr Ożarowski (POX) – Educated me on finer points of Debian Python Policy
  • Thierry Carrez (ttx) – Upload of various bug fixes into Ubuntu, and sparing me “The look”
  • Matt Zimmerman (mdz) – Instruction on proper maintainer script procedures for memcached
  • Mathias Gug (mathiaz) – Endless attention to detail while reviewing my merge proposals, and “SNAILS!”
  • Thomas Goirand – Responsiveness on crusty old packages like libdbi
  • Kees Cook (kees) – MIR reviews for Ubuntu, and convincing me to get on the metro back to the hotel instead of face the Prague deluge with my little 100Kč (about $5 US) umbrella
  • The people I’ve missed – I can’t remember everyone, but thank you if you helped me and Ubuntu, and Debian out!

I’ll try to do this more often, but I don’t know if I can really single everyone out. Its amazing how many people work together so smoothly, despite the group above being spread out over, by my count, at least 7 countries and 5 time zones.

August 5, 2010 at 10:55 pm Comments (0)

The lost joy of LEDs

Today I realized that a quest I set out on long ago was achieved, and I don’t know how happy I am about it. As I look around my house, I see but one laptop running. The wife has a little Netbook, and you might count the Wii or evne the AT&T U-Verse cable boxes as computers, but when it comes down to it, the only thing I need is my 15″ laptop.

Back when I got into computers, I was cobbling together every little piece of funky hardware I could to build a pseudo-production network inside my house. I had an old AMD 5×86-133 based box that served as my firewall and router. I had a little AMD 900 with redundant cheap IDE disks that was my server. I ran Debian GNU/Linux on them because thats what all the smartest people I knew recommended, and it was incredible because it let me do everything I wanted to do my way, without making me do anything to get it working. Even though I had just a 56kbit modem connection, I used squid and heavy tuning to make it the best web browsing experience possible.. for.. me.

Oh sure, at work I had servers to play with and I definitely enjoyed work. But the autonomy of doing this my way, and learning new things, was what really made it a passion.

One of the most amazing things that came out of that exercise was the realization that while I had the most amazing modem based home network ever, I wasn’t always aware of what was going on. Sometimes I’d wonder, what the heck is going on?

Then I moved the little 5 port switch from behind the desk, to on top of the desk. Instantly, I felt better. I enjoyed watching the two little ports that my server and workstation were on blink themselves silly, almost solid, when I was copying a file over the network. And the constant little twinkles just made me feel good that my network was busy, useful, and active.

But what about the internet connection? What was it doing? I found the answer to this one in one of those great hacks that just makes you smile. tleds. This little program simply hooked into Linux’s networking stack and made the TX and RX functions on my modem force the keyboard LED’s on my server to blink. Now, my server actually didn’t have a keyboard before this, but I grabbed an old one from the closet, plugged it in, and concealed all but the keyboard LED’s so that it just blinked.

Why do these blinking lights make us feel better? I don’t know. But thats one thing lost in the cloud. No blinking lights. No feedback that its doing something.

Maybe somebody should make a ‘cloudleds’ command that blinks your keybaord when your cloud instances send and receive.

August 4, 2010 at 9:33 pm Comments (0)