2012年12月14日 星期五

mirror android source to an internal git/gerrit server

花了好長一段時間 目前看來終於有初步結果了
就以git://github.com/MIPS/ 為例子

步驟一:
首先創建一個 mirror的參考project, 重點是把相關的access control permission設好, 之後要mirror的project都繼承自該project, 或者是去修改ALL-Projects 的 access permission, 至於要設哪些permission其實我還不是很清楚, 反正我就幾乎全開了XD,  如下:


Rights Inherit From:
Reference:
refs/for/*
Push

Push Merge Commit

Reference:
refs/heads/*
Read


Create Reference

Forge Author Identity

Forge Committer Identity

Forge Server Identity

Push

Push Merge Commit

Push Annotated Tag

Label Code-Review
 
 
Rebase

Submit

Reference:
refs/meta/config
Read

Create Reference

Forge Author Identity

Forge Committer Identity

Forge Server Identity

Push

Push Merge Commit

Push Annotated Tag

Submit

Reference:
refs/tags/*
Read

Create Reference

Forge Author Identity

Forge Committer Identity

Forge Server Identity

Push

Push Merge Commit

Push Annotated Tag

Submit

步驟二:
1. mkdir mirror-folder
2. repo init -u git://github.com/MIPS/manifests.git --mirror
3. repo sync -j4
4. repo forall -c 'ssh -p PORT ACCOUNT@SERVER gerrit create-project PROJECT_ROOT/$REPO_PROJECT;  \
    ssh -p PORT ACCOUNT@SERVER gerrit set-project-parent --parent mirror-project-permission-base PROJECT_ROOT/$REPO_PROJECT; \
    git push ssh://ACCOUNT@SERVER:PORT/PROJECT_ROOT/$REPO_PROJECT 'refs/heads/*' 'refs/tags/*' 'refs/notes/*''


note: 紅色字的部份很重要, 這是試了好多種方式後目前可行的方式

步驟三:
1. 接下來就先去 git clone 其manifests的project的下來 修改其xml file, 使其fetch/review的url能對應到internal server

1. git clone ssh://ACCOUNT@SERVER:PORT/PROJECT_ROOT/manifests
2. 將default.xml 的fetch and review URLs改成internal server, 例如
             fetch="git://github.com/MIPS"
             remote="mips"
             sync-j="4"
==>  
           fetch="ssh://SERVER:PORT/PROJECT_ROOT"
           review="SERVER:PORT"
           remote="mips"
           sync-j="4"

然後push回server

步驟四:
接下來就可以照repo init & repo sync的動作來將整包source tree 都 checkout回來, 如
1. repo init -u ssh://ACCOUNT@SERVER:PORT/PROJECT_ROOT/manifests
2. repo sync

Reference:
https://groups.google.com/forum/?fromgroups=#!topic/repo-discuss/zpqpPpHAwSM
https://wiki.linaro.org/Platform/Infrastructure/GerritNotes
https://groups.google.com/forum/?fromgroups=#!topic/repo-discuss/qXBILfjVV04
https://groups.google.com/forum/?fromgroups=#!msg/repo-discuss/F8wQCreKv4c/L3DOAPPiQpMJ

2012年12月12日 星期三

指令:列出remote server有哪些projects

列出remote server有哪些projects

ssh -p port-number user-account@gerrit-server gerrit ls-projects

透過指令來創建遠端的git project


Create a new project called tools/gerrit:
$ ssh -p 29418 review.example.com gerrit create-project tools/gerrit.git
Create a new project with a description:
$ ssh -p 29418 review.example.com gerrit create-project tool.git --description "'Tools used by build system'"

詳情可以參考

https://review.openstack.org/Documentation/cmd-create-project.html

git clone時發生permission denied (publickey)

當我第一次使用git clone command時發生了 permission denied (publickey) 的錯誤訊息
但是明明我已經在Gerrit server上的個人設定指定好了SSH public key
後來經由同事的告知 才知道原因是因為client端的使用者帳號與server端的不一致所造成

參考這個網站 http://gerrit.googlecode.com/svn/documentation/2.2.1/error-permission-denied.html
其實就可以知道, 當在使用git clone時 是可以指定user account的

因此第一步如果要確認你的設定是否正確 可以使用這個指令來確認
ssh -vv -p port-number user-account@server-address

如果成功就會出現以下訊息

  ...

  debug1: Authentication succeeded (publickey).

  ...

  ****    Welcome to Gerrit Code Review    ****

  Hi John Doe, you have successfully connected over SSH.

  Unfortunately, interactive shells are disabled.
  To clone a hosted Git repository, use:

  git clone ssh://user-account@server-address:port-number/REPOSITORY_NAME.git

因此如果你的client端的user account與git server端的不一樣
那正確clone的指令是要在server-address前面加上user-account@

2012年12月11日 星期二

產生SSH key for Gerrit/Git server

在設定code review server (Gerrit + Git) 的帳號時 當使用的是SSH protocol則會需要設定好你自己的SSH public key, 設定方法如下

A. 產生SSH keys
  1. 檢查你的home目錄下是否存在.ssh資料夾, 如果存在就先備份該資料夾內的東西, 然後移除該資料夾
  2. 產生SSH keys
      ssh-keygen -t rsa -C "your_email@youremail.com"
     跳出提示問題時 直接按enter就好
 3. 接下來會要你輸入passphrase, 如果你在乎的話就輸入字串, 不然直接按enter也可以

B. 將public key內容複製貼上到Gerrit server上的SSH Public keys
     public key 位在 ~/ssh/id_rsa.pub

也可以參考此網站
https://help.github.com/articles/generating-ssh-keys


2012年12月6日 星期四

安裝sun-java6-jdk失敗

當我安裝好ubuntu 12.04後 依照AOSP上的動作來設定環境時 當在安裝java jdk發生了錯誤
錯誤訊息如下:


Package sun-java6-jdk is not available, but is referred to by another package. This may mean that the package is missing, has been obsoleted, or is only available from another source
E: Package sun-java6-jdk has no installation candidate

 
解決方式可以參看 https://github.com/flexiondotorg/oab-java6
基本上步驟為

cd ~/
wget https://github.com/flexiondotorg/oab-java6/raw/0.2.6/oab-java.sh -O oab-java.sh
chmod +x oab-java.sh
sudo ./oab-java.sh
更正, 上述方法安裝後的java 6版本無法用來編譯android. 後來又google了一下後
其中ubuntu論壇上的參考網頁
https://help.ubuntu.com/community/Java

下述這個方法確定可用
安裝jdk6 # sudo add-apt-repository ppa:webupd8team/java # sudo apt-get update # sudo apt-get install oracle-java6-installer or 安裝jdk7 # sudo add-apt-repository ppa:webupd8team/java # sudo apt-get update # sudo apt-get install oracle-java7-installer
另外一開始其實有碰到安裝jdk7 failed的情況 錯誤訊息如下: dpkg: error processing oracle-java7-installer (--configure): subprocess installed post-installation script returned error exit status 1 No apport report written because MaxReports is reached already Errors were encountered while processing: oracle-java7-installer E: Sub-process /usr/bin/dpkg returned an error code (1)

解決方式就是先完全移除jdk, 移除方法如下
# sudo rm /var/lib/dpkg/info/oracle-java7-installer* # sudo apt-get purge oracle-java7-installer* # sudo rm /etc/apt/sources.list.d/*java* # sudo apt-get update
除除後再依照上述步驟重新安裝jdk就可以了

2012年12月5日 星期三

我的linux console環境設定

1. 第一部分是 ls 的 顏色設定, 預設的ls所列出來的directory顏色是深藍色, 這個在螢幕上看起來很吃力, 所以就把它改成淺藍色如下
# declare -x  // 會列出系統相關的設定值, 其中"LS_COLORS"就是ls的顏色設定值
default value為
LS_COLORS="no=00:fi=00:di=00;34:ln=00;36:pi=40;33:so=00;35:bd=40;33;01:cd=40;33;01:or=01;05;37;41:mi=01;05;37;41:ex=00;32:*.cmd=00;32:*.exe=00;32:*.com=00;32:*.btm=00;32:*.bat=00;32:*.sh=00;32:*.csh=00;32:*.tar=00;31:*.tgz=00;31:*.arj=00;31:*.taz=00;31:*.lzh=00;31:*.zip=00;31:*.z=00;31:*.Z=00;31:*.gz=00;31:*.bz2=00;31:*.bz=00;31:*.tz=00;31:*.rpm=00;31:*.cpio=00;31:*.jpg=00;35:*.gif=00;35:*.bmp=00;35:*.xbm=00;35:*.xpm=00;35:*.png=00;35:*.tif=00;35:"
改成了
LS_COLORS="no=00:fi=00:di=01;36:ln=02;36:pi=40;33:so=00;35:bd=40;33;01:cd=40;33;01:or=01;05;37;41:mi=01;05;37;41:ex=00;32:*.cmd=00;32:*.exe=00;32:*.com=00;32:*.btm=00;32:*.bat=00;32:*.sh=00;32:*.csh=00;32:*.tar=00;31:*.tgz=00;31:*.arj=00;31:*.taz=00;31:*.lzh=00;31:*.zip=00;31:*.z=00;31:*.Z=00;31:*.gz=00;31:*.bz2=00;31:*.bz=00;31:*.tz=00;31:*.rpm=00;31:*.cpio=00;31:*.jpg=00;35:*.gif=00;35:*.bmp=00;35:*.xbm=00;35:*.xpm=00;35:*.png=00;35:*.tif=00;35:"

2. vim 的設定, 包含顏色與排版的設定(如tab鑑的定義)
# 把vim 的color scheme放到 ~/.vim/colors/
color scheme可以從這這邊選一個喜歡的download, http://vimcolorschemetest.googlecode.com/svn/html/index-c.html
# edit ~/.vimrc colorscheme slate2 # 指定color scheme set t_Co=256 # 設定用256色來顯示 set tabstop=4 # 設定一個tab 對應4個spaces set shiftwidth=4 # 設定縮排一次縮排4個spaces set expandtab # 將tab轉成space syntax on
3. edit ~/.bashrc
將下面的設定加入
alias ls='ls -F --color' alias h='history 25' alias vi='vim' PS1='\[\033[1;33m\]\u\[\033[1;37m\]@\[\033[1;32m\]\h\[\033[1;37m\]:\[\033[1;31m\]\W \[\033[1;36m\]\$ \[\033[0m\]'