IPS Repository の mirror を作成する IPS ぶっこぬきツール - ipsget.py

出典: いつも心に太陽を。 Wiki

目次

なにそれ?

    IPS Repository の mirror を作成する ips-mirror.py script で幸せになったかと思ったのですが、どうも適度にファイルが壊れてしまい絶望感を味わうこと多数。
    twitter でぼやいていたら、OpenSolaris USB Creator の作者である @chonan さんから、「悪魔的改造を施してしまったら超ぶっこぬきツールができた。だが、反省はしていない。」(超意訳) なる reply が。
    ( ゚∀゚)o彡°( ゚∀゚)o彡°( ゚∀゚)o彡°とあおってみたところ、uudencode して Timeline に貼り付ける。と言いいながらも、ご厚意により公開して頂けました。
    uudencode は標準装備なんだぜ。そんなの絶対やだけど。
    つぶやきから生まれた(?) 超ぶっこぬきツールで、あなたの OpenSolaris ライフよ薔薇色になれ。

どこらへんが悪魔的なのか?

    どこらへんが悪魔的かというと・・・
    • gzip + sha1sum による download file の徹底的な検査
    • 問題があれば再 download
      こんな感じで Retry が走ります。すばらしい。そして、見逃すなっ。
      Generating remote file list...
      Generating local file list...
      Downloading the files:
      f56ecd3ce9cfd4a9fb7fb32f70aa6e3c4f6cecfa (     12058/    353928) [  3.41%]
      
      Retry Download 1dcb029c96fea42fa3f1164298e24710ed63bb7b ...
      
      f93eed3d2cf78f3302c7f37d3334a2921b11b430 (    104646/    353928) [ 29.57%]
      
    • さらに、file の donwload 部分を Multithread 化。thread 数を任意の値に指定可能な -t オプションを実装
      -t 10 で走らせると 10 個の LWP が生成
        PID USERNAME  SIZE   RSS STATE  PRI NICE      TIME  CPU PROCESS/LWPID
        3969 root      458M  455M sleep   59    0   0:00:29 0.3% isapython2.6/11
        3969 root      458M  455M sleep   59    0   0:00:29 0.3% isapython2.6/7
        3969 root      458M  455M sleep   59    0   0:00:29 0.2% isapython2.6/8
        3969 root      458M  455M sleep   59    0   0:00:29 0.2% isapython2.6/9
        3969 root      458M  455M sleep   59    0   0:00:29 0.2% isapython2.6/6
        3969 root      458M  455M sleep   60    0   0:00:28 0.2% isapython2.6/5
        3969 root      458M  455M sleep   60    0   0:00:30 0.2% isapython2.6/2
        3969 root      458M  455M sleep   59    0   0:00:28 0.2% isapython2.6/4
        3969 root      458M  455M sleep   59    0   0:00:28 0.2% isapython2.6/10
        3969 root      458M  455M sleep   59    0   0:00:29 0.2% isapython2.6/3
      

    天使だよね?天使。でも、天使がいいのか悪魔がいいのかわからないけど、これはいい。 オリジナルの ips-mirror.py 作者に感謝しつつ、IPS Repository からぶっこぬけっ!

使い方

    基本的な使い方は、オリジナル ips-mirror.py と同じでなので、IPS Repository の mirror を作成する ips-mirror.py script の使い方部分を参考にして頂ければと。

    違うところは、-t N により thread 数を指定でき、many core な環境では、file download (初回の manifest は single thread) が劇的に速くなります。

Soalris 10 で動かすには?

    ipsget.py は、Solaris 10 付属の Python 2.4.4 でも動作します。
    ただいま、Solaris 10 でも動作するものを準備中とのこと

    Python 2.5 で追加された hashlib module が必要になるので、Python 2.4.4 な Solaris 10 だとそのままでは使えません。
    Python 2.5 or later をインストールするか、下記の backport module を install することで利用可能です。
    • hashlib - Python secure hash and message digest module MD5, SHA1, SHA224, SHA256, SHA384 and SHA512 (backported from recent Python's for use on 2.3 and 2.4)
      http://code.krypto.org/python/hashlib/
      # wget http://code.krypto.org/python/hashlib/hashlib-20081119.tar.gz
      # gzip -cd hashlib-20081119.tar.gz | tar xvf -
      # cd hashlib-20081119
      # python setup.py install
      

個人用ツール