2013/03/28
後來 google 修改了 repo,讓他 support local mirror 了。
所以要建制 local mirror 變得很容易:
ref:
http://source.android.com/source/downloading.html
真的作的步驟:
先 新增一個 user: git
$adduser git
因為如果使用 git-daemon 預設的 user: gitdaemon,沒有 create group,也沒有 home folder。
到時候到 git-daemon folder 作 repo init 時, repo 會要求產生 pgp key 在 home folder ,會 fail。
所以還是用 git 這個實際存在的 user 來執行好了。
然後在 /home/git 下 create 一個 git-daemon folder 給 git-daemon 用
安裝 git-daemon
$sudo aptitude install git-daemon-run
修改 /etc/sv/git-daemon/run:
三點:
以 git 的身份來 run
增加 --export-all
把 git-daemon 的 source path 改到 /home/git/git-daemon
改好後重新啟動 git-daemon:
$sudo sv stop git-daemon
$sudo sv start git-daemon
接著就可以 mirror android 的 code 下來
先到 git-daemon 的目錄:
$sudo su - git
$cd git-daemon
create 一個用來 mirror 的目錄
:
$mkdir myandroid
$cd myandroid
clone + mirror
$repo init -u git://android.git.kernel.org/platform/manifest.git -b froyo --mirror
** repo 要自己先準備好,放在PATH 中。
這樣
接著依照 Vernder BSP 的要求,修改/覆蓋 .repo/manifests/default.xml
然後就做 sync
$repo sync
要等很久..
修改 platform/manifest.xml 把 remote fetch 由 android.git.kernel 改為 robot 或是 gps1004.
branch 後 push 回去
* 要 branch 出來嗎?
repo sync 完先 tar 一份起來。然後 try 一下 client clone 需不需要加 -b local.
** 這個在 manifest.xml 應該有寫了 default branch = froyo
<remote name="korg"
fetch="git://android.git.kernel.org/"
review="review.source.android.com" />
<default revision="froyo"
remote="korg" />
接著就可以作 client 的部份:
結果:
一開始的 repo init, repo sync 還是要用原來的 manifest.xml (default.xml)。
要改成 原廠的 manifest.xml 的動作,是要 repo sync 完後, git clone manifest.git出來改,然後 push 回去。
雖然一開始在做 repo sync 之前,已經把 Vendor 的 default.xml copy 過來,但是 git 的內容沒有修改,
所以只會影響到 server 作 repo sync 的動作。
client 作 repo init 取得的是 git 紀錄的內容,所以是未修改的。
反正步驟就是這樣:
- mkdir android_mirrod && cd android_mirror
- . repo init git://android.git.kernel.org/platform/manifest.git -b froyo --mirror
- . copy Vendor's default.xml to local
- . repo sync
- . cd && git clone /var/cache/git/android_mirror/platorm/manifest.git
- . copy Vendor's default.xml to local
- . modify default.xml, chang fetch address to local and add path 'android_mirror
- . commit, push
manifest.xml 的 remote fetch location。 參考連結都是直接寫 server address 而已,
但是因為自己作 git repo folder (/var/cache/git) 裡有很多 project, android repo 指示其中一個。所以 fetch address 要加上 android repo folder (這裡我用 android_mirror)。
因為當初server 作 repo init 有加上 -b froyo,所以所有manifest.xml 的修改都只有在 froyo 上。
所以 client repo init 也要加上 -b froyo。
.. 真的作不完....
因為 Vendor 的 kernel 和 bootloader 是分開 clone ,所以要另外 mirror git source 在 local repo server 中。 --- 這部份和 repo 無關,用 git 就可以。
patch 完後,因為 Vendor 沒有給完整的 source tree (source 是有,git source tree 沒有),所以 patch 完後,有一些 project 維持在 no-any-branch 的狀態,這樣是沒有辦法push 回 local server 的。
所以要先都 checkout / branch 出來:
$ repo forall -c git checkout -b vendor_rev
之後才可以 push 回 local server:
$repo forall -c git push korg vendor_rev
就這樣 patch 完,先都 branch 出來,再 push 回 server。
然後檢查patch 完後,所有的 git projectˋ是不是都有在 repo 的 manifest.xml 中 ...
把他加回去..
.. 就用 file 的方式吧..在 local server 用 file 的方式自己 git clone --mirror 每一個沒有加入的 project,然後再修改 manifest.xml
先作一個..
* 這些 source 本來就不在 android.git.kernel.org 中,所以還是另建 一個 remote server ,寫在 manifest 中,不要跟 android repo folder 混在一起好了.