# =========================================================
# Header details
#
# Copyright ........: Frank Schulte (fschulte\@hightek.com)
# Module/method ....: ./sourceforge.net/doc/pkg/cvs
# Version ..........: 00001
# CVS ..............: $Id: index.html,v 1.1.1.1 2001/07/18 01:50:23 fschulte Exp $
# Analyst ..........: FS
# Developers .......: FS  - Frank Schulte (fschulte\@hightek.com)
# Description ......: Installation documentation of cvs
#
#  LastAmended Name
#  ----------- -------------------------------------------------------------
#
# History ..........:
#
# Vers.     Date    SSR   By  Reason
# ----- ----------- ---- ---- ------------------------------
# 00001 01.03.2001  n/a  FS   Move cvs installation documentation into a seperate file.
# =========================================================
0. Changelog: here

# for cvs scurity feature
CVSADMIN_USER=cvsadmin
CVSADMIN_GROUP=cvsadmin

Sources:

http://www.cvshome.org/
ftp://ftp.cvshome.org/pub/cvs-1.11/

cvs-1_11_tar.gz
3. Unpack all downloaded archive files
 

cd ${BASE_SOURCES}/sourceforge.net-binaries-archives/archive

cp -rf * ${BASE_SOURCES}/sourceforge.net-binaries-needed-software/.

cd ${BASE_SOURCES}/sourceforge.net-binaries-needed-software

gzip -d *.gz

find . -type f -print | grep "tar$" | xargs -n 1 tar -xf

ls -1 | grep "tar$" | xargs -n 1 rm -f

4. Installation:

su - normaluser
cd ${BASE_SOURCES}/sourceforge.net-binaries-needed-software

8. Sourceforge.net Installation: Backend

8.1. CVS Server:

cd ${BASE_SOURCES}/sourceforge.net-binaries-needed-software
cd cvs-1.11

8.1.1. Apply needed CVSRoot patch

This will modify to src/root.c file to have a regexp test if the CVS Root directorys is allowed or not. You will find the original files unter src/root.c.orig.

cd src

cp root.c root.c.orig.cvs-1.11

cat ${BASE_SOURCES}/sf-genericinst/patches/cvs_patch.diff | patch -p1

8.1.2. Build CVS

cd ${BASE_SOURCES}/sourceforge.net-binaries-needed-software
cd cvs-1.11

./configure --prefix=${PKG}/cvs/1.11

make

su
<root-password>

make install
 

8.1.3. Configure CVS

su -
<root-password>

grouadd cvsadmin

Add this line to /etc/ined.conf or modify it or outcomment it:
 

cvspserver  stream  tcp nowait  root    /usr/sbin/tcpd  ${PKG}/cvs/1.11/bin/cvs --allow-root=${VAR}/cvs pserver


Restart inted by identifying the PID of the inted dameon and sending it the -HUP siganl:

ps -ax | grep inetd
kill -HUP <inetd-pid>
 

FS: 14.02.2001, we got this information about pserver and version 1.11

Betrifft:
       [alexandria - SF Offsite Talk] RE: Next: anon pserver
 Datum:
       Wed, 14 Feb 2001 11:44:17 -0800
   Von:
       nobody <nobody@sourceforge.net>
    An:
       noreply@sourceforge.net
 
 
 

Read and respond to this message at:
http://sourceforge.net/forum/message.php?msg_id=110040
By: psmith

OK, I figured it out; I used strace to look at what

the cvs command that inetd was starting was doing.
 

For some reason you must provide the -f flag on

the cvs invocation line in 1.11, while you don't need

to in 1.10.8.  I was using exactly the same command

line, except substituting the cvs command from 1.11

and 1.10.8, and the former failed while the latter worked.
 

The strace revealed that 1.11 was trying to access the

.cvsrc file, while 1.10.8 wasn't, so I added -f and now

1.11 works as well.
 

Weird, but I hope it helps someone else.

______________________________________________________________________
You are receiving this email because you elected to monitor this forum.
To stop monitoring this forum, login to SourceForge and visit:
http://sourceforge.net/forum/monitor.php?forum_id=21304

# ================================

Betrifft:
       [alexandria - SF Offsite Talk] right fix (was: RE: Next: anon pserver)
 Datum:
       Fri, 16 Feb 2001 18:54:48 -0800
   Von:
       nobody <nobody@sourceforge.net>
    An:
       noreply@sourceforge.net
 
 
 

Read and respond to this message at:
http://sourceforge.net/forum/message.php?msg_id=111210
By: psmith

OK, I _really_ figured it out this time.  The -f won't solve

the problem I was having (although it is a very slight

efficiency improvement: it saves at least one system

call in 1.11, which is evident from the strace output).
 

However, I was mistaken that this actually fixed my

problem: some fat-fingerage.
 

I did a real debug session and found the real problem: the

patch we are using to allow --allow-root to use subdirs is

too aggressive: it breaks --allow-root with normal dirs.

If you apply it and try to access a CVSROOT in the same

directory as specified by --allow-root, it fails; the patch

_requires_ that you specify a directory above that.  That

seems broken to me, and definitely screwed up my

installation, so I changed it.  I'll upload a replacement

patch to the alexandria web site for those that want it.
 
 

______________________________________________________________________
You are receiving this email because you elected to monitor this forum.
To stop monitoring this forum, login to SourceForge and visit:
http://sourceforge.net/forum/monitor.php?forum_id=21304
 
 

# Setup CVS and set permissions

CVSROOT=${VAR}/cvs
export CVSROOT

${PKG}/cvs/1.11/bin/cvs init

chgrp ${PROJECTS_GROUP} ${PKG}/cvs
chmod g+w ${PKG}/cvs
 

8.3. ProFtpd Installation

8.3.1. Introduction

SourceForge need a ftp server to handle the file releases. As for the genuine SF, we are going to use proftpd. Basically, we need to create an incoming directory and an anonymous ftp space for each project. At this time, we only support the ftp incoming directory.

8.3.2. Making

cd ${BASE_SOURCES}/sourceforge.net-binaries-needed-software
cd proftpd-1.2.0rc2

su -
<root-password>

groupadd ${FTP_GROUP_RUN}
groupadd ${FTP_GROUP}

useradd -m -d ${PKG}/proftpd -g ${FTP_GROUP_RUN} ${FTP_USER_RUN}

# If should not be needed to create the ${FTP_USER} because this is always created by normal Unix distributions. But please check !
#
# useradd -d ${VAR}/lib/${FTP_USER} -g ${FTP_GROUP} ${FTP_USER}

CFLAGS="-I/home/system/pkg/sourceforge.net/postgres/7.1beta1/include -I/home/system/pkg/sourceforge.net/postgres/7.1beta1/lib" install_user=sf-proftpd install_group=sf-proftpd ./configure --prefix=/home/system/pkg/sourceforge.net/proftpd/1.2.0rc2 --sysconfdir=/home/system/pkg/sourceforge.net/proftpd/etc --localstatedir=/home/system/var/sourceforge.net/log/proftpd --with-modules=mod_ldap:mod_linuxprivs:mod_pgsql:mod_quota:mod_ratio --enable-autoshadow
 

make

make install

8.3.3. Configure ProFtpd

1. Outcomment line/s with "ftp" at first charachters in /etc/inetd.conf to disable distribution ftp server. If in the used unix distribution the ftp service is not started by inetd but started standalone you have to disable the startup of this ftp server deamon.

Restart now the inetd deamon with the changed config file.

ps -ax | grep inetd

kill -HUP <inetd-pid>

2. Install the sourceforge.net configuration file:

cd ${PKG}/proftpd/etc
mv proftpd.conf proftpd.conf.orig

cp ${BASE_SOURCE}/sf-genericinst/conf/proftpd.conf.proftpd.1.2.0rc2 proftpd.conf

chown ${FTP_USER_RUN}:${FTP_GROUP_RUN} proftpd.conf

mkdir -p ${VAR}/ftp/incoming
chown -R ${FTP_USER_RUN}:${FTP_GROUP_RUN} ${VAR}/ftp
chmod u+rwx,g+rwx ${VAR}/ftp/incoming

3. Setup welcome.msg and .message

echo "Welcome to the ftp server for domain ${DOMAIN}" >> ${VAR}/ftp/welcome.msg
echo "Please note: only READ access !" >> ${VAR}/ftp/.message
echo "Please note: file WRITE access activated. Issue the command passive before uploading files !" >> ${VAR}/ftp/incoming/.message

chown ${FTP_USER_RUN}:${FTP_GROUP_RUN} ${VAR}/ftp/welcome.msg ${VAR}/ftp/.message ${VAR}/ftp/incoming/.message

4. Install the startupfile

cd /etc/init.d

cp ${BASE_SOURCE}/sf-genericinst/etc/init.d/proftpd.1.2.0rc2 proftpd

cd /etc/init.d/rc2.d
ln -s ../proftpd S20proftpd
ln -s ../proftpd K10proftpd

cd /etc/init.d/rc3.d
ln -s ../proftpd S20proftpd
ln -s ../proftpd K10proftpd

5. Activate the proftpd for SuSe Linux 7.0

Add lines to /etc/rc.config to include the Startup of Proftpd:

echo "#" >> /etc/rc.config
echo "# Should the proftpd Server be started at startup ?" >> /etc/rc.config
echo "#" >> /etc/rc.config
echo "START_PROFTPD=\"yes\"" >> /etc/rc.config

But check before if this is already in there.

6. Start the ProFtpd Service

/etc/init.d/proftpd start

7. Test the connection

ftp localhost
<username>
<pass>

should work.

ftp localhost
anonymous
<your@email>

should bring you in the anonymous account.

cd incoming
passive
put filename

should work in incoming folder.
 
 

8.4. Install Mailman

su -
<root-password>

# create mailman user/group
groupadd ${MAILMAN_GROUP}

useradd -m -g ${MAILMAN_GROUP} -d ${PKG}/mailman ${MAILMAN_USER}

8.4.1. setup directorys and permissions

This is absolutly needed. And it is absolutly needed that you do this very carefull.

mkdir -p ${PKG}/mailman/2.0.1
cd ${PKG}/mailman/2.0.1
chgrp ${MAILMAN_GROUP} .
chmod a+rx,g+ws .

mkdir -p ${VAR}/mailman
cd ${VAR}/mailman
chgrp ${MAILMAN_GROUP} .
chmod a+rx,g+ws .

8.4.2. Find out the DefaultUser the sendmail MTA runs wrapper programs

find /etc -type f -print | grep sendmail.cf

> /etc/sendmail.cf     # for my system

grep -i defaultuser /etc/sendmail.cf

> O DefaultUser=daemon:daemon

# Because of this finding we set --with-mail-gid=daemon

8.4.3. Making

su - normaluser

cd ${BASE_SOURCES}/sourceforge.net-binaries-needed-software
cd mailman-2.0.1

./configure --prefix=${PKG}/mailman/2.0.1 --localstatedir=${VAR}/mailman --with-username=${MAILMAN_USER} --with-groupname=${MAILMAN_GROUP} --with-python=${PKG}/python/2.0/bin/python --with-var-prefix=${VAR}/mailman --with-mail-gid=daemon --with-cgi-gid=${APACHE_GROUP}

make depend
make
make test

su -
<root-password>

make install

>> We get an error from the template folder that it can not move the *.html and *.txt files to *.html.prev and *.txt .prev

8.4.4. Test Installation

cd ${PKG}/mailman/2.0.1

./bin/check_perms

> no problems found => OK !

8.4.5. Setup Apache config:

Add or change the ScriptAlias for the lists virtual server:

ScriptAlias /mailman/ ${PKG}/mailman/2.0.1/cgi-bin/
Copy the mailman images to the Apache global images folder:
cp  ${PKG}/mailman/2.0.1/icons/* ${PKG}/apache/share/icons/.
Add Alias and Directory entrys in apache httpd.conf
Alias /pipermail/ ${VAR}/mailman/archives/public/

<Directory ${VAR}/mailman/archives/public>

AllowOverride None
Options FollowSymLinks
Order allow,deny
Allow from all
</Directory
<Directory ${PKG}/mailman/2.0.1/cgi-bin>
AllowOverride None
Options None
Order allow,deny
Allow from all
</Directory>
Restart Apache Server:
${PKG}/apache/1.3.14/sbin/apachectl startssl
<certificate-passphrase>
8.4.6. Setup mailman crontab

su - ${MAILMAN_USER}
<password>

cd ${PKG}/mailman/2.0.1/cron
crontab crontab.in

8.4.7. Setup system aliases in sendmail

su -
<root-password>

echo "#" >> /etc/aliases
echo "# === START === Mailman 2.0.1 System aliases" >> /etc/aliases
echo "#" >> /etc/aliases
echo "mailman: ${ADMIN_EMAIL}" >> /etc/aliases
echo "mailman-owner: mailman" >> /etc/aliases
echo "#" >> /etc/aliases
echo "sf-mailman: mailman" >> /etc/aliases
echo "#" >> /etc/aliases
echo "# === END === Mailman 2.0.1 System aliases" >> /etc/aliases

newaliases

ps -ax | grep sendmail

kill -HUP sendmail-pid

8.4.8. Set Default Mailman values

echo "DEFAULT_HOST_NAME=lists.sofa.arxes.de" >> ${PKG}/mailman/2.0.1/Mailman/mm_cfg.py
echo "DEFAULT_URL="http://lists.sofa.arxes.de/mailman" >> ${PKG}/mailman/2.0.1/Mailman/mm_cfg.py

8.4.9. Set site password

${PKG}/mailman/2.0.1/bin/mmsitepass <mailman-password>

For testing we choose: TEST
 

8.5. Backend changes:

# Create user that holds the dummy dump files we work with
groupadd sf-dummy
useradd -m -g sf-dummy -d ${VAR}/dummy sf-dummy

8.6. How to setup Mailman Archives in Pipermail for SF:

Betrifft:
       [alexandria - SF Offsite Talk] RE: geocrawler
 Datum:
       Mon, 19 Feb 2001 22:20:49 -0800
   Von:
       nobody <nobody@sourceforge.net>
    An:
       noreply@sourceforge.net
 
 
 

Read and respond to this message at:
http://sourceforge.net/forum/message.php?msg_id=112459
By: psmith

I just fixed this up yesterday.  It's not hard (except, as

always with SourceForge, to find it in the first place :).

Mailman comes with its own archive capability, called

pipermail.  This is a limited capability in that it has _no_

search engine at all.  Other than that it's pretty nice; it

archives by month and lets you view by thread, subject,

author, or date, or download the raw mail text file.
 

If you want to get fancier, Mailman is supposed to integrate

nicely with mhonarc but I've not tried that.
 

Anyway, to get rid of the geocrawler stuff you need to do

two things:
 

First, in the utils/mailing_list_create.pl script (anyway, this

is the script I use in cron to set up my mailing lists) near

the bottom, comment out the last two system() commands

that deal with geocrawler (this keeps you from adding a

geocrawler archiver to your mailing list, and from trying

to set up a new list on geocrawler itself).
 

Second, in www/mail/index.php, change the URL constructor

for the archive to use pipermail instead of geocrawler; I

changed this line:
 

  echo '<A HREF="http://www.geocrawler.com/redir-sf.php3?list='.
 

to this:
 

  echo '<A HREF="http://'.$sys_lists_host.'/pipermail/'.
 

(where $sys_lists_host is defined in your /etc/local.inc to be

your email server).
 
 

______________________________________________________________________
You are receiving this email because you elected to monitor this forum.
To stop monitoring this forum, login to SourceForge and visit:
http://sourceforge.net/forum/monitor.php?forum_id=21304
 

9. Sendmail:

9.1. Basic alias file

Some alias are predefined on Sourceforge, you can find them in SF_ROOT/backend/zones/aliases.zone. This file is a good start to make your own alias file.
 

TODO:

- Add relocatable patches to the SF website code like kevin_koch does:

Betrifft:
       [alexandria - SF Offsite Talk] How we solved navbar issues
 Datum:
       Wed, 07 Feb 2001 12:52:12 -0800
   Von:
       nobody <nobody@sourceforge.net>
    An:
       noreply@sourceforge.net
 
 
 

Read and respond to this message at:
http://sourceforge.net/forum/message.php?msg_id=106727
By: kevin_koch

What we did in /etc/sourceforge.inc was define
 

$sys_sf_path_root="/home/httpd/html/sourceforge";

$sys_sf_html_root="/sourceforge/";
 

and use these variables wherever a hardcoded path used to be.

- Add LDAP COnfiguration HowTo

Betrifft:
       [alexandria - SF Offsite Talk] RE: SF 2.5 - LDAP schema elements
 Datum:
       Thu, 08 Feb 2001 01:40:29 -0800
   Von:
       nobody <nobody@sourceforge.net>
    An:
       noreply@sourceforge.net
 
 
 

Read and respond to this message at:
http://sourceforge.net/forum/message.php?msg_id=106961
By: osvaldsson

I made the following in /usr/local/etc/openldap/schema/sourceforge.schema

Wich I then included in the slapd.conf
 

# Sourceforge Project's directory schema items

# by Olafur Osvaldsson (osvaldsson@users.sourceforge.net)

#

# depends upon:

#       core.schema

#       cosine.schema

#       inetorgperson.schema

#       nis.schema

#

attributetype ( 1.1.2.2.2 NAME 'x-cvsShell'

        DESC 'The path to the CVS login shell'

        EQUALITY caseExactIA5Match

        SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE )
 

objectclass ( 1.1.2.2.1 NAME 'x-sourceforgeAccount' SUP posixAccount

        DESC 'Abstraction of a Sourceforge account'

        MAY ( x-cvsShell ) )
 

# ===

Betrifft:
       [alexandria - SF Offsite Talk] RE: projects not being associated with troves
 Datum:
       Thu, 15 Feb 2001 17:23:33 -0800
   Von:
       nobody <nobody@sourceforge.net>
    An:
       noreply@sourceforge.net
 
 
 

Read and respond to this message at:
http://sourceforge.net/forum/message.php?msg_id=110722
By: mogul

Awesome timing... I was just about to start debugging this.  I'm noticing that
there are similar problems where scripts assume there is already a LOT of live
data... For example rotate_activity.php assumes that you already have
activity_log_old and activity_log_old_old; if you don't the rotation transaction
is cancelled.  Watch out for that!  I'll be submitting a couple other minor
patches soon.

______________________________________________________________________
You are receiving this email because you elected to monitor this forum.
To stop monitoring this forum, login to SourceForge and visit:
http://sourceforge.net/forum/monitor.php?forum_id=21304
 

# ===
 
 

- Setup DNS-Server to work with autogenerated zonefiles. Setup DNS-Server for sofa.arxes.de

- Setup the backend cronjobs to do their jobs

- Setup sendmail backend

- Paul Legatos PATCH tp get SF running

Betrifft:
       [alexandria - SF Offsite Talk] RE: SF 2.5 cron
 Datum:
       Mon, 19 Feb 2001 15:53:33 -0800
   Von:
       nobody <nobody@sourceforge.net>
    An:
       noreply@sourceforge.net
 
 
 

Read and respond to this message at:
http://sourceforge.net/forum/message.php?msg_id=112369
By: pjlegato

Hi,

I've spent the last few weeks trying to get everything up and running with
SourceForge. I must say the documentation is abysmal and the 2.5 release is
definately not an out-of-the-box piece of software. The dump files are made
by a Perl script called backend/DatabaseDump.pl, but this doesn't work without
extensive modifications. I made a patch of everything I've done to it. CVS works
and project creation works, and not much else. Feel free to give it a try, however.
It's at
http://www.arrayservices.com/~pjlegato/SF-update.patch .. Made with "diff -Nur
SF2.5-original/ SourceForge2.5/ >SF-update.patch". It will require some editing
still since everything there is set up for our site, but maybe it'll help..

Good luck,

-Paul

pjlegato@arrayservices.com

______________________________________________________________________
You are receiving this email because you elected to monitor this forum.
To stop monitoring this forum, login to SourceForge and visit:
http://sourceforge.net/forum/monitor.php?forum_id=21304
 

# === END ===

# GOOD Documentation of an SF 2.0 Installation

http://www.zoy.org/~guillaum/SF/
 

# Example Documentation of an SF 2.0 Installation
 

                 BY: garyshi
                 DATE: 2000-Aug-06 23:30
                 SUBJECT: my notes of sourceforge installation

                 * /etc/local.inc -> SFHOME/www/include/local.inc
                 <?PHP
                 $sys_dbhost = "localhost";
                 $sys_dbname = "sourceforge";
                 $sys_dbuser = "sourceforge";
                 $sys_dbpasswd = "sfpasswd";
                 $sys_server = "mysql";

                 $sys_name = "forge";
                 $sys_urlroot = "/home/sourceforge/www/";
                 $sf_cache_dir = '/home/sourceforge/cache/';
                 $sys_default_domain = "forge.itrans.com.cn";
                 $sys_lists_host = 'forge.itrans.com.cn';
                 $sys_download_host = 'forgedl.itrans.com.cn';

                 $FTPINCOMING_DIR = '/home/ftp/incoming/';
                 ?>

                 * mkdir SFHOME/cache
                 chown nobody.nobody SFHOME/cache
                 mkdir SFHOME/download
                 make a download virtual host entry to SFHOME/download

                 * https -> http changes
                 - account/change_email-confirm.php, line 22
                 - account/login.php, line 80
                 - account/lostpw-confirm.php, line 24
                 - account/register.php, line 66, 112

                 * docman fix
                 - docman/display_doc.php:
                 require('doc_utils.php') -> require('./doc_utils.php');
                 - docman/index.php:
                 require('doc_utils.php') -> require('./doc_utils.php');
                 - docman/new.php:
                 require('doc_utils.php') -> require('./doc_utils.php');

                 * download "clear.gif" from www2.valinux.com to www/images, and fix link:
                 include/pre.php, "http://www2.valinux.com/clear.gif"; -> "/images/clear.gif"

                 * include/menu.php
                 - add function menu_siteadmin():
                 function menu_siteadmin() {
                 menuhtml_top('Site Administrator');
                 print '
                 <A class=menus href="/admin/">Main entry</A><BR>
                 <A class=menus href="/admin/grouplist.php">Group Admin</A><BR>
                 <A class=menus href="/admin/approve-pending.php">Approve Pending Projects</A><BR>
                 <A class=menus href="/admin/trove/trove_cat_list.php">Trove Cat List</A><BR>
                 <A class=menus href="/admin/trove/trove_cat_add.php">Trove Cat Add</A>
                 ';
                 menuhtml_bottom();
                 }

                 * include/pre.php
                 - "require('/etc/local.inc')" -> "require('local.inc')"
                 - site admin menu, line 244:
                 if (user_is_super_user())
                 echo menu_siteadmin();

                 * other fixes
                 diff -r sourceforge/www/mail/admin/index.php SF1.5/www/mail/admin/index.php
                 97,99c97
                 < <BR><B>projectname-listname@';
                 < echo $GLOBALS['sys_lists_host'];
                 < echo '</B>
                 ---
                 > <BR><B>projectname-listname@<?php echo $GLOBALS['sys_lists_host']; ?></B>
                 112,114c110
                 < <B>'.group_getunixname($group_id).'-<INPUT TYPE="TEXT" NAME="list_name" VALUE="" SIZE="10" MAXLENGTH="12">@';
                 < echo $GLOBALS['sys_lists_host'];
                 < echo 'lists.sourceforge.net</B><BR>
                 ---
                 > <B>'.group_getunixname($group_id).'-<INPUT TYPE="TEXT" NAME="list_name" VALUE="" SIZE="10" MAXLENGTH="12">@lists.sourceforge.net</B><BR>185,187c181
                 < <TD><A href="http://';
                 < echo $GLOBALS['sys_lists_host'];
                 < echo '/mailman/admin/'
                 ---
                 > <TD><A href="http://".<?php echo $GLOBALS['sys_lists_host']; ?>."/mailman/admin/'

                 diff -r sourceforge/www/softwaremap/trove_list.php SF1.5/www/softwaremap/trove_list.php
                 16c16
                 < if (!$form_cat) $form_cat = 1;
                 ---
                 > if (!$form_cat) $form_cat = 18;

                 * my SFHOME/scripts: include.pl and db_filerelease.pl
                 - include.pl is copied from ../backend with several lines added at top:
                 $sys_dbhost = "localhost";
                 $sys_dbname = "sourceforge";
                 $sys_dbuser = "sourceforge";
                 $sys_dbpasswd = "sfpasswd";
                 $sys_server = "mysql";

                 $sys_urlroot = "/home/sourceforge/www/";
                 $sys_name = "forge";

                 $sf_cache_dir = "/home/sourceforge/cache/";
                 $sys_default_domain = "192.168.0.253";
                 $FTPINCOMING_DIR = '/home/ftp/incoming/';
                 and changed $config{'hostname'} to 'forge'.
                 and a new sub: db_connect
                 sub db_connect {
                 $dbh = DBI->connect("DBI:mysql:$sys_dbname:$sys_dbhost", "$sys_dbuser", "$sys_dbpasswd");
                 }
                 - a new file "db_filerelease.pl" to support sourceforge file releases:
                 (should be in cron, run every 2 minutes)

                 #!/usr/bin/perl
                 use DBI;

                 require "include.pl";
                 $sys_download_dir = '/home/sourceforge/download';

                 &db_connect;

                 $fr = $dbh->prepare("SELECT filerelease_id,group_id,filename FROM filerelease WHERE status='N'");
                 $group = $dbh->prepare("SELECT unix_group_name FROM groups WHERE group_id=?");
                 $update = $dbh->prepare("UPDATE filerelease SET status='A' WHERE filerelease_id=?");

                 $fr->execute();
                 while (($fr_id,$fr_group,$fr_file) = $fr->fetchrow()) {
                 $group->execute($fr_group);
                 $group->rows || next;
                 ($unix_group_name) = $group->fetchrow();
                 if (-e "$sys_download_dir/$unix_group_name") {
                 -d "$sys_download_dir/$unix_group_name" || next;
                 } else {
                 mkdir("$sys_download_dir/$unix_group_name",0755) || next;
                 }
                 system("mv $FTPINCOMING_DIR/$fr_file $sys_download_dir/$unix_group_name");
                 $update->execute($fr_id);
                 }