首页
运维教程
Linux基础
系统服务
系统架构
数据库
shell脚本
虚拟化
大数据
DevOps
企业案例
运维开发
python
go语言
运维安全
行业资讯
网络基础
系统安全
运维面试
学习路线
学习方法
面试题库
职场解惑
常用软件
运维软件
办公软件
书籍资源
日知录
招聘信息
读书计划
书单
关于我们
首页 运维教程Linux基础服务篇-svn服务器单机实战

服务篇-svn服务器单机实战

svn简介

SVN是Subversion的简称,是一个开放源代码的版本控制系统,相较于CVS,它采用了分支管理系统,它的设计目标就是取代CVS。

官方网站:http://subversion.apache.org/
Windows客户端 :http://tortoisesvn.net/

常见的版本控制软件:
– svn
– git

SVN存储数据的方式
– BDB,Berkeley DB,一种事务安全型表类型
– FSFS,”FSFS” 采用文件系统的方式, 替代原来的基于Berkeley DB的实现。
因为BDB方式在服务器中断时,有可能锁住数据,所以还是FSFS方式更安全一点。

端口号:3690

运行原理

svn 可以单独运行,也可以跟apache结合起来使用,SVN结合apache的时候需要用到模块 mod_dav_svn

客户端访问svn,需要先经过80端口访问apache,使用mod_dav_svn的协议实现网站的展现,进而访问到SVN server

svn 单机形式安装

1. 实验环境

查看系统环境:

[root@zmedu-17 ~]# uname -r
3.10.0-1062.el7.x86_64
[root@zmedu-17 ~]# cat /etc/redhat-release 
CentOS Linux release 7.7.1908 (Core)
[root@zmedu-17 ~]# 

关闭防火墙和selinux

[root@zmedu-17 ~]# systemctl stop firewalld.service 
[root@zmedu-17 ~]# setenforce 0
2. 使用yum安装svn
[root@zmedu-17 ~]# yum install -y subversion httpd mod_dav_svn
3. 创建版本库目录

[root@zmedu-17 ~]# mkdir /zmgaosh ### 创建存放版本库的主目录
[root@zmedu-17 ~]# svnadmin create /zmgaosh/jgou1 创建名字为架构1的版本库
[root@zmedu-17 ~]# svnadmin create /zmgaosh/jgou2

[root@zmedu-17 ~]# ls /zmgaosh/jgou1
conf db format hooks locks README.txt

4. 查看版块库的目录结构:

[root@zmedu-17 ~]# tree /zmgaosh/jgou1
/zmgaosh/jgou1
├── conf   #### 仓库的主配置文件
│   ├── authz  #### 认证权限相关的内容
│   ├── passwd  #### 用户名和密码
│   └── svnserve.conf   #### 服务的配置文件
├── db  #### 所有版本控制的数据存放文件
│   ├── current   ### 主要记录当前版本号
│   ├── format
│   ├── fsfs.conf  #### fsfs 文件类型格式配置文件(默认是FSFS格式)
│   ├── fs-type  #### 版本库数据真实存储格式
│   ├── min-unpacked-rev
│   ├── revprops  #### 记录版本的属性
│   │   └── 0
│   │       └── 0
│   ├── revs 
│   │   └── 0
│   │       └── 0
│   ├── transactions
│   ├── txn-current  ### 记录当前的事务
│   ├── txn-current-lock
│   ├── txn-protorevs
│   ├── uuid   ### 存储版本库唯一标识
│   └── write-lock
├── format  #### 存储一个整数文件,代表版本
├── hooks  ### 存放版本库钩子目录。同步更新需要再此处设置
│   ├── post-commit.tmpl
│   ├── post-lock.tmpl
│   ├── post-revprop-change.tmpl
│   ├── post-unlock.tmpl
│   ├── pre-commit.tmpl
│   ├── pre-lock.tmpl
│   ├── pre-revprop-change.tmpl
│   ├── pre-unlock.tmpl
│   └── start-commit.tmpl
├── locks   ### 存放svn 监控锁定数据的目录,追踪存取文件库的客户端
│   ├── db.lock
│   └── db-logs.lock
└── README.txt

我们常用的:

[root@zmedu-17 conf]# ls
authz  passwd  svnserve.conf
[root@zmedu-17 conf]# 

修改配置文件

1. 修改配置文件:

[root@zmedu-17 conf]# pwd
/zmgaosh/jgou1/conf
[root@zmedu-17 conf]# vim svnserve.conf 
[root@zmedu-17 conf]# cat svnserve.conf |grep ^[^#]
[general]
anon-access = read  ##认证用户可读
auth-access = write  ##认证用户可读
password-db = passwd ##认证用户的访问密码库文件
authz-db = authz  ## 认证权限文件
realm = zmgaosh-svn  #登陆提示信息

2. 配置用户和密码及认证权限
1)修改密码文件
[root@zmedu-17 conf]# vim /zmgaosh/jgou1/conf/passwd 
[users]
zmgaosh = 123456
gaosh = 123456
xinsz08 = 123456
2)设置用户和组的权限
[root@zmedu-17 conf]# vim authz

Check = xinsz08,zmgaosh
[groups]
[/]
gaosh = rw
@Check = r

启动svn并测试

1. 启动服务
[root@zmedu-17 conf]# svnserve -d -r /zmgaosh/
-r 表示启动所有版本库
如果只启动某一个版本库在/zmgaosh 下面写要启动的版本库即可。
[root@zmedu-17 conf]# ps -aux |grep svn
root      68178  0.0  0.0 197712  1040 ?        Ss   12:18   0:00 svnserve -d -r /zmgaosh/
root      68180  0.0  0.0 112728   972 pts/2    R+   12:18   0:00 grep --color=auto svn
[root@zmedu-17 conf]# 
[root@zmedu-17 conf]# lsof -i :3690
COMMAND    PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
svnserve 68178 root    3u  IPv4 145957      0t0  TCP *:svn (LISTEN)
[root@zmedu-17 conf]# 


测试

小王是一个写前端的开发,今天写完的代码v2和v1,下班前要传到svn服务器
[root@zmedu-17 ~]# mkdir jser
[root@zmedu-17 ~]# cd jser/

今天写好的代码js.v2
[root@zmedu-17 jser]# touch js.v1 js.v2

上传到svn

[root@zmedu-17 ~]# svn import /root/jser/ file:///zmgaosh/jgou1/ -m "today is v2"
正在增加       jser/js.v1
正在增加       jser/js.v2

提交后的版本为 1。
[root@zmedu-17 ~]# 

第二天,小王来到公司,下载昨天的代码继续写

[root@zmedu-17 ~]# svn checkout svn://192.168.1.17/jgou1  day03
认证领域: <svn://192.168.1.17:3690> zmgaosh-svn
“root”的密码: 
认证领域: <svn://192.168.1.17:3690> zmgaosh-svn
用户名: zmgaosh
“zmgaosh”的密码: 

-----------------------------------------------------------------------
注意!  你的密码,对于认证域:

   <svn://192.168.1.17:3690> zmgaosh-svn

只能明文保存在磁盘上!  如果可能的话,请考虑配置你的系统,让 Subversion
可以保存加密后的密码。请参阅文档以获得详细信息。

你可以通过在“/root/.subversion/servers”中设置选项“store-plaintext-passwords”为“yes”或“no”,
来避免再次出现此警告。
-----------------------------------------------------------------------
保存未加密的密码(yes/no)?y
A    day03/js.v1
A    day03/js.v2
取出版本 1。
[root@zmedu-17 ~]#

进入下载目录day03 ,以往看到了昨天的密码:

[root@zmedu-17 ~]# cd day03/
[root@zmedu-17 day03]# ls
js.v1  js.v2

今天继续写v3版本

[root@zmedu-17 day03]# touch js.v3

写完后,临时有事,没下班前就要走,所以把代码传到snv服务器上

[root@zmedu-17 day03]# svn add js.v3
A         js.v3
[root@zmedu-17 day03]# svn commit -m "day03提交"
svn: E170001: 提交失败(细节如下): 
svn: E170001: 认证失败
[root@zmedu-17 day03]# 

提交失败了,为啥呢?
因为小王是个新员工,项目经理给的用户名zmgaosh, 在svn服务器里只有读的权限,没有写的权限。
如何切换用户呢? 小王先问项目经理要了有写入权限的用户名和密码

用户名: gaosh
密码: 123456

小王在自己的Linux上先是删除了当前目录下的临时文件

[root@zmedu-17 day03]# rm -rf ~/.subversion/auth/*

然后重新提交:

[root@zmedu-17 day03]# svn commit -m "day03"
认证领域: <svn://192.168.1.17:3690> zmgaosh-svn
“root”的密码: 
认证领域: <svn://192.168.1.17:3690> zmgaosh-svn
用户名: gaosh
“gaosh”的密码: 

-----------------------------------------------------------------------
注意!  你的密码,对于认证域:

   <svn://192.168.1.17:3690> zmgaosh-svn

只能明文保存在磁盘上!  如果可能的话,请考虑配置你的系统,让 Subversion
可以保存加密后的密码。请参阅文档以获得详细信息。

你可以通过在“/root/.subversion/servers”中设置选项“store-plaintext-passwords”为“yes”或“no”,
来避免再次出现此警告。
-----------------------------------------------------------------------
保存未加密的密码(yes/no)?y
正在增加       js.v4
传输文件数据.
提交后的版本为 2。

可以看到最后提交成功了,版本号为2.

总结

本文搭建了一台SVN服务器,并通过命令行交互的形式来与svn交互,并演示了我们设置的权限用户,zmgaosh没有写的权限,我们又换成了gaosh之后才有了写的权限。

说明了权限管理的重要性。

作者:互联网老辛
互联网编程手艺人,架构师,一个技术极客,一个布道者;高中起就有一个做讲师的梦想,工作十余载,终于有幸成为云计算讲师,持续钻研云计算和信息安全领域,并继续把自己所学所感真心传授给自己的学员,帮助更多想要进入IT行业的小伙伴。传道授业解惑,深知责任重大,每日战战兢兢,如履薄冰。苦心钻研,一直前行,不敢有丝毫懈怠。

本文链接:http://www.geekyunwei.com/2015.html

网友评论comments

发表评论

邮箱地址不会被公开。 必填项已用*标注

暂无评论

Copyright © 2021 极客运维 备案号: 京ICP备2021004281号
扫二维码
扫二维码
返回顶部