Subversion hosting, CVS hosting, Trac hosting, Bugzilla hosting and software collaboration Providing hosted Subversion, CVS, Trac and Bugzilla repositories
 

June 15, 2009

Broken-Hearted Ports

Filed under: Operating Systems — Tags: , , — Greg Larkin @ 10:07 am

Hi everyone,

As I’ve been writing over the past couple of weeks, there are a large number of FreeBSD ports that are unmaintained and would benefit greatly from a new maintainer. Today, we’ll visit with a particularly tragic strain of port:

Unmaintained and BROKEN!

Bill Fenner sends out a periodic automated email to the freebsd-ports mailing list with links to ports that do not build: http://people.freebsd.org/~fenner/errorlogs/.

This is a useful page for any port maintainer to visit periodically to make sure all of his/her ports are humming along. If a port remainis unbuildable for too long, portmgr will likely mark it BROKEN after a while, and if it stays BROKEN too long, it will be removed from the tree.

The problem is that when a port is unmaintained, it’s likely that no one will notice that it doesn’t build, and it won’t be fixed in time to save it from removal. One place to start if you’re interested in adopting a port is the page detailing unmaintained ports that are broken on one or more platforms:

http://people.freebsd.org/~fenner/errorlogs/ports@freebsd.org-date.html

There are many different reasons that ports refuse to build, including (sample log follows each):

  • Unfetchable upstream distribution files (log)
  • GNU configure errors (log)
  • Compiler/linker errors (log)
  • Package building problems (log)

Fixing a broken port may be as easy as correcting a download URL or as complex as patching source code so it builds correctly on the AMD64 platform. There are many different ways to get your feet wet, so I encourage you to check some of the broken build log files and see if you can fix, and possibly adopt, one of these ports!


Call me - Greg Larkin: error

June 12, 2009

The Top Five Categories of FreeBSD Unmaintained Ports

Filed under: Operating Systems — Tags: , , — Greg Larkin @ 7:13 pm

Greetings all,

I’m here with some more statistics about the FreeBSD ports tree and the unmaintained ports in it. Today, I calculated the top five categories with the largest number of unmaintained ports in each:

Category Unmaintained Ports Sample Ports
devel 461 ace
allegro-devel
p5-Yada-Yada-Yada
games 381 gnomesudoku
gnuchess
xasteroids
textproc 352 diffutils
flex
xerces-c
graphics 298 Coin
bmeps
xfpovray
audio 245 icecast
rioutil
zinf

There is a huge variety of software to explore in the ports tree, and if you’re interested in maintaining one or more ports, I suggest looking for something you’ve already used in the past or a piece of software in your area of interest.  For instance, there are a number of astronomy and biology-related ports that could use some help!

Another great place to find ports that need some help, be it maintainership or submitting PRs to fix them, is the pointyhat build cluster status page: http://pointyhat.freebsd.org/errorlogs/.

If you’re just getting your feet wet and don’t know where to start, subscribe to the freebsd-ports mailing list or browse its archives. You’ll find a lot of questions and solutions to common problems as you learn more about the ports infrastructure.


Call me - Greg Larkin: error

June 11, 2009

The Most Unloved FreeBSD Port of All

Filed under: Operating Systems — Tags: , , — Greg Larkin @ 6:02 pm

Hi everyone,

To prepare for the upcoming inaugural International FreeBSD Adopt-A-Port Day on June 15th, 2009, I am publishing some interesting (???) statistics about the FreeBSD ports tree.

First up (cue the violins): The most unloved FreeBSD port!

This port has been a workhorse since the year 1996, back in the days before the Internet you now know, when a fast connection was 56k and we often disabled image loading in our browsers to speed up the browser! Those days, there were fewer than 500 ports in the tree, a far cry from the 20,000+ we now enjoy.

And now, I give you (drumroll, please)….

print/ghostview

The CVS log shows that this port has been unmaintained since 17-Nov-96, so it’s been nearly 13 years that ghostview has been wandering aimlessly through the tree, waiting for someone to adopt her/him/it. The ghostview port won’t require a lot of care and feeding, but if a new upstream version is released, the port would like a FreeBSD maintainer that will submit a PR to keep it in sync.

So, wouldn’t you like to help a port regain its standing in the tree and become all that it can be and more? Contact me at glarkin@FreeBSD.org to get involved and help out!


Call me - Greg Larkin: error

June 4, 2009

International FreeBSD Adopt-A-Port Day 2009

Filed under: Operating Systems — Tags: , , — Greg Larkin @ 11:43 am

Hi everyone,

Just for fun, let’s designate June 15th as the inaugural International FreeBSD Adopt-A-Port Day for 2009!

My colleague and co-mentor to Alexander Logvinov, Thomas Abthorpe, posted to the freebsd-ports mailing list in March looking for folks to adopt unmaintained FreeBSD ports and keep them up to date.

I’d like to continue Thomas’ effort and find out who in the FreeBSD community is interested in taking on one or more unmaintained ports. Some current stats:

FreeBSD ports info page (20325 total ports as of June 4th, 2009)

FreeBSD unmaintained port list (4719 as of June 4th, 2009, 77 with build errors)

FreeBSD unmaintained ports that need upgrading (253 as of June 4th, 2009)

If you are interested in maintaining a port, contributing PRs for port upgrades, and perhaps eventually becoming a ports committer, read the following documents to get a good overview of the process:

I started my own path to becoming a FreeBSD ports tree committer by discovering that a web application (WebCalendar) that we use at SourceHosting.net was not part of the tree.  I read up on how to create a new port, submitted a PR for it, and after review by an existing FreeBSD committer, it was added to the tree.  Now other WebCalendar users can install it on FreeBSD as easily as typing:

cd /usr/ports/www/webcalendar && make install clean

After a port is added to the tree, a maintainer keeps track of upstream package releases, updates the port to track the new version, adds any needed configuration options and makes sure that it builds and installs on the FreeBSD supported platforms. As payback, you’ll often hear from folks using your port, whether sending thanks, enhancement requests or the occasional bug report!

Since submitting that first PR, I have created a number of new ports for tools used at SourceHosting.net or just in my areas of interest.  I have adopted many as well. Most unmaintained ports are very undemanding and just need some minor TLC! It’s a great way to support a project that has contributed directly to the success of my Real Job.

Have any questions or guidance? Email me at glarkin@FreeBSD.org, follow me on Twitter or comment here. We’d love to work with you!


Call me - Greg Larkin: error

November 26, 2008

Graphical Display of Subversion Repository Revision History in Trac

Filed under: Source Code Control — Tags: , , , — Greg Larkin @ 8:15 pm

Hi everyone,

Once again, I bring you another useful Subversion-related tool. This time, I recently discovered a Trac plugin named RevtreePlugin. If you want to display your Subversion branches and revisions graphically inside of Trac, this is the plugin for you!

As I’ve noted before, I’m a FreeBSD ports tree committer now, so I absolutely had to build a port for this plugin. You can find the details of the port in FreshPorts, and if you’re using FreeBSD (you are, aren’t you?), install it like so:

cd /usr/ports/www/trac-revtree && make install clean

You will be presented with some options to enable some display enhancers. Make sure to enable the mergeinfo enhancer, and you’ll see some interesting graphs if you’ve been merging a lot.

Happy Thanksgiving!


Call me - Greg Larkin: error

March 7, 2008

Basic Views In CodeIgniter

Filed under: Software Development — Tags: , , , , — Greg Larkin @ 3:24 pm

Hi everyone,

A while back, I hooked up my CodeIgniter sample application to a MySQL database. That was easy, and now I’ll show how to move your presentation code into separate view files, instead of echo’ing HTML from inside a controller file.

According to the CodeIgniter manual, views are stored in the /views (hmm, that makes sense!) directory of your application, and they can be divided up across functional areas with subdirectories. Since it’s possible to create page snippets and load them in sequence, you might have a directory structure like this:

/views
  /global
    /layout
      /header.php
      /footer.php
  /navigation
      /left_side.php
      /bottom_links.php
  /user
    /add.php
    /edit.php
    /delete.php
    ...
  /group
    /add.php
    /edit.php
    /delete.php
    ...
  /...
  /...

Then when you want to render a particular page, say the “add user” page of your web app’s administrative interface, the code would look like this:

$this->load->view(‘global/layout/header.php’);
$this->load->view(‘global/navigation/left_side.php’);
$this->load->view(‘user/add.php’);
$this->load->view(‘global/navigation/bottom_links.php’);
$this->load->view(‘global/layout/footer.php’);

I haven’t gotten that complex yet, but I did move the code to display my user count into a view and set the value in the controller like so:

function count_users()
{
        $numUsers = $this->user->count_users();
        $data = array(‘num_users’ => $numUsers);
        $this->load->view(‘user/showcount’, $data);
}

The file /views/user/showcount.php is pretty simple:

<html>
<head><title>Welcome to the User Area!</title></head>
<body>
This page is rendered by the file: <?php echo __FILE__; ?>
<p>There are <?php echo $num_users; ?> users defined in the database.
<p><?php echo anchor(‘user’, ‘Go back’); ?>
</body>
</html>

Ok, this all seems to be pretty easy. Of course, there’s a bunch more functionality in the CodeIgniter framework, but I think what I’ll do for my next post is shift gears and go through the same basic exercises using CakePHP, Prado, and the Zend Framework.

It will be interesting to see if there’s any similarity to the way the classic “Hello, world.” program varies in complexity based on implementation language!


Call me - Greg Larkin: error

March 6, 2008

FreeBSD Port For CodeIgniter Upgraded to 1.6.1

Filed under: Software Development — Tags: , , , , , — Greg Larkin @ 7:01 pm

Hi everyone,

I’ve submitted some new FreeBSD port upgrades over the past week, including new support for CodeIgniter 1.6.1. In addition to the version bump of the upstream distribution, I also added some new bits to allow customization of certain CI files. The port is also careful to avoid removing those modified files when a new port upgrade comes along.

The reference for how to handle user-configurable files installed as part of a port can be found in the excellent FreeBSD Porter’s Handbook in the Configuration Files section.

In the new CodeIgniter port, the following user-configurable files are installed:


&lt;INSTALL_DIR&gt;/index.php
&lt;INSTALL_DIR&gt;/index.php.sample
&lt;INSTALL_DIR&gt;/system/application/config/autoload.php
&lt;INSTALL_DIR&gt;/system/application/config/autoload.php.sample
&lt;INSTALL_DIR&gt;/system/application/config/config.php
&lt;INSTALL_DIR&gt;/system/application/config/config.php.sample
&lt;INSTALL_DIR&gt;/system/application/config/database.php
&lt;INSTALL_DIR&gt;/system/application/config/database.php.sample
&lt;INSTALL_DIR&gt;/system/application/config/hooks.php
&lt;INSTALL_DIR&gt;/system/application/config/hooks.php.sample
&lt;INSTALL_DIR&gt;/system/application/config/mimes.php
&lt;INSTALL_DIR&gt;/system/application/config/mimes.php.sample
&lt;INSTALL_DIR&gt;/system/application/config/routes.php
&lt;INSTALL_DIR&gt;/system/application/config/routes.php.sample
&lt;INSTALL_DIR&gt;/system/application/config/smileys.php
&lt;INSTALL_DIR&gt;/system/application/config/smileys.php.sample
&lt;INSTALL_DIR&gt;/system/application/config/user_agents.php
&lt;INSTALL_DIR&gt;/system/application/config/user_agents.php.sample

What this does is install a reference copy of each file (*.sample) that is not expected to be edited by the user. The actual file that CodeIgniter uses to render pages (no .sample suffix) is user-configurable as needed.

Then some crazy-looking shell code in the pkg-plist file makes sure that any edited files are not removed if the port is deinstalled or upgraded (reformatted for readability):

@unexec if cmp -s %D/%%WWWDIR%%/%%CI_CONF_DIR%%/autoload.php.sample \

    %D/%%WWWDIR%/%%CI_CONF_DIR%%/autoload.php; then \

    rm -f %D/%%WWWDIR%%/%%CI_CONF_DIR%%/autoload.php; else \

    %%ECHO_MSG%% "===> Customized %D/%%WWWDIR%%/%%CI_CONF_DIR%%/autoload.php \

    has not been removed"; fi

%%WWWDIR%%/%%CI_CONF_DIR%%/autoload.php.sample

@exec if [ ! -f %D/%%WWWDIR%%/%%CI_CONF_DIR%%/autoload.php ]; then \

    cp -p %D/%F %B/autoload.php; fi

This concept needs to be implemented in several of the other ports that I maintain, including CakePHP and Prado. If anyone has a list of files that are user-configurable in each of those frameworks, please send it along!


Call me - Greg Larkin: error

February 15, 2008

CodeIgniter 1.6.1 Is Released

Filed under: Software Development — Tags: , , , , — Greg Larkin @ 4:31 pm

Hi everyone,

I just saw that CodeIgniter 1.6.1 has been released. I guess that means I’d better get on the stick and upgrade the FreeBSD CodeIgniter port! Once I do that, I’ll upgrade my PHP Framework VM with the new version of the port and continue on with the experimentation.


Call me - Greg Larkin: error

February 6, 2008

RSS Feed for FreeBSD /usr/ports/UPDATING

Filed under: Operating Systems — Tags: , — Greg Larkin @ 10:44 am

Hi everyone,

Since I’ve transitioned to FreeBSD, one thing I haven’t done regularly is keep track of the /usr/ports/UPDATING file. This file contains important information about incompatible changes to ports that could cause a port upgrade to break or yield unexpected results. Therefore, it’s important to check it before running a wholesale upgrade on a production server.

I’ve been using Awasu as my desktop RSS reader, and every time I find something I want to keep track of without having to remember to do so, I look for an RSS feed. The contents of the UPDATING file seem a natural fit for delivery as an RSS feed, but a few Google searches yielded no results.

Finally, I went straight to the freebsd-ports mailing list archive, and simply searched for “rss”. Lo and behold, Alex Kapranoff set up a feed back in 2005: http://lists.freebsd.org/mailman/htdig/freebsd-ports/2005-June/024285.html

The feed URL is http://kapranoff.ru/~kappa/files/ports.UPDATING.rss20.xml, for anyone who’s interested. Thanks Alex!


Call me - Greg Larkin: error

February 1, 2008

Installing PHP Frameworks with the FreeBSD Ports Tree

Filed under: Software Development — Tags: , , , , — Greg Larkin @ 11:21 am

Hi everyone,

Ok, let’s proceed to install the various PHP frameworks that we’ll use to create a sample application.

As I mentioned in a previous post, the basic command for installing any port in the tree is:

cd /usr/ports/&lt;category&gt;/&lt;appname&gt; &amp;&amp; make install clean

Let’s start with the CakePHP framework:
cd /usr/ports/www/cakephp &amp;&amp; make install clean

After typing that command, you should see this on the screen:

FreeBSD Port Installation Options

Hmm, what is that screen for? The FreeBSD ports collection has a robust infrastructure for configuring software applications prior to installation. In this case, CakePHP works with multiple different database backends, so the port writer (i.e. me) decided to provide options so the prerequisite bits are installed before the port proper.

Looking at the options provided here, the first one named “PROD” determines the way that the Apache web server is configured for CakePHP. If this is a production server, this option should be selected so navigating to “http://<servername>/” displays the CakePHP welcome page. Since I am installing multiple frameworks on the same machine, I’ll leave this option unchecked. That way, each framework welcome page will be found at “http://<servername>/<frameworkname>/”.

I plan to use MySQL as a database backend, so the following screenshot shows the MYSQL option selected. The dialog box is navigated with the tab and arrow keys on your keyboard, and the spacebar toggles the option selections:

FreeBSD Port MySQL Option

Tab to the OK button and hit Enter, and the port build starts. Here is the full transcript of the process:

CakePHP Port Build Transcript

Notice that by selecting the MYSQL option prior to installation, the port build fetched and built the MySQL client library and the PHP MySQL module, as well as some other packages:

mysql-client-5.0.51
php5-pcre-5.2.5_1
php5-pdo-5.2.5_1
php5-pdo_mysql-5.2.5_1
php5-session-5.2.5_1

This helps us get a working PHP installation that supports CakePHP out of the box.

Now, it’s the moment of truth – does the CakePHP default page display correctly? In order to load the page on your host machine, find the VM’s IP address with the following command:

/sbin/ifconfig -a | grep -w inet | grep -v 127.0.0.1 | awk '{ print $2 }'

That gives me 192.168.95.128, so here’s the URL where I should find the CakePHP default page: http://192.168.95.128/cakephp/. The address will likely be different for you.

This looks good!

CakePHP Default Page

Now as an exercise for the reader, try installing the rest of the frameworks and make sure that they display their welcome pages:

CodeIgniter
PRADO
Zend Framework

If you have any trouble, write in with comments and feedback.


Call me - Greg Larkin: error

Powered by WordPress