Linux下 SVN +Apache+SSL配置手册+apache自动启动脚本 --写给菜鸟的详细配置

文档生成时间:2012年2月8日

作者:Ching

参考网站:http://www.thegeekstuff.com/2012/05/install-apache-2-on-centos-6/

 

一、准备阶段。

1.   安装包准备

apr-1.3.5.tar.gz
apr-util-1.3.7.tar.gz

(若升级Apache到2.4.2则apr需版本1.4.6、apr-util-1.4.1

卸载低版本:

#rpm -qa apr*

apr-1.2.7-11

apr-util-1.2.7-7.el5

apr-1.2.7-11

apr-util-1.2.7-7.el5

#rpm -e --allmatches --nodeps apr-1.2.7-11

#rpm -e --allmatches --nodeps apr-util-1.2.7-7.el5)
expat-2.0.1.tar.gz
httpd-2.2.11.tar.gz
libxml2-2.7.3.tar.gz
subversion-1.6.2.tar.gz

subversion-deps-1.6.2.tar.gz
neon-0.28.4.tar.gz
openssl-0.9.8k.tar.gz
zlib-1.2.3.tar.gz

以上版本和步骤中安装版本可能不一致,根据需要挑选自己所需版本。

#rpm –qa|grep

查看系统有无expat、libxml、neon、openssl、zlib,若无,则进行安装

 

2. 查看并卸载旧版svn

#svn  --version   or# /usr/local/svn/bin/svnserve --version  查看旧版svn版本号

(源码安装的直接删除安装目录即可。)

[[email protected] svn]# rpm -qa | grep subversion

[[email protected] bin]# rpm -e subversion-1.4.2-4.el5

error: "subversion-1.4.2-4.el5" specifies multiple packages

 

[[email protected] bin]# rpm -e --allmatches subversion-1.4.2-4.el5

卸载了svn-1.4.2-4

二、 安装和配置步骤:

1. 安装apr-1.3.8.tar.gz (下载地址:http://apache.etoak.com/)

tar –zvxf apr-1.3.8.tar.gz (解压)
cd apr-1.3.8 (进入apr…所在的目录)

./configure  --prefix=/usr/local/apr(安装不指定路径时默认安装到/usr/local/apr)

make ; make install (安装)

2. 安装 apr-util-1.3.9.tar.gz

tar –zvxf apr-util-1.3.9.tar.gz
cd apr-util-1.3.9
./configure  - -with-apr=/usr/local/apr
make ; make install

3. 安装zlib(检验已安装zlib且步骤6不报错时此步骤可省略)

tar -zxvf zlib-1.2.3.tar.gz

cd zlib-1.2.3

./configure 

make && make install    

4. 安装SSL

(http://www.openssl.org/source/)

# tar zxvf openssl-0.9.8d.tar.gz
# cd openssl-0.9.8d
# ./config --prefix=/usr/local/ssl   shared zlib
# make

#make test
# make install

默认安装在=/usr/local/ssl

5.升级openssl(需要ssl高版本时才做此升级)

升级步骤(需要ssl高版本时才做此升级:参考http://www.doc88.com/p-808812018993.html

0. 首先通过 #openssl version –a 查看系统中存在的OpenSSL版本号
(如安装完成新版本后需卸载:#rpm -e --allmatches --nodeps openssl…)—我未卸载
1. 通过#wget http://www.openssl.org/source/openssl-0.9.8g.tar.gz获得0.9.8g的源码包

2. 安装openssl

#tar –xzvf openssl-0.9.8g.tar.gz
#cd openssl-0.9.8g

#./config --prefix=/usr/local/ssl  shared zlib
#make

#make test
#make install
mv /usr/bin/openssl /usr/bin/openssl.OFF
mv /usr/include/openssl /usr/include/openssl.OFF

ln –s /usr/local/ssl/bin/openssl /usr/bin/openssl
ln –s /usr/local/ssl/include/openssl /usr/include/openssl


(注:如果是64位系统,以下设置应该到lib64目录中才会生效,否则sshvsftpd都会出现错误,如:ssh: error while loading shared libraries: libcrypto.so.6: cannot open shared ob
ject file: No such file or directory
)

mv  /usr/lib/libcrypto.so  /usr/lib/libcrypto.so.OFF 
mv  /usr/lib/libssl.so  /usr/lib/libssl.so.OFF

ln -s /usr/local/ssl/lib/libcrytpo.so.0.9.8  /usr/lib/libcrypto.so  (如:/usr/lib64/libcrypto.so

ln -s /usr/local/ssl/lib/libssl.so.0.9.8  /usr/lib/libssl.so

 

ln –s /usr/local/ssl/lib/libcrytpo.so.0.9.8  /lib/libssl.so.6

ln –s /usr/local/ssl/lib/libcrytpo.so.0.9.8  /lib/libcrypto.so.6

 


3 配置库文件搜索路径

#echo “/usr/local/ssl/lib” >> /etc/ld.so.conf
#ldconfig –v

 

#为了让上层应用软件调用到新安装的ssl so 动态库,做下面配置

# add the new libs into ldconfig's path

echo "/usr/local/ssl/lib/" >> /etc/ld.so.conf

ldconfig                                                  

ldconfig -p | grep libcrypto    --- which will be used by apache with ldd link

ldconfig -p | grep libssl         --- which will be used by apache with ldd link

查看openssl的版本号,以验正是否安装正确

 

#openssl version -a

 

#你可以下面命令来检查当前的openssl是不是新安装的那个,如果不是将新安装的目录放到PATH的最前面!

 

#which openssl

/usr/local/bin/openssl
#vi /etc/profile

在适当的位置添加PATH=/usr/local/ssl/bin:$PATH

#source  profile

再查看:

#which openssl

/usr/local/ssl/bin/openssl
4
查看openssl 版本号,验证安装正确性

#openssl version –a

可以看到是新装好的0.9.8g版本

6. 安装httpd-2.2.13.tar.gz

 

cd /usr/local
mkdir apache2
(不手动建的话,等哈很麻烦的)
回到刚才的目录

tar –zvxf httpd-2.2.13.tar.gz
cd httpd-2.2.13
./configure

--prefix=/usr/local/apache2

--with-ssl=/usr/local/ssl      

--with-apr=/usr/local/apr/bin/apr-1-config

--with-apr-util=/usr/local/apr/bin/apu-1-config

--enable-mods-shared=all

--enable-dav

--enable-dav-fs

--enable-so  
--enable-maintainer-mode

--enable-rewrite
make ; make install

 

若出现错误:

/usr/local/ssl/lib/libssl.a(s23_meth.o): relocation R_X86_64_32 against `a local symbol' can not be used when making a shared object; recompile with -fPIC
/usr/local/ssl/lib/libssl.a: could not read symbols: Bad value

./configure 加上选项--libdir=/usr/lib64 参数

或重新编译openssl
# ./config -fPIC --prefix=/usr/local/ssl/ enable-shared
# make&&make test&&make install

安装之后重新启动apache服务
/usr/local/apache2/bin/apachectl –k start / restart    可生成ssl的server.key后再启动

用浏览器查看http://192.168.18.11(Linux系统IP地址),得到it works,说明apache已经配置成功了(说明:安装了SSL,后等后面生成server.key后才有密码启动apache。

设置启动系统后,自启动 Apache 服务
编辑
etc/rc.d/rc.local
# vi /etc/rc.d/rc.local

在最后加上一句:

/usr/local/apache2/bin/apachectl start

7. 安装subversion

tar –zvxf subversion-1.5.6.tar.gz
tar –zvxf subversion-deps-1.5.6.tar.gz
(这两个自动解压成一个包 subversion-1.5.6)
cd subversion-1.5.6
(# 如果linux系统上已经装有apr或者apr-util ,移除 apr存在的版本,subversion解压后的文件里有apr相关的文件,需要移除)

rm –rf apr
rm -rf apr-util

说明:SVN 依赖的APR版本要正确。如果Apache为2.0.x,对应的APR版本应为0.9.x;Apache为2.2.x,对应的APR版本应为1.2.x。 由于subversion-deps包里的APR是0.9.x的,因此编译svn时要删除从deps里解压出来的apr, apr-util,改而使用apache 2.2里提供的。(这里指定为开始安装的apr目录)!
(先跑去建/usr/local/svn)

cd /usr/local
mkdir svn
(不知道为什么我不手动建目录的话,它不给我自动建)

cd subversion-1.5.6

 

subversion-1.4.2]#./autogen.sh#建议先执行此领命,subversion会进行初始化,之前蚊子在make的时候报错,后来执行此操作后,make就顺利过去了

 

./configure
--prefix=/usr/local/svn
--with-apxs=/usr/local/apache2/bin/apxs
--with-apr=/usr/local/apr/bin/apr-1-config
--with-apr-util=/usr/local/apr/bin/apu-1-config
--with-ssl
--with-zlib   or  --with-zlib=/usr/lib (步骤3安装后需要用此句指明路径)

--enable-maintainer-mode
报错如下:
configure: maintainer-mode: adding GCC warning flags
configure: error:
–with-zlib requires an argument.

安装zlib,下载subversion-deps-1.6.6.tar.bz2
cd subversion-1.6.6/zlib/
./configure --shared
 make   或者安装步骤3后再执行


make
make install

确定一下svn有没有安装成功
/usr/local/svn/bin/svnserve --version
会看到相关版本信息!

安装完毕,将svn的bin目录包含到系统环境变量中,这样以后可以在任何地方访问  /etc/profile中加PATH=/usr/local/svn/bin:$PATH

或者在/usr/bin 中做一个svn 的链接;
[root@localhost beinan]# ln -s  /usr/local/svn/bin   /usr/bin/svn
(如果:
执行了configure,make后
make install时出错:

/bin/sh /usr/local/httpd-2.2.3/srclib/apr/libtool --mode=install /usr/bin/install -c -m 755 libaprutil-1.la /usr/local/apache2/lib
libtool: install: error: cannot install `libaprutil-1.la' to a directory not ending in /usr/local/apache22/lib
make[2]: *** [install] Error 1
则再./configure 后

make clean
make
make install

三、apache的配置

1.正常安装下修改文件/usr/local/apache2/conf/httpd.conf

LoadModule dav_module modules/mod_dav.so
LoadModule dav_fs_modulemodules/mod_dav_fs.so
LoadModule dav_lock_modulemodules/mod_dav_lock.so
LoadModule dav_svn_module modules/mod_dav_svn.so  
没有则需加入(这两行的顺序不能颠倒)
LoadModule authz_svn_module modules/mod_authz_svn.so 

LoadModule ssl_module modules/mod_ssl.so
这几个module保证不是被注释的,另外找到
Include conf/extra/httpd-dav.conf  

Include conf/extra/httpd-ssl.conf这两行,去掉前面的注释。

 

2.开始建立用户及版本库

#groupadd  svn

#useradd  -g  svn  -d /home/svnroot svnroot

#passwd svnroot (输入欲设定的密码)

#su  -  svnroot   -----切换到svnroot用户建立配置库
#/usr/local/svn/bin/svnadmin create  /home/svnroot/test (创建仓库"test" )
#ls /home/svnroot/test (查看有没有创建好,如果多了一些文件则说明版本库已经创建好
)
(
如果出现“无法创建顶级目录”的错误,请先
cd /
mkdir /home/svnroot
)

3.   给仓库根目录授权

  #chown -R svnroot.svn /home/svnroot
   #chmod 770 /home/svnroot         
   #chmod -R g+w /home/svnroot/test可不要

4. 用Apache管理用户权限:

   首先创建conf目录 #mkdir  /home/svnroot/conf

a, 创建一个用户及密码文件

htpasswd  –c  /home/svnroot/conf/passwd  username
如果 passwordfile 不存在,第一次可以加上 -c 选项让 htpasswd 新建一个passwd文件。下次设置用户时使用 –d  选项。创建好的文件内容是用户名加上密码的 MD5 密文。

b, 修改svn权限策略控制文件

#vi  /home/svnroot/conf/authz

输入:[groups]

A=xiaoma,xiaohong   ---组A中含两个人,人员需在passwd文件中设置

[/]             ---表示在所有仓库的根目录下

admin_me=rw   --管理人员admin_me有读写权限 ,需在passwd中设置所有涉及人员。

[test:/]

@A=r         ---组A的人员对test库有只读权限

Xiaofeng=rw   ---xiaofeng 对test库有读写权限

注意:在编辑authz.conf文件时,所有行都必须要顶头写,不能有缩行出现,否则会报错:"Access denied: 'user1' ",里面的内容可以根据自己的需要自行添加。

5.   修改/usr/local/apache2/conf/httpd.conf

在 Location 标签中加入如下内容:
(apache进程的权限:因为所有跟仓库传输的操作都是通过apache进程进行的,所以即使你给svn用户设置了很大的权限,但是apache进程没有访问仓库或者相关文件的权限也没有用,apache进程的权限设置在 /usr/local/apache2/conf/httpd.conf 文件中配置,找到文件中的这两行:User daemon  # 将daemon改为svnroot,让apache进程以svnroot的身份运行)
即先修改版本库的权限:
User daemon
Group daemon
//把上述内容改成
:
User svnroot
Group svn
整合
apache svn:

DAV svn

SVNParentPath /home/svnroot

AuthType Basic

AuthName "Hello,SVN!"

AuthUserFile /home/svnroot/conf/passwd

AuthzSVNAccessFile /home/svnroot/conf/authz

Require valid-user

SSLRequireSSL

(说明:

(此处指定http访问的路径,这样配置时的访问路径为http:///svn)
DAV  svn
SVNParentPath  /home/svnroot/(此处配置你的版本库上层目录) 
AuthType  Basic (连接类型设置 基本验证)
AuthName  "Hello welcome to here" (此处字符串内容修改为提示对话框标题)
AuthUserFile  /home/svnroot/conf/passwd (此处修改为访问版本库用户的文件,用apache 的htpasswd命令生成)
AuthzSVNAccessFile  /home/svnroot/conf/authz (此处修改为访问版本库权限的文件)
Require valid-user ("Require valid-user"告诉apache在authfile中所有的用户都可以访问。如果没有它,则只能第一个用户可以访问新建库)

6.   重启apache服务和启动svn服务(su - root)

a)     启动apache
#/usr/local/apache2/bin/apachectl -k restart

b)     启动svn服务
运行 /usr/local/svn/bin/svn -d -r /home/svnroot/
-d 
表示以 daemon 方式(后台运行)运行   ---有误,b)步骤可不要
-r /home/svnroot/  指定根目录是/svnroot/
(如果要指定端口号,则加上--listen-port 21,21是指定的端口号)

就可以通过http:///svn/test 这个URL来访问仓库test了,当然,受权限的限制,必须是合法用户才能访问且具有相应的权限。

c)     在/etc/profile的结尾设置一些svn启动时要做的工作

# start apache server for svn 
/usr/sbin/apachectl start 
export SVN_EDITOR=vi  

四、设置SSL访问(生成证书)

1)查看有无ssl,没有则安装openssl (前面已安装,此处不需要)

# rpm -qa|grep ssl
openssl-0.9.8b-8.3.el5

openssl-devel-0.9.8b-8.3.el5

【注意】如果是编译安装的openssl,需要在再加 --with-ssl=/usr/local/openssl 选项

此处openssl 为系统自带

2)创建apache2启用SSL所需的证书

修改 /usr/local/apache2/conf/httpd.conf 文件,在文件中找到下面一行,把注释去掉:
Include conf/extra/httpd-ssl.conf

#vi /usr/local/apache2/conf/httpd.conf

参考文章:
[url]http://www.blogjava.net/jjwwhmm/archive/2008/04/25/195964.html[/url]

在/usr/local/apache2/conf/extra/httpd-ssl.conf 配置文件里,写着证书、Key文件的默认存放位置为:
SSLCertificateFile "/usr/local/apache2/conf/server.crt"
SSLCertificateKeyFile "/usr/local/apache2/conf/server.key"

所以我们最好来到 apache2/conf 目录下工作:
# cd /usr/local/apache2/conf

A.创建Key文件:(或在/usr/local/ssl中创建这些文件,再cp到/usr/local/apache2/conf
[root@pps conf]# openssl genrsa -des3 -out server.key 1024
执行完后应该在当前目录中有一个server.key文件

B.查看创建的key文件:(不是必须)
# openssl rsa -noout -text -in server.key

C.创建pem文件:(不是必须)
# openssl rsa -in server.key -out server.key.unsecure

D.创建scr文件:
[root@pps conf]# openssl req -new -key server.key -out server.csr
执行完后应该在当前目录中有一个server.csr文件

//按提示分别输入如下内容:
//Country Name: CN
//State or Province Name: BeiJing
//Locality Name: BeiJing
//Organization Name:
//Organizational Unit Name:
//Common Name:
//Email Address: your email

E.创建crt文件:
[root@pps conf]# openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt

执行完后应该在当前目录中有一个server.crt文件
//按提示分别输入如下内容:
//Country Name: CN
//State or Province Name: BeiJing
//Locality Name: BeiJing
//Organization Name:
//Organizational Unit Name:
//Common Name:
//Email Address: your email

(注:
server.crt和server.csr 的Common Name不能一样)

#chmod 400 server.csr    (默认权限都是644)
#chmod 400 server.key

#chmod 400 server.crt

(上三行可不要)

F.启动apache
/usr/local/apache2/bin/apachectl start
输入密码****

3)在IE里输入[url]https://ip[/url]
我用的是IE7,显示“此网站的安全证书有问题”,不用理会它,点击继续显示网页即可。

apache2启用ssl后的默认DocumentRoot "/usr/local/apache2/htdocs/"
可以在 apache2/conf/extra/httpd-ssl.conf 里修改为自己想要的目录。

 ==================================================
希望只有认证的用户才能访问的话,请继续下面的配置  (此处开始svn配置,启用svn用户认证)

==================================================

 

参考文章:
[url]http://www.chinaunix.net/jh/13/469276.html[/url]

 

五、创建认证客户所需要的CA证书

CA(Certificate Authority)是数字证书认证中心的简称,是指发放、管理、废除数字证书的机构。CA的作用是检查证书持有者身份的合法性,并签发证书(在证书上签字),以防证书被伪造或篡改,以及对证书和密钥进行管理。

我建一个ssl.crt目录来工作:
# mkdir -p /usr/local/apache2/conf/ssl.crt/
# cd /usr/local/apache2/conf/ssl.crt/

A.创建CA的key文件:
[root@pps ssl.crt]# openssl genrsa -des3 -out myCA.key 1024

B.创建CA的crt文件:
[root@pps ssl.crt]# openssl req -new -x509 -days 3650 -key myCA.key -out myCA.crt

ca.crt 和server.csr 的Common Name不能一样

【现在我有了这个myca.crt, 这个CERT相当与一个图章,用这个图章盖过的请求才可以访问我的apache2-https服务器】

C.用户请求生成一个csr文件:
[root@pps ssl.crt]# openssl req -new -out client.csr

【这里可以用普通用户权限来生成一个请求CSR文件,这里为了方便我就用root用户申请生成一个。用“图章”盖过印的CSR请求产生的一个cert才有效。】

D.生成用户可以使用的crt证书文件:
[root@pps ssl.crt]# openssl x509 -req -in client.csr -out client.crt -signkey myCA.key -CA myCA.crt -CAkey myCA.key -CAcreateserial -days 3650

【执行完生成了一个client.crt文件. 也就是一个盖过章的certificate】
这个certificate是BASE64形式的,要转成PKCS12才能装到IE,/NETSCAPE上

E.导出为pfx证书:
[root@pps ssl.crt]# openssl pkcs12 -export -in client.crt -inkey myCA.key -out client.pfx

F.修改 httpd-ssl.conf 配置文件:
在 httpd-ssl.conf 文件中找到 SSLCACertificateFile 的配置,把注释去掉并修改其路径值为文件路径为client.crt,我的如下:
SSLCACertificateFile "/usr/local/apache2/conf/ssl.crt/myCA.crt"
把以下两行注释去掉:
SSLVerifyClient require
SSLVerifyDepth  10

重新启动apache2,当再次访问apache2的时候,IE就会弹出窗口选择证书了。
将 client.pfx 从RHEL5取回Windows,在IE弹出串口选择证书的时候选择它即可。

(pfx 即 Personal Information Exchange 个人信息交换)

==========================================
    IE7证书导入(本人电脑没有IE6可试)
==========================================

 

Internet选项 --> 内容 --> 证书 --> 个人 --> 导入 --> 选择client.pfx

提示输入“私钥”密码的时候,输入在创建client.pfx文件时所键入的 Export Password:
[root@pps ssl.crt]# openssl pkcs12 -export -in client.crt -inkey myCA.key -out client.pfx
Enter pass phrase for myCA.key: zhaozh
Enter Export Password: hoho
Verifying - Enter Export Password: hoho

上面的例子,"hoho"就是要输入的“私钥”密码。

哈哈,利用自己授权的证书访问自己的服务器,感觉有点酷哦~

 

六、配置在linux下apach+ssl自动启动的标准脚本

a)配置apache启动时自动提取ssl_mod密码脚本

#cd  /usr/local/apache2/conf/extra

#cp   httpd-ssl.conf  httpd-ssl.conf.bak   --做个备份

#vi /usr/local/apache2/conf/extra/httpd-ssl.conf

注释SSLPassPhraseDialog  builtin

在后添加

SSLPassPhraseDialog  exec:/usr/local/apache2/conf/apache_pass.sh

 

#vi /usr/local/apache2/conf/apache_pass.sh

输入:

#!/bin/sh

echo "密码"    ---密码写启动apache时所用的ssl_mod密码(即server.key的内容)

 

#chmod  500  /usr/local/apache2/conf/apache_pass.sh     --使apache_pass.sh文件只有root可见,增加安全性

#chmod +x /usr/local/apache2/conf/apache_pass.sh  (或者上句直接改成511,省掉此句)

b)配置apache开机自动启动脚本

当手动编译安装apache服务器后一般不会开机自动运行,需要自己添加:

# cd /etc/init.d
# vi apache2

加上以下脚本

#!/bin/sh
# description: Apache auto start-stop script.
# chkconfig: - 85 15

APACHE_HOME=/usr/local/apache2
APACHE_OWNER=root
if [ ! -f "$APACHE_HOME/bin/apachectl" ]
then
    echo "Apache startup: cannot start"
    exit
fi
case "$1" in
    'start')
        su - $APACHE_OWNER -c "$APACHE_HOME/bin/apachectl start"
        ;;
    'stop')
        su - $APACHE_OWNER -c "$APACHE_HOME/bin/apachectl stop"
        ;;
    'restart')
        su - $APACHE_OWNER -c "$APACHE_HOME/bin/apachectl restart"
        ;;
esac

# chmod 755 apache2
# chkconfig --add apache2
# chkconfig --level 345 apache2 on

(chkconfig --add  name:增加一项新的服务。chkconfig确保每个运行级有一项启动(S)或者杀死(K)入口。如有缺少,则会从缺省的init脚本自动建立。   chkconfig --del  name:删除所指定的系统服务,不再由chkconfig指令管理,并同时在系统启动的叙述文件内删除相关数据。)

Ok,测试Apache
# service apache2 start
# service apache2 stop
# service apache2 restart

同时reboot OS试一下apache是否开机自动运行了。

 

七、为SVN加入Email通知

可以通过Subversion的Hook脚本的方式为SVN加入邮件列表功能
编译安装了Subversion后 在源码的tools 下有一个comm-email.pl的Perl脚本,在你的档案目录下有一个hooks目录,进入到hooks目录把post-commit.tmpl 改名为post-commit并给它可执行的权限。

更改post-commit脚本 把comm-email.pl脚本的决对路径加上,否则 SVN找不到
comm-email.pl
解决乱码问题:

my @difflines; (行487) 的前面加上:

for (my $i=0; $i<@body; ++$i){
   my @rsa = split( /\?\\/, $body[$i] );
   $body[$i] = "";
   foreach my $val (@rsa) {
       $val =~ /(^[0-9]{3})(.*)/;
       if(defined $1 and $1 gt 0){
           #print "\n[".$1 . "," . $2."]";
           $body[$i] .= chr($1) . $2;
       }
       else{
           $body[$i] .= $val;
       }
   }
}
REPOS="$1"
REV="$2"
/usr/local/svnroot/resp/commit-email.pl "$REPOS" "$REV" [email protected] [email protected]
#log-commit.py --repository "$REPOS" --revision "$REV"
**注意运行权限问题(注意commit-email.pl 中需要配置发送mail的方式,建议使用sendmail,SMTP方式邮件格式不正确。post-commit其实就是一个钩子脚本文件,需要的信息就是$1 $2,可以自己实现这个文件。)

八、备份

#!/bin/bash
SRCPATH=/home/svnroot/repos/; #
定义仓库parent路径
DISTPATH=/home/backup/svn/`date +%m%d`/ ; #定义存放路径
;
if [ -d "$DISTPATH" ]
then
  echo "aaaaa"
else
   mkdir $DISTPATH
   chmod g+s $DISTPATH
fi
echo $DISTPATH
svnadmin hotcopy $SRCPATH/Project1 $DISTPATH/Project1 >/home/backup/svn/cpreport.log 2>&1;

九、安装过程中可能遇到的问题

1.cannot restore segment prot after reloc: Permission denied问题

这是由于开启SELINUX造成的,解决办法:编辑/etc/sysconfig/selinux,找到:

# This file controls the state of SELinux on the system.

# SELINUX= can take one of these three values:

# enforcing - SELinux security policy is enforced.

# permissive - SELinux prints warnings instead of enforcing.

# disabled - SELinux is fully disabled.

SELINUX=enforcing

如果SELINUX已经是 SELINUX=disabled,那么就不用改了,否则就把SELINUX=enforcing 注释掉,新加一行:

SELINUX=disabled

保存,退出,重启。

在你保证SElinux 被disable后.再执行下

chcon -t texrel_shlib_t

如: chcon -t texrel_shlib_t /路径/路径/名字.so   (这个文件视具体执行文件.)

2.安装subversion时,编译到最后会出现一段

configure: WARNING: we have configured without BDB filesystem support

大概是不能创建db格式的版本库

解决办法:这个没什么关系,一般不会有多大影响

3.安装subversion时,make没问题,make install时出现

/usr/local/src/subversion-1.5.2/subversion/svnversion/.libs/lt-svnversion: error while loading shared libraries: libexpat.so.1: cannot open shared object file: No such file or directory

意思是找不到libexpat.so.1这个文件

运行 whereis libexpat.so.1

libexpat.so: /lib/libexpat.so.0 /usr/local/lib/libexpat.so /usr/local/lib/libexpat.so.1

解决办法:vi   /etc/ld.so.conf

加入libexpat.so.1的目录 /usr/local/lib/ 保存退出

运行ldconfig

第一次按照上述方法编译的apache,启动的时候会报错:
# cd /usr/local/apache2
# ./bin/apachectl startssl
Syntax error on line 251 of /usr/local/apache/conf/httpd.conf:
Cannot load /usr/local/apache/modules/mod_ssl.so into server: /usr/local/apache/modules/mod_ssl.so: undefined symbol: X509_free

原因是什么呢?看 http://www.smartframeworks.com/qt-apache-ssl.html
因为按照下面的方法(参看:Apache2 + mod_ssl + php5 完全安装实录(2))安装的openssl默认是没有编译成动态链接库的,因为其文档说openssl的动态链接库还不成熟,可以使用 ./config shared 编译带动态链接库的openssl,但是还处于试验阶段。
解决这个问题的办法是:将mod_ssl静态的编译到apache里面。
请使用下面的方法重新来过:)
$ ./configure --prefix=/usr/local/apache2 --enable-so --enable-ssl=static --with-ssl=/usr/local/ssl --enable-mods-shared=all
$ make
$ su
# make install

这次启动apache的时候又发现一个错误:
# cd /usr/local/apache2
# ./bin/apachectl startssl
Syntax error on line 108 of /usr/local/apache2/conf/ssl.conf:
SSLCertificateFile: file '/usr/local/apache2/conf/ssl.crt/server.crt' does not exist or is empty

这又是什么原因呢?因为我们没有配置ssl,需要生成ssl需要的证书。
以前使用apache1+mod_ssl的时候,make之后有一个这样的步骤
$ make certificate
可以用来生成ssl所用到的证书。
现在没有这个工具了,只能自己动手生成了,对证书不熟悉的人,有一个工具可以使用:http://www.openssl.org/contrib/ssl.ca-0.1.tar.gz
# cd /usr/local/apache2/conf
# tar zxvf ssl.ca-0.1.tar.gz
# cd ssl.ca-0.1
# ./new-root-ca.sh                         (
生成根证书)
No Root CA key round. Generating one
Generating RSA private key, 1024 bit long modulus
...........................++++++
....++++++
e is 65537 (0x10001)
Enter pass phrase for ca.key:              (
输入一个密码)
Verifying - Enter pass phrase for ca.key:  (
再输入一次密码)
......
Self-sign the root CA...                   (
签署根证书)
Enter pass phrase for ca.key:              (
输入刚刚设置的密码)
........
........                                   (
下面开始签署)
Country Name (2 letter code) [MY]:CN
State or Province Name (full name) [Perak]:JiangSu
Locality Name (eg, city) [Sitiawan]:NanJing
Organization Name (eg, company) [My Directory Sdn Bhd]:Wiscom System Co.,Ltd
Organizational Unit Name (eg, section) [Certification Services Division]:ACSTAR
Common Name (eg, MD Root CA) []:WISCOM CA
Email Address []:[email protected]

这样就生成了ca.key和ca.crt两个文件,下面还要为我们的服务器生成一个证书:
# ./new-server-cert.sh server              (这个证书的名字是server)
......
......
Country Name (2 letter code) [MY]:CN
State or Province Name (full name) [Perak]:JiangSu
Locality Name (eg, city) [Sitiawan]:NanJing
Organization Name (eg, company) [My Directory Sdn Bhd]:Wiscom System Co.,Ltd
Organizational Unit Name (eg, section) [Secure Web Server]:ACSTAR
Common Name (eg,
www.domain.com) []:acmail.wiscom.com.cn
Email Address []:[email protected]

这样就生成了server.csr和server.key这两个文件。
还需要签署一下才能使用的:
# ./sign-server-cert.sh server
CA signing: server.csr -> server.crt:
Using configuration from ca.config
Enter pass phrase for ./ca.key:             (
输入上面设置的根证书密码)
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName           :PRINTABLE:'CN'
stateOrProvinceName   :PRINTABLE:'JiangSu'
localityName          :PRINTABLE:'NanJing'
organizationName      :PRINTABLE:'Wiscom System Co.,Ltd'
organizationalUnitName:PRINTABLE:'ACSTAR'
commonName            :PRINTABLE:'acmail.wiscom.com.cn'
emailAddress          :IA5STRING:'[email protected]'
Certificate is to be certified until Jul 16 12:55:34 2005 GMT (365 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
CA verifying: server.crt <-> CA cert
server.crt: OK
 (如果这里出现错误,最好重新来过,删除ssl.ca-0.1这个目录,从解压缩处重新开始。)

下面要按照ssl.conf里面的设置,将证书放在适当的位置。
# chmod 400 server.key
# cd ..
# mkdir ssl.key
# mv ssl.ca-0.1/server.key ssl.key
# mkdir ssl.crt
# mv ssl.ca-0.1/server.crt ssl.crt

然后就可以启动啦!
# cd /usr/local/apache2
# ./bin/apachectl startssl

对于这个提示:
httpd: Could not determine the server's fully qualified domain name, using 127.0.0.1 for ServerName
只需要编辑httpd.conf,找到ServerName xxxx这一行,去掉前面的注释即可。

 

Apache有两种使用模块的方法,其一是永久性包含进核心;
如果操作系统支持动态共享对象(DSO),而且能为autoconf所检测,则模块还可以被动态编译。
DSO模块的存储是独立与核心的,可以被核心使用由mod_so模块提供的运行时刻配置指令包含或排除。
如果编译中包含有任何动态模块,则mod_so模块会被自动包含进核心。如果希望核心能够装载DSO,而不实际编译任何动态模块,需要明确指定--enable-so
(http://kajaa.bbs.us/ApacheManual/install.html)

 

 

 

 

你可能感兴趣的:(技术类)