Linux コマンド集
ディストリビューションのバージョンを確認
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 11.04
Release: 11.04
Codename: natty
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 が混在してると 後々 混乱しそうなので削除する。
本家のインストール手順は
- http://0xcc.net/ruby-romkan/ruby-romkan-0.4.tar.gz
- http://0xcc.net/ruby-bsearch/ruby-bsearch-1.5.tar.gz
を取得、展開し、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 は起動しない。
さくらのVPS に Ubuntu をインストール
現時点での さくらのVPS のデフォルトの OS は CentOS 5 だ。自分は
CentOS も Ubuntu も使った事はない。(ローカルマシンの Linux の
ディストリビューションは Vine。しかも 4.2。PC が 1台しかない
からなあ。こんなスペックだし) なんか 世の中 Ubuntu らしいので
Ubuntu を入れる。
さくらのマニュアル
- http://support.sakura.ad.jp/support/vps/menu_osinstall.shtml
- http://support.sakura.ad.jp/support/vps/menu_oscustom_ubuntu.shtml
に従ってインストールする。
手順に従えば特に問題はないはず。インストール情報(ホスト名、
IPアドレス、ネットマスク、ゲートウェイ、ネームサーバなど)は
インストールが終わるまで覚えておく。
ssh、sshd の設定
とりあえず 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 でログイン。無事 認証された。
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