ldap+apache+svn
准备工作:apr-1.2.11.tar.gz、apr-util-1.2.10.tar.gz、httpd-2.2.10.tar.gz、zlib-1.2.8.tar.gz、subversion-1.4.6.tar.gz、subversion-deps-1.4.6.tar.gz
这些都是我们需要的,注意: 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目录)
这里有apache旗下所有产品的各个版本的文件,我们可以去这里找我们所需的部分文件
http的安装
依赖的安装
- 将apr-1.2.11.tar.gz解压,进入解压目录,然后
./configure --prefix=/usr/local/apr //--prefix的意思是指定安装位置
make&&make install
- 将apr-util-1.2.10.tar.gz解压,进入解压目录,然后
./configure --with-apr=/usr/local/apr --with-ldap //--with-apr的意思是configure的过程中apr是用指定的apr --with-ldap指的编译过程中添加ldap模块
make&&make install
http的安装
将httpd-2.2.10.tar.gz解压,然后
./configure --prefix=/usr/local/apache --with-apr=/usr/local/apr/bin/apr-1-config --with-apr-util=/usr/local/apr/bin/apu-1-config —enable-mods-shared="most dav" —disable-status —enable-authnz-ldap —enable-ldap
make&&make install
注意:
/usr/local/apache/bin/apachectl start的时候会出现
httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName,
这里我们修改apache/conf/httpd.conf文件中ServerName这一行,输入ServerName (主机ip)然后我们restart一下apachectl服务就可以了
svn的安装
依赖的安装
将zlib-1.2.8.tar.gz解压,然后
./configure&&make&&make install
svn的安装
- 解压subversion-1.4.6.tar.gz和subversion-deps-1.4.6.tar.gz文件,注意:这两个解压缩后会合并为一个文件夹,
./configure --prefix=/usr/local/svn --with-apxs=/usr/local/apache/bin/apxs --with-apr=/usr/local/apr/bin/apr-1-config --with-apr-util=/usr/local/apr/bin/apu-1-config --with-openssl --with-zlib --enable-maintainer-mode
```
(出现warning:BDB啥的不管,不影响我们的使用),然后
make&&make install
2. 1. 在上一步./configure出现错误
configure: error: no XML parser was found: expat or libxml 2.x required
解决办法:yum -y install expat expat-devel就可以了
2. 在上一步make出现错误
/app/software/subversion-1.4.3/neon/src/.libs/libneon.a:could not read symbols: Bad value collect2: ld returned 1 exit status
“`
解决办法:我们要在subversion的目录下./neon/src下的Makefile文件里修改CFLAGS这一项,增加-fPIC,例如CFLAGS = -fPIC -g -O2,然后make clean一下,再次make就没有错了
到此,我们编译完成了,接下来是配置
在apache目录下./conf/httpd.conf文件中添加以下内容:
<Location /svn> DAV svn SVNParentPath /data/svn // 配置版本库根目录路径 SVNListParentPath on //可以访问多个版本库 order allow,deny //先匹配禁止的用户 allow from all //没有禁止的就全部允许访问 Options Indexes //设定在目录下面没有index.html 的时候显示目录 AuthzLDAPAuthoritative On //打开权限继承 AuthType Basic // 访问的类型,基本验证,如用户名/密码 AuthName "Subversion repository" //在输入用户和密码框中显示的内容 AuthBasicProvider ldap //采用ldap认证 AuthLDAPURL "ldap://example.com:3268/dc=example,dc=com?sAMAccountName?sub?(objectCategory=person)" //url值,dc代表域名,一二级域名, //一个基本的ldap目录库匹配时,需要提供ldap目录库地址(10.255.1.231(域名也可以,只要能解析):3268),基准DN(根),个人的CN(objectCategory匹配登录用户的cn=person,其中sAMAccountName表示的是CN的其中一个属性,代表登录名) //匹配LDAP目录库记录时,要求要提供以下信息:LDAP目录库地址,基准DN,个人的CN,登录密码 AuthLDAPBindDN "$username" // 输入的是域的账户,全称(包括域名)alan@example.com,用来连接域 AuthLDAPBindPassword $password //相对应的密码abc@123 Require valid-user //允许经过验证的所有用户都可以访问 </Location>
- 然后我们建立版本库等操作
mkdir -p /data/svn/repos // 建立svn版本库目录
/usr/local/svn/bin/svnadmin create /data/svn/repos // 建立svn版本库
mkdir /usr/local/svn/conf // 新建存储访问控制文件的目录
配置通过http访问svn
- 创建用户名
/usr/local/apache/bin/htpasswd -c /usr/local/svn/conf/passwd.conf admin // 第一次创建加-c,后面就不用了,admin指的是登录用户名
/usr/local/apache/bin/htpasswd /usr/local/svn/conf/passwd.conf svnusername // 这个是后期追加的用户名,不用-c了
- 建立权限文件
touch /usr/local/svn/conf/authz.conf // 建立控制权限文件,文件内容如下:
[groups]
admin=admin // admin用户属于admin组
[/] // 根目录设置
@admin = rw // 赋予admin组rw权限
[repos:/aaa/bbb]
svnusername = rw // 指定svnusername用户可以读写/aaa/bbb目录的文件,但是aaa目录就没有读写权限了
配置通过svn客户端访问svn
- 在/data/svn/repos/conf目录下,打开authz文件,添加我们需要设置的组用户和相应的权限(可参照上面的配置)
- 打开passwd文件,在相应的组下面添加用户的密码(这里用的是明文)
- 打开svnserver.conf文件,
anon-access = none // 这里我们要注意的是anon-access要更改为none,意为不允许匿名访问
auth-access = write // 经过验证的用户有读写权限
password-db = passwd //使用密码文件验证密码
authz-db = authz //目录权限文件
real = My First Repository //认证域,相同认证域下使用相同的用户名和密码文件
- 启动apache
/usr/local/apache/bin/apachectl start
//如果觉得这个路径太长了,我们可以把这个路径export到profile文件中,这样以后就只需要apachectl start就可以了
通过netstat -an验证80端口是否打开
通过http://ip访问,会要求输入用户名和密码,如果不能访问,看看防火墙是否关闭,关闭防火墙就可以访问,当然,我们可以通过配置防火墙规则也是一样的
- 启动svn
/usr/local/svn/bin/svnserve -d -r /data/svn