| 導購 | 订阅 | 在线投稿
分享
 
 
當前位置: 王朝網路 >> perl >> 以非超級用戶身份安裝mod_perl
 

以非超級用戶身份安裝mod_perl

2008-05-19 06:25:34  編輯來源:互聯網  简体版  手機版  評論  字體: ||
 
 
  就像大家從以前的文章裏看到的,mod_perl nbsp;使Apache由兩個組件組成: nbsp;Perl nbsp;模塊和 nbsp;Apache nbsp;本身。雖然以非超級用戶權限安裝Apache很簡單,但是應該知道如何安裝在非系統位置的Perl模塊。本文我將論證幾種方法來實現這個任務。

  在這些例子裏,我將用stas作爲用戶名,/home/stas作爲該用戶的私人目錄。

  安裝Perl模塊到選擇的目錄

  既然不用超級用戶權限,那麽你就不允許安裝到系統目錄,象/usr/lib/perl5。你需要找到如何在你的私人目錄安裝這些模塊的方法。這很容易。 nbsp;

  首先,你需要決定安裝這些模塊到什麽地方。最簡單的途徑就是在你的私人目錄下模仿與Perl有關的根目錄文件系統的移植。實際上,我們只需要兩個目錄: nbsp;

  /home/stas/bin

  /home/stas/lib

  既然他們會在第一個模塊被安裝時自動創建,那麽我們就不必創建它們。99%的文件將被拷貝到lib目錄下。有時候,當一些模塊隨著Perl腳本發布的時候會被拷貝到bin目錄。如果目錄不存在會被創建。

  讓我們安裝CGI.pm包,該包包含了一些其它CGI::*模塊。通常,從CPAN庫下載該包,解開該包並進入新建的目錄裏。

  現在做一個標准的perl文件Makefile.PL去准備Makefile.但是這個時候讓 nbsp;MakeMaker nbsp;用你的Perl安裝目錄,而不是缺省的。 nbsp;

  % nbsp;perl nbsp;Makefile.PL nbsp;PREFIX=/home/stas

  PREFIX=/home/stas nbsp;只是安裝過程不同于通常的一部分。 nbsp;注意如果你不在意MakeMaker如何選擇剩下的目錄,或者如果你正在用一個需要顯式指明所有目的目錄的老版本,那麽這樣做: nbsp;

  % nbsp;perl nbsp;Makefile.PL nbsp;PREFIX=/home/stas nbsp;

  INSTALLPRIVLIB=/home/stas/lib/perl5 nbsp;

  INSTALLSCRIPT=/home/stas/bin nbsp;

  INSTALLSITELIB=/home/stas/lib/perl5/site_perl nbsp;

  INSTALLBIN=/home/stas/bin nbsp;

  INSTALLMAN1DIR=/home/stas/lib/perl5/man nbsp;

  INSTALLMAN3DIR=/home/stas/lib/perl5/man3

  剩下的跟通常一樣: nbsp;

  % nbsp;make

  % nbsp;make nbsp;test

  % nbsp;make nbsp;install

  make nbsp;install nbsp;安裝所有的文件到私人目錄。注意所有丟失的目錄會被自動創建,因此沒有必要創建它們。

  以下就是這麽做的(稍微改動過): nbsp;

  正在安裝 nbsp;/home/stas/lib/perl5/CGI/Cookie.pm

  正在安裝 nbsp;/home/stas/lib/perl5/CGI.pm

  正在安裝 nbsp;/home/stas/lib/perl5/man3/CGI.3

  正在安裝 nbsp;/home/stas/lib/perl5/man3/CGI::Cookie.3

  正在寫入 nbsp;/home/stas/lib/perl5/auto/CGI/.packlist

  正在追加安裝信息到 nbsp;/home/stas/lib/perl5/perllocal.pod

  如果你不得不用顯式目的參數,那麽不用單個PREFIX參數,你會發現建立一個被調用的文件很有用。

  例如, nbsp;/.perl_dirs nbsp;(這裏 nbsp;在我們的例子中是 nbsp;/home/stas) nbsp;的內容包含: nbsp;

  PREFIX=/home/stas nbsp;

  INSTALLPRIVLIB=/home/stas/lib/perl5 nbsp;

  INSTALLSCRIPT=/home/stas/bin nbsp;

  INSTALLSITELIB=/home/stas/lib/perl5/site_perl nbsp;

  INSTALLBIN=/home/stas/bin nbsp;

  INSTALLMAN1DIR=/home/stas/lib/perl5/man nbsp;

  INSTALLMAN3DIR=/home/stas/lib/perl5/man3

  從現在起,任何時候你想本地化安裝Perl模塊就可以這樣執行: nbsp;

  % nbsp;perl nbsp;Makefile.PL nbsp;`cat nbsp;/.perl_dirs`

  % nbsp;make

  % nbsp;make nbsp;test

  % nbsp;make nbsp;install

  用這個方法,你可以很容易地保持不同Perl模塊的存儲。例如,你可以一個用作production nbsp;Perl,另一個用作開發。 nbsp;

  % nbsp;perl nbsp;Makefile.PL nbsp;`cat nbsp;/.perl_dirs.production`

  或者 nbsp;

  % nbsp;perl nbsp;Makefile.PL nbsp;`cat nbsp;~/.perl_dirs.develop`

  編寫你自己的腳本找到本地已安裝模塊

  這些Perl模塊通常都放在四個主要目錄。爲了找到這些目錄,執行: nbsp;

  % nbsp;perl nbsp;-V

  輸出包含重要的perl安裝信息。最後你將看到: nbsp;

  Characteristics nbsp;of nbsp;this nbsp;binary nbsp;(from nbsp;libperl):

  Built nbsp;under nbsp;linux

  Compiled nbsp;at nbsp;Apr nbsp;6 nbsp;1999 nbsp;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 nbsp;shells裏的PATH環境變量,是用來查找可執行程序的。

  注意Perl也在.目錄(代表當前目錄)查找模塊,這是在以上輸出目錄裏的最後的入口路徑。當然,這個例子來自5.00503版本的perl, nbsp;它安裝在我的x86結構PC的Linux中。這就是爲什麽你看到了i386-linux和5.00503. nbsp;如果你的系統運行著不同版本的perl、操作系統、處理器或者芯片結構,那麽一些目錄會有不同的名字。

  我也安裝了perl nbsp;5.6.1版本到 nbsp;/usr/local/lib/ nbsp;,所以當我這麽做: nbsp;

  % nbsp;/usr/local/bin/perl5.6.1 nbsp;-V

  你會看到: nbsp;

  @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, nbsp;但是較新的perl版本用了奔騰的處理器(所以是i586而不是i386)。這對奔騰處理器的編譯優化有用,當二進制Perl擴展被創建時。

  所有平台指定的文件,象已編譯的C文件用XS或者SWIG去粘合Perl,應該進入類似i386-linux目錄。

  重點:當我們已經安裝了Perl模塊進入非標准目錄,我們不得不讓Perl知道去哪裏搜索這四個目錄。有兩個實現方法:你可以設置PERL5LIB nbsp;環境變量或者你可以在你的腳本中修改@INC變量。

  假設我們用Perl nbsp;5.00503版本,在我們的例子中目錄如下: nbsp;

  /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 nbsp;-V找到確切的目錄並用你自己的私人目錄代替全局的perl安裝基目錄。

  修改 nbsp;@INC nbsp;是很容易的。最好的途徑是用lib模塊(編譯指示), nbsp;通過在你的腳本最上方加入以下代碼片段,這些代碼需要本地化已經安裝的模塊:

  use nbsp;lib nbsp;qw(/home/stas/lib/perl5/5.00503/

  /home/stas/lib/perl5/site_perl/5.005);

  另一個途徑是寫代碼顯式修改@INC: nbsp;

  BEGIN nbsp;{

  unshift nbsp;@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會用這個模塊取代已經安裝在系統庫裏的舊模塊。

  兩種途徑都是在編譯期間修改 nbsp;@INC nbsp;的值。這個lib模塊也用BEGIN塊,但是是內部地。

  現在,讓我假設如下情景。我已經在我的本地庫中安裝了 nbsp;LWP nbsp;包. nbsp;現在我想安裝另一個模塊(例如 nbsp;mod_perl) nbsp;,這個模塊有在它的首選列表中列出的 nbsp;LWP。我知道我已經安裝 nbsp;LWP nbsp;,但是當我爲了准備安裝的模塊運行perl nbsp;Makefile.pl,我被告知我沒有安裝LWP。

  Perl沒有辦法知道我們有本地已經安裝的模塊。所有這些都在@INC裏列出的目錄搜索中。既然後者包含只有4個缺省目錄(加上 nbsp;.目錄),那麽它不可能找到本地安裝的 nbsp;LWP nbsp;包。我們不能通過加入代碼修改@INC來解決這個問題,而要改變PERL5LIB環境變量才能解決。如果你正在用tcsh解決交互工作,那麽這樣做: nbsp;

  setenv nbsp;PERL5LIB nbsp;/home/stas/lib/perl5/5.00503:

  /home/stas/lib/perl5/site_perl/5.005

  它應該是帶目錄的單行,並且目錄是被冒號(:)和非空格所分開。如果你是bash用戶,那麽這麽做: nbsp;

  export nbsp;PERL5LIB=/home/stas/lib/perl5/5.00503:

  /home/stas/lib/perl5/site_perl/5.005

  同樣,寫成單行。如果你用bash,那麽你能通過反斜杆()來輸入多行命令,象這樣: nbsp;

  export nbsp;PERL5LIB=/home/stas/lib/perl5/5.00503:

  /home/stas/lib/perl5/site_perl/5.005

  由于用lib,所以如果存在,Perl自動會預先考慮結構指定目錄到 nbsp;@INC nbsp;.

  當我們這麽做的時候,我們就要象以前那樣通過執行perl nbsp;-V來確認@INC新配置的值。你應該看到 nbsp;@INC nbsp;修改的值: nbsp;

  % nbsp;perl nbsp;-V

  Characteristics nbsp;of nbsp;this nbsp;binary nbsp;(from nbsp;libperl): nbsp;

  Built nbsp;under nbsp;linux

  Compiled nbsp;at nbsp;Apr nbsp;6 nbsp;1999 nbsp;23:34:07

  %ENV:

  PERL5LIB=」/home/stas/lib/perl5/5.00503:

  /home/stas/lib/perl5/site_perl/5.005」 nbsp;

  @INC:

  /home/stas/lib/perl5/5.00503/i386-linux

  /home/stas/lib/perl5/5.00503

  /home/stas/lib/perl5/site_perl/5.005/i386-linux

  /home/stas/lib/perl5/site_perl/5.005

  /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

  .

  當一切都如你所願的那樣工作時,加入這些命令到 nbsp;.tcshrc nbsp;或者 nbsp;.bashrc nbsp;文件. nbsp;當下次你啓動shell的時候,環境將會爲你准備好與新的Perl一起工作。

  注意,如果你設置了 nbsp;PERL5LIB nbsp;, nbsp;那麽你不必在你的腳本中改變 nbsp;@INC nbsp;的值。但是如果, nbsp;舉例說, nbsp;其他人 nbsp;(不想在 nbsp;shell中設置的人)想執行你的腳本,那麽Perl就不能找到你本地安裝的模塊。最好的例子就是 nbsp;crontab nbsp;腳本,可以用不同的SHELL環境,因此,不能進行PERL5LIB的設置。

  于是最好的途徑就是象上面所描述的,既設置PERL5LIB環境變量又在腳本開頭修改 nbsp;@INC nbsp;擴展代碼。

  CPAN.pm nbsp;Shell nbsp;和 nbsp;本地安裝模塊

  CPAN.pm nbsp;shell nbsp;在處理perl模塊安裝和保持更新的時候保存了大量的時間。它爲我們做了這項工作,盡管在首選列表中檢查到的丟失模塊,取出它們並安裝。所以你會想知道你是否能用 nbsp;CPAN.pm nbsp;也來保持你的本地庫。

  當你開始啓動 nbsp;CPAN nbsp;交互Shell的時候, nbsp;它會首先搜索用戶私人配置文件和系統文件。當我作爲stas用戶被記錄時,安裝的兩個文件會是: nbsp;

  /home/stas/.cpan/CPAN/MyConfig.pm

  /usr/lib/perl5/5.00503/CPAN/Config.pm

  如果你的系統沒有 nbsp;CPAN nbsp;Shell,那麽當你第一次啓動shell時,它會問你一系列問題,然後爲你建立Config.pm文件。

  如果你已經有一個系統配置,那麽你應該有/usr/lib/perl5/5.00503/CPAN/Config.pm. nbsp;如果你有不同版本的Perl,那麽在找文件的時候修改路徑用你的Perl的版本號。新建目錄(mkdir nbsp;-p nbsp;立刻新建整個路徑),該目錄就是本地配置文件將放的地方: nbsp;

  % nbsp;mkdir nbsp;-p nbsp;/home/stas/.cpan/CPAN

  現在複制哈系統配置文件到本地。 nbsp;

  % nbsp;cp nbsp;/usr/lib/perl5/5.00503/CPAN/Config.pm nbsp;

  /home/stas/.cpan/CPAN/MyConfig.pm

  唯一留下的事情是在你的本地文件改變 nbsp;.cpan nbsp;基目錄到你的私人目錄下。在我的機器裏,我用 nbsp;/home/stas nbsp;取代 nbsp;/usr/src/.cpan nbsp;(這就是我的 nbsp;.cpan nbsp;系統目錄所在地方)。我當然用perl! nbsp;

  % nbsp;perl nbsp;-pi nbsp;-e nbsp;』s|/usr/src|/home/stas|』 nbsp;

  /home/stas/.cpan/CPAN/MyConfig.pm

  現在你已經有本地配置文件。當執行 nbsp;perl nbsp;Makefile.PL nbsp;的時候,你可以告訴它你必須傳遞什麽參數。

  用你最喜歡的編輯器打開該文件並替換下行: nbsp;

  『makepl_arg』 nbsp;=> nbsp;q[],

  采用: nbsp;

  『makepl_arg』 nbsp;=> nbsp;q[PREFIX=/home/stas],

  現在你已經完成了配置。假設你作爲同樣的用戶登陸並准備好了本地安裝(我們的例子是 nbsp;stas),象這樣開始: nbsp;

  % nbsp;perl nbsp;-MCPAN nbsp;-e nbsp;shell

  從現在起,任何你想安裝的模塊都會被本地化安裝。如果你必須安裝一些系統模塊,那麽就成爲超級用戶並用同樣的方法進行安裝。當你以超級用戶登陸時,系統配置文件將被用而不是本地的。

  如果你已經用了不只一個PREFIX變量,然後修改 nbsp;MyConfig.pm nbsp;去用他們. nbsp;例如,如果你用這些變量: nbsp;

  perl nbsp;Makefile.PL nbsp;PREFIX=/home/stas nbsp;

  INSTALLPRIVLIB=/home/stas/lib/perl5 nbsp;

  INSTALLSCRIPT=/home/stas/bin nbsp;

  INSTALLSITELIB=/home/stas/lib/perl5/site_perl nbsp;

  INSTALLBIN=/home/stas/bin nbsp;

  INSTALLMAN1DIR=/home/stas/lib/perl5/man nbsp;

  INSTALLMAN3DIR=/home/stas/lib/perl5/man3

  在下面一行中用以上所有變量替換 nbsp;PREFIX=/home/stas nbsp;: nbsp;

  『makepl_arg』 nbsp;=> nbsp;q[PREFIX=/home/stas] nbsp;

  于是該行變成: nbsp;

  『makepl_arg』 nbsp;=> nbsp;q[PREFIX=/home/stas nbsp;

  INSTALLPRIVLIB=/home/stas/lib/perl5 nbsp;

  INSTALLSCRIPT=/home/stas/bin nbsp;

  INSTALLSITELIB=/home/stas/lib/perl5/site_perl nbsp;

  INSTALLBIN=/home/stas/bin nbsp;

  INSTALLMAN1DIR=/home/stas/lib/perl5/man nbsp;

  INSTALLMAN3DIR=/home/stas/lib/perl5/man3],

  如果你能在一行內放置所有以上參數,那麽你可以去掉反斜杆 nbsp;().

  安裝本地 nbsp;Apache

  就像 nbsp;Perl nbsp;模塊一樣, nbsp;如果你沒有權限安裝文件到系統區,那麽你不得不本地化安裝它們到你的私人目錄。這幾乎跟簡單安裝一樣,但是你不得不運行偵聽端口號大于1024的服務器,因爲只有root進程才能偵聽小于1024的端口號。

  另一個重要的問題你必須解決的是如何把啓動關閉腳本作爲系統服務寫入目錄裏。你將不得不向你的系統管理員尋求幫助。

  爲了本地化安裝Apache, nbsp;所有你必須做的是告訴Apache源代碼目錄裏的.configure文件應該用那些目的目錄。如果你按照我的約定使你的私人目錄看起來象 nbsp;/ nbsp;根目錄一樣,那麽期望的參數將是: nbsp;

  ./configure―prefix=/home/stas

  Apache nbsp;會用前綴來代替目的目錄其余部分,而不是缺省的 nbsp;/usr/local/apache. nbsp;如果你想知道它們是什麽,那麽運行之前加上―show-layout nbsp;選項: nbsp;

  ./configure―prefix=/home/stas―show-layout

  你可能想按照Apache的約定把Apache所有的文件放在 nbsp;/home/stas/apache nbsp;下: nbsp;

  ./configure―prefix=/home/stas/apache

  如果你想修改一些或者所有自動創建的目錄的名字: nbsp;

  ./configure―prefix=/home/stas/apache nbsp;

  ―sbindir=/home/stas/apache/sbin

  ―sysconfdir=/home/stas/apache/etc

  ―localstatedir=/home/stas/apache/var nbsp;

  ―runtimedir=/home/stas/apache/var/run nbsp;

  ―logfiledir=/home/stas/apache/var/logs nbsp;

  ―proxycachedir=/home/stas/apache/var/proxy

  就這些!

  而且記住你只能在屬于你的用戶和用戶組下運行該腳本。 nbsp;你必須在httpd.conf裏設置合適的值給用戶和組項。

  手動安裝本地 nbsp;mod_perl nbsp;啓用 nbsp;Apache

  既然我們知道如何分開安裝Apache和Perl模塊,那就讓我們來看看如何在我們的私人目錄安裝mod_perl啓用Apache。這幾乎跟分開安裝一樣簡單,但是有一個問題你需要知道的,這在本部分的最後我會提到。

  假設你解包 nbsp;Apache nbsp;和 nbsp;mod_perl nbsp;源代碼到 nbsp;/home/stas/src nbsp;目錄下,就像這樣: nbsp;

  % nbsp;ls nbsp;/home/stas/src

  /home/stas/src/apache_x.x.x

  /home/stas/src/mod_perl-x.xx

  這裏的 nbsp;x.xx nbsp;是跟以前一樣的版本號。你想從已安裝在 nbsp;/home/stas/lib/perl5 nbsp;下的 nbsp;mod_perl nbsp;包中得到Perl模塊和 nbsp;/home/stas/apache nbsp;目錄下的 nbsp;Apache nbsp;文件。以下命令是這麽做的: nbsp;

  % nbsp;perl nbsp;Makefile.PL nbsp;

  PREFIX=/home/stas nbsp;

  APACHE_PREFIX=/home/stas/apache nbsp;

  APACHE_SRC=../apache_x.x.x/src nbsp;

  DO_HTTPD=1 nbsp;

  USE_APACI=1 nbsp;

  EVERYTHING=1

  % nbsp;make nbsp;&& nbsp;make nbsp;test nbsp;&& nbsp;make nbsp;install nbsp;

  % nbsp;cd nbsp;../apache_x.x.x

  % nbsp;make nbsp;install

  如果你需要一些參數傳遞給 nbsp;.configure nbsp;腳本, nbsp;就像我們在以前的章節裏看到的,那麽就用 nbsp;APACI_ARGS. nbsp;例如: nbsp;

  APACI_ARGS=』―sbindir=/home/stas/apache/sbin, nbsp;

  ―sysconfdir=/home/stas/apache/etc, nbsp;

  ―localstatedir=/home/stas/apache/var, nbsp;

  ―runtimedir=/home/stas/apache/var/run, nbsp;

  ―logfiledir=/home/stas/apache/var/logs, nbsp;

  ―proxycachedir=/home/stas/apache/var/proxy』

  注意以上多行分開只工作在bash下, nbsp;tcsh用戶將不得不在同一行列出所有參數。

  基本上安裝結束。唯一留下的問題是 nbsp;@INC nbsp;變量。如果你依賴 nbsp;PERL5LIB nbsp;環境變量,那麽@INC nbsp;將不會被正確設置,除非你在你的啓動文件中顯式設置它。啓動文件必須在裝載任何你的本地庫模塊之前啓動。一個更好的途徑就像我們以前看到的,是用lib編譯指示,但是稍微有點不同的地方:我們在啓動文件中用這種方法將會影響所有在mod_perl處理下的代碼將會被執行。例如: nbsp;PerlRequire nbsp;/home/stas/apache/perl/startup.pl nbsp;這裏的 nbsp;startup.pl nbsp;以這樣開始: nbsp;

  use nbsp;lib nbsp;qw(/home/stas/lib/perl5/5.00503/

  /home/stas/lib/perl5/site_perl/5.005);

  注意你仍可以在腳本中用硬編碼的 nbsp;@INC nbsp;的修改, nbsp;但意識到腳本修改BEGIN塊裏的 nbsp;@INC, nbsp;而mod_perl nbsp;只在腳本編譯的時候才執行 nbsp;BEGIN塊。結果,@INC nbsp;將會在編譯以後被原始值複位,硬編碼的設置將會被遺忘。

  只有一個地方你可以改變「原始」值是在啓動文件或者放 nbsp;

  PerlSetEnv nbsp;Perl5LIB nbsp;

  /home/stas/lib/perl5/5.00503/:/home/stas/lib/perl5/site_perl/5.005

  到 nbsp;httpd.conf的服務器配置階段, nbsp;但是後者設置如果你用 nbsp;PerlTanintcheck nbsp;設置將會被忽略。我希望你能這樣用它。

  接下來的mod_perl nbsp;配置和使用是一樣的,就好像你正在以超級用戶身份安裝mod_perl一樣。

  用 nbsp;CPAN.pm nbsp;進行本地安裝 nbsp;mod_perl nbsp;啓用 nbsp;Apache nbsp;假設你已經像文章前面所解釋的配置 nbsp;CPAN.pm nbsp;來安裝Perl模塊,那麽安裝就簡單了。

  啓動 nbsp;CPAN.pm nbsp;shell, nbsp;設置參數傳遞給 nbsp;perl nbsp;Makefile.PL nbsp;(修改例子設置適合你的需要), nbsp;然後告訴 nbsp;爲你去做剩下的事: nbsp;

  % nbsp;perl nbsp;-MCPAN nbsp;-eshell

  cpan> nbsp;o nbsp;conf nbsp;makepl_arg nbsp;『DO_HTTPD=1 nbsp;USE_APACI=1 nbsp;EVERYTHING=1 nbsp;

  PREFIX=/home/stas nbsp;APACHE_PREFIX=/home/stas/apache』

  cpan> nbsp;install nbsp;mod_perl

  當你爲了本地化安裝用 nbsp;CPAN.pm nbsp;的時候, nbsp;mod_perl nbsp;安裝結束之後你必須確認 nbsp;makepl_arg nbsp;是否被回複到原始值。最簡單的方法是通過輸入 nbsp;quit退出交互Shell然後重新輸入。但是如果要堅持,那麽下面就是如果不退出Shell就生效. nbsp;你真的想跳過這個:)

  如果你想不退出Shell用CPAN繼續工作,那麽你必須:

  1)記住 nbsp;makepl_arg nbsp;的值

  2)改變它以適合你的新安裝

  3)構建和安裝 nbsp;mod_perl

  4)安裝 nbsp;mod_perl nbsp;之後恢複它

  這是相當麻煩的任務,但是我相信 nbsp;CPAN.pm nbsp;最終會被改善,處理起來更容易。

  所以你還是跟我一起,那麽就像通常一樣啓動 nbsp;Shell: nbsp;

  % nbsp;perl nbsp;-MCPAN nbsp;-eshell

  第一,讀取 nbsp;makepl_arg nbsp;的值: nbsp;

  cpan> nbsp;o nbsp;conf nbsp;makepl_arg

  PREFIX=/home/stas

  如果你配置CPAN.pm來本地化安裝模塊,那就會是象 nbsp;PREFIX=/home/stas nbsp;這樣的字符串。保存這個值: nbsp;

  cpan> nbsp;o nbsp;conf nbsp;makepl_arg.save nbsp;PREFIX=/home/stas

  第二,設置一個新值, nbsp;mod_perl nbsp;安裝進程會用到它。(你可以根據你的需要加入參數到這行或者刪除) nbsp;

  cpan> nbsp;o nbsp;conf nbsp;makepl_arg nbsp;『DO_HTTPD=1 nbsp;USE_APACI=1 nbsp;EVERYTHING=1 nbsp;

  PREFIX=/home/stas nbsp;APACHE_PREFIX=/home/stas/apache』

  第三, nbsp;讓 nbsp;爲你構建和安裝 nbsp;mod_perl: nbsp;

  cpan> nbsp;install nbsp;mod_perl

  第四, nbsp;複位makepl_arg到原始值.我們可以通過打印這些保存的變量值然後分配給 nbsp;makepl_arg來實現. nbsp;

  cpan> nbsp;o nbsp;conf nbsp;makepl_arg.save

  PREFIX=/home/stas

  cpan> nbsp;o nbsp;conf nbsp;makepl_arg nbsp;PREFIX=/home/stas

  不是很簡明,但卻是一個有效方法。你可以在一張紙條上寫下這個值,而不是保存在 nbsp;makepl_arg.save, nbsp;但是這樣你更可能犯錯誤。 nbsp;參考

  Apache nbsp;網站網址: nbsp;http://www.apache.org

  mod_perl nbsp;網站網址: nbsp;http://perl.apache.org nbsp;

  CPAN nbsp;是 nbsp;Perl nbsp;綜合典藏網的縮寫(Comprehensive nbsp;Perl nbsp;Archive nbsp;Network). nbsp;主站網址是http://cpan.org/. nbsp;

  世界範圍內,CPAN nbsp;的鏡像站點有 nbsp;100 nbsp;多個。

  
 
 
 
上一篇《受限制環境安裝Perl模塊方法》
下一篇《Perl作爲命令行實用程序》
 
 
 
 
 
 
日版寵物情人插曲《Winding Road》歌詞

日版寵物情人2017的插曲,很帶節奏感,日語的,女生唱的。 最後聽見是在第8集的時候女主手割傷了,然後男主用嘴幫她吸了一下,插曲就出來了。 歌手:Def...

兄弟共妻,我成了他們夜裏的美食

老鍾家的兩個兒子很特別,就是跟其他的人不太一樣,魔一般的執著。兄弟倆都到了要結婚的年齡了,不管自家老爹怎麽磨破嘴皮子,兄弟倆說不娶就不娶,老父母爲兄弟兩操碎了心...

如何磨出破洞牛仔褲?牛仔褲怎麽剪破洞?

把牛仔褲磨出有線的破洞 1、具體工具就是磨腳石,下面墊一個硬物,然後用磨腳石一直磨一直磨,到把那塊磨薄了,用手撕開就好了。出來的洞啊很自然的。需要貓須的話調幾...

我就是掃描下圖得到了敬業福和愛國福

先來看下敬業福和愛國福 今年春節,支付寶再次推出了“五福紅包”活動,表示要“把欠大家的敬業福都還給大家”。 今天該活動正式啓動,和去年一樣,需要收集“五福”...

冰箱異味産生的原因和臭味去除的方法

有時候我們打開冰箱就會聞到一股異味,冰箱裏的這種異味是因爲一些物質發出的氣味的混合體,聞起來讓人惡心。 産生這些異味的主要原因有以下幾點。 1、很多人有這種習...

《極品家丁》1-31集大結局分集劇情介紹

簡介 《極品家丁》講述了現代白領林晚榮無意回到古代金陵,並追隨蕭二小姐化名“林三”進入蕭府,不料卻陰差陽錯上演了一出低級家丁拼搏上位的“林三升職記”。...

李溪芮《極品家丁》片尾曲《你就是我最愛的寶寶》歌詞

你就是我最愛的寶寶 - 李溪芮 (電視劇《極品家丁》片尾曲) 作詞:常馨內 作曲:常馨內 你的眉 又鬼馬的挑 你的嘴 又壞壞的笑 上一秒吵鬧 下...

烏梅的功效與作用以及烏梅的食用禁忌有哪些?

烏梅,又稱春梅,中醫認爲,烏梅味酸,性溫,無毒,具有安心、除熱、下氣、祛痰、止渴調中、殺蟲的功效,治肢體痛、肺痨病。烏梅泡水喝能治傷寒煩熱、止吐瀉,與幹姜一起制...

什麽是脂肪粒?如何消除臉部脂肪粒?

什麽是脂肪粒 在我們的臉上總會長一個個像脂肪的小顆粒,弄也弄不掉,而且顔色還是白白的。它既不是粉刺也不是其他的任何痘痘,它就是脂肪粒。 脂肪粒雖然也是由油脂...

網絡安全治理:國家安全保障的主要方向是打擊犯罪,而不是處置和懲罰受害者

來源:中國青年報 新的攻擊方法不斷湧現,黑客幾乎永遠占據網絡攻擊的上風,我們不可能通過技術手段杜絕網絡攻擊。國家安全保障的主要方向是打擊犯罪,而不是處置和懲罰...

河南夫妻在溫嶺網絡直播“造人”內容涉黃被刑事拘留

夫妻網絡直播“造人”爆紅   1月9日,溫嶺城北派出所接到南京警方的協查通告,他們近期打掉了一個涉黃直播APP平台。而根據掌握的線索,其中有一對涉案的夫妻主播...

如何防止牆紙老化?牆紙變舊變黃怎麽辦?

如何防止牆紙老化? (1)選擇透氣性好的牆紙 市場上牆紙的材質分無紡布的、木纖維的、PVC的、玻璃纖維基材的、布面的等,相對而言,PVC材質的牆紙最不透氣...

鮮肌之謎非日本生産VS鮮肌之謎假日貨是謠言

觀點一:破日本銷售量的“鮮肌之謎” 非日本生産 近一段時間,淘寶上架了一款名爲“鮮肌之謎的” 鲑魚卵巢美容液,號稱是最近日本的一款推出的全新護膚品,産品本身所...

中國最美古詩詞精選摘抄

系腰裙(北宋詞人 張先) 惜霜蟾照夜雲天,朦胧影、畫勾闌。人情縱似長情月,算一年年。又能得、幾番圓。 欲寄西江題葉字,流不到、五亭前。東池始有荷新綠,尚小如...

關于女人的經典語句

關于女人的經典語句1、【做一個獨立的女人】 思想獨立:有主見、有自己的人生觀、價值觀。有上進心,永遠不放棄自己的理想,做一份自己喜愛的事業,擁有快樂和成就...

未來我們可以和性愛機器人結婚嗎?

你想體驗機器人性愛嗎?你想和性愛機器人結婚嗎?如果你想,機器人有拒絕你的權利嗎? 近日,第二屆“國際人類-機器人性愛研討會”大會在倫敦金史密斯大學落下帷幕。而...

全球最變態的十個地方

10.土耳其地下洞穴城市 變態指數:★★☆☆☆ 這是土耳其卡帕多西亞的一個著名景點,傳說是當年基督教徒們爲了躲避戰爭而在此修建。裏面曾住著20000人,...

科學家稱,人類死亡後意識將在另外一個宇宙中繼續存活

據英國《每日快報》報道,一位科學家兼理論家Robert Lanza博士宣稱,世界上並不存在人類死亡,死亡的只是身體。他認爲我們的意識借助我們體內的能量生存,而且...

《屏裏狐》片頭曲《我愛狐狸精》歌詞是什麽?

《我愛狐狸精》 - 劉馨棋   (電視劇《屏裏狐》主題曲)   作詞:金十三&李旦   作曲:劉嘉   狐狸精 狐狸仙   千年修...

 
 
 
  就像大家從以前的文章裏看到的,mod_perl nbsp;使Apache由兩個組件組成: nbsp;Perl nbsp;模塊和 nbsp;Apache nbsp;本身。雖然以非超級用戶權限安裝Apache很簡單,但是應該知道如何安裝在非系統位置的Perl模塊。本文我將論證幾種方法來實現這個任務。   在這些例子裏,我將用stas作爲用戶名,/home/stas作爲該用戶的私人目錄。   安裝Perl模塊到選擇的目錄   既然不用超級用戶權限,那麽你就不允許安裝到系統目錄,象/usr/lib/perl5。你需要找到如何在你的私人目錄安裝這些模塊的方法。這很容易。 nbsp;   首先,你需要決定安裝這些模塊到什麽地方。最簡單的途徑就是在你的私人目錄下模仿與Perl有關的根目錄文件系統的移植。實際上,我們只需要兩個目錄: nbsp;   /home/stas/bin   /home/stas/lib   既然他們會在第一個模塊被安裝時自動創建,那麽我們就不必創建它們。99%的文件將被拷貝到lib目錄下。有時候,當一些模塊隨著Perl腳本發布的時候會被拷貝到bin目錄。如果目錄不存在會被創建。   讓我們安裝CGI.pm包,該包包含了一些其它CGI::*模塊。通常,從CPAN庫下載該包,解開該包並進入新建的目錄裏。   現在做一個標准的perl文件Makefile.PL去准備Makefile.但是這個時候讓 nbsp;MakeMaker nbsp;用你的Perl安裝目錄,而不是缺省的。 nbsp;   % nbsp;perl nbsp;Makefile.PL nbsp;PREFIX=/home/stas   PREFIX=/home/stas nbsp;只是安裝過程不同于通常的一部分。 nbsp;注意如果你不在意MakeMaker如何選擇剩下的目錄,或者如果你正在用一個需要顯式指明所有目的目錄的老版本,那麽這樣做: nbsp;   % nbsp;perl nbsp;Makefile.PL nbsp;PREFIX=/home/stas nbsp;   INSTALLPRIVLIB=/home/stas/lib/perl5 nbsp;   INSTALLSCRIPT=/home/stas/bin nbsp;   INSTALLSITELIB=/home/stas/lib/perl5/site_perl nbsp;   INSTALLBIN=/home/stas/bin nbsp;   INSTALLMAN1DIR=/home/stas/lib/perl5/man nbsp;   INSTALLMAN3DIR=/home/stas/lib/perl5/man3   剩下的跟通常一樣: nbsp;   % nbsp;make   % nbsp;make nbsp;test   % nbsp;make nbsp;install   make nbsp;install nbsp;安裝所有的文件到私人目錄。注意所有丟失的目錄會被自動創建,因此沒有必要創建它們。   以下就是這麽做的(稍微改動過): nbsp;   正在安裝 nbsp;/home/stas/lib/perl5/CGI/Cookie.pm   正在安裝 nbsp;/home/stas/lib/perl5/CGI.pm   正在安裝 nbsp;/home/stas/lib/perl5/man3/CGI.3   正在安裝 nbsp;/home/stas/lib/perl5/man3/CGI::Cookie.3   正在寫入 nbsp;/home/stas/lib/perl5/auto/CGI/.packlist   正在追加安裝信息到 nbsp;/home/stas/lib/perl5/perllocal.pod   如果你不得不用顯式目的參數,那麽不用單個PREFIX參數,你會發現建立一個被調用的文件很有用。   例如, nbsp;/.perl_dirs nbsp;(這裏 nbsp;在我們的例子中是 nbsp;/home/stas) nbsp;的內容包含: nbsp;   PREFIX=/home/stas nbsp;   INSTALLPRIVLIB=/home/stas/lib/perl5 nbsp;   INSTALLSCRIPT=/home/stas/bin nbsp;   INSTALLSITELIB=/home/stas/lib/perl5/site_perl nbsp;   INSTALLBIN=/home/stas/bin nbsp;   INSTALLMAN1DIR=/home/stas/lib/perl5/man nbsp;   INSTALLMAN3DIR=/home/stas/lib/perl5/man3   從現在起,任何時候你想本地化安裝Perl模塊就可以這樣執行: nbsp;   % nbsp;perl nbsp;Makefile.PL nbsp;`cat nbsp;/.perl_dirs`   % nbsp;make   % nbsp;make nbsp;test   % nbsp;make nbsp;install   用這個方法,你可以很容易地保持不同Perl模塊的存儲。例如,你可以一個用作production nbsp;Perl,另一個用作開發。 nbsp;   % nbsp;perl nbsp;Makefile.PL nbsp;`cat nbsp;/.perl_dirs.production`   或者 nbsp;   % nbsp;perl nbsp;Makefile.PL nbsp;`cat nbsp;~/.perl_dirs.develop`   編寫你自己的腳本找到本地已安裝模塊   這些Perl模塊通常都放在四個主要目錄。爲了找到這些目錄,執行: nbsp;   % nbsp;perl nbsp;-V   輸出包含重要的perl安裝信息。最後你將看到: nbsp;   Characteristics nbsp;of nbsp;this nbsp;binary nbsp;(from nbsp;libperl):   Built nbsp;under nbsp;linux   Compiled nbsp;at nbsp;Apr nbsp;6 nbsp;1999 nbsp;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 nbsp;shells裏的PATH環境變量,是用來查找可執行程序的。   注意Perl也在.目錄(代表當前目錄)查找模塊,這是在以上輸出目錄裏的最後的入口路徑。當然,這個例子來自5.00503版本的perl, nbsp;它安裝在我的x86結構PC的Linux中。這就是爲什麽你看到了i386-linux和5.00503. nbsp;如果你的系統運行著不同版本的perl、操作系統、處理器或者芯片結構,那麽一些目錄會有不同的名字。   我也安裝了perl nbsp;5.6.1版本到 nbsp;/usr/local/lib/ nbsp;,所以當我這麽做: nbsp;   % nbsp;/usr/local/bin/perl5.6.1 nbsp;-V   你會看到: nbsp;   @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, nbsp;但是較新的perl版本用了奔騰的處理器(所以是i586而不是i386)。這對奔騰處理器的編譯優化有用,當二進制Perl擴展被創建時。   所有平台指定的文件,象已編譯的C文件用XS或者SWIG去粘合Perl,應該進入類似i386-linux目錄。   重點:當我們已經安裝了Perl模塊進入非標准目錄,我們不得不讓Perl知道去哪裏搜索這四個目錄。有兩個實現方法:你可以設置PERL5LIB nbsp;環境變量或者你可以在你的腳本中修改@INC變量。   假設我們用Perl nbsp;5.00503版本,在我們的例子中目錄如下: nbsp;   /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 nbsp;-V找到確切的目錄並用你自己的私人目錄代替全局的perl安裝基目錄。   修改 nbsp;@INC nbsp;是很容易的。最好的途徑是用lib模塊(編譯指示), nbsp;通過在你的腳本最上方加入以下代碼片段,這些代碼需要本地化已經安裝的模塊:   use nbsp;lib nbsp;qw(/home/stas/lib/perl5/5.00503/   /home/stas/lib/perl5/site_perl/5.005);   另一個途徑是寫代碼顯式修改@INC: nbsp;   BEGIN nbsp;{   unshift nbsp;@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會用這個模塊取代已經安裝在系統庫裏的舊模塊。   兩種途徑都是在編譯期間修改 nbsp;@INC nbsp;的值。這個lib模塊也用BEGIN塊,但是是內部地。   現在,讓我假設如下情景。我已經在我的本地庫中安裝了 nbsp;LWP nbsp;包. nbsp;現在我想安裝另一個模塊(例如 nbsp;mod_perl) nbsp;,這個模塊有在它的首選列表中列出的 nbsp;LWP。我知道我已經安裝 nbsp;LWP nbsp;,但是當我爲了准備安裝的模塊運行perl nbsp;Makefile.pl,我被告知我沒有安裝LWP。   Perl沒有辦法知道我們有本地已經安裝的模塊。所有這些都在@INC裏列出的目錄搜索中。既然後者包含只有4個缺省目錄(加上 nbsp;.目錄),那麽它不可能找到本地安裝的 nbsp;LWP nbsp;包。我們不能通過加入代碼修改@INC來解決這個問題,而要改變PERL5LIB環境變量才能解決。如果你正在用tcsh解決交互工作,那麽這樣做: nbsp;   setenv nbsp;PERL5LIB nbsp;/home/stas/lib/perl5/5.00503:   /home/stas/lib/perl5/site_perl/5.005   它應該是帶目錄的單行,並且目錄是被冒號(:)和非空格所分開。如果你是bash用戶,那麽這麽做: nbsp;   export nbsp;PERL5LIB=/home/stas/lib/perl5/5.00503:   /home/stas/lib/perl5/site_perl/5.005   同樣,寫成單行。如果你用bash,那麽你能通過反斜杆()來輸入多行命令,象這樣: nbsp;   export nbsp;PERL5LIB=/home/stas/lib/perl5/5.00503:   /home/stas/lib/perl5/site_perl/5.005   由于用lib,所以如果存在,Perl自動會預先考慮結構指定目錄到 nbsp;@INC nbsp;.   當我們這麽做的時候,我們就要象以前那樣通過執行perl nbsp;-V來確認@INC新配置的值。你應該看到 nbsp;@INC nbsp;修改的值: nbsp;   % nbsp;perl nbsp;-V   Characteristics nbsp;of nbsp;this nbsp;binary nbsp;(from nbsp;libperl): nbsp;   Built nbsp;under nbsp;linux   Compiled nbsp;at nbsp;Apr nbsp;6 nbsp;1999 nbsp;23:34:07   %ENV:   PERL5LIB=」/home/stas/lib/perl5/5.00503:   /home/stas/lib/perl5/site_perl/5.005」 nbsp;   @INC:   /home/stas/lib/perl5/5.00503/i386-linux   /home/stas/lib/perl5/5.00503   /home/stas/lib/perl5/site_perl/5.005/i386-linux   /home/stas/lib/perl5/site_perl/5.005   /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   .   當一切都如你所願的那樣工作時,加入這些命令到 nbsp;.tcshrc nbsp;或者 nbsp;.bashrc nbsp;文件. nbsp;當下次你啓動shell的時候,環境將會爲你准備好與新的Perl一起工作。   注意,如果你設置了 nbsp;PERL5LIB nbsp;, nbsp;那麽你不必在你的腳本中改變 nbsp;@INC nbsp;的值。但是如果, nbsp;舉例說, nbsp;其他人 nbsp;(不想在 nbsp;shell中設置的人)想執行你的腳本,那麽Perl就不能找到你本地安裝的模塊。最好的例子就是 nbsp;crontab nbsp;腳本,可以用不同的SHELL環境,因此,不能進行PERL5LIB的設置。   于是最好的途徑就是象上面所描述的,既設置PERL5LIB環境變量又在腳本開頭修改 nbsp;@INC nbsp;擴展代碼。   CPAN.pm nbsp;Shell nbsp;和 nbsp;本地安裝模塊   CPAN.pm nbsp;shell nbsp;在處理perl模塊安裝和保持更新的時候保存了大量的時間。它爲我們做了這項工作,盡管在首選列表中檢查到的丟失模塊,取出它們並安裝。所以你會想知道你是否能用 nbsp;CPAN.pm nbsp;也來保持你的本地庫。   當你開始啓動 nbsp;CPAN nbsp;交互Shell的時候, nbsp;它會首先搜索用戶私人配置文件和系統文件。當我作爲stas用戶被記錄時,安裝的兩個文件會是: nbsp;   /home/stas/.cpan/CPAN/MyConfig.pm   /usr/lib/perl5/5.00503/CPAN/Config.pm   如果你的系統沒有 nbsp;CPAN nbsp;Shell,那麽當你第一次啓動shell時,它會問你一系列問題,然後爲你建立Config.pm文件。   如果你已經有一個系統配置,那麽你應該有/usr/lib/perl5/5.00503/CPAN/Config.pm. nbsp;如果你有不同版本的Perl,那麽在找文件的時候修改路徑用你的Perl的版本號。新建目錄(mkdir nbsp;-p nbsp;立刻新建整個路徑),該目錄就是本地配置文件將放的地方: nbsp;   % nbsp;mkdir nbsp;-p nbsp;/home/stas/.cpan/CPAN   現在複制哈系統配置文件到本地。 nbsp;   % nbsp;cp nbsp;/usr/lib/perl5/5.00503/CPAN/Config.pm nbsp;   /home/stas/.cpan/CPAN/MyConfig.pm   唯一留下的事情是在你的本地文件改變 nbsp;.cpan nbsp;基目錄到你的私人目錄下。在我的機器裏,我用 nbsp;/home/stas nbsp;取代 nbsp;/usr/src/.cpan nbsp;(這就是我的 nbsp;.cpan nbsp;系統目錄所在地方)。我當然用perl! nbsp;   % nbsp;perl nbsp;-pi nbsp;-e nbsp;』s|/usr/src|/home/stas|』 nbsp;   /home/stas/.cpan/CPAN/MyConfig.pm   現在你已經有本地配置文件。當執行 nbsp;perl nbsp;Makefile.PL nbsp;的時候,你可以告訴它你必須傳遞什麽參數。   用你最喜歡的編輯器打開該文件並替換下行: nbsp;   『makepl_arg』 nbsp;=> nbsp;q[],   采用: nbsp;   『makepl_arg』 nbsp;=> nbsp;q[PREFIX=/home/stas],   現在你已經完成了配置。假設你作爲同樣的用戶登陸並准備好了本地安裝(我們的例子是 nbsp;stas),象這樣開始: nbsp;   % nbsp;perl nbsp;-MCPAN nbsp;-e nbsp;shell   從現在起,任何你想安裝的模塊都會被本地化安裝。如果你必須安裝一些系統模塊,那麽就成爲超級用戶並用同樣的方法進行安裝。當你以超級用戶登陸時,系統配置文件將被用而不是本地的。   如果你已經用了不只一個PREFIX變量,然後修改 nbsp;MyConfig.pm nbsp;去用他們. nbsp;例如,如果你用這些變量: nbsp;   perl nbsp;Makefile.PL nbsp;PREFIX=/home/stas nbsp;   INSTALLPRIVLIB=/home/stas/lib/perl5 nbsp;   INSTALLSCRIPT=/home/stas/bin nbsp;   INSTALLSITELIB=/home/stas/lib/perl5/site_perl nbsp;   INSTALLBIN=/home/stas/bin nbsp;   INSTALLMAN1DIR=/home/stas/lib/perl5/man nbsp;   INSTALLMAN3DIR=/home/stas/lib/perl5/man3   在下面一行中用以上所有變量替換 nbsp;PREFIX=/home/stas nbsp;: nbsp;   『makepl_arg』 nbsp;=> nbsp;q[PREFIX=/home/stas] nbsp;   于是該行變成: nbsp;   『makepl_arg』 nbsp;=> nbsp;q[PREFIX=/home/stas nbsp;   INSTALLPRIVLIB=/home/stas/lib/perl5 nbsp;   INSTALLSCRIPT=/home/stas/bin nbsp;   INSTALLSITELIB=/home/stas/lib/perl5/site_perl nbsp;   INSTALLBIN=/home/stas/bin nbsp;   INSTALLMAN1DIR=/home/stas/lib/perl5/man nbsp;   INSTALLMAN3DIR=/home/stas/lib/perl5/man3],   如果你能在一行內放置所有以上參數,那麽你可以去掉反斜杆 nbsp;().   安裝本地 nbsp;Apache   就像 nbsp;Perl nbsp;模塊一樣, nbsp;如果你沒有權限安裝文件到系統區,那麽你不得不本地化安裝它們到你的私人目錄。這幾乎跟簡單安裝一樣,但是你不得不運行偵聽端口號大于1024的服務器,因爲只有root進程才能偵聽小于1024的端口號。   另一個重要的問題你必須解決的是如何把啓動關閉腳本作爲系統服務寫入目錄裏。你將不得不向你的系統管理員尋求幫助。   爲了本地化安裝Apache, nbsp;所有你必須做的是告訴Apache源代碼目錄裏的.configure文件應該用那些目的目錄。如果你按照我的約定使你的私人目錄看起來象 nbsp;/ nbsp;根目錄一樣,那麽期望的參數將是: nbsp;   ./configure―prefix=/home/stas   Apache nbsp;會用前綴來代替目的目錄其余部分,而不是缺省的 nbsp;/usr/local/apache. nbsp;如果你想知道它們是什麽,那麽運行之前加上―show-layout nbsp;選項: nbsp;   ./configure―prefix=/home/stas―show-layout   你可能想按照Apache的約定把Apache所有的文件放在 nbsp;/home/stas/apache nbsp;下: nbsp;   ./configure―prefix=/home/stas/apache   如果你想修改一些或者所有自動創建的目錄的名字: nbsp;   ./configure―prefix=/home/stas/apache nbsp;   ―sbindir=/home/stas/apache/sbin   ―sysconfdir=/home/stas/apache/etc   ―localstatedir=/home/stas/apache/var nbsp;   ―runtimedir=/home/stas/apache/var/run nbsp;   ―logfiledir=/home/stas/apache/var/logs nbsp;   ―proxycachedir=/home/stas/apache/var/proxy   就這些!   而且記住你只能在屬于你的用戶和用戶組下運行該腳本。 nbsp;你必須在httpd.conf裏設置合適的值給用戶和組項。   手動安裝本地 nbsp;mod_perl nbsp;啓用 nbsp;Apache   既然我們知道如何分開安裝Apache和Perl模塊,那就讓我們來看看如何在我們的私人目錄安裝mod_perl啓用Apache。這幾乎跟分開安裝一樣簡單,但是有一個問題你需要知道的,這在本部分的最後我會提到。   假設你解包 nbsp;Apache nbsp;和 nbsp;mod_perl nbsp;源代碼到 nbsp;/home/stas/src nbsp;目錄下,就像這樣: nbsp;   % nbsp;ls nbsp;/home/stas/src   /home/stas/src/apache_x.x.x   /home/stas/src/mod_perl-x.xx   這裏的 nbsp;x.xx nbsp;是跟以前一樣的版本號。你想從已安裝在 nbsp;/home/stas/lib/perl5 nbsp;下的 nbsp;mod_perl nbsp;包中得到Perl模塊和 nbsp;/home/stas/apache nbsp;目錄下的 nbsp;Apache nbsp;文件。以下命令是這麽做的: nbsp;   % nbsp;perl nbsp;Makefile.PL nbsp;   PREFIX=/home/stas nbsp;   APACHE_PREFIX=/home/stas/apache nbsp;   APACHE_SRC=../apache_x.x.x/src nbsp;   DO_HTTPD=1 nbsp;   USE_APACI=1 nbsp;   EVERYTHING=1   % nbsp;make nbsp;&& nbsp;make nbsp;test nbsp;&& nbsp;make nbsp;install nbsp;   % nbsp;cd nbsp;../apache_x.x.x   % nbsp;make nbsp;install   如果你需要一些參數傳遞給 nbsp;.configure nbsp;腳本, nbsp;就像我們在以前的章節裏看到的,那麽就用 nbsp;APACI_ARGS. nbsp;例如: nbsp;   APACI_ARGS=』―sbindir=/home/stas/apache/sbin, nbsp;   ―sysconfdir=/home/stas/apache/etc, nbsp;   ―localstatedir=/home/stas/apache/var, nbsp;   ―runtimedir=/home/stas/apache/var/run, nbsp;   ―logfiledir=/home/stas/apache/var/logs, nbsp;   ―proxycachedir=/home/stas/apache/var/proxy』   注意以上多行分開只工作在bash下, nbsp;tcsh用戶將不得不在同一行列出所有參數。   基本上安裝結束。唯一留下的問題是 nbsp;@INC nbsp;變量。如果你依賴 nbsp;PERL5LIB nbsp;環境變量,那麽@INC nbsp;將不會被正確設置,除非你在你的啓動文件中顯式設置它。啓動文件必須在裝載任何你的本地庫模塊之前啓動。一個更好的途徑就像我們以前看到的,是用lib編譯指示,但是稍微有點不同的地方:我們在啓動文件中用這種方法將會影響所有在mod_perl處理下的代碼將會被執行。例如: nbsp;PerlRequire nbsp;/home/stas/apache/perl/startup.pl nbsp;這裏的 nbsp;startup.pl nbsp;以這樣開始: nbsp;   use nbsp;lib nbsp;qw(/home/stas/lib/perl5/5.00503/   /home/stas/lib/perl5/site_perl/5.005);   注意你仍可以在腳本中用硬編碼的 nbsp;@INC nbsp;的修改, nbsp;但意識到腳本修改BEGIN塊裏的 nbsp;@INC, nbsp;而mod_perl nbsp;只在腳本編譯的時候才執行 nbsp;BEGIN塊。結果,@INC nbsp;將會在編譯以後被原始值複位,硬編碼的設置將會被遺忘。   只有一個地方你可以改變「原始」值是在啓動文件或者放 nbsp;   PerlSetEnv nbsp;Perl5LIB nbsp;   /home/stas/lib/perl5/5.00503/:/home/stas/lib/perl5/site_perl/5.005   到 nbsp;httpd.conf的服務器配置階段, nbsp;但是後者設置如果你用 nbsp;PerlTanintcheck nbsp;設置將會被忽略。我希望你能這樣用它。   接下來的mod_perl nbsp;配置和使用是一樣的,就好像你正在以超級用戶身份安裝mod_perl一樣。   用 nbsp;CPAN.pm nbsp;進行本地安裝 nbsp;mod_perl nbsp;啓用 nbsp;Apache nbsp;假設你已經像文章前面所解釋的配置 nbsp;CPAN.pm nbsp;來安裝Perl模塊,那麽安裝就簡單了。   啓動 nbsp;CPAN.pm nbsp;shell, nbsp;設置參數傳遞給 nbsp;perl nbsp;Makefile.PL nbsp;(修改例子設置適合你的需要), nbsp;然後告訴 nbsp;爲你去做剩下的事: nbsp;   % nbsp;perl nbsp;-MCPAN nbsp;-eshell   cpan> nbsp;o nbsp;conf nbsp;makepl_arg nbsp;『DO_HTTPD=1 nbsp;USE_APACI=1 nbsp;EVERYTHING=1 nbsp;   PREFIX=/home/stas nbsp;APACHE_PREFIX=/home/stas/apache』   cpan> nbsp;install nbsp;mod_perl   當你爲了本地化安裝用 nbsp;CPAN.pm nbsp;的時候, nbsp;mod_perl nbsp;安裝結束之後你必須確認 nbsp;makepl_arg nbsp;是否被回複到原始值。最簡單的方法是通過輸入 nbsp;quit退出交互Shell然後重新輸入。但是如果要堅持,那麽下面就是如果不退出Shell就生效. nbsp;你真的想跳過這個:)   如果你想不退出Shell用CPAN繼續工作,那麽你必須:   1)記住 nbsp;makepl_arg nbsp;的值   2)改變它以適合你的新安裝   3)構建和安裝 nbsp;mod_perl   4)安裝 nbsp;mod_perl nbsp;之後恢複它   這是相當麻煩的任務,但是我相信 nbsp;CPAN.pm nbsp;最終會被改善,處理起來更容易。   所以你還是跟我一起,那麽就像通常一樣啓動 nbsp;Shell: nbsp;   % nbsp;perl nbsp;-MCPAN nbsp;-eshell   第一,讀取 nbsp;makepl_arg nbsp;的值: nbsp;   cpan> nbsp;o nbsp;conf nbsp;makepl_arg   PREFIX=/home/stas   如果你配置CPAN.pm來本地化安裝模塊,那就會是象 nbsp;PREFIX=/home/stas nbsp;這樣的字符串。保存這個值: nbsp;   cpan> nbsp;o nbsp;conf nbsp;makepl_arg.save nbsp;PREFIX=/home/stas   第二,設置一個新值, nbsp;mod_perl nbsp;安裝進程會用到它。(你可以根據你的需要加入參數到這行或者刪除) nbsp;   cpan> nbsp;o nbsp;conf nbsp;makepl_arg nbsp;『DO_HTTPD=1 nbsp;USE_APACI=1 nbsp;EVERYTHING=1 nbsp;   PREFIX=/home/stas nbsp;APACHE_PREFIX=/home/stas/apache』   第三, nbsp;讓 nbsp;爲你構建和安裝 nbsp;mod_perl: nbsp;   cpan> nbsp;install nbsp;mod_perl   第四, nbsp;複位makepl_arg到原始值.我們可以通過打印這些保存的變量值然後分配給 nbsp;makepl_arg來實現. nbsp;   cpan> nbsp;o nbsp;conf nbsp;makepl_arg.save   PREFIX=/home/stas   cpan> nbsp;o nbsp;conf nbsp;makepl_arg nbsp;PREFIX=/home/stas   不是很簡明,但卻是一個有效方法。你可以在一張紙條上寫下這個值,而不是保存在 nbsp;makepl_arg.save, nbsp;但是這樣你更可能犯錯誤。 nbsp;參考   Apache nbsp;網站網址: nbsp;http://www.apache.org   mod_perl nbsp;網站網址: nbsp;http://perl.apache.org nbsp;   CPAN nbsp;是 nbsp;Perl nbsp;綜合典藏網的縮寫(Comprehensive nbsp;Perl nbsp;Archive nbsp;Network). nbsp;主站網址是http://cpan.org/. nbsp;   世界範圍內,CPAN nbsp;的鏡像站點有 nbsp;100 nbsp;多個。   
󰈣󰈤
 
 
 
  免責聲明:本文僅代表作者個人觀點,與王朝網路無關。王朝網路登載此文出於傳遞更多信息之目的,並不意味著贊同其觀點或證實其描述,其原創性以及文中陳述文字和內容未經本站證實,對本文以及其中全部或者部分內容、文字的真實性、完整性、及時性本站不作任何保證或承諾,請讀者僅作參考,並請自行核實相關內容。
 
 
小龍女彤彤之情溢皇都
龔潔
智能手機形象美女
崔潔彤
回家的路上----
中國一站(哈爾濱)
清明植物園的花。
桃花堤印象之豎版
 
>>返回首頁<<
 
 
 
 熱帖排行
 
 
 
 
© 2005- 王朝網路 版權所有