虚拟机ubuntu1404配置git及gitweb服务器Word格式文档下载.docx
- 文档编号:18790386
- 上传时间:2023-01-01
- 格式:DOCX
- 页数:22
- 大小:2.15MB
虚拟机ubuntu1404配置git及gitweb服务器Word格式文档下载.docx
《虚拟机ubuntu1404配置git及gitweb服务器Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《虚拟机ubuntu1404配置git及gitweb服务器Word格式文档下载.docx(22页珍藏版)》请在冰豆网上搜索。
在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
//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来下载代码了。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 虚拟机 ubuntu1404 配置 git gitweb 服务器