1. 程式人生 > >Gitosis + repo 搭建安卓原始碼開發環境

Gitosis + repo 搭建安卓原始碼開發環境

一、安裝準備
1.伺服器安裝openssh

sudo apt-get -y install openssh-server openssh-client

2.在一臺管理客戶機上生成ssh公鑰【客戶機執行】

 ssh-keygen -t rsa

生成的公鑰在/home/xia/.ssh/裡面,預設名字是id_rsa.pub。

3.安裝git,在這個核心軟體,不可或缺。

sudo apt-get -y install git

二、安裝gitosis
1.下載gitosis到/tmp

cd /tmp
git clone https://github.com/tv42/gitosis.git

2.安裝必備包

sudo apt-get install python-setuptools

3.安裝gitosis

cd /tmp/gitosis
sudo python setup.py install

三、配置gitosis
1.建立使用者gitosis【伺服器執行】
新增gitolite使用者和同名使用者組,加上–system引數,使用者就不會在登陸介面顯示。

sudo adduser --system --shell /bin/sh --group --disabled-password --home /home/gitosis gitosis

2.把管理客戶機生成的公鑰上傳到伺服器上【客戶機執行】

scp ~/.ssh/id_rsa.pub berry@192.168.100.249:/tmp

3.初始化配置【伺服器執行】

sudo chmod 777 /tmp/id_rsa.pub
sudo -H -u gitosis gitosis-init < /tmp/id_rsa.pub

以上命令有三個作用:
a)建立一個目錄“~/repositories”,用來儲存所有git倉庫;
b)生成一個指向實際配置檔案的軟連結“~/.gitosis.conf”;
c)把公鑰檔案id_rsa.pub新增到 ~/.ssh/authorized_keys。

4.修改配置檔案
gitosis的配置檔案本身就是一個git倉庫,gitosis的配置修改就是通過git實現的,先clone下來修改,再push上去。只要push上去,gitosis會立刻監視到配置檔案的修改並應用。
在管理客戶端clone管理庫到本地:git clone

[email protected]:gitosis-admin.git
clone下來以後,庫裡有一個檔案gitosis.conf(配置檔案);還有一個資料夾keydir,裡面儲存的是使用者的公鑰檔案,當前裡面就有在管理客戶端上生成的私鑰(使用者名稱格式是”email地址.pub”,例如“[email protected]”)。

四、新增使用者和倉庫
新增新倉庫也非常簡單,假設你要新增一個叫[email protected]的使用者,再建立一個倉庫叫testing,並賦給lv修改許可權。
【在lv私鑰計算機上操作】
1.首先ssh-keygen生成lv的公鑰和私鑰;
【在xia私鑰計算機上操作】
2.把lv公鑰([email protected])拷貝到本地gitosis-admin庫的keydir裡面;
3.編輯本地gitosis-admin庫裡的gitosis.conf,新增:

[group testingteam]
members = [email protected]
writable = testing

4.commit修改,push到伺服器生效。
5.初始化倉庫並push到伺服器
【在lv私鑰計算機上操作】

mkdir testing
cd testing
git init
git remote add origin gitosis@192.168.100.249:testing.git
echo "init commit" > readme.txt
git add .
git commit -m "init commit"
git push origin master:refs/heads/master

五、搭建 Android repo 管理 伺服器
1.搭建 git-daemon
(1)安裝git-daemon-sysvinit

sudo apt-get install git-daemon-sysvinit

(2)配置 /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=gitosis
GIT_DAEMON_BASE_PATH=/home/gitosis/repositories
GIT_DAEMON_DIRECTORY=/home/gitosis/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=gitosis 表示使用哪個使用者執行git-daemon。
注意:設定的這個使用者一定得對GIT_DAEMON_BASE_PATH有讀,寫,執行的所有許可權!
3)GIT_DAEMON_BASE_PATH=/home/gitosis/repositories 設定根目錄。
比如像我的這個設定,那麼你在用git clone gitosis://192.168.100.249/test.git時,git伺服器就會查詢/home/gitosis/repositories/test.git目錄了。
4)GIT_DAEMON_DIRECTORY=/home/gitosis/repositories 這個是設定成目錄白名單whitelist。
如果不設定的話使用者在git操作時如git clone,git push等等會出現no such directory。而在伺服器機器上/var/log/syslog中會看到’/home/gitosis/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/gitosis/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私鑰計算機上操作】
編輯本地gitosis-admin庫裡的gitosis.conf,新增:

[group manifest]
members = [email protected]
writable = manifest

commit修改,push到伺服器生效。
2)初始化倉庫並push到伺服器

mkdir manifest
cd manifest
git init
git remote add origin gitosis@192.168.100.249:manifest.git
echo "init commit" > readme.txt
git add .
git commit -m "init commit"
git push origin master:refs/heads/master

3)新增dfault.xml
這個檔案是跟這個Android 原始碼 配套的,沒有自己可以參考別人的建立一個,
path 表示客戶端本地路徑,使用 cat default.xml | cut -d ‘”’ -f 2 提取,
name 表示服務端遠端路徑,使用 cat default.xml | cut -d ‘”’ -f 4 提取。

<?xml version="1.0" encoding="UTF-8"?>
<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="yazuo/platform/external/bluetooth/bluedroid"  />
  <project path="external/bouncycastle" name="yazuo/platform/external/bouncycastle" />
  <project path="external/bsdiff" name="yazuo/platform/external/bsdiff"  />
  <project path="external/bzip2" name="yazuo/platform/external/bzip2"  />
  <project path="external/ceres-solver" name="yazuo/platform/external/ceres-solver" />
  <project path="external/checkpolicy" name="yazuo/platform/external/checkpolicy"  />
  <project path="external/chromium" name="yazuo/platform/external/chromium" />
  <project path="external/chromium-libpac" name="yazuo/platform/external/chromium-libpac" />
  <project path="external/chromium-trace" name="yazuo/platform/external/chromium-trace"  />
  <project path="external/chromium_org" name="yazuo/platform/external/chromium_org" />
  <project path="external/chromium_org/sdch/open-vcdiff" name="yazuo/platform/external/chromium_org/sdch/open-vcdiff" />
  <project path="external/chromium_org/testing/gtest" name="yazuo/platform/external/chromium_org/testing/gtest" />
  <project path="external/chromium_org/third_party/WebKit" name="yazuo/platform/external/chromium_org/third_party/WebKit" />
  <project path="external/chromium_org/third_party/angle_dx11" name="yazuo/platform/external/chromium_org/third_party/angle_dx11" />
  <project path="external/chromium_org/third_party/eyesfree/src/android/java/src/com/googlecode/eyesfree/braille" name="yazuo/platform/external/chromium_org/third_party/eyesfree/src/android/java/src/com/googlecode/eyesfree/braille" />
  <project path="external/chromium_org/third_party/freetype" name="yazuo/platform/external/chromium_org/third_party/freetype" />
  <project path="external/chromium_org/third_party/icu" name="yazuo/platform/external/chromium_org/third_party/icu" />
  <project path="external/chromium_org/third_party/leveldatabase/src" name="yazuo/platform/external/chromium_org/third_party/leveldatabase/src" />
  <project path="external/chromium_org/third_party/libjingle/source/talk" name="yazuo/platform/external/chromium_org/third_party/libjingle/source/talk" />
  <project path="external/chromium_org/third_party/libphonenumber/src/phonenumbers" name="yazuo/platform/external/chromium_org/third_party/libphonenumber/src/phonenumbers" />
  <project path="external/chromium_org/third_party/libphonenumber/src/resources" name="yazuo/platform/external/chromium_org/third_party/libphonenumber/src/resources" />
  <project path="external/chromium_org/third_party/mesa/src" name="yazuo/platform/external/chromium_org/third_party/mesa/src" />
  <project path="external/chromium_org/third_party/openssl" name="yazuo/platform/external/chromium_org/third_party/openssl" />
  <project path="external/chromium_org/third_party/opus/src" name="yazuo/platform/external/chromium_org/third_party/opus/src" />
  <project path="external/chromium_org/third_party/ots" name="yazuo/platform/external/chromium_org/third_party/ots" />
  <project path="external/chromium_org/third_party/skia/gyp" name="yazuo/platform/external/chromium_org/third_party/skia/gyp" />
  <project path="external/chromium_org/third_party/skia/include" name="yazuo/platform/external/chromium_org/third_party/skia/include" />
  <project path="external/chromium_org/third_party/skia/src" name="yazuo/platform/external/chromium_org/third_party/skia/src" />
  <project path="external/chromium_org/third_party/smhasher/src" name="yazuo/platform/external/chromium_org/third_party/smhasher/src" />
  <project path="external/chromium_org/third_party/yasm/source/patched-yasm" name="yazuo/platform/external/chromium_org/third_party/yasm/source/patched-yasm" />
  <project path="external/chromium_org/tools/grit" name="yazuo/platform/external/chromium_org/tools/grit" />
  <project path="external/chromium_org/tools/gyp" name="yazuo/platform/external/chromium_org/tools/gyp" />
  <project path="external/chromium_org/v8" name="yazuo/platform/external/chromium_org/v8" />
  <project path="external/clang" name="yazuo/platform/external/clang"  />
  <project path="external/compiler-rt" name="yazuo/platform/external/compiler-rt"  />
  <project path="external/dexmaker" name="yazuo/platform/external/dexmaker" />
  <project path="external/dhcpcd" name="yazuo/platform/external/dhcpcd" />
  <project path="external/dnsmasq" name="yazuo/platform/external/dnsmasq"  />
  <project path="external/doclava" name="yazuo/platform/external/doclava" />
  <project path="external/dropbear" name="yazuo/platform/external/dropbear" />
  <project path="external/droiddriver" name="yazuo/platform/external/droiddriver" />
  <project path="external/e2fsprogs" name="yazuo/platform/external/e2fsprogs"  />
  <project path="external/easymock" name="yazuo/platform/external/easymock" />
  <project path="external/eclipse-basebuilder" name="yazuo/platform/external/eclipse-basebuilder" />
  <project path="external/eclipse-windowbuilder" name="yazuo/platform/external/eclipse-windowbuilder" />
  <project path="external/eigen" name="yazuo/platform/external/eigen" />
  <project path="external/elfutils" name="yazuo/platform/external/elfutils" />
  <project path="external/embunit" name="yazuo/platform/external/embunit" />
  <project path="external/emma" name="yazuo/platform/external/emma" />
  <project path="external/esd" name="yazuo/platform/external/esd" />
  <project path="external/expat" name="yazuo/platform/external/expat"  />
  <project path="external/eyes-free" name="yazuo/platform/external/eyes-free" />
  <project path="external/fdlibm" name="yazuo/platform/external/fdlibm" />
  <project path="external/flac" name="yazuo/platform/external/flac"  />
  <project path="external/freetype" name="yazuo/platform/external/freetype"  />
  <project path="external/fsck_msdos" name="yazuo/platform/external/fsck_msdos" />
  <project path="external/ganymed-ssh2" name="yazuo/platform/external/ganymed-ssh2" />
  <project path="external/gcc-demangle" name="yazuo/platform/external/gcc-demangle"  />
  <project path="external/genext2fs" name="yazuo/platform/external/genext2fs" />
  <project path="external/giflib" name="yazuo/platform/external/giflib" />
  <project path="external/google-diff-match-patch" name="yazuo/platform/external/google-diff-match-patch" />
  <project path="external/grub" name="yazuo/platform/external/grub" />
  <project path="external/gtest" name="yazuo/platform/external/gtest"  />
  <project path="external/guava" name="yazuo/platform/external/guava" />
  <project path="external/hamcrest" name="yazuo/platform/external/hamcrest" />
  <project path="external/harfbuzz" name="yazuo/platform/external/harfbuzz" />
  <project path="external/harfbuzz_ng" name="yazuo/platform/external/harfbuzz_ng" />
  <project path="external/hyphenation" name="yazuo/platform/external/hyphenation" />
  <project path="external/icu4c" name="yazuo/platform/external/icu4c"  />
  <project path="external/iproute2" name="yazuo/platform/external/iproute2"  />
  <project path="external/ipsec-tools" name="yazuo/platform/external/ipsec-tools" />
  <project path="external/iptables" name="yazuo/platform/external/iptables" />
  <project path="external/iputils" name="yazuo/platform/external/iputils" />
  <project path="external/LaunchPPPoe" name="yazuo/platform/external/LaunchPPPoe" />
  <project path="external/libifaddrs" name="yazuo/platform/external/libifaddrs" />
  <project path="external/pppoe" name="yazuo/platform/external/pppoe" />
  <project path="external/javasqlite" name="yazuo/platform/external/javasqlite" />
  <project path="external/javassist" name="yazuo/platform/external/javassist" />
  <project path="external/jdiff" name="yazuo/platform/external/jdiff" />
  <project path="external/jhead" name="yazuo/platform/external/jhead"  />
  <project path="external/jmdns" name="yazuo/platform/external/jmdns" />
  <project path="external/jmonkeyengine" name="yazuo/platform/external/jmonkeyengine" />
  <project path="external/jpeg" name="yazuo/platform/external/jpeg"  />
  <project path="external/jsilver" name="yazuo/platform/external/jsilver" />
  <project path="external/jsr305" name="yazuo/platform/external/jsr305" />
  <project path="external/junit" name="yazuo/platform/external/junit" />
  <project path="external/kernel-headers" name="yazuo/platform/external/kernel-headers" />
  <project path="external/libcap-ng" name="yazuo/platform/external/libcap-ng" />
  <project path="external/libffi" name="yazuo/platform/external/libffi" />
  <project path="external/libgsm" name="yazuo/platform/external/libgsm"  />
  <project path="external/liblzf" name="yazuo/platform/external/liblzf"  />
  <project path="external/libmtp" name="yazuo/platform/external/libmtp" />
  <project path="external/libnfc-nci" name="yazuo/platform/external/libnfc-nci"  />
  <project path="external/libnfc-nxp" name="yazuo/platform/external/libnfc-nxp"  />
  <project path="external/libnl-headers" name="yazuo/platform/external/libnl-headers"  />
  <project path="external/libogg" name="yazuo/platform/external/libogg" />
  <project path="external/libpcap" name="yazuo/platform/external/libpcap" />
  <project path="external/libphonenumber" name="yazuo/platform/external/libphonenumber" />
  <project path="external/libpng" name="yazuo/platform/external/libpng"  />
  <project path="external/libppp" name="yazuo/platform/external/libppp" />
  <project path="external/libselinux" name="yazuo/platform/external/libselinux"  />
  <project path="external/libsepol" name="yazuo/platform/external/libsepol"  />
  <project path="external/libusb" name="yazuo/platform/external/libusb" />
  <project path="external/libusb-compat" name="yazuo/platform/external/libusb-compat" />
  <project path="external/libvorbis" name="yazuo/platform/external/libvorbis" />
  <project path="external/libvpx" name="yazuo/platform/external/libvpx"  />
  <project path="external/libxml2" name="yazuo/platform/external/libxml2" />
  <project path="external/libxslt" name="yazuo/platform/external/libxslt" />
  <project path="external/libyuv" name="yazuo/platform/external/libyuv"  />
  <project path="external/linux-tools-perf" name="yazuo/platform/external/linux-tools-perf" />
  <project path="external/littlemock" name="yazuo/platform/external/littlemock" />
  <project path="external/wide-dhcpv6" name="yazuo/platform/external/wide-dhcpv6" />
  <project path="external/llvm" name="yazuo/platform/external/llvm"  />
  <project path="external/lzma" name="yazuo/platform/external/lzma" />
  <project path="external/marisa-trie" name="yazuo/platform/external/marisa-trie" />
  <project path="external/markdown" name="yazuo/platform/external/markdown" />
  <project path="external/mdnsresponder" name="yazuo/platform/external/mdnsresponder"  />
  <project path="external/mesa3d" name="yazuo/platform/external/mesa3d" />
  <project path="external/mksh" name="yazuo/platform/external/mksh"  />
  <project path="external/mockito" name="yazuo/platform/external/mockito" />
  <project path="external/mockwebserver" name="yazuo/platform/external/mockwebserver" />
  <project path="external/mp4parser" name="yazuo/platform/external/mp4parser" />
  <project path="external/mtpd" name="yazuo/platform/external/mtpd" />
  <project path="external/naver-fonts" name="yazuo/platform/external/naver-fonts" />
  <project path="external/netcat" name="yazuo/platform/external/netcat" />
  <project path="external/netperf" name="yazuo/platform/external/netperf" />
  <project path="external/neven" name="yazuo/platform/external/neven" />
  <project path="external/nist-pkits" name="yazuo/platform/external/nist-pkits" />
  <project path="external/nist-sip" name="yazuo/platform/external/nist-sip" />
  <project path="external/noto-fonts" name="yazuo/platform/external/noto-fonts" />
  <project path="external/oauth" name="yazuo/platform/external/oauth" />
  <project path="external/objenesis" name="yazuo/platform/external/objenesis" />
  <project path="external/okhttp" name="yazuo/platform/external/okhttp" />
  <project path="external/open-vcdiff" name="yazuo/platform/external/open-vcdiff" />
  <project path="external/opencv" name="yazuo/platform/external/opencv" />
  <project path="external/openfst" name=