November 10, 2006
The work place is sometimes a really interesting place to be. We come from a strong Solaris background and in the last 6 years or so have migrated many of our mission critical services to Red Hat Enterprise Linux. However, for the foreseeable future, we will be running a mix of Solaris and Linux.
Solaris sucks in that it doesn’t come with much. Apparently, when Sun ships you a broken compiler that is considered a leg up. The natural thing to do is build tarballs of applications to distribute or just the old fashioned untar, configure, make, pray, make install.
Linux distributions, on the other hand, are very different. They normally come with a “batteries included” attitude toward common software. So you’ve got plenty of perl, berkley db, MySQL, python, etc. It naturally leads to building packages with, in our case, RPM.
So with many IT employees each building the software they need for Solaris and augmenting Linux as required it didn’t take long for our servers to become very different and incompatible with each other. As we continue to be a mixed shop we constantly deal with upgrading services from Solaris to Linux and, most commonly, interactions between Solaris servers and Linux servers to deploy a service. With no method to our madness it became virtually impossible to interroperate with servers (Linux or Solaris) that other people built and run.
Being that we have to maintain our compatibility between Linux and Solaris (especially for things like Perl and Berkeley DB) how do you create unity in our environment? Very frankly, I’d really like to know how other folks have tackled this or similar situations. What ways work best for you? What problems do you encounter. What problems are you specifically trying to solve?
At NCSU the solution that folks came up with quite a while ago is called “The Vision.” It has successfully created a standard way of building applications that works for both Linux and Solaris and has solved compatibility problems between the two. However, its not really the Linux Way™ and far from the Solaris Way. In fact, I really have not seen such implemented like this elsewhere.
Software is built with RPM for both Solaris and Linux. It all installs under /local which definitely makes me twitch. Being specific to NCSU (the /local is good enough reason to do this in my book) packages are named ncsu-packagename. There are a set of guidelines for writing spec files and make files which do the building. (They enforce the RPM macros are always the same.)
Oh dear, does it make me twitch. But its also jaw droppingly amazing. For our applications and scripts, and most definitely as many things are powered by Perl, this has created a sanity and peace between Linux and Solaris. Perl scripts run everywhere instead of having to deal with Perl module hell and why is the modules installed in place X over here and place Y over there. Thie Vision has created a stable environment and allowed folks to transition to Linux easier and faster and have much more sanity in dealing with administrative tasks on all operating systems. In fact, (I’m not kidding) there is one rpmroot that contains the sources, specs, and packages for both Solaris and Linux. Each spec file builds on both RHEL 4 and Solaris 2.8.
As the Linux Czar for campus I’ve always done things the Linux Way and pushed the Linux agenda. I know folks will read the above and think that we must be the worlds top crack producing IT organization. My servers that provide Linux related services to campus are built the Linux Way rather than the above. Its also probably clear that The Vision is not new but that I am truly new to it.
I find myself in a position where I can participate in steering The Vision. I honestly have never been so horrified and in awe of the work that has been done before me and the responsibilities I now share. The Vision has brought about something amazing to our IT organisation. Indeed, there is forward progress to be made and new things to accomplish. So, this begs the question, where and how do I help steer The Vision?
How would YOU have solved this?
Where would YOU go from here?