Team1工作记录

我认领一篇: 我认领一篇:
Perl.com: Installing mod_perl without superuser privileges
"By Stas Bekman"
http://www.perl.com/lpt/a/2002/04/10/mod_perl.html
我找过,还没有...
我找过,还没有人翻译过,这篇文章很老吗?我都翻译的差不多了,那就先内部交流吧,个人感觉这篇文章适合初学者,内容不深奥。先贴上1/3:

以非超级用户身份安装 mod_perl
By Stas Bekman
April 10, 2002

就像大家从以前的文章里看到的,mod_perl 使Apache由两个组件组成: Perl 模块和 Apache 本身。
虽然以非超级用户权限安装Apache很简单,但是应该知道如何安装在非系统位置的Perl模块。本文我将
论证几种方法来实现这个任务。

在这些例子里,我将用stas作为用户名,/home/stas作为该用户的私人目录。

安装Perl模块到选择的目录
既然不用超级用户权限,那么你就不允许安装到系统目录,象/usr/lib/perl5。你需要找到如何在你的私人目录安装这些模块的方法。
这很容易。

首先,你需要决定安装这些模块到什么地方。最简单的途径就是在你的私人目录下模仿与Perl有关的根目录文件系统的移植。
实际上,我们只需要两个目录:
/home/stas/bin
/home/stas/lib
既然他们会在第一个模块被安装时自动创建,那么我们就不必创建它们。99%的文件将被拷贝到lib目录下。
有时候,当一些模块随着Perl脚本发布的时候会被拷贝到bin目录。如果目录不存在会被创建。

让我们安装CGI.pm包,该包包含了一些其它CGI::*模块。通常,从CPAN库下载该包,解开该包并进入新建的目录里。

现在做一个标准的perl文件Makefile.PL去准备Makefile.但是这个时候让 MakeMaker 用你的Perl安装目录,而不是缺省的。

% perl Makefile.PL PREFIX=/home/stas
PREFIX=/home/stas 只是安装过程不同于通常的一部分。 注意如果你不在意MakeMaker如何选择剩下的目录,或者如果你正在
用一个需要显式指明所有目的目录的老版本,那么这样做:
% perl Makefile.PL PREFIX=/home/stas \
INSTALLPRIVLIB=/home/stas/lib/perl5 \
INSTALLSCRIPT=/home/stas/bin \
INSTALLSITELIB=/home/stas/lib/perl5/site_perl \
INSTALLBIN=/home/stas/bin \
INSTALLMAN1DIR=/home/stas/lib/perl5/man \
INSTALLMAN3DIR=/home/stas/lib/perl5/man3
剩下的跟通常一样:

% make
% make test
% make install
make install 安装所有的文件到私人目录。注意所有丢失的目录会被自动创建,因此没有必要创建它们。
以下就是这么做的(稍微改动过):
Installing /home/stas/lib/perl5/CGI/Cookie.pm
Installing /home/stas/lib/perl5/CGI.pm
Installing /home/stas/lib/perl5/man3/CGI.3
Installing /home/stas/lib/perl5/man3/CGI::Cookie.3
Writing /home/stas/lib/perl5/auto/CGI/.packlist
Appending installation info to /home/stas/lib/perl5/perllocal.pod
如果你不得不用显式目的参数,那么不用单个PREFIX参数,你会发现建立一个被调用的文件很有用。
例如, ~/.perl_dirs (这里 ~ 在我们的例子中是 /home/stas) 的内容包含:
PREFIX=/home/stas \
INSTALLPRIVLIB=/home/stas/lib/perl5 \
INSTALLSCRIPT=/home/stas/bin \
INSTALLSITELIB=/home/stas/lib/perl5/site_perl \
INSTALLBIN=/home/stas/bin \
INSTALLMAN1DIR=/home/stas/lib/perl5/man \
INSTALLMAN3DIR=/home/stas/lib/perl5/man3
从现在起,任何时候你想本地化安装Perl模块就可以这样执行:
% perl Makefile.PL `cat ~/.perl_dirs`
% make
% make test
% make install
用这个方法,你可以很容易地保持不同Perl模块的存储。例如,你可以一个用作production Perl,另一个
用作开发。
% perl Makefile.PL `cat ~/.perl_dirs.production`
或者
% perl Makefile.PL `cat ~/.perl_dirs.develop`
做你自己的脚本能发现本地化安装这些Perl模块通常都放在四个主要目录。为了找到这些目录,执行:
% perl -V
输出包含重要的perl安装信息。最后你将看到:
Characteristics of this binary (from libperl):
Built under linux
Compiled at Apr 6 1999 23:34:07
@INC:
/usr/lib/perl5/5.00503/i386-linux
/usr/lib/perl5/5.00503
/usr/lib/perl5/site_perl/5.005/i386-linux
/usr/lib/perl5/site_perl/5.005
.
这向我们表明Perl特殊变量@INC的内容,这个特殊变量通常被Perl用来查找模块的。它等价于Unix shells里的PATH环境变量,
是用来查找可执行程序的。

--------------------------------------------------------------------------------
相关阅读:
Practical mod_perl
By Stas Bekman, Eric Cholet
--------------------------------------------------------------------------------

注意Perl也在.目录(代表当前目录)查找模块,这是在以上输出目录里的最后的入口路径。
当然,这个例子来自5.00503版本的perl, 它安装在我的x86结构PC的Linux中。这就是为什么你看到了i386-linux和5.00503.
如果你的系统运行着不同版本的perl、操作系统、处理器或者芯片结构,那么一些目录会有不同的名字。

我也安装了perl 5.6.1版本到 /usr/local/lib/ ,所以当我这么做:
% /usr/local/bin/perl5.6.1 -V
你会看到:
@INC:
/usr/local/lib/perl5/5.6.1/i586-linux
/usr/local/lib/perl5/5.6.1
/usr/local/lib/site_perl/5.6.1/i586-linux
/usr/local/lib/site_perl

注意这还是Linux, 但是较新的perl版本用了奔腾的处理器(所以是i586而不是i386)。这对奔腾处理器的编译优化有用,当
二进制Perl扩展被创建时。

所有平台指定的文件,象已编译的C文件用XS或者SWIG去粘合Perl,应该进入类似i386-linux目录。

重点:当我们已经安装了Perl模块进入非标准目录,我们不得不让Perl知道去哪里搜索这四个目录。有两个实现方法:你可以设置
PERL5LIB 环境变量或者你可以在你的脚本中修改@INC变量。

假设我们用Perl 5.00503版本,在我们的例子中目录如下:
/home/sbekman/lib/perl5/5.00503/i386-linux
/home/sbekman/lib/perl5/5.00503
/home/sbekman/lib/perl5/site_perl/5.005/i386-linux
/home/sbekman/lib/perl5/site_perl/5.005
就象前面提到的,你能通过perl -V找到确切的目录并用你自己的私人目录代替全局的perl安装基目录。

修改 @INC 是很容易的。最好的途径是用lib模块(编译指示), 通过在你的脚本最上方加入以下代码片段,
这些代码需要本地化已经安装的模块:
use lib qw(/home/stas/lib/perl5/5.00503/
/home/stas/lib/perl5/site_perl/5.005);
另一个途径是写代码显式修改@INC:
BEGIN {
unshift @INC,
qw(/home/stas/lib/perl5/5.00503
/home/stas/lib/perl5/5.00503/i386-linux
/home/stas/lib/perl5/site_perl/5.005
/home/stas/lib/perl5/site_perl/5.005/i386-linux);
}
注意既然它们如果存在会自动加入(确切地说,当$dir/$archname/auto存在的时候),那么用lib模块我们不必列出一致的结构指定目录。

而且,注意到两种途径都预先考虑到@INC里被搜索的目录。这就允许你安装一个更新的模块加入你的本地库。Perl会用这个模块取代已经安装
在系统库里的旧模块。

两种途径都是在编译期间修改 @INC 的值。这个lib模块也用BEGIN块,但是是内部地。
这篇文章够老的...
这篇文章够老的了。呵呵

你可以去wiki.perlchina.org上看看是不是有人已经在做了?
上来就翻译这么...
上来就翻译这么长的文章, 佩服 :)

另外, 我建议直接翻译 mod_perl 的安装文档, 更新些. 内容差不多一样多吧.
http://perl.apache.org/start/index.html
http://perl.apache.org/docs/1.0/guide/getwet.html

use del.icio.us now
在修改 blog 更新一个月以后,我觉得 del.icio.us 的 perlchina 标签更加适合做待翻译文章的收集(聚集)分享工作。因为对于 firefox/mozilla 来说如果安装了插件,只要选择一段文章里面最精彩的段落然后 ctrl-shift-s 就可以把你的评价/爱好放到相应的 tag 下面,我目前一直在做这样的工作,应该已经积累了一些有趣的文章。希望大家和我一起做。
比起写 blog 那样长篇大论,这个方式更加快捷,不过在享受便利的同时记得推荐之前至少先大略的看看哦。目前我的消息来源主要是 use.perl.org 上面的 randal 的朋友的 blog + del.icio.us 的 perl 标签 + indeed.com 的 perl 和 linux jobs + wiki.perlchina 的更新 + 很多人的 blog 。
同时还可以用 RSS 阅读器订阅相应的 tag 的最新上载。所以这个小小的项目就会变得非常有趣。
目前的成果可见 http://del.icio.us/tag/perlchina
另外 blog 的 translation progress 页面还会继续更新,前一段时间比较忙,没有及时的做,sorry。




   

你看的东西够多...
你看的东西够多的..

我现在只是 perlmonks 和 slashdot 看看.
我翻译这一篇,...
我翻译这一篇,我喜欢图形,数据库方面的,毕竟入门不久
Perl Code Kata: Testing Databases
By Stevan Little
http://www.perl.com/lpt/a/2005/02/10/database_kata.html
Kata是什么意思...
Kata是什么意思哦?
空手道或柔道之...
空手道或柔道之类的..

你可以使用 dictionary.com 来查单词.
翻译完成。费了...
翻译完成。费了很大的力才看懂