読者です 読者をやめる 読者になる 読者になる

空飛ぶロボットのつくりかた

ロボットをつくるために必要な技術をまとめます。ロボットの未来についても考えたりします。

rosで3rdpartyのコードをインストールする時

rosのmkを追いかけてみる

/opt/ros/indigo/share/mk/download_unpack_build.mk

md5sumファイルがあれば

$(ROS_ROOT)/core/rosbuild/bin/download_checkmd5.py $(TARBALL_URL) $(TARBALL)

を実行

/opt/ros/indigo/share/ros/core/rosbuild/bin/download_checkmd5.py

  # Create intermediate directories as necessary, #2970
  d = os.path.dirname(dest)
  if len(d) and not os.path.exists(d):
    os.makedirs(d)

  fresh = False
  if not os.path.exists(dest):
    sys.stdout.write('[rosbuild] Downloading %s to %s...'%(uri, dest))
    sys.stdout.flush()
    urllib.urlretrieve(uri, dest)
    sys.stdout.write('Done\n')
    fresh = True

  if md5sum:
    m = hashlib.md5(open(dest).read())
    d = m.hexdigest()

    print('[rosbuild] Checking md5sum on %s'%(dest))
  
    if d != md5sum:
      if not fresh:
        print('[rosbuild] WARNING: md5sum mismatch (%s != %s); re-downloading file %s' % (d, md5sum, dest))
        os.remove(dest)

        # Try one more time
        urllib.urlretrieve(uri, dest)
        m = hashlib.md5(open(dest).read())
        d = m.hexdigest()
    
      if d != md5sum:
        print('[rosbuild] ERROR: md5sum mismatch (%s != %s) on %s; aborting' % (d, md5sum, dest))
        return 1

  return 0     

目的のファイルが無かったり、ハッシュ値が異なっていたらURLのファイルを取得

  • os.path.dirname

pathのディレクトリ名を返す

  • urllib.urlretrieve(uri, dest)

uriのリソースを取得

  • hashlib.md5(open(dest).read()).hexdigest()

ハッシュ値を取得

(makefile中のincludeはコマンド?)

参考:

mk - ROS Wiki

「ハッシュ」ってどんな意味? - Qiita

ファイルが一致することを確認する - いますぐ実践! Linuxシステム管理 / Vol.100

ダウンロードページの"xxx.md5"というファイルは何ですか? | SUZAKUサイト

シェルスクリプトでファイル存在確認 - fantasista_ikの日記

[開発]GNU makeのMakefileに、シェルスクリプトを自然に書くたった一つの方法 - ヒルズで働く@robarioの技ログ

GNU make 日本語訳(Coop編) - Makefileの条件分岐部分