转自:http://eva.iteye.com/blog/441391
1. 安装和配置
下载 gforge 5.6 ce 版本的 vmware 虚拟机
启动后按照 vmware 压缩包中的 readme.txt 中说明操作设置网络、主机名和一些基本配置
>ifconfig #查看现有虚拟机ip地址
>system-config-network #设置为静态IP地址
>hostname xxxxxxxxx #设置新的主机名
>cd /opt/gforge5
>php change-hostname.php #设置新的主机名
修改如下文件中对主机名的引用
* /etc/mail/local-host-names
* /etc/hosts
* /etc/sysconfig/network
* /etc/gforge/gforge.conf
* /etc/gforge/httpd.conf
* /etc/gforge/plugins/mailman/mailman.conf
重启sendmail、apache
>/etc/init.d/sendmail restart
>/etc/init.d/httpd restart
重新装载gforge configuration cache:
>php /opt/gforge5/bin/create_config_cache.php
注意:
一定要执行 "hostname" 命令修改 hostname 为你在执行 change-hostname.php 中所输入的主机名
如果sendmail 启动很慢,请修改 /etc/hosts 文件,将上述设置的主机名以及ip地址映射加入其中
gforge 主要配置和目录
/etc/gforge #配置文件
gforge5-db-conf.php
gforge.conf
httpd.conf # <-----包括 svn dav 配置
license.accepted
/opt/gforge5 #gforge的安装目录
www #Web页面(包括php)
cron* #crontab 相关文件
2.注册用户
用户注册时gforge会发送邮件确认,但是可以直接通过gforgeadmin管理员登录后启用注册的用户,不需要真的做邮件确认。
3.创建项目
任何人都可以新建项目,但是必须要得到管理员的审批后才可以启用,否则是不能给外部用户使用的。
4.项目权限
“公开”项目:所有用户都可以看到项目,并且可以进入项目中查看项目信息,针对查看项目的权限通过项目的“非项目成员权限设定”,“角色权限设定”进行权限控制。
对于“公开”项目,其他用户可以自己选择加入项目,该项目的负责人可以申请进行审批,通过后申请用户就转为“项目成员”。
“私有”项目:只有该项目的“项目成员”才可以看到此项目,项目成员的权限根据该成员的角色决定其对项目具有哪些操作权限。
“非项目成员权限”:设定最基本的权限规则,其中包括项目的“公开” 和 “私有”
权限”公开“:不受限制访问
权限”私有“:必须是项目成员才能访问
"角色权限”:设定项目成员各角色针对功能的访问权限
5.版本库权限
SVN版本库的权限设置生效最长延时15分钟,由于gforge中是通过crontab定时根据系统中的角色信息更新svn访问控制文件和口令认证文件。
crontab 配置 /opt/gforge/crontab.in
cron15.php 每15分钟执行一次,其中 plugins/scmsvn/cronjobs/create_dav_svn_auth.php 脚本负责更新
/var/lib/gforge/svnroot-access
/var/lib/gforge/svnroot-authfile
6.邮件列表
7.讨论区
8.任务
9.议题
10.文件
11.档案发布
产品版本管理:新增档案,新增发行版本,此档案包和发行版本会出现在Bug提交
12.新闻
13.gforge定时任务
15分钟执行一次的任务/opt/gforge5/cron15.php
/plugins/scmcvs/cronjobs/create_users_groups.php`; #CVS 用户组创建/更新/删除
/plugins/scmcvs/cronjobs/create_cvs.php`; #CVS资源库创建/更新/删除
/plugins/mailman/cronjobs/create_lists.php`; #mail man邮件列表创建/更新/删除
/plugins/scmsvn/cronjobs/create_svn.php`; #svn 资源库创建/更新/删除
/plugins/scmsvn/cronjobs/create_dav_svn_auth.php`; #svn 通过apache访问的权限控制、口令认证文件创建/更新/删除
/plugins/scmcvs/cronjobs/ssh_create.php`; #ssh 配置创建/更新/删除
/cronjobs/mail_aliases.php`; #邮件列表创建/更新/删除
每天执行一次的任务/opt/gforge5/crondaily.php
/plugins/scmcvs/cronjobs/cleanup.php`; #cvs清除
/cronjobs/purge_old_entries.php`; #删除无用和过期的内容
/cronjobs/update_trove_count.php`; #统计访问量
/cronjobs/db_stats.php`; #数据库状态
/plugins/scmsvn/cronjobs/parse_svn_history.php`; #分析svn历史
/plugins/scmcvs/cronjobs/parse_cvs_history.php`; #分析cvs历史
/plugins/tracker/cronjobs/pending_tasks_email.php`; #待处理任务邮件通知
如果需要定时任务相关功能立即生效可在命令行执行
>php /opt/gforge5/cron15.php 或者 crondaily.php 手动触发该任务的执行。
postgreSql
1、man psql 查看psql操作说明手册
2、\?看帮助指令
3、\dt 看所有的表
///
Gforge5 使用过程中的FAQ
1) 我创建了一个项目,但是只能以Gforge管理登录后在 [管理]->[项目维护] 处进行搜索后才能发现。没有出现在主页的[最近创建的项目] 下面,怎么办?
答:这个是因为新创建的项目默认是私有的,并未公开,你只需要以管理员身份搜索到这个项目后,在这个项目的首页上选择左边菜单中的[管理] ,然后选择右边的[管理员选项]->[编辑非会员权限] 把“Project-wide access” 设置为 公开 即可。
2) 有成员说他已经申请加入项目,要求项目管理员审批,我作为管理员,在哪里可以看到他的申请?
答:在这个项目的首页上选择左边菜单中的[管理] ,然后选择右边的[管理员选项]->[Browse Project Join Requests] 即可看到申请。
3) 我创建了一个项目,在这个项目的首页上选择左边菜单中的[SVN] ->[浏览] ,出现错误:The SCM repository for this project hasn't been created yet. It will be created in the next few minutes. 但这个信息提示长久存在,说明SVN库没有创建。怎么办?
分析:
查 /var/lib/gforge/svnroot 发现目录下是空的,确实没有创建任何项目源码库。
查 /opt/gforge5/plugins/scmsvn/cronjobs 是有内容的。create_svn.php 等4个文件是存在的。
查 /opt/gforge5/plugins/scmsvn/conf/scmsvn.conf 内容如下:
/* SVNROOT path */ $config['localSVNRoot'] = '/svnroot'; /* Path where SVN binaries (svn, svnadmin) are located (tries to automatically detect it) */ $config['svnpath'] = dirname(trim(`which svn`)); $config['reposType'] = 'fsfs'; /* SVN --> Tracker integration */ $config['debug'] = false; $config['debugFile'] = "/tmp/svntracker-debug"; /* Use SSH instead of DAV */ $config['useSSH'] = false; /* Default ID of the SCM server to use for the new projects */ /*$config['defaultScmServerId'] = 2;*/ /* ID of this SVN server. This must be the same ID that the one on the "scm_server" table. Only used if system.splitScmServers=true. In that case, only the repositories linked to this server will be created by the cronjobs */ /*$config['scmServerId'] = 2;*/
其中:$config['svnpath'] = dirname(trim(`which svn`)); 表明它是找系统默认的SVN安装路径的。
执行 which svn
返回:/usr/bin/svn
说明 SVN 已经安装。
那问题出在哪里,google 查找:"gforge Repository not created" 找到一篇帖子又提到:crontab.in 是定期运行任务的配置文件。 find / -name crontab.in 返回:
/opt/gforge5/crontab.in
内容如下:
[root@retailsolution home]# more /opt/gforge5/crontab.in # # GFORGE CRONJOBS # */10 * * * * cd /opt/gforge5 && /usr/bin/php -d include_path=".:/opt/gforge5:/opt/gforge5/lib:/opt/gforge5/plugins:/opt/gforge5/lib/external" /opt/gforge5/bin/gforge cronjob /opt/gforge5/cronjobs/send_notification_queue.php */15 * * * * cd /opt/gforge5 && /usr/bin/php -d include_path=".:/opt/gforge5:/opt/gforge5/lib:/opt/gforge5/plugins:/opt/gforge5/lib/external" /opt/gforge5/cron15.php 15 3 * * * cd /opt/gforge5 && /usr/bin/php -d include_path=".:/opt/gforge5:/opt/gforge5/lib:/opt/gforge5/plugins:/opt/gforge5/lib/external" /opt/gforge5/crondaily.php # # END OF GFORGE CRONJOBS #
有关cronjob中的各种job 的作用可参考:http://gforgegroup.com/es/help.php?section=project-scmsvn
在cron15.php 内容如下:
// Check locks $lock_file = '/tmp/gforge_cron15.lock'; $fp = fopen($lock_file, "w+"); if (!$fp) { return; } if (!flock($fp, LOCK_EX | LOCK_NB)) { // Couldn't acquire exclusive lock, means another process is running return; } $base_str='cd /opt/gforge5 && /usr/bin/php -d include_path=".:/opt/gforge5:/opt/gforge5/lib:/opt/gforge5/plugins:/opt/gforge5/lib/external" /opt/gforge5/bin/gforge cronjob /opt/gforge5'; #Project Hosting Cronjob #`$base_str/plugins/scm/cronjobs/scm_checkout_www.php`; `$base_str/plugins/scmcvs/cronjobs/create_users_groups.php`; `$base_str/plugins/scmcvs/cronjobs/create_cvs.php`; `$base_str/cronjobs/filesystem_index.php`; `$base_str/plugins/mailman/cronjobs/create_lists.php`; `$base_str/plugins/scmsvn/cronjobs/create_svn.php`; `$base_str/plugins/scmsvn/cronjobs/create_dav_svn_auth.php`; `$base_str/plugins/scmcvs/cronjobs/ssh_create.php`; `$base_str/cronjobs/mail_aliases.php`; #FTP Cronjob #`$base_str/cronjobs/ftp_create_directories.php`; flock($fp, LOCK_UN); fclose($fp);
因为 Create_svn.php 就是为项目创建SVN库的。所以Gforge安装后的配置是正确的,理论上应该能自动为项目创建svn库。 不过这段代码要能被运行到,必须满足上面的 lock '/tmp/gforge_cron15.lock' 的锁定条件。经检查发现:该文件不存在。先手工运行cron15.php:
cd /opt/gforge5
php cron15.php
两分钟后运行成功。
再次在这个项目的首页上选择左边菜单中的[SVN] ->[浏览] 一切正常!
4) Gforge 注册用户后,选择加入了某个项目,按照这个项目的SVN访问信息进行访问,提示验证失败,为什么?
答:在第3个问题没有解决之前,确实存在如你所说的问题,但在第3个问题解决以后,我在SVN客户端使用你注册的用户进行Check Out是可以的。也就是说要先检查项目的SVN库有没有创建成功。
5) 我发现Gforge5 的中有集成mailman, 在我的项目下面有自动生成的一个邮件列表,但我给这个列表发邮件确被退了回来,而且退回的邮件log显示根本没有达到我的sendmail服务器,请问这如何解决?
答:你的服务器是通过ADSL路由器的虚拟服务器,你的Sendmail默认已经有在25端口上监听了,不过是在127.0.0.1:25上监听,你需要在你的服务器的局域网地址上也监听25端口。此外你的域名 DNS的MX记录必须指向你的服务器,而一般动态域名的默认MX记录设置都不对,你需要修改。所以你需要做的就是:
1、在/etc/mail/sendmail.cf 中 添加smtp监听,如下所示:
# SMTP daemon options
O DaemonPortOptions=Port=smtp,Addr=127.0.0.1, Name=MTA
O DaemonPortOptions=Port=smtp,Addr=192.168.100.134, Name=MTA
关于sendmail的简单配置,可参考:
http://www.5dmail.net/html/2004-10-26/20041026133839.htm
http://www.libing.name/2008/02/22/sendmail-install-config.html
2、添加MX记录,如下所示:
设置完成后,重启sendmail , 这样你的sendmail就可以收外部发来的邮件了,mailman上的邮件列表才能起作用。
6) 我现在mailman邮件列表已经能正常的使用了,关于中文问题,所有的列表成员收发中文邮件都没有问题,不会出现乱码,但是我发现邮件列表的历史归档有中文问题:所有的历史归档的邮件标题都能正常显示中文,但是有部分邮件内容是乱码,主要是中文乱码。这是怎么回事?
答:如果你加一个gmail的邮件用户作为你列表的成员,然后你用outlook发邮件给列表,当你的gmail用户收到内容时,看邮件的原始文件,可以发现出现乱码的邮件内容默认是gb2312编码的,网上的观点认为:mailman 默认邮件内容是utf-8 编码,而且所有的模板文件也都是utf-8编码的。所以每个成员,不管使用什么邮件客户端,都必须设置发邮件时使用的是utf-8编码。
相关实验:
6.1) Defaults.py文件中的所有国家设置的基本都是utf-8编码。 如果你在Defaults.py中设置中国对应 gb2312, 那么由于所有的模板文件都是utf-8的,所以你通过web查看邮件列表管理界面的时候什么都不显示,实际上是字符集处理出错了。所以不能这么做。
6.2) 如果通过Foxmail 5.0给邮件列表发邮件,邮件的中文内容在邮件列表的web归档中可以正常显示。不管你在发Foxmail邮件时,字符集选择GB2312 还是 UTF8 . 都没有问题。
6.3) 如果通过outlook 给邮件类表发邮件, 则历史归档显示邮件内容的中文是乱码。你必须在
outlook -> 工具->选项 ->邮件格式 -> 国际选项中 设置发邮件使用的字符集为 UTF-8 ,这样中文邮件在邮件列表的web归档中才可以正常显示。
如果选择GB2312, 就会出现乱码。但邮件标题不会乱,这是因为邮件标题总是以utf-8编码的。列表中的所有人收到的邮件也不会乱,估计是邮件列表吧内容转发给其他列表成员是没有做任何处理。但是存储到归档的时候却做了一些处理。而处理时,它假设邮件内容都是utf-8编码,所以就错了。
6.4) 如果使用gmail的在线邮件编辑完成中文邮件的书写,然后发给mailman 邮件列表,则历史归档显示邮件内容的中文是乱码。你需要设置外发邮件时使用utf-8编码,如下图:
6.5) 总结如下:
请使用utf-8编码发邮件:
1) 如果你使用outlook , 则需要在工具->选项->邮件格式->国际选项中 设置发邮件使用的字符集为 UTF-8.
2) 如果你使用outlook express , 则需要在工具->选项->发送->国际设置 中设置默认编码为UTF-8
3) 如果你使用Foxmail 5.0以上,则很幸运,你不需要特殊设置.
4) 如果你是用Gmail Web版,则需要在设置->外发邮件编码->选择对于外发邮件使用UTF-8编码.
以上工作都是一次性的设置工作,如果你不这么做,则虽然其他人收到的邮件是能正常显示中文,但是邮件列表归档中的中文会出现乱码,为了大家日后查询方便,请遵从技术交流社区的统一规则,使用UTF-8编码.
6.6) 2009年1月28日,我使用MHonArc 来替代默认的pipemail 作为mailman的归档程序,并使用def-mime.mrc作为模板,这个问题就被解决了。不管客户端使用GB2312还是UTF8发邮件,都没有问题。归档程序都能进行正确的转换。 详情可查看:mailman 集成 MHonArc 操作指南
7) 我现在mailman邮件列表已经能正常的使用了,但没有搜索引擎,将来查找很麻烦,有何解决方案?
答: 你可以使用google自定义搜索,参考:使用google自定义搜索引擎
8) 针对某个邮件列表,我如何限制只有hand-china.com结尾的邮件会被列表接受,其他邮件都丢弃呢?
答:在隐私-> 发送端过滤器 :
默认情况下,列表新成员的信件是否被暂存? 不
非成员过滤器
其信件应当被自动接受的非成员地址清单 : ^/hand-china.com$/
当一个没有被显式指定处理方法的非成员向列表发信时应执行的动作: 丢弃
被自动丢弃的非成员信件是否应该被转发给列表管理员?不
9) 我是用Gforge CE 5.5 rc4 版本 ,发现成员收到的pending_task 邮件提醒中的中文都是乱码,如何处理?
答:发送邮件是由Crondaily.php 中的一行命令驱动的:命令如下:
/usr/bin/php -d include_path=".:/opt/gforge5:/opt/gforge5/lib:/opt/gforge5/plugins:/opt/gforge5/lib/external" /opt/gforge5/bin/gforge cronjob /opt/gforge5/plugins/tracker/cronjobs/pending_tasks_email.php
分析 pending_tasks_email.php ,在发邮件前加log; 运行后可在php.log(文件位置在php.ini中指定)中查看。 $email的内容含中文正常,可见是由于SystemUtils::sendMail导致的乱码。
error_log($email);
SystemUtils::sendMail($subject, $email, $User->getEmail());
SystemUtils.php 在lib目录下,经过加密了无法改,可使用php自带的mail函数取代这个SystemUtils::sendMail。改完后就可以有正常的中文了,可改成这样:
#error_log($email);
#SystemUtils::sendMail($subject, $email, $User->getEmail());
$from ="Gforge<no-replay@gforge.retailsolution.cn>";
$subject = "=?UTF-8?B?".base64_encode($subject)."?=";
$header="From:$from\nReply-To:$from\nX-Mailer: PHP/".phpversion()."\nContent-Type:text/html;charset='UTF-8'"."\nSubject:$subject";
mail($User->getEmail(),$subject,$email,$header);
#error_log($header);
这个字符集问题在5.6 CE正式版中已经被解决。但5.6CE正式版发布时,邮件问题依然是有的,不过不是乱码问题,而是邮件头中指定字符集有问题,导致收到邮件的人在查看邮件时,需要指定字符集查看,而且由于邮件头中的字符集指示错误,导致邮件显示格式错乱。不过这个Bug在几天后就出了一个patch,patch地址如下:
http://gforge.org/gf/project/as-help/tracker/?action=TrackerItemEdit&tracker_item_id=6130
彻底解决这个问题,你可以:
第1步:升级到5.6 CE正式版,从5.6 rc 升级到5.6正式版很简单,请参考解压缩后的ChangeLog文件。
第2步:打patch.
10) 我的Gforge 使用81端口,但是Gforge 发出的待定任务邮件通知中的链接使用的默认80,没有端口号,我如何才能让Gforge发出的邮件中的链接带上端口号?
答:可以更改pending_tasks_email.php 文件,找到 $email .= "*** {$due} ***\n"; 把下面的代码改成如下:(备注substr时,取31是因为我的域名http://gforge.retailsolution.cn 的长度是31)
$email .= "*** {$due} ***\n";
$TrackItemUrl=GFUrl::getFullURL(GFUrl::getUrl()->projectURL($project_unix_name, 'TrackerItemEdit', 'tracker','',array('tracker_id'=>$tracker_id,'tracker_item_id'=>$tracker_item_id)), true)."\n";
$TrackItemUrl=substr($TrackItemUrl,0,31).":81".substr($TrackItemUrl,31,-1);
$email .= $TrackItemUrl;
$email .= "\n";
$count++;
11)我发现Gforge 每个成员的 【我的首页】 中对pending_task的邮件提醒默认选项是 disable ; 我如何批量改成Enable 以便于强制成员收到邮件提醒?
答:在5.6版的Gforge中我还未发现有此功能,但是可以安装一个phpPgAdmin 软件,登录后,执行如下SQL语句:
delete from monitor where section='pending_tasks';
insert into monitor ( select 'pending_tasks',0 ,user_id from public.user);
12) Gforge CE 5.6版本,我收到的监控邮件中的中文都是乱码,怎么解决?
答:可参考我在 Gforge AS-Help 项目提的 Bug跟踪:
http://gforge.org/gf/project/as-help/tracker/?action=TrackerItemEdit&tracker_item_id=6134&tracker_id=6134
i solved this Issue :
1) In $Gforge\plugins\forum\lib\ForumMessageNotification.php
find the line:
$body .=
StringUtils::getPlainUTF8FromHtml($this->ForumMessage->getBody()) ."
\n";
Replace to :
$body .= $this->ForumMessage->getBody() ." \n";
2) In $Gforge\plugins\tracker\lib\TrackerItemNotification.php
2.1)find the line:
$body .= "\n\nInitial Comment:".
"\n".
utf8_encode(StringUtils::getPlainUTF8FromHtml(StringUtils::unHtmlSpecialChars($this->TrackerItem->getDetails())))
.
Replace to :
$body .= "\n\nInitial Comment:".
"\n".
StringUtils::unHtmlSpecialChars($this->TrackerItem->getDetails()) .
2.2)find the line
$body .= "\n\nComment:\n".
utf8_encode(StringUtils::unHtmlSpecialChars($followup->getBody()));
Replace to:
$body .= "\n\nComment:\n".
StringUtils::unHtmlSpecialChars($followup->getBody());
Now ,it's OK .
I Received the track email , it's content is correct in chinese . thank you for
Concerned about this issue
12) 如何批量增加用户对业务讨论区的监视
答:
对业务讨论区的监视:
delete from monitor where section='forum' and ref_id=7;
insert into monitor ( select 'forum',7 ,user_id from public.user_project where project_id =4);
delete from monitor where section='forum' and ref_id=7 and user_id in (126,124,118,119,123,121,101);
--监视请您决策-管理六部
delete from monitor where section='tracker' and ref_id=17;
insert into monitor ( select 'tracker',17 ,user_id from public.user_project where project_id =4);
delete from monitor where section='tracker' and ref_id=17 and user_id in (126,119,123,121,101);