亚洲成精品动漫久久精久,九九在线精品视频播放,黄色成人免费观看,三级成人影院,久碰久,四虎成人欧美精品在永久在线

掃一掃
關(guān)注微信公眾號(hào)

Linux和Solaris建立Apache的虛擬根環(huán)境
2008-09-11   365Master

介紹

我曾經(jīng)利用CERN httpd安裝和使用了已經(jīng)虛擬根環(huán)境下的Web服務(wù)器。對(duì)Web服務(wù)器建立虛擬根環(huán)境有各種各樣的優(yōu)點(diǎn)和缺點(diǎn)。在Web發(fā)展的早期階段,這種技術(shù)還提供了額外的有價(jià)值的安全機(jī)制。但是在這個(gè)apache的領(lǐng)域中,這種技術(shù)似乎沒(méi)有太大的用處,可它仍舊很有趣。

我提供對(duì)apache在linux和soloris環(huán)境下實(shí)現(xiàn)虛擬根環(huán)境的安裝的例子,它既可以做標(biāo)準(zhǔn)的編輯(在必要的時(shí)候被標(biāo)記為non-DSO)或者做動(dòng)態(tài)共享對(duì)象編輯(在必要時(shí)它將被標(biāo)記為DSO)。選項(xiàng)為DSO的Solaris的例子還沒(méi)有進(jìn)行文檔化,所以我沒(méi)有測(cè)試它(我打算在測(cè)試時(shí)使用Solaris 8)。

在Linux上安裝一個(gè)虛擬根環(huán)境化的Apache目錄樹(shù)是相當(dāng)?shù)暮?jiǎn)單的。這個(gè)例子使用的是Red Hat 6.*和Apache 1.3.12。同時(shí),它也包含PHP4(作為一個(gè)Apache模塊),以及在虛擬根環(huán)境化的目錄樹(shù)上的perl5的安裝。另外還安裝了mod-ssl和mod-perl。

該例也假定Red Hat 安裝比較完整 (即:有足夠的文件、庫(kù)和開(kāi)發(fā)工具)。注意,如果你安裝Red Hat時(shí)用了custom(prefered)的配置,并且選擇了development選項(xiàng);或者你就是使用了服務(wù)器(server)配置,你都會(huì)有一個(gè)完全的開(kāi)發(fā)環(huán)境。

Mysql3.22.27并沒(méi)有安裝在實(shí)現(xiàn)了虛擬根環(huán)境目錄樹(shù)中,但是為了完整性我們?cè)诖藢⑺M(jìn)去。

聲明

我并不是個(gè)專家:),尤其在加密方面(openssl、mod-ssl和company)我的水平更是有限。我也是個(gè)普通的人,也會(huì)犯錯(cuò)誤,所以,如果你發(fā)現(xiàn)了什么或是有什么建設(shè)性的意見(jiàn),請(qǐng)告訴我。

我寫這篇文章只是希望,你能從中學(xué)到一些東西,獲得一些幫助。我也可以經(jīng)常提供一些RPM,但如果你知道你可以從草圖開(kāi)始,獨(dú)立的建一個(gè)自己的現(xiàn)代Web網(wǎng)站,那恐怕會(huì)更有趣些。但是,在當(dāng)前的Internet上,學(xué)習(xí)、理解關(guān)于運(yùn)行一個(gè)Web網(wǎng)站各種問(wèn)題以及所冒的風(fēng)險(xiǎn),都要靠你自己了。

Solaris 例子
對(duì)Web目錄樹(shù)進(jìn)行虛擬根環(huán)境化的solaris的例子與Linux的例子十分相似。當(dāng)然,如果你沒(méi)有安裝GNU開(kāi)發(fā)環(huán)境,solaris的例子就不可能像Linux例子那樣容易。

Solaris的例子文檔在另一個(gè)web頁(yè)中。

附加的注釋

使用工具ldd來(lái)發(fā)掘必要的共享庫(kù)。
在這個(gè)例子中,用戶有這樣的提示:
root user:
ROOT#
ordinary user:
$

我基本上都是作為普通用戶而不是root用戶來(lái)編譯和安裝各種軟件的。這有助于避免對(duì)文件系統(tǒng)(尤其是在使用不熟悉的軟件時(shí))造成的不必要的破壞。這也有助于在進(jìn)行危險(xiǎn)操作前給以警示,例如在已經(jīng)安裝的二進(jìn)制文件上的“setuid"操作,以及在不尋常的地方安裝文件的操作等危險(xiǎn)操作前的警示。
在這個(gè)例子中,我作為用戶soft:soft來(lái)進(jìn)行編譯和安裝等操作。

其實(shí),只要保證軟件的所有者的身份ID與Apache目錄樹(shù)用戶的ID(在本例中我們用的是888)不同就可以了。

Red Hat的缺省root環(huán)境中,有一個(gè)交互式的開(kāi)關(guān)-I被加在命令cp、mv和rm上。如果你的root環(huán)境中沒(méi)有這些設(shè)置,建議你最好將它加上。你可以檢查下面的文件:

ROOT# alias |grep '-i'
alias cp='cp -i'
alias mv='mv -i'
alias rm='rm -i'

你應(yīng)當(dāng)使你的配置盡量的簡(jiǎn)單——不要安裝那些用不到或根本不必要的模塊。一般說(shuō)來(lái),一個(gè)標(biāo)準(zhǔn)的non-DSO(非動(dòng)態(tài)共享對(duì)象)Apache,在安裝一個(gè)perl,對(duì)大多數(shù)人都是足夠的。
關(guān)于DSO和mod-ssl需要注意的地方:
如果你打算把任何東西都按照DSO模版進(jìn)行編譯,那你首先要建立mod-ssl,然后你確實(shí)要按照下面的順序建立自己的Apache目錄樹(shù)。Mod-ssl會(huì)明顯的修改Apache 建立的目錄樹(shù),據(jù)我的經(jīng)驗(yàn),在使用我們剛才提到的軟件版本的前提下,下面的順序是做起來(lái)最簡(jiǎn)單的順序:

建立Apache
在Apache中建立和增加mod-ssl
在Apache中建立和增加php 和mod-perl。
你應(yīng)該在適當(dāng)?shù)牡胤接涗浵聛?lái)你是如何編譯你的目錄樹(shù)的,以便再做時(shí)參考。(你可以將其打印出來(lái),并加上注釋)
安裝了各種軟件之后,最終的虛擬根環(huán)境化的目錄樹(shù)有23MB,其中包含了8MB的共享庫(kù)和perl。下面是基于DSO安裝的文件的總結(jié)(以KB表示):
ROOT# pwd
/www
ROOT# du -s .
22737 .
ROOT# du -s *
6832apache
0 bin
1 dev
7 etc
6679lib
1 tmp
9215usr
1 webhome
ROOT# du -s apache /*
600 apache /bin
3 apache /cgi-bin
125 apache /conf
1560apache /htdocs
133 apache /icons
392 apache /include
3925apache /libexec
64 apache /man
29 apache /var
ROOT# du -s usr/*
8410usr/Local
336 usr/bin
340 usr/lib
128 usr/share
1.獲得源代碼

如果你想將一個(gè)包加入到你的虛擬根環(huán)境化的目錄樹(shù)中,那你必須獲得這個(gè)包中任何一個(gè)文件的源代碼。多數(shù)源文件都可以從相應(yīng)的Linux版本的被稱為SRPMs(RPM源代碼包)的原碼光盤中獲取;當(dāng)然也可從tarball文件(.tar.gz)中獲取(這種方法很適合于你的帶寬有限的情況)。

在Red Hat 系統(tǒng)中你作為root用戶安裝Source:

ROOT# rpm -i /path/to/SRPMfile.src.rpm

然后,在/usr/src/redhat/SOURCES/目錄中提取出源代碼。

在我們的例子中我將指出,在Internet上你可從何處獲取這些源代碼:

軟件包版本號(hào)源代碼文檔信息
Apache  1.3.12www.apache.org/dist/ www.apache.org/docs/
MySQL3.22.27  www.mysql.com/downloads www.mysql.com/documentation/
PHP 4.0.2 www.php.net/downloads.phpwww.php.net/docs.php
Perl 5.00503  www.cpan.org/src/ www.cpan.org/doc/manual/html/index.html
mod_perl1.24  perl.apache.org/dist/ perl.apache.org/#docs
Hello.pm perl.apache.org/dist/contrib/
mod_ssl 2.6.6-1.3.12 ftp://ftp.modssl.org/source/ www.modssl.org/docs/2.6/
OpenSSL 0.9.5aftp://ftp.openssl.org/source/ www.openssl.org/support/faq.html
RSAref 2.0google search  google search

2.步驟細(xì)節(jié)

準(zhǔn)備好一個(gè)虛擬根環(huán)境化后的文件系統(tǒng)

2.1 在任何一個(gè)地方安裝目錄樹(shù)

注意:最好是在另一個(gè)磁盤上,或是在非系統(tǒng)分區(qū)上安裝,這樣可以避免別人從Web目錄樹(shù)以外建立到文件的連接,但是你可以使用symlink(例如:/www)連接來(lái)找到這棵目錄樹(shù)。

ROOT# mkdir /export/misc/www
ROOT# ln -s /export/misc/www /www

2.2 生成基本的目錄,bin將是usr/bin的連接

注意: 在這些例子中(除了我直接從一般文件系統(tǒng)中拷貝的代碼)我都省略了前導(dǎo)的“/”,所以,注意不要將你的虛擬根環(huán)境化的目錄樹(shù)與真正的“/”混淆。

在下面我將用紫紅色標(biāo)記出虛擬根環(huán)境化的文件

ROOT# cd /www
ROOT# mkdir -p usr/bin usr/lib lib etc tmp dev webhome
ROOT# ln -s usr/bin bin

2.3 /tmp是假定的專用perms

ROOT# chmod 777 tmp
ROOT# chmod +t tmp

2.4 構(gòu)造特殊的裝置 dev/null

ROOT# mknod -m 666 dev/null c 1 3

2.5 為你自己的時(shí)區(qū)設(shè)定時(shí)區(qū)信息(這里使用的是MET)

ROOT# mkdir -p usr/share/zoneinfo
ROOT# cp -pi /usr/share/zoneinfo/MET usr/share/zoneinfo/
ROOT# cd etc
ROOT# ln -s ../usr/share/zoneinfo/MET localtime
ROOT# cd ..

2.6 你會(huì)發(fā)現(xiàn)由于缺乏本地設(shè)置,perl和mod-perl多有不便,但你可以通過(guò)在實(shí)現(xiàn)了虛擬根環(huán)境目錄樹(shù)中安裝本地文件來(lái)克服它:

ROOT# set |grep LANG
LANG=en_US
ROOT# mkdir /www/usr/share/locale
ROOT# cp -a /usr/share/locale/en_US /www/usr/share/locale/

2.7 現(xiàn)在,在可以提供非常基礎(chǔ)的虛擬根環(huán)境化的文件系統(tǒng)的共享庫(kù)

ROOT# cp -pi /lib/libtermcap.so.2 /lib/ld-linux.so.2 /lib/libc.so.6 lib/

2.8 測(cè)試你的目錄樹(shù)(Apachect1后面將要用到“cat”,但也不是必需的)

ROOT# cp -pi /bin/ls /bin/sh /bin/cat bin/
ROOT# chroot /www /bin/ls -l /

lrwxrwxrwx 1 00 7 Jan 29 09:24 bin -> usr/bin
drwxr-xr-x 2 001024 Jan 29 09:28 dev
drwxr-xr-x 2 003072 Jan 29 13:17 etc
drwxr-xr-x 2 001024 Jan 29 13:12 lib
drwxrwxrwt 2 001024 Jan 29 09:23 tmp
drwxr-xr-x 5 001024 Jan 29 09:23 usr
drwxr-xr-x 2 001024 Jan 29 10:41 webhome

2.9 你可以移動(dòng)一下ls,它只是用于測(cè)試的。

ROOT# rm bin/ls

3.準(zhǔn)備一個(gè)用戶和名字服務(wù)器

下面我們生成一個(gè)運(yùn)行Apache的用戶,下面是這種配置的必要的命名服務(wù):

3.1 生成一個(gè)不存在于系統(tǒng)上的新的用戶,給他起一個(gè)特殊的名字和用戶ID(例如888)。

注意:對(duì)于存在真正的鑒定文件(/etc/passwd /etc/group)的user.group,這并不是必需的,完全有你決定:

ROOT# cd /www
ROOT# touch etc/passwd etc/group etc/shadow
ROOT# chmod 400 etc/shadow

3.2 編輯三個(gè)文件,在這個(gè)例子中,我只是將數(shù)據(jù)再傳回文件中:

ROOT# echo 'www:x:888:888:Web Account:/webhome:/usr/bin/False' > etc/passwd
ROOT# echo 'www:x:888:' > etc/group
ROOT# echo 'www:*:10882:-1:99999:-1:-1:-1:134537804' > etc/shadow

3.3 我沒(méi)有給這個(gè)用戶login或shell,只是為了完整,編譯了一下稱為false的no-go shell。

ROOT# echo 'int main(int argc, char *argv[]) { return(1); }' > /tmp/False.c
ROOT# cc -o /www/usr/bin/False /tmp/False.c#p#副標(biāo)題#e#

3.4 下面讓我們標(biāo)記一下二進(jìn)制流:

ROOT# chmod 111 usr/bin/*

3.5 一些命名服務(wù)是必須的。但是由于glibc和命名服務(wù)轉(zhuǎn)換庫(kù)的存在,那些庫(kù)是必不可少不是那么一目了然的。至于其中的細(xì)節(jié),你可以使用命令“man nsswitch”來(lái)察看。盡管在我的機(jī)器上運(yùn)行著網(wǎng)絡(luò)信息服務(wù)(NIS),但我還是選擇依賴于文件和域名服務(wù)(DNS)。注意:libresolve庫(kù)也是必需的,在安裝了PHP之后,這種需求就相當(dāng)明顯了。

ROOT# cp -pi /lib/libnss_files.so.2 lib/
ROOT# cp -pi /lib/libnss_dns.so.2 lib/

3.6 我們將需要三個(gè)文件來(lái)完成對(duì)命名服務(wù)的配置。

這些文件的內(nèi)容決定于你IP和DNS設(shè)置。在這里我們假定web服務(wù)器的名字是ns.mynet.home,它的IP地址是:192.168.196.2(實(shí)際上它也是我的名字服務(wù)器)

# ---- Contents ofetc/nsswitch.conf ----#
passwd: files
shadow: files
group: files
hosts: files dns

# ---- Contents ofetc/resolv.conf ----#
domain mynet.home
## use the IP address of your naming server
## if bind is not installed on your web server
#nameserver 192.168.196.xxx
## use this if your web server is a (caching) name server
nameserver 127.0.0.1

# ---- Contents ofetc/hosts ----#
127.0.0.1 localhost loopback
192.168.196.2 ns.mynet.home ns www


4.編譯和安裝Apache

4.1 為Apache的安裝建立頂層目錄,并且在真正的目錄樹(shù)中生成到它的系統(tǒng)連接。

ROOT# mkdir /www/apache
ROOT# ln -s /www/apache /apache

4.2 我都是作為一般的用戶來(lái)進(jìn)行安裝和編譯的工作的(就像這個(gè)例子中的softs),

注意:Apache的安裝是需要root身份的。在這個(gè)例子中我是在usr/local/src/chr (該文件是屬于softs:softs的)中進(jìn)行源代碼編譯的

$ cd /usr/local/src/chr
$ tar zxf /path/to/apache_1.3.12.tar.gz
$ cd apache_1.3.12

4.3 編輯config.layout,這樣它將包含一個(gè)稱為chroot的特殊的設(shè)計(jì)(layout)。

# chroot layout.

prefix:/apache
exec_prefix: $prefix
bindir:$exec_prefix/bin
sbindir: $exec_prefix/bin
libexecdir:$exec_prefix/libexec
mandir:$prefix/man
sysconfdir:$prefix/conf
datadir: $prefix
iconsdir: $datadir/icons
htdocsdir: $datadir/htdocs
cgidir:$datadir/cgi-bin
includedir:$prefix/include
localstatedir: $prefix/var
runtimedir:$localstatedir/logs
logfiledir:$localstatedir/logs
proxycachedir: $localstatedir/proxy


4.4 現(xiàn)在進(jìn)行配置和構(gòu)造

non-DSO:

$ ./configure --with-layout=chroot --enable-module=most --enable-module=so

使得模塊“so”有效,這樣以后你可以運(yùn)用DSO+APXS機(jī)制,通過(guò)第三類模塊(3rd party module)來(lái)擴(kuò)充你的Apache安裝。

DSO:

$./configure --with-layout=chroot --enable-module=most --enable-shared=max
$ make
ROOT# make install ## I am root!

4.5 現(xiàn)在來(lái)拷貝在例子Apache要用到的共享庫(kù)

注意對(duì)于其他的配置,可能會(huì)用到其他的庫(kù)(你可以通過(guò)ldd來(lái)查詢)

ROOT# cd /www
ROOT# cp -pi /lib/libm.so.6 /lib/libcrypt.so.1 /lib/libdb.so.3 lib/
ROOT# cp -pi /lib/libdl.so.2 lib/

4.6 可以進(jìn)行快速測(cè)試來(lái)看看結(jié)果

快速測(cè)試時(shí),配置文件/www/apache/conf/httpd.conf中需要編輯的主要部分是:

User www
Group www
ServerName yourserver.yourdomain.here
Port 8088 ## pick your favourite test port

4.7 啟動(dòng)后臺(tái)程序(daemon)

ROOT# chroot /www/apache/bin/apachectl start

4.8 測(cè)試URL

$ lynx -dump http://yourserver/

測(cè)試在另一個(gè)端口(如:8088)上的URL

$ lynx -dump http://yourserver:8088/

4.9 這兒有一個(gè)小的perl腳本程序,它將大多數(shù)的注釋從已生成的配置文件中刪除,形成一個(gè)簡(jiǎn)化的文件。

4.10 將htdocs目錄樹(shù)的所有權(quán)交給Web目錄樹(shù)的所有者

ROOT# chown -R 888:888 /www/apache/htdocs

5.編譯和安裝MySQL

MySQL并不是安裝在虛擬根環(huán)境化的目錄樹(shù)上的,事實(shí)上,它有可能是安裝在其它系統(tǒng)上的。但在我的例子中,它是和Apache安裝在一個(gè)web服務(wù)器上的。

這個(gè)例子包括生成用戶和數(shù)據(jù)庫(kù)所在地,以及生成初始的數(shù)據(jù)庫(kù)

5.1 生成用戶,他將是MySQL數(shù)據(jù)庫(kù)的所有者。

例如:在home/mysql/中生成一個(gè)用戶777:777

ROOT# groupadd -g 777 mysqldba
ROOT# useradd -c "mysql DBA" -d /home/mysql -u 777 -g 777 -m -n mysql

5.2 解開(kāi)原碼,并將原碼目錄樹(shù)給mysql的用戶

ROOT# groupadd -g 777 mysqldba
ROOT# useradd -c "mysql DBA" -d /home/mysql -u 777 -g 777 -m -n mysql

5.3 現(xiàn)在作為mysql用戶,為mysql數(shù)據(jù)庫(kù)建立目錄,并開(kāi)始安裝和編譯mysql

$ mkdir ~/db ## where the DB will reside
$ cd /usr/local/src/mysql-3.22.27
$ ./configure --localstatedir=/home/mysql/db --prefix=/usr/local/mysql
$ make
$ make install

5.4 生成*MySQL*授權(quán)表(只有在安裝*MySQL之前,這才是必須的)

$ ./scripts/mysql_install_db

5.5 安裝和修改數(shù)據(jù)庫(kù)的啟動(dòng)腳本,將數(shù)據(jù)庫(kù)的所有者從root變?yōu)閙ysql

ROOT# cd /usr/local/src/mysql-3.22.27/
ROOT# cp support-files/mysql.server /etc/rc.d/init.d/
ROOT# chmod 755 /etc/rc.d/init.d/mysql.server
ROOT# [ edit /etc/rc.d/init.d/mysql.server: ]
mysql_daemon_user=mysql ## so we can run mysqld as this user.
ROOT# chkconfig --add mysql.server ## permanently add server to rc scripts

5.6 在安裝了mysql之后,必須清空共享庫(kù)的cache。

ROOT# /sbin/ldconfig -nv /usr/local/lib

5.7 為mysql的所有者編輯PATH變量,并且設(shè)定數(shù)據(jù)庫(kù)的root密碼。

$ [ Edit shell login script .bash_profile: ]
PATH=$PATH:$HOME/bin:/usr/local/mysql/bin
$ . ~/.bash_profile ## source it!
$ mysqladmin -u root password '2mUch!data' ## pick your own password!

6.編譯和安裝PHP

6.1 先停止Apache后臺(tái)程序(daemon)的運(yùn)行

ROOT#chroot /www /apache/bin/apachectl stop

6.2 你首先要編譯PHP

如果你使用的是non-DSO安裝,你必須重新編譯Apache。(每次要升級(jí)non-DSO包中的任何一個(gè)軟件時(shí),你都要再這樣做一遍。)

$ cd /usr/local/src/chr ## I am NOT root!
$ tar zxf /path/to/php-4.02.tar.gz
$ cd php-4.02

non-DSO:

$ ./configure --with-mysql=/usr/local/mysql
--with-apache=../apache_1.3.12 --enable-track-vars
--with-config-file-path=/apache/conf --sharedstatedir=/tmp

DSO:

$ ./configure --with-mysql=/usr/local/mysql
--with-apxs=/apache/bin/apxs --enable-track-vars
--with-config-file-path=/apache/conf --sharedstatedir=/tmp

DSO:

(or add CFLAGS switch when mod_ssl was also configured as a DSO module)
$ CFLAGS=-DEAPI ./configure --with-mysql=/usr/local/mysql
--with-apxs=/apache/bin/apxs --enable-track-vars
--with-config-file-path=/apache/conf --sharedstatedir=/tmp
$ make

non-DSO:

$ make install

DSO:

ROOT# make install

進(jìn)行DSO的PHP安裝“make install”時(shí),你必須是root。因?yàn)槟K是直接進(jìn)入模塊目錄樹(shù)/apache/libexec的,另外,Apache的配置文件也改變了。

6.3 現(xiàn)在只討論non-DSO安裝,先重新編譯Apache,再激活PHP模塊

$ cd ../apache_1.3.12/
$ ./configure --with-layout=chroot
--enable-module=most --enable-module=so
--activate-module=src/modules/php4/libphp4.a
$ make
ROOT# make install ## I am root!

6.4 在實(shí)現(xiàn)了虛擬根環(huán)境目錄樹(shù)中,對(duì)PHP需要更多的共享庫(kù),可以用ldd來(lái)查看

For non-DSO: ldd /apache/bin/httpd

For DSO: ldd /apache/apache/libexec/libphp4.so

可以使用小的for循環(huán),從/lib和/usr/lib中拷貝所需的文件

ROOT# cd /www
ROOT# for i in libresolv.so.2 libnsl.so.1 libpam.so.0 ; do
> cp -pi /lib/$i /www/lib/ ; done
ROOT# for i in libgd.so.1 libgdbm.so.2 libz.so.1; do
> cp -pi /usr/lib/$i /www/usr/lib/ ; done

6.5 如果你需要mysql,你必須從它編譯的地方安裝相應(yīng)的庫(kù)

ROOT# cp -pi /usr/local/mysql/lib/mysql/libmysqlclient.so.6 /www/usr/lib/

6.6 你必須編輯httpd.conf文件,這樣它才可以識(shí)別出.php文件

ROOT# cd /apache/conf
ROOT# [ edit /apache/conf/httpd.conf ]
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps

6.7 重新啟動(dòng)后臺(tái)程序(daemon)

ROOT# chroot /www /apache/bin/apachectl start

6.8 在non-DSO中,你可以檢查已經(jīng)編譯過(guò)的PHP

ROOT# chroot /www /apache/bin/httpd -l | grep php
mod_php4.c

6.9 這兒有一個(gè)小的helloworld的腳本程序來(lái)測(cè)試php,它必須作為hello.php來(lái)安裝。如果你想要瀏覽源代碼的話可以拷貝一份或建立到hello.phps的系統(tǒng)連接。測(cè)試完,要關(guān)閉這個(gè)連接。

7.編譯和安裝perl

你可以簡(jiǎn)單的將/usr/lib/perl5拷貝到www/usr/lib,并將usr/bin/perl5.00503(假定是Red Hat6。0版本)拷貝到www/usr/bin中,這樣了事。同時(shí),你需要檢測(cè)并安裝任何缺少的共享庫(kù),你也需要建立從usr/bin/perl5.00503到/www中的/usr/bin/perl的硬連接。

簡(jiǎn)單的方法是:

ROOT# cp -a /usr/lib/perl5 /www/usr/lib/perl
ROOT# cp -p /usr/bin/perl5.00503 /www/usr/bin/
ROOT# cd /www/usr/bin
ROOT# ln perl5.00503 perl

但是,我還是講一下怎樣安裝和編譯perl,如果你想要安裝mod-perl,你就必須在此編譯perl:

7.1 建立向虛擬根環(huán)境化的目錄樹(shù)中安裝的必要的連接。

本例中使用目錄樹(shù)中的usr/Local。之所以用他,是有道理的,注意不要將他與usr/local混淆。安全起見(jiàn),我還是使用softs用戶來(lái)安裝

ROOT# mkdir /www/usr/Local
ROOT# ln -s /www/usr/Local /usr/local
ROOT# chown softs:softs /www/usr/Local

7.2 從RedHat中獲取RPM的源代碼

ROOT# rpm -i /path/to/perl-5.00503-2.src.rpm

7.3 作為源代碼目錄樹(shù)的所有者,解開(kāi)Perl

$ cd /usr/Local/src/chr
$ tar zxf /usr/src/redhat/SOURCES/perl5.005_03.tar.gz

7.4 RedHat在SRPM中包含了一些補(bǔ)丁。你可以使用相應(yīng)版本的補(bǔ)丁。在這個(gè)例子中,我用了RedHat6。0的補(bǔ)丁。

$ cp /usr/src/redhat/SOURCES/perl*.patch .
$ cd perl5.005_03
$ patch -p1 <../perl5-installman.patch
$ patch -p1 <../perl5.005_02-buildsys.patch
$ patch -p1 <../perl5.005_03-db1.patch

7.5 你需要運(yùn)行Configure,并接受大多數(shù)的卻生設(shè)置。你可能也想對(duì)man頁(yè)的none加以特殊說(shuō)明。下面是我對(duì)確生設(shè)置的一些修改:

$ ./Configure
architecture name? i386-linux
Installation prefix to use? /usr/Local
Directories to use for library searches? /lib /usr/lib /usr/Local/lib
install perl as /usr/bin/perl? n

7.6 編譯和運(yùn)行它

$ make
$ make test
$ make install

7.7 建立在usr/bin目錄樹(shù)中到perl的連接。

如果你沒(méi)有安裝mod-perl,你需要將perl目錄樹(shù)的所有權(quán)轉(zhuǎn)交給root。(不過(guò)這也不是必須的,只要Web目錄樹(shù)的所有者對(duì)perl目錄樹(shù)的權(quán)限是只可讀的就行了)

ROOT# cd /www/usr/bin
ROOT# ln -s ../Local/bin/perl perl#p#副標(biāo)題#e#

7.8 檢查共享庫(kù),安裝任何缺的庫(kù)(這主要決定于你的配置)

在這個(gè)例子中,我們不缺任何庫(kù):

ROOT# ldd /www/usr/bin/perl
libnsl.so.1 => /lib/libnsl.so.1 (0x4001b000)
libdl.so.2 => /lib/libdl.so.2 (0x40031000)
libm.so.6 => /lib/libm.so.6 (0x40035000)
libc.so.6 => /lib/libc.so.6 (0x40052000)
libcrypt.so.1 => /lib/libcrypt.so.1 (0x40147000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)

7.9 測(cè)試你的安裝:

ROOT# chroot /www /usr/bin/perl -v
This is perl, version 5.005_03 built for i386-linux
...

7.10 設(shè)置安裝在Apache服務(wù)器上的perl例子的cgi bin 腳本

ROOT# cd /www/apache/cgi-bin
ROOT# chmod ugo+x *

7.11 啟動(dòng)Apache服務(wù)器,測(cè)試perl cgi bin腳本的例子

ROOT# chroot /www /apache/bin/apachectl start
$ lynx -dump http://yourserver/cgi-bin/printenv

同時(shí)檢查test-cgi

$ lynx -dump http://yourserver/cgi-bin/test-cgi

7.12 最后將執(zhí)行的二進(jìn)制位從cgi腳本中去除,或完全去除。不要留對(duì)外的連接。

ROOT# chmod ugo-x /www/apache/cgi-bin/*

8.編譯和安裝mod-ssl

如果你打算使用DSO方式安裝mod-ssl,我希望你已經(jīng)讀過(guò)前面的附加注釋段。

你必須編譯openssl和mod-ssl,我還選擇編譯了rsaref version 2.0.你應(yīng)當(dāng)閱讀一些關(guān)于mod-ssl的文檔信息,以便理解mod-ssl的一些發(fā)行版本和選項(xiàng)。

注意,openssl和rsaref提供了包含文件、庫(kù)和開(kāi)發(fā)工具,它使得你可以編譯mod-ssl,所以決不能說(shuō)它是虛擬根環(huán)境化的目錄樹(shù)的一部分,或者說(shuō)是安裝在該目錄樹(shù)中的。

8.1 抽取openssl、mod-ssl和rsaref20的源代碼

$ cd /usr/local/src/chr
$ tar zxf /path/to/mod_ssl-2.6.6-1.3.12.tar.gz
$ tar zxf /path/to/openssl-0.9.5a.tar.gz
$ mkdir rsaref-2.0
$ cd rsaref-2.0
$ tar zxf /path/to/rsaref20.1996.tar.Z

8.2 配置和建立RSA參考庫(kù)。

注意,在64位結(jié)構(gòu)中你用rsaref必須在mod-ssl包中的INSTALL文件中讀取文檔信息。

$ cd /usr/local/src/chr/rsaref-2.0
$ cp -rpi install/unix local
$ cd local
$ make
$ mv rsaref.a librsaref.a

8.3 配置和建立openssl庫(kù)

$ cd /usr/local/src/chr/openssl-0.9.5a
$ ./config -L/usr/local/src/chr/rsaref-2.0/local -fPIC
$ make
$ make test# inspect output for anomalies

8.4 你可能想要安裝包,當(dāng)然不是安裝在目錄樹(shù)上了。

在這兒,我假設(shè)softs擁有usr/local/tree,因?yàn)榘惭bopenssl的缺省的前綴/usr/local/ssl 。但是,也不是必須要安裝這個(gè)包,因?yàn)槟憧梢栽趕rc目錄樹(shù)外進(jìn)行操作,來(lái)建立mod-ssl。

$ make install

8.5 配置open-ssl

$ cd /usr/local/src/chr/mod_ssl-2.6.6-1.3.12
$ ./configure -with-apache=../apache_1.3.12

8.6 進(jìn)入Apache目錄樹(shù)中,完成建立、配置、運(yùn)行和構(gòu)造

$ cd /usr/local/src/chr/apache_1.3.12

non-DSO:

$ SSL_BASE=../openssl-0.9.5a RSA_BASE=../rsaref-2.0/local
./configure --prefix=/apache --with-layout=chroot
--enable-module=most --enable-module=so --enable-module=ssl
--disable-rule=SSL_COMPAT --enable-rule=SSL_SDBM
--activate-module=src/modules/php4/libphp4.a
--activate-module=src/modules/perl/libperl.a

DSO:

$ cd src/modules
$ make clean ## seems to be necessary if you previously compiled in the apache tree
$ cd ../../
$ SSL_BASE=../openssl-0.9.5a RSA_BASE=../rsaref-2.0/local
./configure --prefix=/apache --with-layout=chroot
--enable-module=most --enable-shared=max --enable-shared=ssl
--disable-rule=SSL_COMPAT --enable-rule=SSL_SDBM
$ make

8.7 重新安裝Apache。如果他在運(yùn)行,要停止運(yùn)行再安裝。

ROOT# chroot /www /apache/bin/apachectl stop
ROOT# make install ## I am root!

8.8 對(duì)于non-DSO安裝你可以檢測(cè)內(nèi)部編譯模塊。

ROOT# chroot /www /apache/bin/httpd -l | grep -E '(php|perl|ssl)'
mod_ssl.c
mod_php4.c
mod_perl.c

8.9 在實(shí)現(xiàn)了虛擬根環(huán)境目錄樹(shù)中生成隨機(jī)的設(shè)備

ROOT# cd /www/dev
ROOT# mknod random c 1 8
ROOT# mknod urandom c 1 9

8.10 將缺省配置文件融合到你當(dāng)前的httpd.conf文件中。

我在不同于標(biāo)準(zhǔn)端口(80端口)的其他端口上進(jìn)行了測(cè)試,但是對(duì)于安全端口(443端口),沒(méi)有web服務(wù)起跑再它上面,所以我馬上就會(huì)用一下這個(gè)端口。

在這個(gè)例子中,我對(duì)缺省的配置文件httpd.conf的一些修改如下:

User www
Group www
ServerName yourserver.yourdomain.here
Port 8088 ## pick a test port
Listen 8088 ## in 'IfDefine SSL' section
Listen 443 ## this is the standard secure port!

AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
# your Hello.pm script for mod_perl testing:

SetHandler perl-script
PerlHandler Apache::Hello

SSLCertificateFile /apache/conf/server.crt
SSLCertificateKeyFile /apache/conf/server.key
# in this example I generate the key and crt files into /apache/conf
8.11 如果你現(xiàn)在還沒(méi)有一個(gè)服務(wù)器的關(guān)鍵字(keys)和認(rèn)證(certficate),那么現(xiàn)在就生成它。

在這個(gè)例子中我假設(shè)openssl在你的路徑中,因?yàn)槟阋呀?jīng)安裝了它。如果沒(méi)有,你就把它加到路徑中。注意,我已經(jīng)認(rèn)定了我的關(guān)鍵字,如果你要做非常重要的事,你最好利用授權(quán)機(jī)制來(lái)分發(fā)這些關(guān)鍵字。

ROOT# cd /www/apache/conf
set up a path of random files(為random文件生成路徑)
ROOT# randfiles='/var/log/messages:/proc/net/unix:/proc/stat:/proc/ksyms'
generate the server key(產(chǎn)生服務(wù)端的密鑰)
ROOT# openssl genrsa -rand
$randfiles -out server.key 1024
產(chǎn)生帶簽名的請(qǐng)求(在認(rèn)證自己的時(shí)候不要加密碼)
注意你的Common Name必須匹配你完全有權(quán)訪問(wèn)的web server name
ROOT# openssl req -new -nodes -out request.pem -key server.key
簽上你自己的密鑰(有效期一年)
ROOT# openssl x509 -in request.pem -out server.crt -req -signkey server.key -days 365
保護(hù)你的密鑰和證書(shū)
ROOT# chmod 400 server.*
刪除請(qǐng)求文件
ROOT# rm request.pem
可選擇性地加密你的密鑰
ROOT# mv server.key server.key.unencrypted
ROOT# openssl rsa -des3 -in server.key.unencrypted -out server.key
ROOT# chmod 000 server.key.unencrypted ## better yet delete it!
當(dāng)你改變注意,你決定從你的密鑰中刪除加密的密碼。
ROOT# openssl rsa -in server.key -out server.key.un
ROOT# mv server.key.un server.key
ROOT# chmod 400 server.key

8.12 不用ssl來(lái)啟動(dòng)Apache,以確保它在工作。

ROOT# chroot /www /apache/bin/apachectl start
$ lynx -dump http://yourserver:8088/

8.13 用ssl來(lái)重啟Apache,并用netscape來(lái)測(cè)試它。

ROOT# chroot /www /apache/bin/apachectl stop
ROOT# chroot /www /apache/bin/apachectl startssl
$ netscape https://yourserver/

8.14 現(xiàn)在你可能想要編輯你的server配置文件,并在標(biāo)準(zhǔn)端口(80端口)上設(shè)置服務(wù)器。

如果你測(cè)試配置,你不需要在443端口上進(jìn)行配置。

9.一些安全考慮

可以從一些在線Apache文檔中獲取幫助。一個(gè)需要特別注意的地方是在httpd腳本上進(jìn)行的授權(quán)改變。

ROOT# chmod ugo-rw /www/apache/bin/*

10.擺脫你自己的虛擬根環(huán)境化環(huán)境

當(dāng)你有意要擺脫自己的虛擬根環(huán)境化環(huán)境時(shí),一定要十分小心。在Unix世界中完成一項(xiàng)任務(wù)總是有不同的方法,你可以嘗試其他的方法。

我提供了下面一個(gè)例子,它可以通過(guò)cgi腳本或php來(lái)激發(fā)。

...
/** construct the file name as $f **/
$cmd = "/bin/mail "-s Some-subject-line -t webmaster@localhost -f $f"";
$op = exec( $cmd, $arr, $retval );
...
?>

文件被稱為wwwmail.c。

11.安裝以后進(jìn)行清除工作

11.1 去除安裝時(shí)一些必要的臨時(shí)連接

ROOT# rm /apache /usr/Local

11.2 通過(guò)在etc/rc.d/init.d中安裝稱為httpd的啟動(dòng)腳本文件來(lái)自動(dòng)啟動(dòng)Apache。如:

Standard appache on port 80
Apache on ports 80 and 443 (startssl)

接著在其上運(yùn)行chkconfig來(lái)建立象征性的連接

ROOT# chkconfig --add httpd
ROOT# chkconfig --list httpd
httpd 0:off 1:off 2:on3:on4:on5:on6:off

11.3 自動(dòng)的記錄triming文件。

在RedHat系統(tǒng)中你可以自己定義要記錄那個(gè)文件,及參數(shù),只用在etc/logrotate/conf中說(shuō)明就行了。

12.基于RPM的收獲文件

在這兒我沒(méi)有時(shí)間完全文本化它,你可以從RPMS中獲取它,然后不需要編譯原碼就生成一個(gè)虛擬根環(huán)境化的Web目錄樹(shù)。現(xiàn)在我有兩個(gè)腳本,以后我會(huì)對(duì)他們文檔化的:

Script file based on Red Hat 7.0 that will harvest the RPMs
Script file for creating temporary SSL key and certificate (testing purposes only!!!)

熱詞搜索:

上一篇:SOLARIS下SSH的安裝和自動(dòng)運(yùn)行
下一篇:在Solaris下安裝Oracle9i

分享到: 收藏