您的位置:首页 > 编程语言

木马编程DIY第8篇服务启动技术

2008-11-12 14:54 357 查看
安装配置 svn server+apache

第一步,先检查是否安装了下面软件包

                #rpm -q subversion  httpd  mod_dav_svn

                如果没有请安装他们!

第二步,建立一个用户,用于管理SVN版本库

    useradd -m -s /bin/bash svn

第三步,创建版本库目录,并修改相应权限。

    mkdir /var/repos

    chown svn.svn /var/repos

第四步,创建项目仓库

su - svn

svnadmin create /var/repos/svn1

svnadmin create /var/repos/svn2

这是在svn1,svn2下面会参数一些文件,包括conf目录。

/var/repos/svn*为所创建的项目仓库的路径,理论上可以是任何目录,  但建议放在/home/svn下

 

第六步,修改配置文件/var/repos/svn1/conf/svnserve.conf

代码

#去掉#[general]前面的#号

[general]

#匿名访问的权限,可以是read,write,none,默认为read,如果你不愿意匿名共享请配置为none

anon-access = none

#认证用户的权限,可以是read,write,none,默认为write

auth-access = write

#密码数据库的路径,去掉前面的#, 默认使用的是同一目录下的passwd 文件作为用户认证方式

password-db = passwd

注意:所有的行都必须顶格,否则报错。

建议:为了防止不必要的错误,建议你直接用我上面的内容覆盖掉文件原来的内容

第五步,修改配置文件passwd。

代码

[users]

sxy = sxy    格式为:用户名=密码

注意

1. 一定要去掉[users]前面的#,否则svn只能以匿名用户登录,客户端不会出现登录窗口或密码提示,除非你的anon不为none,否则将返回一个错误。

2. 这里的密码都是没有加密的。

第六步,修改authz(可选)

  cd /var/repos/svn1/conf

 vi authz

  用户组格式:

[groups]

<用户组名> = <用户1>,<用户2>

  其中,1个用户组可以包含1个或多个用户,用户间以逗号分隔。用户必须要在passwd文件里能找到,它是给那个里面的user赋权限.

  版本库目录格式:

[/目录]

@<用户组名> = <权限>

<用户名> = <权限>

  示例:

  [groups]

  admin = tube

  [/]

  @admin = rw

  [/var/repos/svn1]

  user1 = rw(表示user1能够读写/var/repos/svn1目录下的所有信息)

  [svn2:/]

  user2=r(表示user2能够读svn2项目下的所有信息)

第七步,启动服务器

  使用用户svn来管理版本库目录/var/repos,则须转为svn用户,命令如下:

  su- svn

  然后启动svn服务

  svnserve -d -r /var/repos

  -d表示以daemon方式(后台运行)运行

  -r /var/repos指定根目录是/var/repos

  检查服务器是否启动正常:

  ps –ef|grep svnserve

这样访问服务器时就可以直接用svn://服务器ip来访问了。如果服务器有多ip的话可以使用--listen-host来指定监听的ip地址.

我们可以在svn客户端中通过svn://192.168.0.xx来访问svn服务器

对于多个代码仓库,我们在启动时也可以用-r选项来指定服务器根目录,但访问时需要写上每个仓库相对于svn根目录的相对路径.

比如,我们现在有两个代码仓库/var/repos/svn1 和/var/repos/svn2,我们用svnserve -d -r /var/repos  来启动,那么在客户端访问时可以用svn://192.168.0.xx/repo1和svn: //192.168.0.xx/repo2来分别访问两个项目

第八步 开放服务器端口

svn默认端口是3690,你需要在防火墙上开放这个端口。

     /sbin/iptables -A INPUT -i eth0 -p tcp --dport 3690 -j ACCEPT

     /sbin/service iptables save

你也可以通过svnserve的--listen-port选项来指定一个已经开放的其他端口,不过这样的话客户端使用也必须家上端口,如svn://192.168.0.xx:yyyy/.

第九步,使用svn客户端导入项目

    首先,切换至svn用户

    su – svn

    假设我们当前的项目源代码目录在/home/svn/work目录下。首先,创建这个目录:

    mkdir –pv /home/svn/work

    然后随便解压缩个源代码包或者自己手工建立一些文件,等等好作为导入项目的演示

    接下来,进入项目源代码目录

    cd /home/svn/work

    导入项目

    svn import svn://192.168.0.X/svn1 –m “test-svn1”

    接下来你应该可以看到上传得显示。

APACHE部分

第一步,查看subversion两个动态库有没有安装成功

     vi /opt/apache/conf/httpd.conf

    看到下面两个模块说明安装成功

     LoadModule dav_svn_module     modules/mod_dav_svn.so

     LoadModule authz_svn_module   modules/mod_authz_svn.so

第二步,配置SVN

  vi /opt/apache/conf/httpd.conf

  将apache使用的用户和组都改为svn

      User svn

  Group svn

    配置svn目录,以下是我的配置:

    <Location /svn>

       DAV svn

       SVNParentPath /var/repos

        AuthType Basic

        AuthName "Subversion repository"

        AuthUserFile /home/svn/passwd

        AuthzSVNAccessFile /home/svn/auth

        Require valid-user

  </Location>

  

  

第三步,建立本地访问控制文件

    htpasswd -c /home/svn/passwd tube

   会提示你输入密码,默认是MD5加密

第四步,建立本地项目控制文件

    touch /home/svn/auth

    我的文件内容为:

 

[/]

tube = rw

kevin = rw

shrek = rw

[svn1:/]

@group1 = rw

peter = rw

[svn2:/]

tube = rw

@group2 = rw

[groups]

group1 = testuser1,testuser2

group2 = testuser3,testuser4

以上文件书写格式的解释:

[svn1:/]               这表示,仓库svn1的根目录下的访问权限

user1 = rw             svn1仓库user1用户具有读和写权限

user2 = rw             svn1仓库user2用户具有读和写权限

user3 = r              svn1仓库user3用户具有读权限

[svn2:/]               svn2仓库根目录下的访问权限

user1 = r              user1用户在svn2仓库根目录下只有读权限

suser2 =               // user2用户在 svn2仓库根目录下无任何权限

#[/]               // 这个表示在所有仓库的根目录下

#* = r               // 这个表示对所有的用户都具有读权限

#[groups]               // 这个表示群组设置

#svn1-developers = harry, sally           // 这个表示某群组里的成员

#svn2-developers = sally

#[svn1:/]            

#@svn1-developers = rw       // 如果在前面加上@符号,则表示这是个群组权限设置

第五步,重启httpd服务,访问svn

    service httpd restart

    svn的访问地址是:http://192.168.0.X/svn/svn1

                      http://192.168.0.X/svn/svn2
附:SVN客户端使用说明

把本地项目testsvn整个目录里的内容往备份站点塞, 这是最初的结构, 建立最初的rev 0

以后checkout回来同样是按该路径,把目录下的(不包括最后的目录名)文件取回

svn import testsvn svn://path/to/repos -m "最后的这个注释不能少"

取回项目, 路径同上. 最后取出来的新目录名不给定就会用最后路径的最后一个目录名, 这里就是repos目录

svn checkout svn:///path/to/repos A_NewProjectName

更新本地项目. 千万记得,通过第一步import后的那个目录并没有默认建立svn与远程的关系,需要手动从服务器checkout回服务器的版本到本地, 才算正式建立与远程的关系(什么关系? 复杂关系!). checkout回来的项目就可以时不时地执行:

svn update

搅和取回来的项目一番后,察看动了什么(一下命令都要在项目目录下运行)

svn status

你对目录结构的修改或添加删除文件等类操作不能自动commit, 需要根据svn status显示的提示将文件/目录 明确 告诉svn是add, delete, copy 还是move

svn add new_dir

svn delete new_dir

svn status仅仅显示最根本的信息,更多的改动变化通过这个获得:

svn diff

查看项目当前状态。

svn status

查看你做的更改。

svn diff

svn commit      -m “message”       提交你的改变到版本库中,后面参数为此次发动的注释.


svn  list                   列出版本库中当前目录下的文件


svn delete file          在本地中删除file文件。svn commit 提交更新才会在版本库实际删除file文件。


svn  add      file        增加file文件。同样只有在svn commit 提交后才会在版本库中实际增加。


svn move file file2           将file文件更名为file2 

.
svn revert                      去除更改。后面可接操作过的文件。

svn log                                    svn 日志。

svn各种状态关键字意义:

L abc.c # svn已经在.svn目录锁定了abc.c

M bar.c # bar.c的内容已经在本地修改过了

M baz.c # baz.c属性有修改,但没有内容修改

X 3rd_party # 这个目录是外部定义的一部分

? foo.o # svn并没有管理foo.o

! some_dir # svn管理这个,但它可能丢失或者不完整

~ qux # 作为file/dir/link进行了版本控制,但类型已经改变

I .screenrc # svn不管理这个,配置确定要忽略它

A + moved_dir # 包含历史的添加,历史记录了它的来历

M + moved_dir/README # 包含历史的添加,并有了本地修改

D stuff/fish.c # 这个文件预定要删除

A stuff/loot/bloo.h # 这个文件预定要添加

C stuff/loot/lump.c # 这个文件在更新时发生冲突

R xyz.c # 这个文件预定要被替换

S stuff/squawk # 这个文件已经跳转到了分支

SVN恢复旧版本

svn没有恢复旧版本的直接功能,不过可以使用svn merge命令恢复。

比如说当前HEAD为14,而我要恢复成10版本,怎么做?用svn merge:

svn update

svn merge --revision 14:10 svn://192.168.0.X/svn1

svn commit -m "restore to revision 10"

可能会很奇怪,因为不理解为什么合并能恢复旧版本。

这里要理解一个关键点,就是svn merge的原理。merge是比较指定版本的差异,然后把这些差异应用到本地工作副本,而-r后的14:10,是指相对于版本14来说版本10的变化(注意,这个版本的次序很重要。),也就是相对版本14,我版本10添加了哪些文件或目录,以及哪些文件添加了哪些行删除了哪些行。又因为本地版本是最新的14,所以把这些差异应用到本地版本时就等于把14改变成10,其效果等于还原到版本10。然后提交,最后的版本号是15。

附:svnserve [选项]

有效选项:

 -d [--daemon]            : 后台模式

 --listen-port arg        : 监听端口(后台模式)

 --listen-host arg        : 监听主机名或IP地址(后台模式)

 --foreground             : 在前台运行(调试时有用)

 -h [--help]              : 显示这个帮助

 --version                : 显示版本信息

 -i [--inetd]             : inetd 模式

 -r [--root] arg          : 服务根目录

 -R [--read-only]         : 不赞成;使用档案库配置文件

 -t [--tunnel]            : 隧道模式

 --tunnel-user arg        : 隧道用户名(模式是当前用户UID的名字)

 -T [--threads]           : 使用线程代替进程

 -X [--listen-once]       : 监听一次(调试时有用)

软件包和模块说明

svn  :  Subversion 命令行客户端

svnlook : 检查版本库工具

svnadmin : 建立、调整和修补版本库的工具

Svndumpfilter  :  过滤 Subversion 版本库转存文件的工具

mod_dav_svn  : apache http 服务器的插件,可以让版本库在网络上可见。

svnserve :  单独运行的服务器,作为守护进程运行。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: