[csw-devel] SF.net SVN: opencsw:[566] buildfarm/bin
dmichelsen at users.sourceforge.net
dmichelsen at users.sourceforge.net
Fri Sep 30 15:07:21 CEST 2011
Revision: 566
http://opencsw.svn.sourceforge.net/opencsw/?rev=566&view=rev
Author: dmichelsen
Date: 2011-09-30 13:07:21 +0000 (Fri, 30 Sep 2011)
Log Message:
-----------
mirrorstatus: Initial commit from Peter Bonivart
Added Paths:
-----------
buildfarm/bin/mirrorstatus/
buildfarm/bin/mirrorstatus/image/
buildfarm/bin/mirrorstatus/image/AU.png
buildfarm/bin/mirrorstatus/image/BE.png
buildfarm/bin/mirrorstatus/image/BR.png
buildfarm/bin/mirrorstatus/image/CA.png
buildfarm/bin/mirrorstatus/image/CH.png
buildfarm/bin/mirrorstatus/image/CN.png
buildfarm/bin/mirrorstatus/image/CZ.png
buildfarm/bin/mirrorstatus/image/DE.png
buildfarm/bin/mirrorstatus/image/DK.png
buildfarm/bin/mirrorstatus/image/ES.png
buildfarm/bin/mirrorstatus/image/FI.png
buildfarm/bin/mirrorstatus/image/FR.png
buildfarm/bin/mirrorstatus/image/GB.png
buildfarm/bin/mirrorstatus/image/GR.png
buildfarm/bin/mirrorstatus/image/HU.png
buildfarm/bin/mirrorstatus/image/IE.png
buildfarm/bin/mirrorstatus/image/IL.png
buildfarm/bin/mirrorstatus/image/IT.png
buildfarm/bin/mirrorstatus/image/JP.png
buildfarm/bin/mirrorstatus/image/LU.png
buildfarm/bin/mirrorstatus/image/LV.png
buildfarm/bin/mirrorstatus/image/MC.png
buildfarm/bin/mirrorstatus/image/MX.png
buildfarm/bin/mirrorstatus/image/NL.png
buildfarm/bin/mirrorstatus/image/NO.png
buildfarm/bin/mirrorstatus/image/NZ.png
buildfarm/bin/mirrorstatus/image/PL.png
buildfarm/bin/mirrorstatus/image/RU.png
buildfarm/bin/mirrorstatus/image/SE.png
buildfarm/bin/mirrorstatus/image/TW.png
buildfarm/bin/mirrorstatus/image/US.png
buildfarm/bin/mirrorstatus/image/flagicons.zip
buildfarm/bin/mirrorstatus/image/source
buildfarm/bin/mirrorstatus/mirrorstatus.pl
buildfarm/bin/mirrorstatus/style.css
Added: buildfarm/bin/mirrorstatus/image/AU.png
===================================================================
(Binary files differ)
Property changes on: buildfarm/bin/mirrorstatus/image/AU.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: buildfarm/bin/mirrorstatus/image/BE.png
===================================================================
(Binary files differ)
Property changes on: buildfarm/bin/mirrorstatus/image/BE.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: buildfarm/bin/mirrorstatus/image/BR.png
===================================================================
(Binary files differ)
Property changes on: buildfarm/bin/mirrorstatus/image/BR.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: buildfarm/bin/mirrorstatus/image/CA.png
===================================================================
(Binary files differ)
Property changes on: buildfarm/bin/mirrorstatus/image/CA.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: buildfarm/bin/mirrorstatus/image/CH.png
===================================================================
(Binary files differ)
Property changes on: buildfarm/bin/mirrorstatus/image/CH.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: buildfarm/bin/mirrorstatus/image/CN.png
===================================================================
(Binary files differ)
Property changes on: buildfarm/bin/mirrorstatus/image/CN.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: buildfarm/bin/mirrorstatus/image/CZ.png
===================================================================
(Binary files differ)
Property changes on: buildfarm/bin/mirrorstatus/image/CZ.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: buildfarm/bin/mirrorstatus/image/DE.png
===================================================================
(Binary files differ)
Property changes on: buildfarm/bin/mirrorstatus/image/DE.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: buildfarm/bin/mirrorstatus/image/DK.png
===================================================================
(Binary files differ)
Property changes on: buildfarm/bin/mirrorstatus/image/DK.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: buildfarm/bin/mirrorstatus/image/ES.png
===================================================================
(Binary files differ)
Property changes on: buildfarm/bin/mirrorstatus/image/ES.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: buildfarm/bin/mirrorstatus/image/FI.png
===================================================================
(Binary files differ)
Property changes on: buildfarm/bin/mirrorstatus/image/FI.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: buildfarm/bin/mirrorstatus/image/FR.png
===================================================================
(Binary files differ)
Property changes on: buildfarm/bin/mirrorstatus/image/FR.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: buildfarm/bin/mirrorstatus/image/GB.png
===================================================================
(Binary files differ)
Property changes on: buildfarm/bin/mirrorstatus/image/GB.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: buildfarm/bin/mirrorstatus/image/GR.png
===================================================================
(Binary files differ)
Property changes on: buildfarm/bin/mirrorstatus/image/GR.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: buildfarm/bin/mirrorstatus/image/HU.png
===================================================================
(Binary files differ)
Property changes on: buildfarm/bin/mirrorstatus/image/HU.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: buildfarm/bin/mirrorstatus/image/IE.png
===================================================================
(Binary files differ)
Property changes on: buildfarm/bin/mirrorstatus/image/IE.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: buildfarm/bin/mirrorstatus/image/IL.png
===================================================================
(Binary files differ)
Property changes on: buildfarm/bin/mirrorstatus/image/IL.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: buildfarm/bin/mirrorstatus/image/IT.png
===================================================================
(Binary files differ)
Property changes on: buildfarm/bin/mirrorstatus/image/IT.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: buildfarm/bin/mirrorstatus/image/JP.png
===================================================================
(Binary files differ)
Property changes on: buildfarm/bin/mirrorstatus/image/JP.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: buildfarm/bin/mirrorstatus/image/LU.png
===================================================================
(Binary files differ)
Property changes on: buildfarm/bin/mirrorstatus/image/LU.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: buildfarm/bin/mirrorstatus/image/LV.png
===================================================================
(Binary files differ)
Property changes on: buildfarm/bin/mirrorstatus/image/LV.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: buildfarm/bin/mirrorstatus/image/MC.png
===================================================================
(Binary files differ)
Property changes on: buildfarm/bin/mirrorstatus/image/MC.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: buildfarm/bin/mirrorstatus/image/MX.png
===================================================================
(Binary files differ)
Property changes on: buildfarm/bin/mirrorstatus/image/MX.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: buildfarm/bin/mirrorstatus/image/NL.png
===================================================================
(Binary files differ)
Property changes on: buildfarm/bin/mirrorstatus/image/NL.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: buildfarm/bin/mirrorstatus/image/NO.png
===================================================================
(Binary files differ)
Property changes on: buildfarm/bin/mirrorstatus/image/NO.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: buildfarm/bin/mirrorstatus/image/NZ.png
===================================================================
(Binary files differ)
Property changes on: buildfarm/bin/mirrorstatus/image/NZ.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: buildfarm/bin/mirrorstatus/image/PL.png
===================================================================
(Binary files differ)
Property changes on: buildfarm/bin/mirrorstatus/image/PL.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: buildfarm/bin/mirrorstatus/image/RU.png
===================================================================
(Binary files differ)
Property changes on: buildfarm/bin/mirrorstatus/image/RU.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: buildfarm/bin/mirrorstatus/image/SE.png
===================================================================
(Binary files differ)
Property changes on: buildfarm/bin/mirrorstatus/image/SE.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: buildfarm/bin/mirrorstatus/image/TW.png
===================================================================
(Binary files differ)
Property changes on: buildfarm/bin/mirrorstatus/image/TW.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: buildfarm/bin/mirrorstatus/image/US.png
===================================================================
(Binary files differ)
Property changes on: buildfarm/bin/mirrorstatus/image/US.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: buildfarm/bin/mirrorstatus/image/flagicons.zip
===================================================================
(Binary files differ)
Property changes on: buildfarm/bin/mirrorstatus/image/flagicons.zip
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: buildfarm/bin/mirrorstatus/image/source
===================================================================
--- buildfarm/bin/mirrorstatus/image/source (rev 0)
+++ buildfarm/bin/mirrorstatus/image/source 2011-09-30 13:07:21 UTC (rev 566)
@@ -0,0 +1 @@
+for i in Australia France Italy Sweden Brazil Canada China "Czech%20Republic" Germany Luxembourg Switzerland "New%20Zealand" "United%20States%20of%20America" Belgium Denmark Finland Norway Hungary Greece Ireland Israel Japan Mexico Monaco Netherlands Poland Spain "United%20Kingdom"; do echo $i; wget -q http://www.printableworldflags.com/icon-flags/32/$i.png; done
Added: buildfarm/bin/mirrorstatus/mirrorstatus.pl
===================================================================
--- buildfarm/bin/mirrorstatus/mirrorstatus.pl (rev 0)
+++ buildfarm/bin/mirrorstatus/mirrorstatus.pl 2011-09-30 13:07:21 UTC (rev 566)
@@ -0,0 +1,207 @@
+#!/opt/csw/bin/perl
+
+# status.pl - produce web page with mirror status
+# based on James Lee's mirror status page
+# 2011-03-06 Peter Bonivart, OpenCSW
+
+# Requirements: CSWperl, CSWpm-geo-ip-pureperl
+
+# TODO: shorten very long url's
+
+use warnings;
+use strict;
+use Geo::IP::PurePerl;
+
+my $hash = "md5";
+my $min_size = 100000;
+my $image_dir = "./image";
+my $mirror_dir = "./mirror";
+my $page = "./mirrorstatus.html";
+my @dist = qw(testing);
+my @osrel = qw(5.9 5.10);
+my @osarch = qw(sparc i386);
+my @mirror;
+my $master_mirror = 'http://mirror.opencsw.org/opencsw';
+my $master_hash = '';
+my @mirror_http = qw(http://mirror.opencsw.org/opencsw
+ http://mirrors.ibiblio.org/pub/mirrors/opencsw
+ http://ftp.math.purdue.edu/mirrors/opencsw.org
+ http://ftp.ussg.iu.edu/csw
+ http://mirrors.usc.edu/pub/csw
+ http://mirrors.dotsrc.org/opencsw
+ http://csw.informatik.uni-erlangen.de/csw
+ http://ftp.uni-erlangen.de/pub/mirrors/csw
+ http://csw.informatik.uni-erlangen.de/csw
+ http://www.grangefields.co.uk/mirrors/csw
+ http://ftp.ntua.gr/pub/vendors/sun/opencsw
+ http://csw.ch.bme.hu
+ http://ftp.heanet.ie/pub/opencsw
+ http://ftp.esat.net/mirrors/opencsw.org/csw
+ http://ftp.df.lth.se/pub/csw
+ http://ftp.sunet.se/pub/vendor/sun/OpenCSW
+ http://mirror.switch.ch/ftp/mirror/opencsw
+ http://mirror.va.com.au/opencsw
+ http://ftp.cs.pu.edu.tw/pub/Sun/opencsw);
+
+my @mirror_ftp = qw(ftp://ftp.ibiblio.org/pub/mirrors/opencsw
+ ftp://ftp.ussg.iu.edu/pub/csw
+ ftp://mirrors.usc.edu/pub/csw
+ ftp://mirrors.dotsrc.org/opencsw
+ ftp://ftp.uni-erlangen.de/pub/mirrors/csw
+ ftp://ftp.ntua.gr/pub/vendors/sun/opencsw
+ ftp://ftp.heanet.ie/pub/opencsw
+ ftp://ftp.esat.net/mirrors/opencsw.org/csw
+ ftp://ftp.uninett.no/sun/csw
+ ftp://ftp.ru/pub/csw
+ ftp://ftp.corbina.net/pub/Solaris/csw
+ ftp://ftp.df.lth.se/pub/csw
+ ftp://ftp.sunet.se/pub/vendor/sun/OpenCSW
+ ftp://mirror.switch.ch/mirror/opencsw
+ ftp://ftp.cs.pu.edu.tw/pub/Sun/opencsw);
+my @mirror_unofficial = qw(ftp://ftp.igh.cnrs.fr/pub/OpenCSW
+ ftp://ftp.rediris.es/mirror/openCSW
+ http://ftp.igh.cnrs.fr/pub/OpenCSW
+ http://ftp.dk.debian.org/opencsw
+ http://ftp.rediris.es/mirror/openCSW
+ http://ftp.cc.uoc.gr/mirrors/opencsw
+ http://ftp.fernuni-hagen.de/ftp-dir/pub/mirrors/www.opencsw.org
+ http://ftp2.ie.freebsd.org/mirrors/opencsw.org/csw
+ http://mirrors.cat.pdx.edu/opencsw
+ http://sun-wais.oit.unc.edu/pub/packages/solaris/opencsw
+ http://opencsw.solaris-fr.org);
+my @mirror_ipv6 = qw(http://ftp6.uni-erlangen.de/pub/mirrors/csw
+ ftp://ftp6.uni-erlangen.de/pub/mirrors/csw);
+my @mirror_broken = qw(http://mirror.pacific.net.au/opencsw
+ http://planetmirror.com/pub/csw
+ ftp://ftp.planetmirror.com/pub/csw
+ ftp://ftp.math.purdue.edu/mirrors/opencsw.org
+ http://csw.fx.lv
+ ftp://csw.fx.lv/csw
+ http://stoofo.math.uni.lodz.pl/csw
+ ftp://mirror.pacific.net.au/solaris/opencsw);
+
+my $mirrorfile;
+
+my %mirror_url;
+my %mirror_hash;
+my %mirror_time;
+my %mirror_country;
+my %mirror_countryname;
+
+# Which mirrors will we check
+push(@mirror, at mirror_http);
+push(@mirror, at mirror_ftp);
+push(@mirror, at mirror_broken);
+push(@mirror, at mirror_unofficial);
+
+print "hash:$hash\n";
+print "dist:" . join(" ", at dist) . "\n";
+print "osrel:" . join(" ", at osrel) . "\n";
+print "osarch:" . join(" ", at osarch) . "\n";
+print "mirror:" . join(" ", at mirror) . "\n";
+
+my $gi = Geo::IP::PurePerl->new(GEOIP_STANDARD);
+
+foreach my $mirror (@mirror) {
+ print "=> $mirror\n";
+ $mirror_url{$mirror} = $mirror;
+ # Sanitize url into filename
+ ($mirrorfile) = ($mirror =~ /:\/\/(.*)/);
+ $mirrorfile =~ s/\/$//;
+ $mirrorfile =~ s/\//_/g;
+ # Get location of mirror
+ my ($host) = ($mirrorfile =~ /_/) ? ($mirrorfile =~ /(.*?)_/) : $mirrorfile;
+ my $tmp1 = $gi->country_code_by_name($host);
+ my $tmp2 = $gi->country_name_by_name($host);
+ $mirror_country{$mirror} = (defined $tmp1 ? $tmp1 : "N/A");
+ $mirror_countryname{$mirror} = (defined $tmp2 ? $tmp2 : "N/A");
+ if (defined $tmp1) {
+ print " => Country: $mirror_countryname{$mirror}\n";
+ } else {
+ print " => Host does not resolve (skipping)\n";
+ }
+ foreach my $dist (@dist) {
+ foreach my $osrel (@osrel) {
+ foreach my $osarch (@osarch) {
+ (-d "$mirror_dir/$mirrorfile") || mkdir("$mirror_dir/$mirrorfile");
+ system("curl -s -4 --create-dirs --ftp-create-dirs -m 20 -R -o $mirror_dir/$mirrorfile/catalog.$dist.$osarch.$osrel $mirror/$dist/$osarch/$osrel/catalog.gz") if ($mirror_country{$mirror} ne "N/A");
+ }
+ }
+ }
+ # Produce hashes
+ my @catalogs = glob("$mirror_dir/$mirrorfile/catalog.*");
+ if (scalar(@catalogs)) {
+ chomp($mirror_hash{$mirror} = `cat $mirror_dir/$mirrorfile/catalog.* | digest -a $hash`);
+ } else {
+ $mirror_time{$mirror} = "0";
+ $mirror_hash{$mirror} = "Error: zero retrieved catalogs";
+ }
+ # Which catalog is the newest
+ if ($mirror_hash{$mirror} eq "d41d8cd98f00b204e9800998ecf8427e") {
+ # Catalogs are all empty
+ $mirror_time{$mirror} = "0";
+ $mirror_hash{$mirror} = "Error: empty/no catalogs";
+ } else {
+ my $latest = 0;
+ foreach (glob("$mirror_dir/$mirrorfile/catalog.*")) {
+ if ((stat($_))[7] < $min_size) {
+ $mirror_time{$mirror} = "0";
+ $mirror_hash{$mirror} = "Error: missing or corrupt catalogs";
+ last;
+ } else {
+ my $time = (stat($_))[9];
+ $latest = $time if ($time > $latest);
+ # Set master hash if this is master mirror
+ $master_hash = $mirror_hash{$mirror} if ($mirror eq $master_mirror);
+ }
+ }
+ $mirror_time{$mirror} = $latest;
+ }
+ print " => Hash: $mirror_hash{$mirror}\n";
+ print " => Updated: " . gmtime($mirror_time{$mirror}) . "\n";
+}
+
+# Create html page
+open(HTML,">$page");
+print HTML "<HTML>\n";
+print HTML " <HEAD>\n";
+print HTML " <TITLE>OpenCSW Mirror Status</TITLE>\n";
+print HTML " <META NAME='keywords' CONTENT='CSW Solaris packages OpenCSW'>\n";
+print HTML " <LINK TYPE='text/css' HREF='style.css' REL='stylesheet'>\n";
+print HTML " </HEAD>\n";
+print HTML " <BODY ALIGN='center'>\n";
+print HTML " <H1>OpenCSW Mirror Status</H1>\n";
+my @t = gmtime();
+print HTML sprintf(" Last check: %04d-%02d-%02d %02d:%02d:%02d<BR>\n",$t[5]+1900,$t[4]+1,$t[3],$t[2],$t[1],$t[0]);
+print HTML " <BR>\n";
+print HTML " <TABLE CLASS='grid' ALIGN='center'>\n";
+print HTML " <TR>\n";
+print HTML " <TH>Country</TH><TH>Mirror URL Root</TH><TH>Updated (GMT)</TH><TH>Hash</TH>\n";
+print HTML " </TR>\n";
+foreach (sort { $mirror_time{$b} <=> $mirror_time{$a} } keys %mirror_time) {
+ print HTML " <TR>\n";
+ # Country
+ print HTML " <TD ALIGN='center'>" . ($mirror_country{$_} eq "N/A" ? "N/A" : "<IMAGE SRC='$image_dir/$mirror_country{$_}.png' ALT='$mirror_country{$_}' TITLE='$mirror_countryname{$_}'") . "</TD>\n";
+ # Mirror URL
+ print HTML " <TD><A HREF='$mirror_url{$_}'>$mirror_url{$_}</A></TD>\n";
+ # Updated
+ my @t = gmtime($mirror_time{$_});
+ print HTML " <TD ALIGN='center'" . ((time() - $mirror_time{$_}) > 604800 ? " BGCOLOR='#FE2E2E'>" : ">") . sprintf("%04d-%02d-%02d %02d:%02d:%02d",$t[5]+1900,$t[4]+1,$t[3],$t[2],$t[1],$t[0]) . "</TD>\n";
+ # Hash
+ print HTML " <TD ALIGN='center'";
+ print HTML " BGCOLOR='#FE2E2E'" if ($mirror_hash{$_} =~ /Error/);
+ print HTML " BGCOLOR='#00FF00'" if ($master_hash && $mirror_hash{$_} eq $master_hash);
+ print HTML ">$mirror_hash{$_}</TD>\n";
+ print HTML " </TR>\n";
+}
+print HTML " </TABLE>\n";
+print HTML " <BR>\n";
+print HTML " {" . join(",", at dist) . "}/{" . join(",", at osarch) . "}/{" . join(",", at osrel) . "}<BR>\n";
+print HTML " <BR>\n";
+print HTML " <A HREF='http://www.opencsw.org/get-it/mirrors'>OpenCSW Mirror List</a><BR>\n";
+print HTML " <BR>\n";
+print HTML " </BODY>\n";
+print HTML "</HTML>\n";
+close HTML;
+
+exit 0;
Property changes on: buildfarm/bin/mirrorstatus/mirrorstatus.pl
___________________________________________________________________
Added: svn:executable
+ *
Added: buildfarm/bin/mirrorstatus/style.css
===================================================================
--- buildfarm/bin/mirrorstatus/style.css (rev 0)
+++ buildfarm/bin/mirrorstatus/style.css 2011-09-30 13:07:21 UTC (rev 566)
@@ -0,0 +1,66 @@
+body {
+ background-color: #ddeeff;
+ font-family: verdana, arial, Helvetica, sanf-serif;
+ font-size: 14px;
+ margin: 0px;
+}
+
+a {
+ text-decoration: none;
+}
+
+.copyright {
+ font-family: Verdana, Arial, Helvetica, sans-serif;
+ font-size: 9px;
+ font-weight: normal;
+ color: #FFFFFF;
+}
+
+#navlist {
+ margin-left: 0px;
+ padding-left: 16px;
+ background-color: #444;
+}
+
+#navlist li {
+ padding-left: 4px;
+ display: inline;
+ list-style-type: none;
+}
+
+#navlist a {
+ padding: 3px 14px;
+}
+#navlist a:link, #navlist a:visited {
+ color: #fff;
+ text-decoration: none;
+ background-color: #036;
+}
+#navlist a:hover {
+ color: #fff;
+ background-color: #369;
+}
+
+
+#trail {
+ padding-left: 20px;
+}
+#main {
+ padding-left: 20px;
+ padding-right: 20px;
+ padding-bottom: 20px;
+}
+
+.error{color:#cc0000;font-weight:bold}
+.success{color:#00cc00;font-weight:bold}
+
+
+table.grid {
+ background-color: #ffffff;
+ border-collapse: collapse;
+}
+table.grid th, table.grid td {
+ padding: 4px;
+ border: 1px solid #000000;
+ font-size: 14px;
+}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
More information about the devel
mailing list