re:dashがインストールできなくなったので調査した

7/3 22:30追記

re:dash開発者の @arikfr さんがこの記事を読んでくれたらしく。setuptoolsが修正されるまではこの記事で紹介したワークアラウンドを入れることになったようです。

github.com

github.com

なので、これからインストールする方にはこの記事は不要なのですが、記事は自分の活動記録としてそのまま残しておきます。

まえがき

Ubuntu用のセットアップスクリプトでre:dashをインストールしようとしたらインストールできなくなってたので調べました。

使用した環境はVagrantで起動したUbuntu14.04で、Vagrant Boxはubuntu/trusty64 (virtualbox, 20160627.0.0), re:dashのバージョンは0.10.1.b1834です。

検証に使用したVagrantfile

# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/trusty64"
  config.vm.network "forwarded_port", guest: 80, host: 9001

  config.vm.provider "virtualbox" do |vb|
    vb.memory = "2048"
  end

  config.vm.provision "shell", inline: <<-SHELL
    sudo locale-gen ja_JP.UTF-8
  SHELL
end

セットアップスクリプト実行中のエラー

$ curl https://raw.githubusercontent.com/getredash/redash/master/setup/ubuntu/bootstrap.sh
$ sudo bash bootstrap.sh

VMにログインし上記の様にスクリプトを実行したところ、途中は割愛しますがre:dashが依存しているモジュールを pip でインストールするあたりでこんなエラーが出てしまいました。

Downloading/unpacking httplib2==0.9.2 (from -r requirements.txt (line 1))
  Downloading httplib2-0.9.2.zip (210kB): 210kB downloaded
  Running setup.py (path:/tmp/pip_build_root/httplib2/setup.py) egg_info for package httplib2
    Traceback (most recent call last):
      File "<string>", line 3, in <module>
      File "/usr/local/lib/python2.7/dist-packages/setuptools/__init__.py", line 14, in <module>
        from setuptools.extension import Extension
      File "/usr/local/lib/python2.7/dist-packages/setuptools/extension.py", line 11, in <module>
        from . import msvc
      File "/usr/local/lib/python2.7/dist-packages/setuptools/msvc.py", line 244, in <module>
        class PlatformInfo:
      File "/usr/local/lib/python2.7/dist-packages/setuptools/msvc.py", line 253, in PlatformInfo
        current_cpu = safe_env['processor_architecture'].lower()
      File "/usr/lib/python2.7/UserDict.py", line 23, in __getitem__
        raise KeyError(key)
    KeyError: 'processor_architecture'
    Complete output from command python setup.py egg_info:
    Traceback (most recent call last):

  File "<string>", line 3, in <module>

  File "/usr/local/lib/python2.7/dist-packages/setuptools/__init__.py", line 14, in <module>

    from setuptools.extension import Extension

  File "/usr/local/lib/python2.7/dist-packages/setuptools/extension.py", line 11, in <module>

    from . import msvc

  File "/usr/local/lib/python2.7/dist-packages/setuptools/msvc.py", line 244, in <module>

    class PlatformInfo:

  File "/usr/local/lib/python2.7/dist-packages/setuptools/msvc.py", line 253, in PlatformInfo

    current_cpu = safe_env['processor_architecture'].lower()

  File "/usr/lib/python2.7/UserDict.py", line 23, in __getitem__

    raise KeyError(key)

KeyError: 'processor_architecture'

----------------------------------------
Cleaning up...
Command python setup.py egg_info failed with error code 1 in /tmp/pip_build_root/httplib2
Storing debug log for failure in /root/.pip/pip.log

re:dashのセットアップスクリプトでいうと以下の辺りです。

原因を考える

ちょっと前に使った時は問題なかったのですが、なぜエラーが発生するようになってしまったのでしょうか。

いろいろ調べて回ったのですが、同様の事例や解決策を見つけられなかったのでsetuptoolsリポジトリを見てみました。

github.com

リリースを見てみると、最近リリースがあったようです(2016/7/03 10時現在では8時間前)

先ほどのエラーメッセージに/usr/local/lib/python2.7/dist-packages/setuptools/msvc.pyとあったので、該当のファイルが追加されたPull Requestをみてみます。

github.com

たぶんこのあたりでなんかあるんだろうなと思ったので、セットアップスクリプトを以下のように変えて再度実行します。

@@ -29,7 +29,7 @@
 apt-get -y update
 apt-get -y dist-upgrade
 apt-get install -y python-pip python-dev nginx curl build-essential pwgen
-pip install -U setuptools
+pip install -U setuptools==23.1.0

 # redash user
 # TODO: check user doesn't exist yet?

再実行

再実行時は念のためVMを破棄し、再度作成しなおしたVM上でスクリプトを実行したところインストールが問題なく完了し、 http://localhost:9001/ にアクセスすることが出来ました。

まとめ

re:dashは頻繁にアップデートされるため、たまにインストールがうまくいかないことがある印象があるのですが、今回はsetuptoolsの問題でした。

おそらくsetuptoolsもそのうち修正されるんじゃないかと思いますが、re:dashを使おうとして同じような問題にぶつかった方がこの記事を参考にしていただけたらうれしいです。