さくらVPSにFedora15をインストールしたメモ
さくらVPSを借りたので色々いじっている.
デフォルトではCentOSがインストールされているが,yumでインストールできるパッケージのバージョンが古いのが難点.
Fedora EPEL,remi,RPMForgeのリポジトリを追加してみたがzsh,screenのバージョンが足らずにいつも使っている機能が使えない(この辺りは詳しくないので実は適切なリポジトリがあったのかもしれない).
ソースからビルドすればすむ話だが,特にCentOSにこだわりはないし毎回ビルドするのも面倒なのでFedoraをカスタムインストールすることにした.
OSのインストール自体は公式の解説の通りで問題なし.インストールの設定は「最低限」を選択した.
インストールが終わって再起動したら,社長ブログを参考にsshのポート変更などのセキュリティ対策や不要なサービスの停止を行っておく.
ポート番号を変更するとiptablesの設定も修正しておかないとsshで接続できなくなるので注意.
あとはこの辺りを参考にユーザの追加やsudoerの設定などを実施.
最低限の設定ができたところで,まずは作業環境を整える.
.zshrcや.screenrcをscpしようとしたところでscpがないと怒られるので入れておく.
さらにmanも入っていなかったので入れておく.
ここで思い立ってFedora13から15にアップグレードすることにする.
まずはツールをインストール.
$ sudo yum install preupgrade
CUIからのアップグレード作業は下記の通りでOK.
これが終わったらリブートしてアップグレード完了.簡単!
dicedで動的IPの更新時に127.0.1.1になる
グローバルIPの取得がうまくいっていなかったみたいだ.
IPアドレスの検出に外部スクリプトを使うように変更した.
dyndnsを使っているので外部スクリプトにはhttp://checkip.dyndns.org/を指定した.
$ sudo diced =-=-=- DiCE DynamicDNS Client -=-=-= Version 0.19 for Japanese Copyright(c) 2001 sarad :setup IPアドレスの検出方法を指定してください (0) 自動検出 (1) ローカルのネットワークアダプタから検出 (2) 外部のスクリプトから検出 <現在:0> (N)変更しない (P)戻る >2
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
ひとまずこれで少し様子見をしてみよう.
参考:http://www.aconus.com/~oyaji/ddns/ddns_linux.htm
Railsのインストール
ruby1.9とrailsは文字コード周りで色々はまりそうだが,チャレンジしてみる.
まずはgemをアップデートしておく.
$ ruby -v ruby 1.9.1p243 (2009-07-16 revision 24175) [i686-linux] $ gem -v 1.3.1 $ sudo gem update --system $ gem -v 1.3.5
続いてrails本体.
$ sudo gem install rails --include-dependencies $ rails -v Rails 2.3.4
apacheと連携させるためにpassengerもインストールしておく.
このあたりはRedmineのインストール記事が参考になる.
http://redmine.jp/tech_note/apache-passenger/
$ sudo gem install passenger
しかしgemのriとRDocのインストールにはなんでこんなに時間がかかるんだ?
passenger-install-apache2-moduleコマンドでapacheのモジュールをインストールしようとしたが
いくつかパッケージが足らないと怒られたのでapt-getしておく.
$ sudo apt-get install libopenssl-ruby apache2-prefork-dev libapr1-dev libaprutil1-dev
として再度passenger-install-apache2-moduleを実行するが,libopenssl-rubyがないとまだ怒られる.
これはrubyをソースからコンパイルしたのが原因か...?
ちょっと調べると,rubyのソースコードにopensslのコードも含まれていることが判明.
なんで自動的にインストールしてくれてなんだ...
そういえばrubyインストール時のmake checkでwebrickのテストが失敗していたのもこれが原因か.
ともかくopensslモジュールもビルドしてインストールしてからpassenger-install-apache2-moduleを実行.
# まずは間違えて入れたパッケージを削除しておく $ sudo apt-get remove libopenssl-ruby libruby1.9 $ cd ~/Install/ruby-1.9.1-p243/ext/openssl $ ruby extconf.rb && make && sudo make install $ sudo passenger-install-apache2-module
ようやくうまくいった.
後はapacheの設定をしておく.
/etc/apache2/mods-available/passenger.load
LoadModule passenger_module /usr/local/ruby19/lib/ruby/gems/1.9.1/gems/passenger-2.2.5/ext/apache2/mod_passenger.so
/etc/apache2/mods-available/passenger.conf
PassengerRoot /usr/local/ruby19/lib/ruby/gems/1.9.1/gems/passenger-2.2.5 PassengerRuby /usr/local/ruby19/bin/ruby
後はモジュールを有効化してapache再起動.
$ sudo a2enmod passenger $ sudo /etc/init.d/apache2 restart
これでRailsを使う準備は整った...かな.
ruby1.9向けのemacsテンプレート設定
ruby1.9ではソースコードファイルの先頭に文字コードのマジックコメントを挿入する必要がある.毎回手で書くのは面倒すぎるのでemacsのテンプレート設定をしておく.
まずは.emacsの設定.拡張子が"rb"のファイルを作成したときにテンプレートを適用するように指定する.
ついでにファイル保存のタイムスタンプも自動挿入するようにしておいた.
;;========================================= ;; テンプレートの保存先 (setq auto-insert-directory "~/.emacs.d/template/") (auto-insert-mode 1) ;; テンプレート挿入時に尋ねない ;; デフォルトは 'function (setq auto-insert-query nil) (setq auto-insert-alist (append '( ("\.rb$" . "rb") ) auto-insert-alist)) ;; 先頭から8行以内の Time-stamp: <> にタイムスタンプを自動挿入 (add-hook 'write-file-hooks 'time-stamp)
続いて,上で指定したテンプレートのファイル(~/.emacs.d/template/rb)を作成しておく.
# -*- coding: utf-8 -*- # Time-stamp: <>
これで拡張子が".rb"のファイル作成時に自動的にテンプレートが挿入される.
参考:http://www.bookshelf.jp/soft/meadow_37.html
pre記法で長い行が右側にはみ出す件
pre記法で書いたコードの1行が長いと右のサイドバーを突き抜けて見栄えが非常に悪かったので対策した.
といっても「管理」→「デザイン」→「詳細」のスタイルシートで長かったら横スクロールするようにしただけだが.
pre{ overflow:auto; }
ruby1.9ではsizeよりlengthの方が少し速いらしい
特に理由もなく両方使ってた気がするので,この際lengthに統一するようにしよう.
http://d.hatena.ne.jp/takkaw/20090815/p1
mp3タグ情報の抽出,更新 ruby-mp3info
mp3のID3タグの情報を一括して処理したくなったのでrubyのライブラリを探した.
最初は id3lib-ruby を使おうかと思ったが,gem のインストールで失敗してダメだった.
$ sudo apt-get install libid3-3.8.3-dev $ sudo gem install id3lib-ruby Building native extensions. This could take a while... ERROR: Error installing id3lib-ruby: ERROR: Failed to build gem native extension. /usr/local/ruby19/bin/ruby extconf.rb install id3lib-ruby checking for main() in -lstdc++... yes checking for main() in -lz... yes checking for id3.h... yes checking for ID3Tag_New() in -lid3... yes creating Makefile make g++ -I. -I/usr/local/ruby19/include/ruby-1.9.1/i686-linux -I/usr/local/ruby19/include/ruby-1.9.1/ruby/backward -I/usr/local/ruby19/include/ruby-1.9. 1 -I. -DHAVE_ID3_H -D_FILE_OFFSET_BITS=64 -fPIC -O2 -g -Wall -Wno-parentheses -o id3lib_api_wrap.o -c id3lib_api_wrap.cxx id3lib_api_wrap.cxx: In function ‘size_t ID3_Field_set_binary(ID3_Field*, VALUE)’: id3lib_api_wrap.cxx:1837: error: ‘struct RString’ has no member named ‘ptr’ id3lib_api_wrap.cxx:1838: error: ‘struct RString’ has no member named ‘len’ id3lib_api_wrap.cxx: In function ‘size_t ID3_Field_set_unicode(ID3_Field*, VALUE)’: id3lib_api_wrap.cxx:1846: error: ‘struct RString’ has no member named ‘len’ id3lib_api_wrap.cxx:1853: error: ‘struct RString’ has no member named ‘ptr’ make: *** [id3lib_api_wrap.o] エラー 1 Gem files will remain installed in /usr/local/ruby19/lib/ruby/gems/1.9.1/gems/id3lib-ruby-0.5.0 for inspection. Results logged to /usr/local/ruby19/lib/ruby/gems/1.9.1/gems/id3lib-ruby-0.5.0/ext/gem_make.out
めんどくさそうなエラーが出たのでid3lib-rubyを使うのは断念.
同じようなライブラリに ruby-mp3info(http://ruby-mp3info.rubyforge.org/) があったのでこっちを採用.
$ sudo gem install ruby-mp3info
こっちは何のエラーもなくインストール完了.とりあえずタグの内容は以下のようにして読める.(ruby-1.9.1)
require 'mp3info' Mp3Info.open("filename.mp3") do |mp3| p mp3.tag #=> {"title"=>"hoge", "artist"=>"fuga", "comment"=>"foo"} p mp3.tag2.keys #=> ["TPE1", "TIT2", "COMM", "APIC"] end
アートワークの画像を抽出することも無事にできた.注意点は最初の1バイト目の"\000"を削ること.これをしないとファイルが破損状態になって読めなかった.
参考:http://rubyforge.org/forum/forum.php?thread_id=27204&forum_id=229
Mp3Info.open("filename.mp3") do |mp3| text_encoding, mime_type, picture_type, picture_data = mp3.tag2["APIC"].unpack("c Z* c a*") imgfile = "#{File.basename(file, ".*")}.#{mime_type.sub('image/','')}" File.open(imgfile, "w") {|f| f.print picture_data.sub(/^\000/, '') # 最初の1バイト目の\000を削除 } end