2015年2月23日月曜日

brew install openssl でエラーが出る

環境CentOS6.6 x86

linuxbrewを使って、owncloudをインストールできるのかなと思ってやっていた時に
つまずいた話、結局owncloudをインストールするまでに至らなかったが、
opensslのインストール時に発生したビルドエラー対処法だけ記載します。

linuxbrew でopensslをインストールしようとした時に、ビルドエラーで進めない時の対処法
opensslビルド動作中にこんなエラーがでる

cryptlib.c:1: sorry, unimplemented: 64-bit mode not compiled in

ググると、32-bit環境にも関わらず、64-bit環境用にビルドしようとしてるとのこと
configureしてるところにオプションを指定してやればよいよと知ったが、brewってどうやってそこんところ弄るの?

fomulaってのがあって、Rubyで書かれたスクリプトがあるんだけど、
そこでconfigure用のコマンド文字列を生成しているみたい。
brew edit openssl ってするとそれを編集できる。
58行目あたりに、32 or 64bit の判定をしている部分があるけど、おそらくここで64bitが選ばれてしまうからだろう。。。

def arch_args
  return { :i386  => %w[linux-generic32], :x86_64 => %w[linux-x86_64] } if OS.linux?
    {
    :x86_64 => %w[darwin64-x86_64-cc enable-ec_nistp_64_gcc_128],
    :i386   => %w[darwin-i386-cc],
    }
end

# -- 省略

def install
  if build.universal?
    ENV.permit_arch_flags
    archs = Hardware::CPU.universal_archs
  elsif MacOS.prefer_64_bit?
    archs = [Hardware::CPU.arch_64_bit]
  else
    archs = [Hardware::CPU.arch_32_bit]
  end

  dirs = []

  archs.each do |arch|
    if build.universal?
      dir = "build-#{arch}"
      dirs << dir
      mkdir dir
      mkdir "#{dir}/engines"
      system "make", "clean"
    end

    arch=:i386 # 無理やりここで32-bit用にしてしまう。

    ENV.deparallelize
    system "perl", "./Configure", *(configure_args + arch_args[arch])
    system "make", "depend"
    system "make"

# -- 省略

上記のarch変数を直接書き換えることで、対応できた!

0 件のコメント:

コメントを投稿