Railway gun

Web系企業に勤めるサラリーマンが書くブログ

configureのコンパイラエラー対処

おなじみconfigure => make => make installの流れでつまづいた場合の解決策。
エラーが出次第、徐々に追記していきたい。

C++、g++のコンパイラが無いと言われる。

エラー表示
configure: error: C++ compiler g++ does not work or no compiler found
対処方法

gcc,gcc-c++yumで入れてやる

$ sudo yum install gcc gcc-c++

zlib.hが参照できないと言われる

エラー表示
configure: error: zlib.h is required
対処方法

zlib,zlib-develをインストールする

$ sudo yum install zlib zlib-devel

bzlib.hが参照できないと言われる

エラー表示
configure: error: bzlib.h is required
対処方法

bzip2,bzip2-develをインストールする

$ sudo yum install bzip2 bzip2-devel

Windows7にVagrant環境を作ってRuby on Railsを動かしてみる①

Ruby on Railsを学んでみようと思い、無料で公開されているチュートリアルをやってみています。

Ruby on Rails チュートリアル:実例を使って Rails を学ぼう

今まではAWS上に建てたサーバでコーディングしていましたが、ブラウザで作ったサイトを見るのにローカルの方が楽なので、PC上にVagrantをインストールして、CentOSを動かしたうえでRailsをやってみようと思います。

Vagrant環境の準備

Vagrantを使うためには

  1. Ruby
  2. VirtualBox
  3. Vagrant

のインストールが必要になります。
どれからインストールしてもそれほど問題はありませんでした。

Rubyのインストール

私のローカルPCにはRubyすら入っていなかったので、まずはRubyを入れます。

下記のサイトにWindowsインストーラ形式のバイナリがおいてあるのでダウンロードしてきます。私は最新版の2.2.1-p85(64ビット版)を落としてインストールしてきました。
RubyInstaller for Windows

インストーラ環境変数まで設定してくれる・・。便利!コマンドプロンプトで確認してみます。(Linuxのコマンドのように書いてありますが、"C:\"などと書くのが面倒なだけで、Windowsコマンドプロンプトを使っています。ここら辺のコマンドはどっちでも一緒だし。)

$ ruby -v
ruby 2.2.1p85 (2015-02-26 revision 49769) [x64-mingw32]

無事にインストール完了。

VirtualBoxのインストール

同じく下記のサイトからダウンロードしてインストールするだけ。
Downloads – Oracle VM VirtualBox

適当にインストーラを進めて行けば無事にインストール完了。
ここで再起動を求められるかもしれません。

Vagrantのインストール

コレも簡単。下記のサイトからダウンロードしてインストール。
Vagrant

コマンドプロンプトからvagrantコマンドが使えるかを確認。

$ vagrant -v
Vagrant 1.7.2

ココも問題なく、インストール完了。これでvagrant環境を立ち上げる前の前準備は完了。

バーチャルマシンの起動

まずはVagrantにバーチャルマシンを登録する作業からです。下記に使えるイメージファイルがおいてあるため、好きな物を選択。
A list of base boxes for Vagrant - Vagrantbox.es

CentOSが使いたかったので、"CentOS 6.5 x86_64"を選択します。右に書いてあるURLをコピーして、コマンドプロンプトで下記のコマンドを打ちます。
(※ディレクトリは好きな場所に移動してください。)

vagrantはコマンド名、boxはイメージファイル全般を扱うオプション、addはboxのオプションでイメージを追加するオプション、centos_6_5はダウンロードするイメージのタグのようなもの(なんでもOK)、そして最後にダウンロードするイメージのURLです。

$ vagrant box add centos_6_5 https://github.com/2creatives/vagrant-centos/releases/download/v6.5.3/centos65-x86_64-20140116.box

自動的にダウンロードが始まるので、完了するまでしばし待ちましょう。
ダウンロードが完了したら、下記のコマンドで環境の初期化を行います。

$ vagrant init centos_6_5

"Vagrantfile"がカレントディレクトリにできたよ!というメッセージが出てくると思います。
これはVagrantを起動する際に使う設定になりますが、とりあえず動かしてみるには触らなくとも大丈夫ですので、そのまま起動してみます。

$ vagrant up

ディスク容量が圧迫されていたり、Ruby環境変数がうまく通っていないなどが無い限り、うまくいくと思います。デフォルトでは127.0.0.1の2222ポートがsshでつなげるようになっているはずです。(その旨表示が出ます。)

ログイン

TeraTermputty等のコンソールを使って127.0.0.1:2222にアクセスします。アカウント名・パスワード共に"vagrant"でログインできるはずです。
f:id:pioneer_in_ocean:20150310224711p:plain
f:id:pioneer_in_ocean:20150310224827p:plain

無事にログイン。f:id:pioneer_in_ocean:20150310224923p:plain


とりあえず、本日はここまで。

git pushで「Gtk-WARNING **: cannot open display」とエラーが出た場合

bitbucketにgit pushしようとしたら、エラーで怒られてしまった。

$ git push
(gnome-ssh-askpass:XXXXX): Gtk-WARNING **: cannot open display:

cannot open displayというエラーは
「パスワード入力窓をgnomeがオープンできないよ!」
と言われているらしい。

httpsでログインを試みる設定にしていたため、パスワードを求められているようだ。
色々な方が書かれているが、「SSH_ASKPASS」を環境変数から削除すれば良さそう。

$ unset SSH_ASKPASS
$ git push
Password:

無事、うまくpushできた。

とはいえ、ssh-keyも登録しておいたはずなので、sshによるアクセスに切り替えよう・・。

RMagickのインストールエラー

他の方が開発したrailsアプリを引っ張ってきて、
自分のCentOS環境でbundle installした際に下記のエラー発生。

Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension.

checking for Ruby version >= 1.8.5... yes
checking for gcc... yes
checking for Magick-config... no
Can't install RMagick 2.13.2. Can't find Magick-config
・
・
・
An error occurred while installing rmagick (2.13.2), and Bundler cannot continue.
Make sure that `gem install rmagick -v '2.13.2'` succeeds before bundling.

ImageMagickが入っていないためのようだ。

$ sudo yum install ImageMagick ImageMagick-devel
$ bundle install

・
・
Installing rmagick 2.13.2
Your bundle is complete!

無事、解決。

Datanodeのエラー:Initialization failed for block pool Block pool BP-xxxxxxx

久しぶりのHadoopクラスタ構築で出てきたエラー。

DataNodeを起動しようとするとログに下記のエラーが吐かれて勝手にシャットダウンしてしまう。

FATAL org.apache.hadoop.hdfs.server.datanode.DataNode: Initialization failed for block pool Block pool BP-<<ユニーク値>> (storage id DS-<<ユニーク値>>) service to <<ドメイン名>>/<<IPアドレス>>:<<ポート>>

エラーの内容はBlock poolを初期化できませんでしたよ、という内容。
Hadoopが生成する"current"ディレクトリ配下のVERSIONファイルがおかしいのかと思ってみてみるが、
特におかしい所は無い。

何が原因なのか悩んだあげく、結論としては/etc/hostsファイルにドメインが記載されていなかった。

vim /etc/hosts

でhostsファイルにドメインを記載してやったら解決。

DNSで名前解決は出来ている状態になっていたのだが、Hadoopはhostsでしっかり記載してやらないと予期せぬエラーが起きる事がある。以前も同じ原因で別のエラーが出た事があった。

もし、何か理不尽なエラーが出る事があったら/etc/hostsを確認してみるといいかもしれない。

文字列の合成と評価させる方法

R言語に限らず、ループカウンタ等の変数を使って文字列を作りたい事がある。
Rでのやり方は簡単。paste関数を使うだけ。

i=1
paste("hoge",i,"hoge")  #-> "hoge 1 hoge"

単純に繋ぎたいオブジェクトを「,」区切りで渡せば良い。
デフォルトだと、スペースが区切り文字として入ってしまうため、

i=1
paste("hoge",i,"hoge",sep="")  #-> "hoge1hoge"

このようにsepプションで区切り文字を無しに指定すると、そのままつながる。

ちなみに、paste関数で生成された文字列は単なる文字列として扱われるため、
例えば既存のオブジェクトと同じ名前を作ったとしても評価されない。

オブジェクトとして評価させたい場合は,eval(parse(text=...))を使う。

tmp = "success"
eval(parse(text=paste("t","m","p",sep=""))) #-> "success"

これでオブジェクトとして認識されます。

パスワードジェネレータpwgenをUbuntuで使う

CentOSなどではmkpasswdが使えると思うんだけど、ubuntuには無いようだ。

調べたところpwgenというのが一般的らしい。
まずはインストール

$ sudo apt-get install pwgen

インストール完了。簡単な使い方は

# 5文字のパスワードを1つ表示
$ pwgen 5 1
yaCh9

パスワードの長さを変えたい時は第一引数をかえれば良い。
デフォルとだと、英数字大文字小文字の集合ができるようだ。

ちなみによく使いそうなオプションはこちら。

オプション 効果
-s ランダムに生成する。デフォルトでは「覚えやすい」物を出力する。
-B 紛らわしい文字を使わない。1とlのような。
-y 記号を含める。
-0 数字を含めない。
-A 大文字を含めない。
-h ヘルプを表示。