Packaging Drush and Dependencies for Debian
Lately I have been trying to avoid non packaged software being installed on production servers. The main reason for this is to make it easier to apply updates. It also makes it easier to deploy new servers with meta packages when everything is pre packaged.
One tool which I am using a lot on production servers is Drupal’s
command line tool - drush. Drush is
awesome it makes managing Drupal sites so much easier, especially when
it comes to applying
updates.
Drush is packaged for Debian testing, unstable and lenny
backports by Antoine
Beaupré (aka anarcat) and will be
available in universe for ubuntu lucid. Drush depends on PEAR’s
Console_Table module and
includes some code which automagically installs the dependency from PEAR
CVS. The Debianised package includes the PEAR class in the package,
which is handy, but if you are building your own debs from CVS or the
nightly tarballs, the dependency isn’t included. The auto installer only
works if it can write to /path/to/drush/includes
, which in these cases
means calling drush as root, otherwise it spews a few errors about not
being able to write the file then dies.
A more packaging friendly approach would be to build a Debian package
for PEAR Console_Table and have that as a dependency of the drush
package in Debian. The problem with this approach is that drush
currently only looks in /path/to/drush/includes
for the PEAR class. I
have submitted a patch which first
checks if Table_Console has been installed via the PEAR installer (or
other package management tool). Combine this with the Debian source
package I have created for Table_Console (see the file attached at the
bottom of the post), you can have a modular and apt managed instance of
drush, without having to duplicate code.
I have discussed this approach with anarcat, he is supportive and hopefully it will be the approach adopted for drush 3.0.
Update The drush patch has been committed and should be included in 3.0alpha2.