Android源码镜像站的操作

Mon 12 October 2015

Android源码镜像站的操作

制作镜像站

本文假设你已经阅读过Android官方的Downloading the Source。 假设机器是www.jksoftcn.com,一台Ubuntu的Linux, 下面的操作在root用户下面操作

先准备好代理服务器:

如果你用的是shadowsocks,可用这样启动一个本地的代理:

sslocal -s 服务器 -p 端口 -b 127.0.0.1 -l 1080 -k 密码 -t 600 -m 加密算法 &

让git也可用使用这个socks5代理:

cat << EOF > ./proxy.sh
#!/bin/bash

export HTTP_PROXY=socks5://127.0.0.1:1080
export HTTPS_PROXY=socks5://127.0.0.1:1080

EOF

source ./proxy.sh

/data/android/mirror作为的目录

mkdir -p /data/android/bin
mkdir -p /data/android/mirror
cd /data/android/mirror
curl https://storage.googleapis.com/git-repo-downloads/repo > ../bin/repo
chmod a+x ../bin/repo
../bin/repo init -u https://android.googlesource.com/mirror/manifest --mirror
../repo sync -j8

repo sync的速度取决于很多因素,最大的因素是你的网速和GFW100Mbps的光纤 + 一个好的代理服务器非常重要。

我的经验是:50Mbps的光纤用迅雷快鸟升级到100Mbps,Linode日本机房的vps(基本不限速,流量足够)跑shadowsocks,小米路由器(1T版刷第三方固件, 原版太烂不稳定),前兆有线连接,SSD,大仓库的下载峰值在10MB/s左右。

这个过程很漫长,条件好的人可用喝喝茶,条件差的洗洗先睡吧。

为了给其他用户可用从网络访问这个镜像,我们建一个叫android的用户:

useradd android -d /data/android -s /usr/bin/git-shell
chown -R android:android /data/android

为了安全起见这个用户的shell是受限的git shell,但我们有的时候需要以这个用户的身份干其他的事情,就用下面的命令获得`bash`(以后在更新镜像站的时候也用得到)

sudo -u android -H bash

bash下面,我们创建一个用于ssh登陆的密钥。

cd && ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/data/android/.ssh/id_rsa):
Created directory '/data/android/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /data/android/.ssh/id_rsa.
Your public key has been saved in /data/android/.ssh/id_rsa.pub.
The key fingerprint is:
f3:64:7c:81:f7:f4:b3:29:41:d7:00:f3:09:7b:47:37 android@www.jksoftcn.com
The key's randomart image is:
+--[ RSA 2048]----+
|            +..Eo|
|           . = ++|
|          . +.=.o|
|         . ..=.o |
|        S + .....|
|         = .  . +|
|          .  . o |
|              .  |
|                 |
+-----------------+
cat .ssh/id_rsa.pub >> .ssh/authorized_keys
exit

到现在一个Android源码镜像站就搭建完毕了。下面介绍如何从这个镜像站下载代码。

从镜像站获取代码

假设你已经获得了repo这个工具并且已经加到PATH里面

以获取Android 6.0的代码为例:

mkdir WORKING_DIRECTORY && cd WORKING_DIRECTORY
repo init -u android@www.jksoftcn.com:mirror/platform/manifest -b android-6.0.0_r1
repo sync -j8

喝杯茶慢慢等,这个时候前兆内网的速度不是瓶颈了,磁盘变成瓶颈了。

同步镜像站

sudo -u android -H bash
cd ~/mirror/.repo/manifests && git pull
cd ~/mirror && repo sync -j8

其他

https://android.googlesource.com/这个web站点是不是也可用给镜像站使用呢?答案是可用的,并且这个实现也是开源的,基于https://code.google.com/p/gitiles/

为了方便部署,我们使用github上的一个第三方封装:

cd ~
git clone https://github.com/airk000/gitiles_one_click.git

修改端口为80, 所有用户可用访问:

diff --git a/gitiles-dev/src/main/java/com/google/gitiles/dev/DevServer.java b/gitiles-dev/src/main/java/com/google/gitiles/dev
index 4c2e97b..be8b9f8 100644
--- a/gitiles-dev/src/main/java/com/google/gitiles/dev/DevServer.java
+++ b/gitiles-dev/src/main/java/com/google/gitiles/dev/DevServer.java
@@ -155,8 +155,8 @@ class DevServer {

   private Connector[] connectors() {
     Connector c = new SocketConnector();
-    c.setHost(null);
-    c.setPort(cfg.getInt("gitiles", null, "port", 8080));
+    c.setHost("0.0.0.0");
+    c.setPort(cfg.getInt("gitiles", null, "port", 80));
     c.setStatsOn(false);
     return new Connector[]{c};
   }
(END)

创建配置文件:

cd gitiles_one_click
cp gitiles.config.sample gitiles.config

修改后的配置文件示例:

[gitiles]
    # Repositories placed here
    basePath = /data/android/mirror/
    # Do not check they are exported
    exportAll = true
    # This URL will be displayed as clone URL. DO NOT FORGET TRAILING SLASH!
    baseGitUrl = android@www.jksoftcn.com:mirror/
    # Title of site (doh)
    siteTitle  = Git at Google
    # I dunno why, but it is have to be configured.
    canonicalHostName = android

日本东京区分配的ip大陆可能无法访问,这个时候可用将机器释放掉再创建直到分配到可访问的机器。每次释放可能会尝试几美分的费用。

Category: Android Tagged: Android 源码 Linux

Comments