虚拟机ubuntu1404配置git及gitweb服务器.docx

上传人:b****5 文档编号:5803340 上传时间:2023-01-01 格式:DOCX 页数:22 大小:2.15MB
下载 相关 举报
虚拟机ubuntu1404配置git及gitweb服务器.docx_第1页
第1页 / 共22页
虚拟机ubuntu1404配置git及gitweb服务器.docx_第2页
第2页 / 共22页
虚拟机ubuntu1404配置git及gitweb服务器.docx_第3页
第3页 / 共22页
虚拟机ubuntu1404配置git及gitweb服务器.docx_第4页
第4页 / 共22页
虚拟机ubuntu1404配置git及gitweb服务器.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

虚拟机ubuntu1404配置git及gitweb服务器.docx

《虚拟机ubuntu1404配置git及gitweb服务器.docx》由会员分享,可在线阅读,更多相关《虚拟机ubuntu1404配置git及gitweb服务器.docx(22页珍藏版)》请在冰豆网上搜索。

虚拟机ubuntu1404配置git及gitweb服务器.docx

虚拟机ubuntu1404配置git及gitweb服务器

我从接触git到现在一年时间不到。

这段时间来,感觉git相比其它版本控制系统(如svn),它的创建分支能力强,方便回退版本,快速检查到修改。

这几个特征,是我这次选择git作为代码控制的系统的原因。

当然git也有一些地方比不过svn,就是查看代码的相对修改,没有这么直观。

我之前也没接触过git的服务端,要搭建这个服务器,首先想到的XX。

这次是用vmwareworkstation11建立的虚拟机上面作为代码的git服务器和普通的代码编译服务器。

也就是说所有的ubuntu系统,都是虚拟机。

这里选用的ubuntu是14.04,完整的包名是“ubuntu-14.04.3-desktop-amd64.iso“。

没有直接在电脑上装ubuntu系统,是因为当前项目急着要用代码服务器,我之前没有装过ubuntu系统,并且对挂载大硬盘没有经验,故不选择这条路,后面有空再整。

总结这次搭建git服务器的过程,总共需要解决如下几个问题:

1.ubuntu虚拟机默认是与其它电脑无法沟通的,需解决这个网络沟通的问题。

2.Ubuntu的IP地址会随着路由器重启而改变IP,作为一个git服务器,必须固定IP。

3.Git服务器的搭建。

4.Gitweb的搭建。

这里首要解决的问题是,按默认设置安装的ubuntu系统,用其它电脑是无法访问的,除了本机,这时的虚拟机的IP大概长这样:

192.168.6.xxx。

在linux的终端上面输入ifconfig回车即可查看。

在XX查看了很多内容,找了一段时间也没有找到直接的解决方法。

后面找到一篇文章:

VMwork虚拟机的网络结构

从中得出灵感,在虚拟机开启前先编辑网络的连接方式,

将网络连接方式改成自定义的方式,并且选VMnet0(自动桥接)方式。

这里要注意的是,如果是开始新建虚拟机,要用默认的NAT方式,要不然新建的虚拟机无法连上网。

只有用NAT方式建好虚拟机(带网络时新建,一般在建立虚拟机时,会从网络上下载一些重要的安装补丁。

如果新建虚拟机时断开网,这样新建的虚拟机有时候在使用时会提示缺少组件)。

选择VMnet0方式后启动,在终端输入ifconfig,IP竟然变成了192.168.1.xx的方式,经putty.ext和samba的连接测试,确认其它计算机也可以访问了该虚拟机了!

接下来解决第二个问题,固定IP的问题。

XX上有一篇文章写得很好,链接如下:

Ubuntu14.04下如何配置固定IP

基本上按着上面的提示去做,经验证是OK的。

但是要注意以下几点,请参考本目录中的文档“ubuntu14.04固定IP.docx“即可。

第三步,搭建git服务器,XX上同样一篇好文章,

Git:

Ubuntu-git服务器搭建之亲自搭建

这篇文章关于git服务器搭建部分讲得比较清楚。

最后gitweb部分讲得太简单,而实际上还会遇到一些问题。

我需要的是在ubuntu14.04下面搭建,故与上文有一些出入。

先介绍一下,各个电脑和职责分配:

虚拟机超级管理员sv,用作git服务器,并会另新建普通帐户git,IP地址为192.168.1.138

虚拟机超级管理员dd,用作git管理员,IP为192.168.1.135

虚拟机普通用户cc,用作git客户端,IP为192.168.1.126

14.04上面,安装软件什么的,直接用apt-getinstall来安装,一般不会出现报错的现象,很方便安装。

在搭建git服务器过程中,我们大部分情况是直接用apt-getinstallpkgname的方式来安装的。

首先安装open-sshserveropenssh-client,先进入超级用户,带#号的命令提示行,安装软件时可不输入sudo.

退出超级用户,回到普通sv用户,用ssh-keygen–trsa生成本地私钥和公钥,分别在目录/home/sv/.ssh下面,生成的同时,会提示保存路径,设置密码之类的,这里我们不用输入任何的资料,只需要一路回车下来,到出现RSA2048的提示即完成。

注意,以后所有用户生成私钥和公钥都是同样的命令,且先前必须安装ssh软件(sudoapt-getinstallssh),执行这个命令之前,先在命令行终端先将当前目录移到当前用户的home目录。

如下图:

安装git-core(只有作为gitserver的电脑才需安装此组件),

增加git用户,并设置密码。

用sugit命令,切换到git用户。

并从网站上下载git服务端代码,一小会即完成了克隆,文件放在/home/git/gitolite下面。

并建立/home/git/bin文件夹,安装gitolite到/home/git/bin下面。

这时需要从管理员虚拟机dd上面,同样安装openssh,并在/home/dd目录下面用命令ssh-keygen–trsa命令,生成的文件在/home/dd/.ssh/下面,并如下图,将id_rsa.pub通过scp命令,复制到git服务器的git帐户的home目录下面。

注意这个scp的格式是scp文件路径目标文件路径。

其中目标文件路径的格式是帐户名@IP地址:

/home/帐户名

在初次scp时,系统会提示连接未建立,是否新建连接,输入yes,提示输入密码是,就提示目标路径中的帐户的密码,一般可成功复制。

如果出现报错的情况,则需要手动用U盘等工具,将管理员帐户dd中的/home/dd/.ssh/id_rsa.pub复制到目标服务器的home目录下面。

接下来就要使用从管理员电脑dd上复制过来的id_rsa.pub。

使用命令如下:

这条命令下完后,会在/home/git/下面新建一个repositories的目录,该目录是以后文件或代码的仓库,如下截图。

系统默认建好两个git的仓库,一个是gitolite-admin.git,主要用于git管理员管理git的仓库,比如说新建仓库,新增用户key等。

另一个testing.git主要用于测试git是否已成功建立。

接下来,需要用到管理员dd帐户克隆gitolite-admin下来,并把客户cc的公钥push到git服务器的gitolite-admin上面去,这样,客户端cc才有权限访问git服务器git上面的代码。

命令如下,先进到dd的home目录,执行gitclonegit@192.168.1.138:

gitolite-admin,由于是管理员帐户,故不需要密码就可以将git服务端的gitolite-admin克隆下来,如下图红色框框处。

进入该文件夹中查看,可以看到这下面就只有两个文件夹,一个是conf,主要用于配置仓库及能访问仓库的人员,比如新增仓库和移除仓库,都需要修改该目录下面的gitolite.conf文件,另一个是keydir,主要保存能访问git服务器的各个电脑提交过来的公钥。

如要增加一台电脑某个帐户访问git的权限,必须将该台电脑用ssh-keygen–trsa生成的公钥放到这个目录,并用gitpush到git仓库中去。

下图前两个是默认系统有的,第一个gitolite-admin仓库,只有id_rsa的公钥的电脑才能访问,即是dd用户(192.168.1.135).另外一个testing也是系统默认的,看到它后面有写RW+=@all,意思是所有提交了key的用户,都有权限访问git的这个仓库。

这里我们要增加80L这个名字的仓库,并且对所有已有公钥的用户开放,这个文件修改如下:

改完这个文件,需要把这个修改,提交到git服务器,执行gitadd.,gitcommit,gitpush这三个命令,

 

由于首次commit,git要求设置user.name和user.email,否则无法提交。

这里我们也设置一下,如下图,设置完后再进行gitcommit

上述设置完后,再gitcommit,

一提交到远端服务器,这个就会在git的server端的/home/git/repositories下面新建一个80L.git的空仓库,如上截图所示。

下面,我们用具有git管理员权限的帐户dd来测试一下是否能够将该仓库从gitserver电脑上把刚建的仓库clone下来。

果然,经过测试,确实可以clone下来一个空仓库,里面只包含.git文件夹,其它什么文件都没有。

作为一个git仓库,肯定是要有文件的,这里我们增加一个文件测试一下,就增加一个aaa.c,并使用gitadd,gitcommit,gitpush三条命令,将该文件提交到远程仓库(gitserver服务器中)去。

Gitadd完所有文件后,再查看状态,看的到确实是有一个aaa.c的文件已经增加并准备提交了。

用git提交命令,将新增的文件提交。

看到最后面是Togit@IP:

xxx.git就是提交成功了。

通过gitlog来查看,可以看到本仓库第一条提交Log。

接下来测试当前电脑dd用户是否可以把刚刚提交上去的仓库的所有内容clone下来。

另外在上级不带.git的目录建一个result文件夹,为了避免与之前的git分开,不受它跟踪。

经确认,确实是可以将刚刚提交下来的文件clone下来。

接下来,我们在客户机的用户cc上,将cc用户的公钥上传到管理员帐户dd的home目录。

在生成公钥之前,也须先在cc上用sudoapt-getinstallssh安装ssh服务。

在cc上生成的私钥和公钥还是按照老方法,即是在cc的home目录下面,用命令生执行ssh-keygen–trsa,一路回车下来,即生成了。

接着把生成的公钥复制到git管理员帐户dd的home目录上面去。

 

下面是先把刚刚从cc帐户上传的id_rsa.pub改名,改成一个容易区分的名字,尾缀还是pub。

如下图,改成cc.pub,并把改后的文件复制到/home/dd/gitolite-admin/keydir目录下面。

用gitstatus命令查看,git检测到有文件增加。

我们把这个增加的文件,通过git,提交到远端仓库,即git服务器。

以便让git开通对cc用户的读写权限。

通过上述步骤,就能在cc的目录下面,进行git的操作了,比如从服务器clone仓库,提交修改到git服务器。

下面说明的,是在服务器建好first仓库的前提下,进行先把first仓库clone到cc本地目录,再增加若干文件,并提交到服务器的完整过程。

下面的步骤,是讲解如何在git服务器建一个新仓库。

Gitolite新建仓库,并不是在git服务器(192.168.1.138)上面建,而是利用管理员dd(192.168.1.135)home目录下面的gitolite-admin的仓库来管理的,主要有两个功能需要通过该管理员实现:

1..新增git用户,需要在该目录下面的keydir下面把新用户生成的id_rsa.pub文件放这里,并提交到远程仓库里去。

2..新增git仓库,需要修改该目录下面的conf下面的gitolite.conf,并提交到远程仓库去。

比如增加一个名为first的仓库,需要增加类似如下两行内容:

repofirst

RW+=@all

并提交到远程服务器,如下图是先编辑gitolite.conf文件,增加一个first仓库,然后保存,gitadd,gitcommit,gitpush的动作。

 

如下是gitolite.conf修改后的样子。

最后一个内容是安装gitweb服务器。

从安装git服务器之后来看,XX里搜索出来的很多关于在ubuntu下安装gitweb的文章,大部分都看起来很顺利,如果单是按着里面的顺序设置下来,是没法搭建好gitweb服务器的。

我在安装的时候,要么访问gitweb地址时出现404notfound,要么出现仓库列表,客户端提交了git的修改,push到远程仓库之后,git列表中的该仓库就消失不见了,也即是用户无法从gitweb上看到仓库及修改记录,这也是很让人头疼的事情。

下图是出现404notfound的情形。

下面我们来讲一下在ubuntu上面如何安装gitweb,让其它电脑可以访问,并且客户提交修改到远程仓库后,gitweb中的对应的仓库名不会消失,客户端可以稳定的访问gitweb。

有一定意义的参考文档是XX里的这篇文章:

在Ubuntu14.04上配置gitweb

这篇文章里前部分是内容可以借鉴参考,后面的内容就不行的,需要另做修改。

先要说明的是如下内容,都是在git服务器,即192.168.1.138电脑上面配置的,其它客户端的ubuntu和windows不需要做任何的修改。

先安装gitweb、apache2,用于支持gitweb和浏览器服务:

再安装highlight,便于高亮相关内容:

修改配置文件(因为gitweb在/etc/apache2/conf.d/下安装了配置文件,这个目录是过时的):

修改之后,用命令ll查看,刚刚的命令是创建了链接文件到/etc/apache2/conf-enabled/gitweb.conf,

接着修改此文件,使用命令vimgitweb.conf,修改此文件,在FollowSymLinks前面增加一个+号,解决语法问题。

使能cgi,使用a2enmodcgi和serviceapache2restart,中途出现的警告信息不用理会,如下:

 修改/etc/gitweb.conf,添加上项目信息,其中$projectroot的值,是git仓库所在的目录,$projects_list的值就直接设置成$projectroot,这个gitweb取git的仓库列表,就直接从/home/git/repositories下面寻找。

并在该文件的最后加上一行高亮支持的显示语句:

如下是git仓库(/home/git/repositories)的示意图,下面的仓库是我后面自己建了几个仓库才这样的,默认的仓库就只有gitolite-admin.git和testing.git两个仓库。

这时,如果用本机或者其它电脑来访问

http:

//192.168.1.138/gitweb这个网址,我们就会看到404notfound的提示。

如下图:

到这里,就是权限的问题了,这了解这个问题,查找了不少文件,如下两篇文章有大致的介绍。

setup gitolite and gitweb on Ubuntu12.04 server

 

http:

//ubuntuforums.org/showthread.php?

p=13125566&s=bb7acc1a9dc6fbbab56d6d43ddf532c7&t=2244960 

Installgit/gitolite/gitwebonUbuntu14.04

直入正题,下面我们来解决权限的问题

输入几条命令,重启apache2服务:

usermod–a–Ggitwww-data

chmod–Rg+rx/home/git/repositories

serviceapache2restart

执行上述动作之后,再去看gitweb地址的浏览器,有仓库显示出来了:

这时,经过测试,当git客户端,比如dd或者cc用户,从git远程仓库clone代码下来,再做一些修改,再提交之后,gitweb中的对应的仓库会消失掉。

这个问题困扰了我两天时间,在网上查找了很久,并经过很多测试验证,最终将问题解决了,其实也是一个权限的问题。

网上很多人的博客里写的内容在这里并不适用。

这个问题的原因是,Git的默认权限配置得不对,导致提交之后,更改了git仓库里的相关文件的权限,导致gitweb无法从git仓库读取到数据。

修改git的home目录下面的.gitolite.rc文件,将其中的UMASK的值,由0077或0007改成0027,改完之后一定要重启apache2服务,才会生效。

再serviceapach2erestart,

到这里,gitweb就已经完全配置好了,大功告成!

如下:

如下是在测试验证gitweb权限时的一些记录,仅供参考。

下图是在未修改/home/git/.gitolite.rc这个文件之前,由于git客户端提交修改到远程仓库之后,在远程仓库端看到的aaa.git这个仓库的权限的变化,如push内容之前,权限为777,push之后,这个master的权限变成了600b,组用户无法访问heads下的master文件及内容。

下图是一个git仓库first从服务器克隆到git客户端cc本地之后,再提交修改到git服务器的完整过程。

执行push指令(gitpushoriginmaster)之前,gitweb中可以看到的截图如下:

Push指令执行后,gitweb中看不到first这个仓库了!

这时,如果手动对first.git这个仓库进行权限更改,又可以在gitweb中查看到first仓库了。

对于gitolite-admin.git这个仓库,并不希望所有人都看的到,也即不需要在gitweb中显示,只需要管理员看的到即可,可单独修改权限为700.

修改之后,在gitweb中查看如下:

上图中这个Description的修改,只需修改git服务器下面对应仓库的description文件,将要显示的内容写进去即可,如:

如果仓库下面没有这个文件,新建一个文件,并编辑即可。

后期维护问题汇总

1.虚拟机没改什么,某一天来,打开电脑,进入到gitweb页面就提示gitweb无法连接得上?

在其它电脑连接gitweb时显示如下:

连接ssh时立刻提示:

,用命令clonegit服务器的代码也不成功:

用带138虚拟机的电脑来连gitweb,有时候连的上,有时候连不上。

而192.168.0.138虚拟机本身连gitweb,却可以连得上。

在任何电脑用cmd来ping192.168.0.138都是ping的通的。

我奇怪,虚拟机本身没做什么更改,为何突然就gitweb连不上了呢?

在138虚拟机上,确认了没安装防火墙,命令为sudosu,然后输入超级管理用户的密码,即进入了超级用户界面,输入ufwstatus,回复是inactive,确认是关闭的。

另外,找了早期备份的几个138的虚拟机试了下gitweb,也都是不行。

没理由之前备份的虚拟机gitweb也是不通的呀!

想了一下,突然想到是不是IP冲突了,也就是有其它电脑用了192.168.0.138这个IP地址。

一测果然是这样,我把138的虚拟机的关掉之后,竟然还能ping的通。

最后把局域网内的电脑IP都找一遍,找到一台电脑由于使用自动分配IP而占用了这个IP地址,我手动把该台占用138IP的电脑改成固定地址,这样,再启动138的虚拟机,就可以正常使用gitweb和gitclone来下载代码了。

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 冶金矿山地质

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1