Ruby 1.8.7 p249 -> p334

gem の読み込みが ちょっとだけ速くなっているような

  • 1.8.7-p249
$ ruby -v; time ruby -e "require 'rubygems'; require 'nokogiri';"
ruby 1.8.7 (2010-01-10 patchlevel 249) [i686-linux]

real    0m0.759s
user    0m0.644s
sys     0m0.116s
  • 1.8.7-p334
$ ruby -v; time ruby -e "require 'rubygems'; require 'nokogiri';"
ruby 1.8.7 (2011-02-18 patchlevel 334) [i686-linux]

real    0m0.572s
user    0m0.528s
sys     0m0.044s

インストールされている gem はだいたい同じ。

PC が このスペック なのでどちらも遅いのだが。とはいえ、こんなスペック
だからこそスピードの違いが実感できる。

p334 の方は RVM で管理しているだが、その影響もあるのだろうか?

C/Migemo のインストール

自宅の PC の Ruby も RVM で管理することに伴い、Ruby のバージョン毎に
migemo をインストールするのは面倒なので、C/Migemo をインストールする。

ソースの取得、展開、コンパイル、インストール

$ cd ~/src/
$ wget http://cmigemo.googlecode.com/files/cmigemo-default-src-20110227.zip
$ unzip cmigemo-default-src-20110227.zip
$ cd cmigemo-default-src

README.txt(README_j.txt) が丁寧。

$ ./configure --help
bash: ./configure: Permission denied
$ ls -l configure 
-rw-r--r-- 1 foo boo 1770 Feb 27 19:45 configure

何故か configure に実行権限がついていない。

$ chmod 755 configure 
$ ./configure --help

--help で ヘルプが表示されない上に config.mk が 更新される。
しょうがないので configure を見ると --prefix は 指定出来る。

$ ./configure --prefix=$VMDIR_PATH/usr
$ make gcc
 - 略 -
cc -O2 -Wall  -fPIC -o build/object/wordbuf.o -c src/wordbuf.c
src/wordbuf.c: In function `wordbuf_cat':
src/wordbuf.c:118: error: `INT_MAX' undeclared (first use in this function)
src/wordbuf.c:118: error: (Each undeclared identifier is reported only once
src/wordbuf.c:118: error: for each function it appears in.)
 - 略 -

エラー。http://d.hatena.ne.jp/ser1zw/20100825/1282663086
読むと、src/wordbuf.c に

#include <limits.h>

を追加するようだ。修正して

$ make gcc

コンパイルが完了した。なんで エラーのソースをアップロードしてるんだろう?

$ make gcc-dict

dict/euc-jp.d/ しか作られないので

$ cd dict
$ make utf-8
$ cd ..
$ make gcc-install

/etc/ld.so.conf の編集とロード

/etc/ld.so.conf の編集だが、Vine 4.2 には /etc/ld.so.conf.d/
ディレクトリがあり、ここに置かれたファイルが読み込まれる。

root で /etc/ld.so.conf.d/User-Library.conf を作成し、

/path/to/lib

と編集し、

# ldconfig

で共有ライブラリとして libmigemo.so, libmigemo.so.1 が認識される。

.emacs の設定

(setq migemo-command "cmigemo")
(setq migemo-options '("-q" "--emacs"))
(setq migemo-dictionary (concat (expand-file-name myvm-dir) "/usr/share/migemo/utf-8/migemo-dict"))
(setq migemo-user-dictionary nil)
(setq migemo-regex-dictionary nil)
(setq migemo-coding-system 'utf-8-unix)
(load-library "migemo")

以上を評価し、migemo で I-search が出来るようになった。

Migemo(本家 Ruby版) の削除

Migemo と C/Migemo が混在してると 後々 混乱しそうなので削除する。

本家のインストール手順は

を取得、展開し、Ruby のロードパスが通っているディレクトリに
romkan.rb, bsearch.rb をコピーする。

を取得、展開し、make, make install。

以上の 逆を行う。

$ cd ~/src/migemo-0.40

emacs-lisp は残さなければならないので、Makefile より、

uninstall-binSCRIPTS:
uninstall-pkgdataDATA:
uninstall-rubyDATA:

を それぞれ実行すればよい。

$ make uninstall-binSCRIPTS
$ make uninstall-rubyDATA
$ make uninstall-pkgdataDATA

romkan.rb, bsearch.rb を消去。

$ cd $VMDIR_PATH/usr/lib/ruby/site_ruby/1.8/
$ rm romkan.rb bsearch.rb 

終了

RVM の Gem Sets で gemset の管理


RVM では gemset を複数持つことが出来、 Gem Sets(gemsets) で管理する。

  • 勝手な用語解釈
gemset
gem list で表示される様な gem一式に 名前を定義したもの

gemset を作成し 使用する

  • gemset の一覧を見る
$ rvm gemset list

gemsets for ruby-1.9.2-p136 (found in /home/User/.rvm/gems/ruby-1.9.2-p136)
global

デフォルトでは 'global' という gemset が用意されている。これは、
RVM で 使用している Ruby のバージョン毎に、共通の gem を インストール
するための gemset。$GEM_PATH を見ると、

$ echo $GEM_PATH
/home/User/.rvm/gems/ruby-1.9.2-p136:/home/User/.rvm/gems/ruby-1.9.2-p136@global

と、対象の Ruby のバージョン(上記の場合 ruby-1.9.2-p136) の
gemディレクトリリストの最後で 'global' を読み込むようになっている。

  • 現在使用中の gemset を確認する
$ rvm gemset name

何の gemset も使用されていない。(デフォルトでは、上述の
~/.rvm/gems/ruby-1.9.2-p136 という @ がないディレクトリの gem が
読み込まれるのだが、rvm gemset use で 指定することが出来ない。
以前の RVM のバージョンでは指定出来たらしい。) とりあえず、

  • gemset 'global' を使用するように指定する。
$ rvm gemset use global
Now using gemset 'global'
$ rvm gemset name
global

これで 'global' が使用される、が、テスト用に

  • gemset 'test1' を作成し 使用する。
$ rvm gemset create test1
'test1' gemset created (/home/User/.rvm/gems/ruby-1.9.2-p136@test1).

$ rvm gemset list

gemsets for ruby-1.9.2-p136 (found in /home/User/.rvm/gems/ruby-1.9.2-p136)
global
test1

$ rvm gemset use test1
Now using gemset 'test1'

$ rvm gemset name
test1

これで 'test1' が使用される。$GEM_PATH を見ると、

$ echo $GEM_PATH
/home/User/.rvm/gems/ruby-1.9.2-p136@test1:/home/User/.rvm/gems/ruby-1.9.2-p136@global

先程と同様に、最後に 'global' が読み込まれる。

gem をインストール

RubyGems で nokogiri をインストール
  • インストール済みの gem を見る
$ gem list

*** LOCAL GEMS ***

rake (0.8.7)
rubygems-update (1.4.2)

また rake と rubygems-update しかインストールされていない。('global'
にインストールされている)

  • インストールされていない Nokogiri の動作確認
$ ruby -rnokogiri -e "p Nokogiri::XML(%Q{<a b='c'/>}).at('a')['b']"
<internal:lib/rubygems/custom_require>:29:in `require': no such file to load -- nokogiri (LoadError)
        from <internal:lib/rubygems/custom_require>:29:in `require'

当然エラー。

  • nokogiri をインストール
$ gem install nokogiri --no-ri --no-rdoc
Building native extensions.  This could take a while...
Successfully installed nokogiri-1.4.4
1 gem installed

$ gem list

*** LOCAL GEMS ***

nokogiri (1.4.4)
rake (0.8.7)
rubygems-update (1.4.2)

インストールされた、か?

  • Nokogiri の動作確認
$ ruby -rnokogiri -e "p Nokogiri::XML(%Q{<a b='c'/>}).at('a')['b']"
"c"

成功。インストールされている。

現在の gem一式を 別の gemset に コピーする

export, import を使う

現在の gemset 'test1' は テスト用で、Nokogiri を常に使える状態に
したいので、'test1' の gem一式を gemset 'global' にコピーする。

  • 現在使用中の gemset にインストールされている gem の一覧を出力
$ rvm gemset export test1.gems
Exporting current environments gemset to test1.gems

出力ファイル(上記の場合 'test1.gems') を指定しない場合 default.gems
に出力される。内容は gem の名前とバージョンの一覧が記載されている。

  • gemset 'global' に切り替える。
$ rvm gemset use global
Now using gemset 'global'

$ gem list

*** LOCAL GEMS ***

rake (0.8.7)
rubygems-update (1.4.2)

$ ls `rvm gemdir`/gems/
rake-0.8.7/  rubygems-update-1.4.2/

まだ rake と rubygems-update だけがインストールされている状態。

  • gem の一覧を インポート
$ rvm gemset import test1.gems 

Installing gems listed in test1.gems file...

installing nokogiri 1.4.4...
nokogiri 1.4.4 installed.

Processing of test1.gems is complete.

$ gem list; ls `rvm gemdir`/gems

*** LOCAL GEMS ***

nokogiri (1.4.4)
rake (0.8.7)
rubygems-update (1.4.2)
nokogiri-1.4.4/  rake-0.8.7/  rubygems-update-1.4.2/

nokogiri が 'global' にインストールされた。

  • Nokogiri の動作確認
$ ruby -rnokogiri -e "p Nokogiri::XML(%Q{<a b='c'/>}).at('a')['b']"
"c"

成功。


'test1' は用済みなので

  • gemset 'test1' を消去
$ rvm gemset delete test1
Are you SURE you wish to remove the entire gemset directory 'test1' (/home/User/.rvm/gems/ruby-1.9.2-p136@test1)?
(anything other than 'yes' will cancel) > yes

$ rvm gemset list

gemsets for ruby-1.9.2-p136 (found in /home/User/.rvm/gems/ruby-1.9.2-p136)
global

'test1' が消去された。

copy を使う

単純に コピーだけなら、

$ rvm gemset create test2
'test2' gemset created (/home/User/.rvm/gems/ruby-1.9.2-p136@test2).

$ rvm gemset copy 1.9.2-p136@global 1.9.2-p136@test2
Copying gemset from 1.9.2-p136@global to 1.9.2-p136@test2
Making gemset for 1.9.2-p136@test2 pristine.

$ rvm gemset use test2
Now using gemset 'test2'
$ gem list

*** LOCAL GEMS ***  

nokogiri (1.4.4)
rake (0.8.7)
rubygems-update (1.4.2)

と出来るらしい。

さくらのVPS を試す

さくらのVPS に申し込み

VPS を試すにあたり、ServersMan@VPS が最大2ヶ月間無料キャンペーンを
やっているので申し込みたかったが、クレジットカードが必要らしく断念。

さくらインターネット に申し込む。レンタルサーバーのアカウントは
持っているので、そのアカウントでログイン、申し込み。IPアドレス
パスワードなど書かれたメールが届くので VPSコントロールパネル にログイン。

先達の記事を読むと、アカウント取って最初に sshd の設定を
変更しているが、2011/01/20 の時点では デフォルトでは
さくらのVPS は起動しない。

さくらのVPSUbuntu をインストール

現時点での さくらのVPS のデフォルトの OS は CentOS 5 だ。自分は
CentOSUbuntu も使った事はない。(ローカルマシンの Linux
ディストリビューションVine。しかも 4.2。PC が 1台しかない
からなあ。こんなスペックだし) なんか 世の中 Ubuntu らしいので
Ubuntu を入れる。

さくらのマニュアル

に従ってインストールする。

手順に従えば特に問題はないはず。インストール情報(ホスト名、
IPアドレス、ネットマスク、ゲートウェイ、ネームサーバなど)は
インストールが終わるまで覚えておく。

終了したら VPSコントロールパネル -> VPSホーム と進み、
仮想サーバ操作 の 起動ボタンを押す。

sshsshd の設定

とりあえず ssh でログイン。

$ su -

が出来ない? root になれない。*1
UbuntuTips/Others/RootSudo - Ubuntu Japanese Wiki
によると Ubuntu では root のパスワードはロックが掛かっている
らしい。sudo でやりなさいと。

VPSコントロールパネルからの Ubuntu インストール後の状態だと、
sudo の実行権が既に与えられているので 後で いろいろ
インストールしよう。

とりあえず ssh の設定。

$ ssh-keygen
$ cd ~/.ssh
$ touch authorized_keys

authorized_keys に突っ込んで exit。再び ssh でログイン。無事 認証された。

/etc/ssh/sshd_config を編集。

PermitRootLogin yes
#PasswordAuthentication yes

PermitRootLogin no
PasswordAuthentication no

と変更し

$ sudo /etc/init.d/ssh restart

root で ログイン不可に出来たし、たぶん パスワード認証も不可になったはず。


参考サイト

*1:"sudo su -" は "sudo -i" か?

EasyPG のインストール

http://sourceforge.jp/projects/epg/releases/ から ダウンロード、展開。

$ tar zxvf epg-0.0.16.tar.gz
$ cd epg-0.0.16
$ ./configure --prefix=$VMDIR_PATH/usr --with-emacs=emacs-22.3
$ make install

($VMDIR_PATH は インストール用のディレクトリ)

しかし

ls $VMDIR_PATH/usr/share/emacs/site-lisp/

すると $VMDIR_PATH/usr/share/emacs/site-lisp/epg ディレクトリが
出来て、この下にファイル郡が納められている。これではロード出来ない
ので Emacs の設定を追加。

;; myvm-dir は $VMDIR_PATH
(dolist (package (directory-files
		  (concat myvm-dir "/usr/share/emacs/site-lisp") t
		  "^\\w.*$"))
  (if (file-directory-p package)
      (add-to-list 'load-path package)
    )
  )

とし、

(require 'epa-setup)

を評価すると 読み込まれたようだ。

そして、GnuPG で暗号化されたファイルを開こうとすると、パスワードを
聞かれ、パスワードを入力すると無事復号化された。

デコードされたファイルの文字化けの修正

チケット #15259: Emacs23での文字コードのデコード - EasyPG - OSDN
によると、EUC-JP でエンコードされた大き目のファイルをデコードすると
文字化けするらしいので、パッチファイルをダウンロードし、

$ cp epa-file-decode-and-insert.patch $VMDIR_PATH/usr/share/emacs/site-lisp/epg/
$ cd $VMDIR_PATH/usr/share/emacs/site-lisp/epg/
$ patch < epa-file-decode-and-insert.patch 

とパッチを当てて epa-file.el を バイトコンパイル。修正されてるはず。