在nas机上配置svn(mac)

来源:互联网 发布:淘宝差评多长时间生效 编辑:程序博客网 时间:2024/06/05 17:47
 【我恨命令行……po主的残念】

文献1:http://wiki.qnap.com/wiki/Subversion
文献2:http://blog.csdn.net/q199109106q/article/details/8655204
SVN的目录结构问题:http://www.cnblogs.com/dafozhang/archive/2012/06/28/2567769.html

*****服务器端**********************

1、配置好nas机的ssh,安装Optware。(在nas机的app center)
2、使用ssh连接nas机。
3、#ipkg update
4、#ipkg install svn
5、第三第四步骤需要保持联网,会自动下载文件,耐心等待直到#重新出现。
6、# vi /etc/init.d/Optware.sh
7、找到关键字(好像不改也没事。。保留):
# adding Ipkg apps into system path ...
# /bin/cat /etc/profile | /bin/grep "PATH" | /bin/grep "/opt/bin"1>>/dev$
# [ $? -ne 0 ] && /bin/echo "exportPATH=/opt/bin:/opt/sbin:$PATH" >> /et$
如上修改。
8、# svnadmin create /svnroot
这样就相当于创建了一个svn的根目录的,所有项目都是放在这个根目录下,由同一套帐号管理如果创建了新的根目录(其实这就是一个版本库),会出现帐号不通用,而且需要使用不同的端口分别完成通讯(名字可以自己取)。
9、用cd命令进入/svnroot/conf目录,用vi编辑器分别打开三个文件。
如下修改:
打开svnserve.conf,将下列配置项前面的#和空格都去掉
# anon-access = read  
# auth-access = write  
 
# password-db = passwd  
 
# authz-db = authz
然后把 anon-access = read 改成 anon-access = none。这是svn的一个bug,如果不这样修改,操作的log会不正常(无法查询)……
打开passwd,在[users]下面添加帐号和密码,比如:
[users]  
mj = 123  
jj = 456
打开authz,配置用户组和权限
我们可以将在passwd里添加的用户分配到不同的用户组里,以后的话,就可以对不同用户组设置不同的权限,没有必要对每个用户进行单独设置权限。
在[groups]下面添加组名和用户名,多个用户之间用逗号(,)隔开
[groups]  
topgroup=mj,jj
说明mj和jj都是属于topgroup这个组的,接下来再进行权限配置。
使用[/]代表svn服务器中的所有资源库
[/]  
@topgroup = rw
上面的配置说明topgroup这个组中的所有用户对所有资源库都有读写(rw)权限,组名前面要用@
如果是用户名,不用加@,比如mj这个用户有读写权限
10、启动svn服务器

前面配置了这么多,最关键还是看能否正常启动服务器,若启动不来,前面做再多工作也是徒劳。

在终端输入下列指令:svnserve -d -r /svnroot/

或者输入:svnserve -d -r /svnroot

没有任何提示就说明启动成功了
如果端口被占用了,使用如下语句修改端口:
svnserve -d --listen-port 12138 -r /svnroot


11、很遗憾的是,如果是在普通的服务器上,或者是在自己的电脑上,这么操作完以后已经成功了,但是,木有错,由于我们使用的是nas机,所以我们的工作其实并没有结束。

Note!
Create the repository folder somewhere on your harddisk!
An earlier description was to create the repository in /share/svn.This is wrong!
Depending on your QNAP model your harddisk(s) are mounted e.g. to/share/HD?_DATA or /share/MD?_DATA (? is one character from A..Z).
The directory /share itself belongs to /dev/ram, so if you createmkdir /share/svn your repository will be located in the ram diskand after reboot your repository doesn't exist anymore.
Also the capacity of the repository is limited to the free space inthe ram disk.
This is a different effect, reported in the QNAP forum, also causedby this problem.So replace /*/ in the following commands with apath on your harddisk e.g. /MD0_DATA/.

It might be a good idea to ensure that you have the rightfolder
 path setup by creating a temporary file in thedirectory path that you
have decided on and restarting the QNAP NAS device to ensure thatthe
files still exist in the directory.
Otherwise you might find that you have spent hoursconfiguring
an SVN repository in the RAM disk and lost data when the NAS hasbeen
restarted.


Replace * below with the correct path for your device.

简单的说,如果把目录直接放在NAS机的根目录下,可能会只是写在内存里,或者有限的缓存中,所以我们要做的下一个工作是,使用命令:
#df
这样可以查看所有盘的名称和大小。
然后会看到某些用HD*_DATA或者MD*_DATA结构命名的盘,后边跟着的是这些盘的容量,我们真正用的盘显然容量会很大(起码我的NAS机在这里差别很大,MD0_DATA的大小跟我们在RAID中配置的大小是一致的)。
记下这个名字,因为我们要构造一个路径才能正确的把数据写入我们想写入的地方,也方便我们使用file station管理。
以MD0_DATA为例:
假设我们在filestation里边创建了一个共享文件夹名为svnroot,专门用于统筹管理svn的各个仓库,那我们怎么样才能正确的访问它呢?
首先假设我们本地有个项目叫做ProjectA,我们希望把它的仓库建立在svnroot/ProjectA下,我们应该怎么做?
我这里只说我的做法,并不表示这是唯一的方案,也不表示这是最好的解决方式,但起码能用,毕竟我也是初学者,这篇笔记也是我边做边写的。
首先返回NAS机的根目录,使用命令:
# cd share
访问share文件夹,然后可以使用命令:
# ls
显示share文件夹中所有的文件列表,-a表示显示所有的隐藏文件。
这个时候会看见很多MD或者HD结构的文件夹,这个时候我们要关注的是我们的MD0_DATA(再提醒一次,我这个例子以MD0_DATA为例,是因为我在#df里边找到的是MD0_DATA),使用命令:
# cd MD0_DATA
进入MD0_DATA文件夹,好了,在这个路径下写入的文件会被正确的反应在nas机上。
还记得在file station中创建的名为svnroot的文件夹吗?在这里继续使用ls命令就会发现它了,同样cd进去。
下一个命令是:
# mkdir ProjectA
这 样回到filestation中刷新一下,我们就可以看到svnroot里边新建了一个空的文件夹,ProjectA,注意,为什么不直接用filestation创建?因为这样创建出来的文件夹是非空的,除非你打算在ProjectA下边再创建子目录,不建议在filestation上创建,因为仓库需要在一个空目录下才能正确创建。
总结一下,这一步,其实严格来说不是一个步骤,而是解决如何正确的把仓库建立在NAS机上并纳入NAS机自带的文件管理程序的问题,毕竟不是所有人都喜欢命令行……
好,下边的工作其实跟上文提到的创建仓库的步骤一样,原理我就不再解释了,可以参考一下前边写的命令,对比一下,结合这一条的内容理解下为啥我要这么做。
下边是命令:
# svnadmin create /share/MD0_DATA/svnroot/ProjectA
# cd /share/MD0_DATA/svnroot/ProjectA/conf
# vi authz
# vi passwd
# vi svnserve.conf
(具体怎么编辑我就不写了,其实可以在filestation上把这几个文件下载下来,使用编辑器编辑好以后再上传覆盖,比用vi方便多了)
# svnserve -d -r /share/MD0_DATA/svnroot/ProjectA
如果执行到这一步,都没有报错的话,那么,ProjectA代码仓库应该已经创建成功,路径应该是:svn://《nasip》/
为什么我们这里不需要在路径后方增加ProjectA呢?事实上,你往这个路径下import的所有文件文件夹,都会被“打包”保存在/share/MD0_DATA/svnroot/ProjectA/db/revs/0/目录下的文件中,所以在访问的时候增加路径,相当于访问了ProjectA的子目录。可以简单理解为,对svn://《nasip》/的操作,就是对/share/MD0_DATA/svnroot/ProjectA/的操作,这样应该就好理解了,这是一个映射。
12、多个项目共存的问题。
按理说,做到第11步的时候应该就结束了,剩下的问题就是svn的具体应用问题,配置的过程已经完了,不过我在这里还遇到了一个情况,就是我这不止一个项目,而且项目的分类也更复杂,这种时候怎么处理,我不确定这是最好的方案,还是那句话,起码能用。
我现在的情况是,项目有三个分别是ProjectA、ProjectB、ProjectC,其中ProjectA和ProjectB是xcode的项目,ProjectC是eclipse的项目,我希望三个项目除了要分开管理外,还要在存储上分平台管理。
我简答说一下思路:
我需要创建3个仓库。
3个仓库应该都是位于svnroot文件夹下。
svnroot文件夹下应该还有一个叫xcode的文件夹和一个叫eclipse的文件夹,里边再根据Project划分文件夹,所以,我们可以用mkdir命令完成这么几个目录的构建。
/share/MD0_DATA/svnroot/xcode/ProjectA
/share/MD0_DATA/svnroot/xcode/ProjectB
/share/MD0_DATA/svnroot/eclipse/ProjectC
按照前边创建代码仓库的方式,分别用svnadmin create命令创建三个仓库:
# svnadmin create /share/MD0_DATA/svnroot/xcode/ProjectA
# svnadmin create /share/MD0_DATA/svnroot/xcode/ProjectB
# svnadmin create /share/MD0_DATA/svnroot/eclipse/ProjectC
各自配置一下conf文件夹。
关键来了,我们执行:
# svnserve -d -r /share/MD0_DATA/svnroot/xcode/ProjectA
这句应该是没问题的,但当我们再执行:
# svnserve -d -r /share/MD0_DATA/svnroot/xcode/ProjectB
就会报错,因为svn://《nasip》/这个路径已经被占用了,再serve一个ProjectB,那我们怎么区分访问的时候访问的是ProjectA还是ProjectB呢?想想也不应该是这样,所以应该怎么解决?
答案是监听端口。
事实上,当我们访问svn://《nasip》/的时候,默认访问的端口是3690,换句话说,我们可以把ProjectB定义到不是默认的端口上,例如,12138。
命令也很简单:
svnserve -d --listen-port 12138 -r/share/MD0_DATA/svnroot/xcode/ProjectB
这样,访问仓库B的路径就是:svn://《nas ip》:12138/
同理,我们可以创建访问仓库C的服务,例如:svn://《nas ip》:1314/

13、BTW一句,由于配置测试过程中我们可能经常做以下这些事,主要是为误操作买单,我这提供一些额外的shell命令:
创建了错误的目录,我想删了它(删东西的时候千万谨慎,别乱删,这可没有回收站):
# rm -rf /share/MD0_DATA/svnroot/ProjectA

创建了测试的仓库,我还是想删了它:
# rm -rf /share/MD0_DATA/svnroot/ProjectA{首先删了仓库的目录}
然后我们要终止对这个仓库的服务,要终止服务,首先要找到维持服务的进程:
搜索现在占用端口的进程,获得进程编号:
# ps |grep svn
然后根据搜索到的进程id终止进程:
# kill -9

我想查看当前目录下所有的文件和文件夹:
# ls
我想在查看的时候把隐藏文件也显示出来:
# ls -a

我想快速返回根目录:
# cd /
0 0
原创粉丝点击