Pistolfly のすべての投稿

Software Engineer in Tokyo, Japan

mysqldumpで出力したファイルのインポートで error at line xxx: unknown command '\z'

mysqldumpで出力したダンプファイルをmysqlでインポート中に、

error at line 301: unknown command '\z'

というエラーになった。
エラーに出ているダンプファイルの301行目は、longblobのカラムを持つテーブルへのデータのINSERT。
mysqldumpで --hex-blob オプションを付けて出力するようにすると、エラーを回避できた。
ただしダンプしたファイルのサイズは大きくなる。
Mysqldump and Error "Unknown command '\0′" | Mister Nerd's Blog
MySQL :: MySQL 5.1 リファレンスマニュアル :: 7.12 mysqldump -- データベースバックアッププログラム

--hex-blob
16進変換表記法を使用しているバイナリカラムをダンプします(例えば、'abc'は0x616263となります)。影響を受けるデータタイプはBINARY、VARBINARY、BLOB、そしてBITになります。

CentOSにbash-completionをインストール

CentOSのyumにはbash-completionがないので、ソースからインストールした。
Bash-Completion
から、最新のソースをダウンロードしてインストール。

$ tar xjvf bash-completion-2.0.tar.bz2
$ cd bash-completion-2.0
$ ./configure
$ make
$ sudo make install

~/.bashrc

# Use bash-completion, if available
[[ $PS1 && -f /usr/local/share/bash-completion/bash_completion ]] && \
    . /usr/local/share/bash-completion/bash_completion

Gitのbash_completionは、Gitのソースの/contrib/completion/git-completion.bash、
Subversionのbash_completionは、Subversionのソースの/tools/client-side/bash_completion
にあるので、/usr/local/share/bash-completion/completions/ にそれぞれgit、svnという名前で保存すればよい。

Mac OSXにHaru Free PDF Libraryをインストール

libHaruはPDFを生成するCのライブラリ。
Ruby、Delphi/Free Pascal、C#(Microsoft .NET platform)、PHP、Perlから利用可能にするbindingもある。
libHaru.org wiki
ダウンロードページからソースをダウンロードしてインストールする。
libpngはMacPortsでインストールしているので、--with-png=/opt/local を指定。

$ tar xzvf libharu-2.1.0.tar.gz
$ cd libharu-2.1.0/
$ ./configure --with-png=/opt/local
$ make
$ sudo make install

Ruby用のライブラリをインストールする。
Documentation/Bindings - libHaru.org wiki

$ cd if/ruby/
$ ruby extconf.rb
$ sudo make install

Mac OSX Snow Leopard でRVMを使って1.8.7と1.9.xを共存

Mac OSX (Snow Leopard) で、MacPortsのRuby1.8.7を使っているが、1.9.2も使いたいので、RVMでRuby1.9.2をインストールしてみた。

RVMのインストール

$ bash < <(curl -s https://rvm.beginrescueend.com/install/rvm)
$ echo '[[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm" # Load RVM function' >> ~/.bash_profile

RVM: Ruby Version Manager - Installing RVM

RVMのアップデート

$ rvm get latest

RVM: Ruby Version Manager - Upgrading RVM
rvm get latest がエラーになる場合は、

$ rvm get head
$ rvm get latest

Gamburtsev: rvm get latest が失敗する場合

Rubyのインストール

インストール可能なRubyの確認

$ rvm list known
# MRI Rubies
[ruby-]1.8.6[-p420]
[ruby-]1.8.6-head
[ruby-]1.8.7[-p334]
[ruby-]1.8.7-head
[ruby-]1.9.1-p378
[ruby-]1.9.1[-p431]
[ruby-]1.9.1-head
[ruby-]1.9.2-preview1
[ruby-]1.9.2-preview3
[ruby-]1.9.2-rc1
[ruby-]1.9.2-rc2
[ruby-]1.9.2[-p180]
[ruby-]1.9.2-head
ruby-head
# GoRuby
goruby
# JRuby
jruby-1.2.0
jruby-1.3.1
jruby-1.4.0
jruby[-1.5.6]
jruby-1.6.0.RC1
jruby-1.6.0.RC2
jruby-head
# Rubinius
rbx-1.0.1
rbx-1.1.0
rbx-1.1.1
rbx-1.2.0
rbx-1.2.1
rbx[-head]
# Ruby Enterprise Edition
ree-1.8.6
ree[-1.8.7][-2011.03]
ree-1.8.6-head
ree-1.8.7-head
# MagLev
maglev[-25315]
maglev-head
# Mac OS X Snow Leopard Only
macruby[-0.8] # the default macruby
macruby-nightly
macruby-head      # Build from the macruby git repository
# IronRuby -- Not implemented yet.
ironruby-0.9.3
ironruby-1.0-rc2
ironruby-head

1.9.2をインストールする

$ rvm pkg install readline
$ rvm install 1.9.2 --with-readline-dir=$rvm_path/usr

これで[ruby-]1.9.2[-p180](現時点)がインストールされる。
※ rvm pkg で readline をインストールして、それをRubyインストール時に指定しているのは、irbで日本語が入力できなかったから。
最初、普通にrvm install 1.9.2 でインストールしたら、irbで日本語を入力すると、

ruby-1.9.2-p180 :001 > "???"
SyntaxError: (irb):1: invalid multibyte char (UTF-8)
(irb):1: invalid multibyte char (UTF-8)
	from /Users/pistolfly/.rvm/rubies/ruby-1.9.2-p180/bin/irb:16:in `<main>'

となってしまった。
Ruby 1.9 - Bug #550: irbで日本語を入力できない - Ruby Issue Tracking System
と同じような現象なので、rvm pkgでreadlineをインストールして、Rubyインストール時に指定すると、大丈夫になった。
RVM: Ruby Version Manager - 'rvm package install readline'
※ Mac OSX Lion ではreadline(の互換ライブラリlibedit)が改善されたらしく、RVMのreadlineを使わなくても大丈夫になっている。

使用するRubyを選択

$ rvm use 1.9.2
Using /Users/pistolfly/.rvm/gems/ruby-1.9.2-p180
$ ruby -v
ruby 1.9.2p180 (2011-02-18 revision 30909) [x86_64-darwin10.6.0]

RVMでインストールされているRubyを確認

$ rvm list
rvm rubies
=> ruby-1.9.2-p180 [ x86_64 ]

デフォルトの Rubyを設定する

デフォルトのRubyを設定する。

$ rvm --default use 1.8.7

デフォルトのRubyに変更。

$ rvm default

デフォルトの設定を確認。

$ rvm list default
Default Ruby (for new shells)
   ruby-1.8.7-p352 [ x86_64 ]

デフォルトの設定をリセットする。

$ rvm reset

RVM: Ruby Version Manager - 'rvm default' - setting default ruby for new terminals

システムのRubyに戻す

$ rvm system

Rubyのアップグレード

RVM: Ruby Version Manager - Upgrading RVM.
例: 1.9.2-p180を1.9.2-p290にアップグレードする

$ rvm upgrade 1.9.2-p180 1.9.2-p290

screenで使う場合

~/.screenrcに以下を記述する。

shell -${SHELL}

RVM: Ruby Version Manager - RVM inside Screen

RubyGems

gemを使う時にsudoしないこと。

RVM: Ruby Version Manager - 'rvm gemdir' - RubyGems and RVM

Ruby 1.9.2 にruby-debugをインストール

Ruby 1.9.2 では「ruby-debug19」をインストールする。
debuggerを入れた方がよい。
1.9.2、1.9.3で動作するruby-debug19のfork「debugger」

<strike>$ gem install ruby-debug19</strike>
$ gem install debugger

Ruby 1.9.2 にmongrelをインストール

Ruby 1.9.2 では、現時点では、1.2.0.pre2をインストールする。
mongrel | RubyGems.org | your community gem host

$ gem install mongrel -v 1.2.0.pre2 --pre

CentOSにImageMagickをソースからインストール → RMagickをインストール

ImageMagickが依存しているライブラリをyumでインストール。

$ sudo yum install bzip2-devel lcms-devel libjpeg-devel libX11-devel libXt-devel libtiff-devel ghostscript-devel libXext-devel libpng-devel

ImageMagickのダウンロードサイトからソースを取得して、ビルドとインストールを行う。

$ wget ftp://ftp.../ImageMagick.tar.gz
$ tar xzvf ImageMagick.tar.gz
$ cd ImageMagick-6.6.7-10/
$ ./configure && make
$ sudo make install

インストールを確認

$ which Magick-config
/usr/local/bin/Magick-config
$ Magick-config --version
6.6.7 Q16

RMagickをインストール

$ sudo gem install rmagick

ここで、

Building native extensions.  This could take a while...
ERROR:  Error installing rmagick:
	ERROR: Failed to build gem native extension.
        /usr/local/bin/ruby extconf.rb
checking for Ruby version >= 1.8.5... yes
checking for gcc... yes
checking for Magick-config... no
Can't install RMagick 2.13.1. Can't find Magick-config in /usr/bin:/bin
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of
necessary libraries and/or headers.  Check the mkmf.log file for more
details.  You may need configuration options.
Provided configuration options:
	--with-opt-dir
	--without-opt-dir
	--with-opt-include
	--without-opt-include=${opt-dir}/include
	--with-opt-lib
	--without-opt-lib=${opt-dir}/lib
	--with-make-prog
	--without-make-prog
	--srcdir=.
	--curdir
	--ruby=/usr/local/bin/ruby
Gem files will remain installed in /usr/local/lib/ruby/gems/1.8/gems/rmagick-2.13.1 for inspection.
Results logged to /usr/local/lib/ruby/gems/1.8/gems/rmagick-2.13.1/ext/RMagick/gem_make.out

のように
Can't install RMagick 2.13.1. Can't find Magick-config in /usr/bin:/bin
というエラーになる場合は、sudoした時に/usr/local/binにPATHが通っていない(環境変数が引き継がれていない)ので、PATHが引き継がれるよう設定してから、再度rmagickをインストールする。

$ sudo gem install rmagick
Building native extensions.  This could take a while...
Successfully installed rmagick-2.13.1
1 gem installed

ldconfig

実行時に以下のようなエラーになる場合

libMagickCore.so.4: cannot open shared object file: No such file or directory - /opt/ruby-enterprise-1.8.7-2011.03/lib/ruby/gems/1.8/gems/rmagick-2.13.1/lib/RMagick2.so
/opt/ruby-enterprise-1.8.7-2011.03/lib/ruby/gems/1.8/gems/rmagick-2.13.1/lib/RMagick2.so

これは、共有ライブラリが認識されていないために起きている。
libMagickCore.so.4が/usr/local/libに存在するのに認識されていない場合は、/usr/local/libをldconfigで追加してやる必要がある。
まず、ldconfigを実行してキャッシュを生成する。

$ sudo /sbin/ldconfig

それでもエラーになる場合は、ldconfig に -p オプションを付けて実行してキャッシュを確認してみる。

$ sudo /sbin/ldconfig -p

ldconfig -p の出力結果にlibMagickCore.so.4が見つからない場合は、ディレクトリを追加する必要がある。
ldconfigで読み込まれる/etc/ld.so.confを編集。

include ld.so.conf.d/*.conf

となっていたのを

/usr/local/lib
include ld.so.conf.d/*.conf

のように、共有ライブラリが含まれるディレクトリを追加する。
そしてldconfigを実行してキャッシュを作成する。

$ sudo /sbin/ldconfig

-pオプションでキャッシュを確認。

$ sudo /sbin/ldconfig -p

出力結果に、以下のように使用する共有ライブラリが含まれるようになればOK。

	libMagickWand.so.4 (libc6,x86-64) => /usr/local/lib/libMagickWand.so.4
	libMagickWand.so (libc6,x86-64) => /usr/local/lib/libMagickWand.so
	libMagickCore.so.4 (libc6,x86-64) => /usr/local/lib/libMagickCore.so.4
	libMagickCore.so (libc6,x86-64) => /usr/local/lib/libMagickCore.so
	libMagick++.so.4 (libc6,x86-64) => /usr/local/lib/libMagick++.so.4
	libMagick++.so (libc6,x86-64) => /usr/local/lib/libMagick++.so

Railsアプリケーションで

config.gem "rmagick", :lib => "RMagick"

としている場合に、

Missing these required gems: rmagick >= 0

というエラーになってしまう場合も共有ライブラリが認識されていない可能性があるので、ldconfigをチェックする。

Can't install RMagick 2.13.1. Can't find MagickWand.h.

Can't install RMagick 2.13.1. Can't find MagickWand.h.

というエラーでRMagickをインストールできない場合は、PKG_CONFIG_PATHを設定してインストールする。
Can’t install RMagick 2.13.1. Can’t find MagickWand.h.