分类: LINUX
2007-05-13 23:36:12
LXR 安裝教學
詹前泓
中正大學 資訊工程研究所 即時系統實驗室
完成日期:2005/02/22
修改日期:2005/02/23
零˙ 必備環境&注意事項:
Apache server必須具備CGI-Script的功能。
參考
Perl須有version 5或以上。
此文件的安裝環境是
Mandrake Linux 10.0,Apache和Perl version 5是用distribution內附的RPM package安裝。
如果你的Linux或Apache的操作方式有所不同,也請參考該distribution的manual或相關的readme等。
一˙必備軟體:
LXR 0.3:
原始網頁:
Glimpse:
原始網頁:
LXR用的icons:http://www.cs.ccu.edu.tw/~cch93/linux/devtools/lxr/icons.tar.gz
解壓縮方式:
$ tar -zxvf lxr-0.3.tar.gz
$ tar -zxvf glimpse-latest.tar.gz
$ tar -zxvf icons.tar.gz
分別會解壓縮出lxr-0.3、 glimpse-4.18.0、icons三個目錄。
icons.tar.gz解開後為icons目錄,請放到Apache安裝目錄下,預設路徑是/var/www/,將裡面的icons目錄覆蓋即可。
$ cp -rf icons /var/www/
二˙LXR安裝:
先進入剛剛解壓縮出來的LXR目錄,
$ cd lxr-0.3
1. 首先是修改Makefile的設定:
PERLBIN=/usr/bin/perl,這個是你perl版本5(或以上)執行檔的位置,如果你的perl執行檔在其他位置,請修改至正確位置。
INSTALLPREFIX=/tmp/lxr,這是你LXR的安裝路徑,請修改為Apache能夠瀏覽的目錄下,預設是/var/www/html/lxr。
OK,修改完畢。
2. 再來就安裝吧~:
$ make install
如果在/var/www/html/ 下面看到lxr的目錄,那恭喜你,安裝成功囉。
三˙Apache的相關設定:
1. 修改Apache對LXR讀取的權限:
修改 /etc/httpd/conf/httpd2.conf (Apache 1.x的檔案是httpd.conf)
或 /etc/apache2/apache2.conf
新增:
AllowOverride All
order allow,deny
allow from all
而/var/www/html/lxr/http的部分,你可以改成 你安裝LXR的目錄/http。
2. 修改Apache對CGI的權限設定:
在/var/www/html/lxr/http/ 下面,新增一個檔案.htaccess(注意檔名最前方有個"."),內容如下:
SetHandler cgi-script
Options ExecCGI
3. 重新啟動Apache:
$ /etc/init.d/httpd restart
或 $ sudo apache2ctl restart
(也許你的Linux是別種方式)
四˙LXR的設定:
LXR安裝目錄下有三個目錄bin、 http、source,分別是LXR的分析code執行檔、一些Perl和LXR設定檔、還有原始碼位置。
$ cd /var/www/html/lxr/
$ mkdir dbdir
dbdir是放置解析原始碼的資訊
在LXR要動之前,我們要先對LXR 做好相關的設定才行,首先先看一下http目錄下的lxr.conf中的內容,格式大致是標籤:參數:
variable: v, Version, [/local/lxr/source/versions], [/local/lxr/source/defversion]
variable: a, Architecture, (i386, alpha, m68k, mips, ppc, sparc, sparc64)
baseurl:
htmlhead: /local/lxr/http/template-head
htmltail: /local/lxr/http/template-tail
htmldir: /local/lxr/http/template-dir
sourceroot: /local/lxr/source/$v/linux/
srcrootname: Linux
incprefix: /include
dbdir: /local/lxr/source/$v/
glimpsebin: /local/bin/glimpse
map: /include/asm[^\/]*/ /include/asm-$a/
map: /arch/[^\/]+/ /arch/$a/
variable 的參數為variable_type, variable_name, values, default_value。
variable_type:"v"是version,"a"是architecture。
variable_name:可以取你要的名字。
values:如variable_name為"v"即是說有哪些version,"a"則是說有哪些 architecture,這些在"解析原始碼"部分會解釋。
default_value:從values中選取一個當作你進入LXR時,預設使用的value。
baseurl:你LXR的WWW路徑,即 / (此路徑的最後一定要加上"/"),
yourIP是你架設LXR的server IP位址,如jupiter.cs.ccu.edu.tw。
sourceroot:你存放原始碼的地方,稍後在"解析原始碼"部分會解釋,你可以把他視為 /
srcrootname:取你喜歡的名字。
dbdir:存放有解析原始碼的資訊。
glimpsebin: Glimpse執行檔的位置,預設是/usr/local/bin/glimpse,稍後會在"增加LXR功能"部分介紹Glimpse的功能和安裝。
除了glimpsebin,其餘的 "local"字樣全部改為你Apache的目錄,比方說把dbdir的內容改為/var/www/html/lxr/source/$v/。
關於variable設定部份,下一章節說明。
五˙解析原始碼:
1. 建立原始碼目錄:
好了,接下來就該進行解析原始碼的各個function、variable、macro等的definition了。
還記得剛剛說到LXR有三個目錄 bin、http、source嗎?
把你希望取的版本名稱先建立一個目錄,把你要分析的source code放到這個目錄下方吧。
舉個例子:
(1)$ cd /var/www/html/lxr/source/
(2)$ mkdir linux-2.6.10
(3)$ cd linux-2.6.10
(4)$ wget (下載Linux kernel)
(5)$ tar zxvf linux-2.6.10.tar.gz
(6)$ mv linux-2.6.10 linux (把解壓縮出來的目錄改名稱)
好了,把話題拉回到上一章節先跳過的部分。
你會注意到,lxr.conf裡面的dbdir和sourceroot的參數都有個$v,在這個例子中,就是步驟(2)的linux-2.6.10。
而sourceroot參數解釋部份的/
2. 開始使用LXR的程式解析原始碼:
/var/www/html/lxr/bin/genxref /var/www/html/lxr/source/linux-2.6.10/linux
或是在 linux-2.6.10(就是$v)的目錄下,輸入 ../../bin/genxref linux
這一步會隨著你的程式碼大小和電腦效能能有時間上的差異。
結束後,你可以用ls查看在linux-2.6.10目錄下的檔案,會看到有產生兩個檔案fileidx和xref,把fileidx的權限設定為755
$ chmod 755 fileidx
3. 修改lxr.conf,讓LXR能夠用CGI-Script來對原始碼動態產生網頁:
在上一章,我們有提到lxr.conf中有個variable的標籤,現在我們就要來解釋設定方法和網頁所得的關係。
variable: variable_type, variable_name, values
variable: variable_type, variable_name, values, default_value (用於values是中括號[]的情形)
variable_type:可以設定"v",字面上是version,就是指說現在要設定的variable,是要描述有哪些原始碼的名稱(或版本);而"a"就是architecture。
variable_name:在網頁上會顯示出的提示字樣,預設是Version,你也可以改看看,看網頁顯示出來是什麼樣子。
values:要填入哪些內容呢?就是剛剛一直有提到的$v 。格式可以是name、(name1,name2,...)、[filename]。
小括號()是說你不只有一個原始碼,就要用小括號來寫,而小括號的第一個(即name1)會是預設值;
中括號[]是說你把所有的$v寫到一個檔案,然後把檔案的位置填入[]中。
defvalue:LXR預設要開啟什麼原始碼,你如果有好幾個原始碼,你可以在這邊設定預設的原始碼。格式是name、[filename]。
再一次提醒,用中括號就必須加上defvalue參數。
以剛剛的例子,假設我又多了一個linux-2.4.29的原始碼,也就是說LXR中的"source"目錄中有兩個版本的原始碼,你在lxr.conf中的 variable就可以寫:
variable: v, Variable, (linux-2.6.10, linux-2.4.29)
這樣你進入網頁會發現,Version欄位會有 linux-2.4.29和linux2.6.10,而顯示出來的source code結構會是2.6.10版本的原始碼結構。
當然,你也可以在LXR的 source目錄下建立一個檔案名稱是"versions",內容如下:
linux-2.4.29
linux-2.6.10
這樣的話你在lxr.conf中設定的就是
variable: v, Variable, [/var/www/html/lxr/source/versions], linux-2.6.10
當然檔名不一定要versions,不過就是lxr.conf和你自己設定的要能夠相同就是。
如果defvalue用的是檔案的話 (即中括號[]),那麼檔案內容就只要填入一個原始碼名稱就好(就是從values裡面挑一個)。
如果有多個的話,會造成 LXR的"source navigation"功能出現問題。
4. 檢視你的LXR是否成功:
OK,辛苦了這麼久,最後就是要看看到底成功了沒,就在你的瀏覽器輸入,yourIP當然是你自己架設LXR的IP或host name囉。
如果你已經看到了,試著點點原始碼的目錄結構和測試"identifier search"的功能,如果都沒有任何錯誤,那恭喜你,你已經建立完畢了^_^
這是我的lxr.conf和中括號的檔案,參考一下吧:
http://www.cs.ccu.edu.tw/~cch93/linux/devdoc/lxr/lxr.conf
http://www.cs.ccu.edu.tw/~cch93/linux/devdoc/lxr/archs
http://www.cs.ccu.edu.tw/~cch93/linux/devdoc/lxr/defarch
http://www.cs.ccu.edu.tw/~cch93/linux/devdoc/lxr/versions
http://www.cs.ccu.edu.tw/~cch93/linux/devdoc/lxr/defversion
建構出來的 LXR網頁(不一定有開:P):
http://jupiter.cs.ccu.edu.tw/lxr/http/source
六˙增加LXR的功能:
如果你有用瀏覽器多玩玩LXR的其他功能的話,你應該會發覺到,怎麼不能夠用freetext search和file search呢?相信我在一開始有給各位一個Glimpse的下載連結吧(別告訴我你沒看到,否則就~吼~),沒錯,就是用他來增加這兩樣功能。
1. 安裝Glimpse:
解壓縮glimpse-latest 會產生glimpse-4.18.0的目錄,開始安裝:
$ cd glimpse-4.18.0
$ ./configure
$ make
$ make install
預設會安裝到/usr/local/中,而執行檔會在/usr/local/bin/glimpse,這也是剛剛在第四章設定lxr.conf時,改變 glimpsebin的參數。
2. 利用Glimpse來產生LXR的最後兩個功能:
到你原始碼的目錄(即$v)下,這裡繼續用第五章的範例:
$ cd /var/www/html/lxr/source/linux-2.6.10/
$ glimpseindex -H . . (是兩個".",不是一個"..",H要大寫)
或
到$dbdir目錄裡面去,然後執行glimpseindex -H . ../source/linux-2.6.10 (放linux kernel source的目錄)
成功後會在linux-2.6.10 下面產生7個隱藏檔:
.glimpse_filenames、.glimpse_filenames_index、.glimpse_filetimes、. glimpse_index、.glimpse_messages、.glimpse_partitions、.glimpse_statistics
可以用"ls -al"指令來看。
把這7個檔案的權限改為755,偷懶點的方法就是輸入如下的的指令:
$ chmod 755 .g*
再用瀏覽器看看,你會發現,LXR已經可以使用freetext search和file search的功能囉~。
七˙後記:
這是我第一次寫這樣的 document,可能會有所疏漏或錯誤,如果在安裝上面有問題,或是本文件有錯誤的地方,也歡迎來信。
中正大學 資訊工程研究所 詹前泓
cch93@cs.ccu.edu.tw
八˙例子:
# Configuration file.
# Define typed variable "v", read valueset from file.
variable: v, test_Version, [/var/www/html/lxr/source/linux-2.6.17], linux
# Define typed variable "a". First value is default.
variable: a, Architecture, [/var/www/html/lxr/source/archs], [/var/www/html/lxr/source/defarch]
# Define the base url for the LXR files.
# 中lxr的相對位置/http
# baseurl:'空白'一定要加
baseurl:
# These are the templates for the HTML heading, directory listing and
# footer, respectively.
# 安裝好的lxr/http/template的位置
htmlhead: /var/www/html/lxr/http/template-head
htmltail: /var/www/html/lxr/http/template-tail
htmldir: /var/www/html/lxr/http/template-dir
# The source is here.
# /usr/src/linux-2.4.20-8/
# 你安裝的linux kernel source位置
sourceroot: /var/www/html/lxr/source/linux-2.6.17/
srcrootname: 隨意
# "#include
# tree)
incprefix: /include
# The database files go here.
#genxref所產生fileidx和xref的位置目錄
dbdir: /var/www/html/lxr/dbdir/
# Glimpse can be found here.
glimpsebin: /usr/local/bin/glimpse
# The power of regexps. This is pretty Linux-specific, but quite
# useful. Tinker with it and see what it does. (How's that for
# documentation?)
map: /include/asm[^\/]*/ /include/asm-$a/
map: /arch/[^\/]+/ /arch/$a/
Appendix˙安裝過程的問題:
Q:使用LXR時出現有關 DB_File.pm的warning。
A:這是你沒有安裝DB_File這個perl module的問題。
使用root進入shell:
$ perl -MCPAN -e shell
進入後會有一些設定,用預設值即可,
在選擇FTP站台時選擇Asia->Taiwan,會出現"cpan> "這個shell,
輸入方式是install
如你缺了DB_File.pm,你只需要輸入install DB_File即可。
如此一來即可安裝完成^_^