[repo服务器]repo服务器的搭建

此文档为我工作中搭建安卓代码服务器时做的笔记。

文章目录

    • 1、环境:
    • 2、`Gitolite`安装:
    • 3、用户使用:
    • 4、`gitolite` 的管理
    • 5、`repo`的安装:
    • 6、添加`manifest.git`仓库
    • 7、克隆manifest.git仓库
    • 8、简单编辑`default.xml`文件:
    • 9、认识 `manifest/default.xml` 文件
    • 10、仓库目录和工作目录:
    • 11、ANDROID源码repo搭建
    • 12、在Gitolite初始化所以asop/的git仓库:
    • 13、使用介绍:
    • 14、上传`manifest/default.xml`到服务器:

1、环境:

切换到root账户Su
安装openssh-server用于远程登录,git用于管理工程, keychain用于公钥私钥管理工具
apt-get install openssh-server git keychain

添加git账户,设置git账户密码

adduser git
Passwd git

切换至git账户

su - git

2、Gitolite安装:

这里准备了一台计算机作为服务器安装 gitolite,一台计算机作为管理服务器的客户端。这里为了方便理解安装,使用案例形式:
服务器:
安装git-daemon-sysvinit

sudo apt-get install git-daemon-sysvinit

配置 /etc/default/git-daemon

sudo vi /etc/default/git-daemon
# Defaults for git-daemon initscript # sourced by /etc/init.d/git-daemon # installed at /etc/default/git-daemon by the maintainer scripts # # This is a POSIX shell fragment # 
GIT_DAEMON_ENABLE=true 
GIT_DAEMON_USER=gitolite 
GIT_DAEMON_BASE_PATH=/home/gitolite/repositories 
GIT_DAEMON_DIRECTORY=/home/gitolite/repositories # Additional options that are passed to the Daemon. GIT_DAEMON_OPTIONS="--export-all --enable=upload-pack --enable=upload-archive --enable=receive-pack --informative-errors"

配置分析:

  1. GIT_DAEMON_ENABLE=true 很明显得设置成true值了 。
  2. GIT_DAEMON_USER=gitolite 表示使用哪个用户运行git-daemon
    注意:设置的这个用户一定得对GIT_DAEMON_BASE_PATH有读,写,执行的所有权限!
  3. GIT_DAEMON_BASE_PATH=/home/gitolite/repositories 设置根目录。
    比如像我的这个设置,那么你在用git clone
    gitolite://192.168.100.249/test.git时,git服务器就会查找/home/gitolite/repositories/test.git目录了。
    4.GIT_DAEMON_DIRECTORY=/home/gitolite/repositories
    这个是设置成目录白名单whitelist。 如果不设置的话用户在git操作时如git clone,git push等等会出现no such directory。而在服务器机器上/var/log/syslog中会看到’/home/gitolite/repositories/xxx.git’: not in whitelist
    5.GIT_DAEMON_OPTIONS=”–export-all –enable=upload-pack –enable=upload-archive –enable=receive-pack –informative-errors” 设置参数。
    如果想上传,且全部导出,就设置–export-all –enable=upload-pack –enable=upload-archive –enable=receive-pack

注意:如果出现找不到的话,就在/home/gitolite/repositories目录下面的项目仓库目录下touch git-daemon-export-ok,生成一个这个名字的文件即可。 如果想使用git push功能,那一定要打开–enable=receive-pack

以上设置好了只后,,那么每次开机就会自己启动了。
还可以使用sudo service git-daemon start|restart|stop控制。
sudo /etc/init.d/git-daemon start|restart|stop也可以了。


3、用户使用:

创建一个用户sudo adduser yxs
客户端:创建一个用户sudo adduser yang
产生秘钥:ssh-keygen
上传至服务器:scp ~/.ssh/id_rsa.pub [email protected]:/home/yxs/admin.pub

服务器:
切换到专用账号yxs:su yxs
mkdir -p ~/bin
cd /home/git

获取gitolite:
git clone git://github.com/sitaramc/gitolite

安装gitolite到指定目录
gitolite/install -ln ~/bin

将客户端计算机作为 gitolite的管理员:
bin/gitolite setup -pk admin.pub

将管理员的$HOME/.ssh文件夹下的id_rsa复制到/home/git/.ssh目录下并重命名为songsong
修改权限:

chown git:git feigao*
chmod 600 .ssh/feigao*

4、gitolite 的管理

所有 gitlote的用户、仓库和访问规则,都由一个特殊的仓库gitolite-admin来管理,将这个仓库 clone 到你的客户端计算机:
管理服务器的客户端:

git clone [email protected]:gitolite-admin 
cd gitolite-admin

新增秘钥:
将要新增的秘钥放到gitolite-admin/keydir目录下
scp ~/.ssh/id_rsa.pub [email protected]:/home/yxs/admin.pub

新增git仓库:
编辑本地gitolite-admin库里的conf下的gitolite.conf,添加
+ +repo test + RW+ = xue
添加管理员即:

repo gitolite-admin
RW+	=	yang xue

并且git add .

git commit -m “add test”
git push origin master

推送到服务器。
转到xue用户下即可下载:

git clone ssh://[email protected]/test.git

5、repo的安装:

curl “http://php.webtutor.pl/en/wp-content/uploads/2011/09/repo” > ~/bin/repo

临时设置:
运行: export PATH=$PATH:~/bin

运行:printenv PATH查看
永久设置:
修 改/etc/profile(对所有用户都是有效的)

vi /etc/profile

在里面加入:

export PATH="$PATH:/home/yxs/bin"

修改.bashrc文件:修改~/.bashrc文件。 (每个用户目录下都有,ls -all,单独用户有效)

cd ~、vi .bashrc

在里面加入:

export PATH="$PATH:/opt/au1200_rm/build_tools/bin"

取消设置:
set命令查看当前用户本地shell设置的所有变量set
unset取消变量的设置unset $TESSDATA_PREFIX

6、添加manifest.git仓库

管理服务器的客户端:
编辑本地gitolite-admin库里的gitolite.conf,添加:

repo    manifest
        RW+     =   yang

commit修改,push到服务器生效。

7、克隆manifest.git仓库

在用户yang家目录下面:

git clone ssh://[email protected]/manifest.git

8、简单编辑default.xml文件:

find aosp/ -type d -name '.git' > git_projects.txt

 
  
       
              
       //git仓库
      
   

9、认识 manifest/default.xml 文件

:描述了远程仓库的基本信息。name描述的是一个远程仓库的名称,通常我们看到的命名是origin;fetch用作项目名称的前缘,在构造项目仓库远程地址时使用到;review描述的是用作code review的server地址。
:default标签的定义的属性,将作为标签的默认属性,在标签中,也可以重写这些属性。属性revision表示当前的版本,也就是我们俗称的分支;属性remote描述的是默认使用的远程仓库名称,即标签中name的属性值;属性sync-j表示在同步远程代码时,并发的任务数量,配置高的机器可以将这个值调大
:每一个repo管理的git库,就是对应到一个标签,path描述的是项目相对于远程仓库URL的路径,同时将作为对应的git库在本地代码的路径; name用于定义项目名称,命名方式采用的是整个项目URL的相对地址。 譬如,AOSP项目的URL为https://android.googlesource.com/,命名为platform/build的git库,访问的URL就是https://android.googlesource.com/platform/build
如果需要新增或替换一些git库,可以通过修改default.xml来实现,repo会根据配置信息,自动化管理。但直接对default.xml的定制,可能会导致下一次更新项目清单时,与远程default.xml发生冲突。
local_manifests:
所有的定制是遵循default.xml规范的,文件名可以自定义。将定制的XML放在新建的.repo/local_manifests子目录即可。repo会遍历.repo/local_manifests目录下的所有*.xml文件,最终与default.xml合并成一个总的项目清单文件manifest.xml。

10、仓库目录和工作目录:

仓库目录保存的是历史信息和修改记录,工作目录保存的是当前版本的信息。一般来说,一个项目的Git仓库目录(默认为.git目录)是位于工作目录下面的,但是Git支持将一个项目的Git仓库目录和工作目录分开来存放。 对于repo管理而言,既有分开存放,也有位于工作目录存放的:

[repo服务器]repo服务器的搭建_第1张图片

  • manifests:载货单的 git 仓库
  • manifests.git:载货单的 git 裸仓库,不带工作区
  • manifest.xml:这是一个链接文件,指向你的用于初始化工作区的载货单
  • project.list:一个文本文件,里面包含所有项目名字的列表
  • projects:该文件夹下包含所有 git project的裸仓库,文件夹的层次结构跟工作区的布局 一样
  • repo:这是repo 命令的主体,其中也包含最新的repo 命令,推荐时常使用这里面的 repo命令更新你的计算机上的 repo命令,因为新版本的 repo 命令提供了更多的有助于你工作的 子命令以及选项。既然.repo目录下保存了项目的所有信息,所有要拷贝一个项目时,只是需要拷贝这个目录就可以了。repo支持从本地已有的.repo中恢复原有的项目。

11、ANDROID源码repo搭建

使从源码找出所有git仓库:

find aosp/ -type d -name '.git' > git_projects.txt

得到git_projects.txt后,就可以据此创建default.xml文件。
使用bash 指令去掉最后开头的 aosp/和末尾的/.git

cat git_projects.txt | cut -c 6- | sed 's/.....$//' > path.txt

生成xml 文件的脚本gen_xml.sh

#!/bin/bash
echo -e "


  
  " >>$1
while read line; do
	echo "" >>$1doneecho -e "\n" >>$1

bash 指令创建default.xml

cat path.txt | ./gen_xml.sh default.xml

得到的 default.xml 里,示例如下


先用repo --trace sync -cdfrepo的所有動作詳細輸出 原文網址:https://ifun01.com/7EVVFMR.html

12、在Gitolite初始化所以asop/的git仓库:

前提:客户端 B 可以修改服务器 A 的 gitolite-admin项目,即管理Gitolite的项目

13、使用介绍:

查看所有的git工程

.repo/repo/repo list
repo  

这里还要用到 git_projects.txt文件。这次只要去掉每行末尾的/.git

cat git_projects.txt | sed 's/.....$//'  > repo_path.txt

得到的每一行的格式如下:

aosp/prebuilts/devtools

编写gen_server_repo.sh

#!/bin/bash
# 声明群组 @aosp_dev , 成员: jack, tom
@aosp_dev    =    jack tom
# 加上 manifest 仓库echo -e "
repo aosp/manifest\n
     RW+    =    @aosp_dev\n" >>$1
while read line; do
	echo -e "repo $line \n     RW+    =    @aosp_dev\n" >>$1done
bash 指令生成 aosp.conf 文件:
cat repo_path | ./gen_server_repo.sh  aosp.conf

gitolite-admin/conf/gitolite.conf 开头加入:

include "aosp.conf"

把更新的内容 push 到服务器Agitolite就会在相应目录(通常是 /home/git/repositories)初始化所有 aosp 的所有 git仓库。
至此,aosp的所有仓库已经在服务器 A 生成了,下一步就是把aosp的源码上传到服务器。

14、上传manifest/default.xml到服务器:

把之前创建好 default.xml文件上传到服务器的 aosp/manifest仓库:

git clone [email protected]:manifest
cd manifest## 把default.xml 文件放到 manifest/ 目录#
git add .
git commit -m 'add default.xml'
git push

上传到服务器:这里只需要简单的shell脚本遍历push
[repo服务器]repo服务器的搭建_第2张图片

你可能感兴趣的:(------运维------,子类___repo服务器)