NXP

Gitolite + repo 搭建安卓源码开发环境

2019-07-12 13:02发布

转载自:http://blog.csdn.net/u011479494/article/details/50629669 相比gitosis,gitolite的功能更为强大,支持对权限的细分控制,下面在最新版 的ubuntu 14.04 LTS中搭建gitolite服务器。 一、安装准备 
1.服务器安装openssh sudo apt-get -y install openssh-server openssh-client
  • 1
2.在一台管理客户机上生成ssh公钥【客户机执行】 ssh-keygen -t rsa
  • 1
生成的公钥在/home/xia/.ssh/里面,默认名字是id_rsa.pub。 3.安装git,在这个核心软件,不可或缺。 sudo apt-get -y install git
  • 1
二、安装gitolite 
在ubuntu中已经集成了,不用自己去下载。 sudo apt-get -y install gitolite
  • 1
三、配置gitolite 
1.创建用户gitolite【服务器执行】 
添加gitolite用户和同名用户组,加上–system参数,用户就不会在登陆界面显示。 sudo adduser --system --shell /bin/sh --group --disabled-password --home /home/gitolite gitolite
  • 1
2.把管理客户机生成的公钥上传到服务器上【客户机执行】 scp ~/.ssh/id_rsa.pub berry@192.168.100.249:/tmp
  • 1
3.初始化配置【服务器执行】 
切换到gitolite用户环境中,因为我要以gitolite用户身份去初始化安装。 sudo chmod 777 /tmp/id_rsa.pub mv /tmp/id_rsa.pub /tmp/xia.pub sudo su - gitolite gl-setup /tmp/xia.pub
  • 1
  • 2
  • 3
  • 4
以上命令有两个个作用: 
a)建立一个目录“~/repositories”,用来存储所有git仓库; 
b)把公钥文件id_rsa.pub添加到 ~/.ssh/authorized_keys。 4.修改配置文件 
gitolite的配置文件本身就是一个git仓库,gitolite的配置修改就是通过git实现的,先clone下来修改,再push上去。只要push上去,gitolite会立刻监视到配置文件的修改并应用。 
在管理客户端clone管理库到本地:git clone gitolite@192.168.100.249:gitolite-admin.git 
或者git clone ssh://gitolite@192.168.100.249/gitolite-admin.git 
clone下来以后,库里有一个文件夹conf,里面存储的是gitolite.conf(配置文件);还有一个文件夹keydir,里面存储的是用户的公钥文件,当前里面就有在管理客户端上生成的私钥(格式是”用户名.pub”,例如“xia.pub”)。 四、添加用户和仓库 
添加新仓库也非常简单,假设你要添加一个叫lv@example.com的用户,再创建一个仓库叫testing,并赋给lv修改权限。 
【在lv私钥计算机上操作】 
1.首先ssh-keygen生成lv的公钥和私钥; 
【在xia私钥计算机上操作】 
2.把lv公钥(lv.pub)拷贝到本地gitolite-admin库的keydir里面; 
3.编辑本地gitolite-admin库里的conf下的gitolite.conf,添加: repo gitolite-admin RW+ = xia repo testing RW+ = @all + +repo test + RW+ = lv
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
4.commit修改,push到服务器生效。服务端自动创建空的test.git工程仓库。 Compressing objects: 100% (3/3), done. Writing objects: 100% (4/4), 356 bytes | 0 bytes/s, done. Total 4 (delta 1), reused 0 (delta 0) remote: creating test... remote: Initialized empty Git repository in /home/gitolite/repositories/test.git/ To ssh://gitolite@192.168.100.249/gitolite-admin.git b5e8b3d..be1d3f1 master -> master
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
5.初始化仓库并push到服务器 
【在lv私钥计算机上操作】 git clone ssh://gitolite@192.168.100.249/test.git 或者:git clone gitolite@192.168.100.249:test.git cd test echo "init commit" > readme.txt git add . git commit -m "init commit" git push origin master
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
6.添加一个存在的Git项目 
如果你有一个已经存在的项目,也想将其添加到Gitolite的服务器里。首先你依然需要在gitolite.conf里注册这个项目。然后执行下面的操作: cd test git remote rm origin git remote add origin gitolite@192.168.100.249:test.git git push origin master
  • 1
  • 2
  • 3
  • 4
如果你有多个branch,那么checkout到那个branch,执行 git push origin <branch-name>
  • 1
五、搭建 Android repo 管理 服务器 
1.搭建 git-daemon 
(1)安装git-daemon-sysvinit sudo apt-get install git-daemon-sysvinit
  • 1
(2)配置 /etc/default/git-daemon sudo vi /etc/default/git-daemon
  • 1
# 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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
配置分析: 
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也可以了。 2.添加manifest.git仓库 
1)【在xia私钥计算机上操作】 
编辑本地gitolite-admin库里的gitolite.conf,添加: repo manifest RW+ = xia
  • 1
  • 2
commit修改,push到服务器生效。 
2)下载manifest.git到本地 git clone gitolite@192.168.100.249:manifest.git
  • 1
3)添加dfault.xml 
这个文件是跟这个Android 源码 配套的,没有自己可以参考别人的创建一个, 
path 表示客户端本地路径,使用 cat default.xml | cut -d ‘”’ -f 2 提取, 
name 表示服务端远程路径,使用 cat default.xml | cut -d ‘”’ -f 4 提取。 <manifest> <remote name="yazuo" fetch=".." review="ssh" /> <default revision="master" remote="yazuo" sync-j="1" /> <project path="build" name="yazuo/platform/build" > <copyfile src="core/root.mk" dest="Makefile" /> project> <project path="abi/cpp" name="yazuo/platform/abi/cpp" /> <project path="art" name="yazuo/platform/art" /> <project path="bionic" name="yazuo/platform/bionic" /> <project path="bootable/bootloader/lk" name="yazuo/platform/bootable/bootloader/lk" /> <project path="bootable/diskinstaller" name="yazuo/platform/bootable/diskinstaller" /> <project path="bootable/recovery" name="yazuo/platform/bootable/recovery" /> <project path="cts" name="yazuo/platform/cts" /> <project path="dalvik" name="yazuo/platform/dalvik" /> <project path="developers/build" name="yazuo/platform/developers/build" /> <project path="developers/samples/android" name="yazuo/platform/developers/samples/android" /> <project path="development" name="yazuo/platform/development" /> <project path="device/asus/deb" name="yazuo/device/asus/deb" /> <project path="device/asus/flo" name="yazuo/device/asus/flo" /> <project path="device/asus/flo-kernel" name="yazuo/device/asus/flo-kernel" /> <project path="device/asus/grouper" name="yazuo/device/asus/grouper" /> <project path="device/asus/tilapia" name="yazuo/device/asus/tilapia" /> <project path="device/common" name="yazuo/device/common" /> <project path="device/generic/armv7-a-neon" name="yazuo/device/generic/armv7-a-neon" /> <project path="device/generic/common" name="yazuo/device/generic/common" /> <project path="device/generic/goldfish" name="yazuo/device/generic/goldfish" /> <project path="device/generic/mips" name="yazuo/device/generic/mips" /> <project path="device/generic/mini-emulator-armv7-a-neon" name="yazuo/device/generic/mini-emulator-armv7-a-neon" /> <project path="device/generic/mini-emulator-mips" name="yazuo/device/generic/mini-emulator-mips" /> <project path="device/generic/mini-emulator-x86" name="yazuo/device/generic/mini-emulator-x86" /> <project path="device/generic/x86" name="yazuo/device/generic/x86" /> <project path="device/google/accessory/arduino" name="yazuo/device/google/accessory/arduino" /> <project path="device/google/accessory/demokit" name="yazuo/device/google/accessory/demokit" /> <project path="device/lge/hammerhead" name="yazuo/device/lge/hammerhead" /> <project path="device/lge/hammerhead-kernel" name="yazuo/device/lge/hammerhead-kernel" /> <project path="device/lge/mako" name="yazuo/device/lge/mako" /> <project path="device/lge/mako-kernel" name="yazuo/device/lge/mako-kernel" /> <project path="device/sample" name="yazuo/device/sample" /> <project path="device/samsung/manta" name="yazuo/device/samsung/manta" /> <project path="docs/source.android.com" name="yazuo/platform/docs/source.android.com" /> <project path="external/aac" name="yazuo/platform/external/aac" /> <project path="external/android-clat" name="yazuo/platform/external/android-clat" /> <project path="external/android-mock" name="yazuo/platform/external/android-mock" /> <project path="external/ant-glob" name="yazuo/platform/external/ant-glob" /> <project path="external/antlr" name="yazuo/platform/external/antlr" /> <project path="external/apache-harmony" name="yazuo/platform/external/apache-harmony" /> <project path="external/apache-http" name="yazuo/platform/external/apache-http" /> <project path="external/apache-xml" name="yazuo/platform/external/apache-xml" /> <project path="external/arduino" name="yazuo/platform/external/arduino" /> <project path="external/bison" name="yazuo/platform/external/bison" /> <project path="external/blktrace" name="yazuo/platform/external/blktrace" /> <project path="external/bluetooth/bluedroid" name=