コンピュータを楽しもう!!

今、自分が面白くていろいろやってみたことを書き綴りたいと思います。連絡先はtarosa.yでgmail.comです。

cygwinでAndroidのソースを取得する

ここのところ、ずっとgit.kernel.orgからAndroidのソースがダウンロードできなかったのですが、やっとダウンロードできるようになりました。Googleはgit.kernel.orgをあきらめて、android.googlesource.comという自前サーバを立てたようです。
詳細は、Android Open Source ProjectのDownloading the Source Treeを参照してください。防備録としてcygwinandroid.googlesource.comからソースを取得する方法を書いておきます。
cygwinのインストールはこちらに以前書いています。

repoの新規取得

新しい環境に対応したrepoをcygwinで取得します。古いrepoをとりあえずバックアップしておきます。

$ cd bin
$ mv repo repo.bak

curlでrepoを取り込みます。

$ curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > repo
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
curl: (60) SSL certificate problem, verify that the CA cert is OK. Details:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
More details here: http://curl.haxx.se/docs/sslcerts.html

curl performs SSL certificate verification by default, using a "bundle"
 of Certificate Authority (CA) public keys (CA certs). If the default
 bundle file isn't adequate, you can specify an alternate file
 using the --cacert option.
If this HTTPS server uses a certificate signed by a CA represented in
 the bundle, the certificate verification probably failed due to a
 problem with the certificate (it might be expired, or the name might
 not match the domain name in the URL).
If you'd like to turn off curl's verification of the certificate, use
 the -k (or --insecure) option.

ああー、curl.haxx.se/docs/sslcerts.htmlから認証取れだって。
上に書いているように、-kオプションを使うことにします。

$ curl -k https://dl-ssl.google.com/dl/googlesource/git-repo/repo > repo
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 19731  100 19731    0     0  11268      0  0:00:01  0:00:01 --:--:-- 11800

取れました。
実行できるようにします。

$ chmod a+x repo

manifestの取得

workingディレクトリを作って、そこにmanifestを取得とようと思います。

$ mkdir working
$ cd working
$ repo init -u https://android.googlesource.com/platform/manifest
Get https://android.googlesource.com/tools/repo
error: SSL certificate problem, verify that the CA cert is OK. Details:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify faile
d while accessing https://android.googlesource.com/tools/repo/info/refs

fatal: HTTP request failed

ああーん、また出た。gitが認証通らないようです。ということで、認証を無視させましょう。

$ git config --global http.sslVerify false

再度、repoをします。

$ repo init -u https://android.googlesource.com/platform/manifest
Get https://android.googlesource.com/tools/repo
remote: Counting objects: 1405, done
remote: Finding sources: 100% (77/77)
remote: Total 1405 (delta 911), reused 1405 (delta 911)
Receiving objects: 100% (1405/1405), 428.10 KiB, done.
Resolving deltas: 100% (911/911), done.
From https://android.googlesource.com/tools/repo
 * [new branch]      maint      -> origin/maint
 * [new branch]      master     -> origin/master
 * [new branch]      stable     -> origin/stable
 * [new tag]         v1.0       -> v1.0
...省略
 * [new tag]         v1.7.7.5   -> v1.7.7.5
Get https://android.googlesource.com/platform/manifest
remote: Counting objects: 170, done
remote: Finding sources: 100% (31/31)
remote: Total 170 (delta 18), reused 170 (delta 18)
Receiving objects: 100% (170/170), 95.80 KiB, done.
Resolving deltas: 100% (18/18), done.
From https://android.googlesource.com/platform/manifest
 * [new branch]      android-1.6_r1 -> origin/android-1.6_r1
 * [new branch]      android-1.6_r1.1 -> origin/android-1.6_r1.1
 * [new branch]      android-1.6_r1.2 -> origin/android-1.6_r1.2
...省略
is this correct [y/n]? y

repo initialized in /home/minao/working

manifestが取得できたようです。

認証用のルート証明書を取得する

git以外にもルート証明が無いといろいろと問題が出てきそうなので、認証用のルート証明書を取得することにします。
とりあえず、gitの認証無効化を元に戻します。

$ git config --global http.sslVerify true

ネットを検索してみると、cygwinでルート証明を取得するには「以下を実行しろ」と書かれていました。

$ cd /usr/ssl/certs
$ curl http://curl.haxx.se/ca/cacert.pem | awk 'split_after==1{n++;split_after=0} /-----END CERTIFICATE-----/ {split_after=1} {print > "cert" n ".pem"}'
$ c_rehash

早速実行してみます。

$ cd /usr/ssl/certs
$ curl http://curl.haxx.se/ca/cacert.pem | awk 'split_after==1{n++;split_after=
0} /-----END CERTIFICATE-----/ {split_after=1} {print > "cert" n ".pem"}'
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  233k  100  233k    0     0  59029      0  0:00:04  0:00:04 --:--:-- 98920

cert番号.pemファイルがたくさんできました。

$ ls
README.RootCerts  cert120.pem  cert144.pem  cert31.pem  cert55.pem  cert79.pem
cert.pem          cert121.pem  cert145.pem  cert32.pem  cert56.pem  cert8.pem
cert1.pem         cert122.pem  cert146.pem  cert33.pem  cert57.pem  cert80.pem
cert10.pem        cert123.pem  cert147.pem  cert34.pem  cert58.pem  cert81.pem
cert100.pem       cert124.pem  cert148.pem  cert35.pem  cert59.pem  cert82.pem
...省略
cert119.pem       cert142.pem  cert3.pem    cert53.pem  cert77.pem  expired
cert12.pem        cert143.pem  cert30.pem   cert54.pem  cert78.pem

続けてc_rehashします。

$ c_rehash
Doing /usr/ssl/certs
cert.pem => 4d654d1d.0
cert1.pem => ddc328ff.0
cert10.pem => ed62f4e3.0
cert100.pem => fde84897.0
...省略
cert97.pem => 3a3b02ce.0
cert98.pem => f559733c.0
cert99.pem => f61bff45.0

これでルート証明書が取得できたようです。

repo syncしてみましょう

workingディレクトリに戻って、このままrepo syncでgitが認証通ると思います。

$ cd ~/working
$ ~/bin/repo sync
remote: Counting objects: 120, done
remote: Counting objects: 160, done
remote: Finding sources: 100% (32/32)
remote: Finding sources: 100% (32/32)
remote: Total 120 (delta 32), reused 120 (delta 32)
Receiving objects: 100% (120/Receiving objects120: ) , 43.20 KiB, done.14
32/32)Receiving objects, done.:  (g objects/: 32 )36   % (/   32)
remote: Total 160 (delta 59), reused 160 (delta 59)
Receiving objects: 100% (160/160), 90.73 KiB, done.
Resolving deltas: 100% (59/59), done.
From https://android.googlesource.com//platform/bootable/diskinstaller
 * [new branch]      donut-release -> aosp/donut-release
 * [new branch]      donut-release2 -> aosp/donut-release2
 * [new branch]      eclair-passion-release -> aosp/eclair-passion-release
 * [new branch]      eclair-release -> aosp/eclair-release
 * [new branch]      eclair-sholes-release -> aosp/eclair-sholes-release
From https://android.googlesource.com//platform/bootable/bootloader/legacy
 * [new branch]      donut-release -> aosp/donut-release
 * [new branch]      eclair-sholes-release2 -> aosp/eclair-sholes-release2
...省略

repo syncが走り始めましたので、問題ないと思います。

あと、取得したソースはシンボリックリンクを切らないように、tarで丸めて持って行きます。

tar cvf android-source.tar ./*