2011-12-09 [長年日記]
_ RubyEnterpriseをsrpmからrebuildしようとしたらspec間違ってるじゃん
※ _prefix 付けるの前提みたい!
Xen + REE の問題を解消するために自前 build
Ruby Enterprise を rebuild しようとしています。以下にあるような Xen + REE の問題を解消するためです。
- 検閲Tech: Xen DomUでRedmine + Phusion Passenger + Ruby Enterprise Edition
- 4gb seg fixup REE XEN - Ruby Enterprise Edition | Google グループ
方法はいくつかあるのですが、全部入りで準備が楽だろうということで
ruby enterprise の srpm を取ってきて rebuild する
ことにしました。で、できあがった rpm を install し直すことにすれば作業的にも楽じゃないかなと予想。
基本手順
で、手順は基本的に以下のようになります。*1
- https://packages.endpoint.com/rhel/5/ruby-enterprise-opt/SRPMS/ から srpm を取得
- ~/rpmbuild/{BUILD, RPMS/i386, SOURCES, SPEC} を作る
- rpmbuildree ユーザーを作る
- メッセージを抑止する環境変数をセットします
- rpmbuild -bb --rebuild --define 'dist #{SUFFIX}' 'srpm file'
rpmbuild は特定のディレクトリ構造を要求します。こんなの rpmbuild init みたいなコマンドで自動で作ってほしいです。rpmbuild は root 権限を使わずに済むように特定のユーザーの作成を推奨します。本気で推奨するなら root になって build を継続しないで STOP してほしいです。とにかく手作業はきらいです。
話が逸れました。
環境変数は以下のようにセットします。
export CFLAGS="-mno-tls-direct-seg-refs" export CXXFLAGS="-mno-tls-direct-seg-refs"
で、rpmbuild の --define で自分で用意したよーと目印を付けておきます。最終的にパッケージ名に反映されるので、公式に配布されているものと自分で build したものの区別を付けられます。会社名の略称とか付ければいいんじゃないですかね。
cf.
ところが spec が間違っている
上の手順でディレクトリやユーザー名の問題がなくてもやはりうまくいきません。答えは以下にあって、要するに spec ファイルが間違っています。
I need an rpm that includes libruby.so - Ruby Enterprise Edition | Google グループ
こんな感じで直せということですね。
これで今度は spec ファイルを指定して rpmbuild してやると ~/rpmbuild/RPMS 以下に指定のプラットフォームの rpm が生成されます。
もし次回以降がありそうならこの段階で
- ~/rpmbuild/SRPMS も用意
- rpmbuild を -ba に変更
してやればいいと思います。spec ファイルに直接環境変数を書くことはできないのかな? できるのならそういう spec を用意しておけばいいと思います!
[2012-01-06 追記] 実は _prefix がないだけ
あとで分かったけど上のやりかたで作った rpm は endpoint の rpm とは異なります。
rpmbuild -bb --rebuild --define 'dist XXX' --define '_prefix /usr/local' \ ruby-enterprise-xxx.srpm
ってやるのが正解みたい。
この _prefix /usr/local がないと rpmbuild 標準の /usr 以下にインストールされて、インストール済みの gem とかとイロイロ合わないのでまともに動きません。
実は入れ直さなきゃねと気づいたのは7月なんだよね…。すぐに取りかかりにくい状況が本当にダメだ。
*1 こういうところに手作業がいっぱいあるのが RHEL 系というか rpm 周りのきらいなところ。
2011-12-10 [長年日記]
_ LLでお手軽Webサーバ、そしてkanazawa.js v1.6.5のご紹介
ここ何年かずっと Web のフロントエンドの人にももっと Web サーバが手軽に使えるといろいろ捗るんじゃないかと思っている。なのでその紹介。
なお、分かっている人は読む必要ないし、とても冗長な記述になっています。
で、その前に、
kanazawa.js v1.6.5 に行きます
kanazawa.js v1.6.5 - もくもく会とたまにLT - : ATND
12/17(土) ITビジネスプラザ武蔵でボクと握手!
スケジュールに入ってないけど、このネタでデモります! デモらせろ!
なぜ Web サーバか
- いちいちサーバにアップしなくても手元で本番と同じパスでアクセスできる*1
- <a href="./index.html" とか書かなくても <a href="./" でよい*2
- ついでに LL で開発もできちゃうかも
Webサーバの選択肢
- Apache, nginx など本格的なもの
- 主に個人向けなシンプルで軽量なもの
- LLで書かれたもの
選択基準 - 面倒はイヤ
- コンパイルとか面倒
- 設定とか面倒
面倒はイヤなので
- 設定ファイル書かなきゃいけないのはボツ
あと個人的には
- 環境が変わるたびに調べ直すのは面倒
- Mac でも Linux でも Windows でも動いてほしい。説明もその方が楽。
ということで
3. LLで書かれたもの
だけを扱うことにします。
Windows には小さい Web サーバはたくさんある
ちょっと脱線。
実は Windows にはバイナリインストールできる軽量 Web サーバがたくさんある。KUROIGAMEN とか知らないし、マウスでポチポチするだけがいい、という場合はそれらの中から好きに選んでもらえばいいんだけど、これと同じものが Windows 以外では動かないとか動くけどコンパイルが必要で面倒くさいという場合が多い。こうなると Windows 以外の環境とノウハウを共有することが難しい。ここが自分の中では問題だと感じている。
例えば開発者が Windows でデザイナが Mac という環境の場合、どちらかのノウハウもお互いに教えることができず、効率が悪い。また個人で複数の OS を使うのは作り手としてはそれほど珍しい話ではない。そうなったときにもノウハウが共有できないと面倒が増える。
それに、一つくらい LL が使えるといろいろ世界が広がるよ。
※ 実はしばらくの間 Windows でも Mac でも mongoose ( 旧 shttpd ) を使えばノウハウも共有できるし立ち上げっぱなしでも邪魔にならないし、いいじゃんと思っていたんだけど、v3 になって Windows のタスクトレイに入るようになってからどうも Windows で挙動があやしいのでオススメしないことにした。
Python
長らく LL で手軽な Web サーバと言えば Python が有名だった。と思う。
python -m SimpleHTTPServer
と打てば
- カレントディレクトリを Document Root に
- port 8000
で Web サーバが立ち上がる。
http://localhost:8000/
を開くと python を起動したディレクトリの中身が一覧に出てくる。
インストール
Python は Windows ではインストーラで手軽に入るし、OSX なら最初から入っているので新たな作業は不要。
http://www.python.org/download/releases/
Ruby
Ruby も標準で WEBRick という Web サーバを持っているのだが、長いこと手軽に起動する方法がなかった。これが 1.9.2 になって改善した。
ruby -run -e httpd DIRCTORY
で ok. DIRECTORY を `.` とするとカレントディレクトリを Document Root として動作する。
ただし OSX や Linux などでは 80 番ポートで動かそうとして root 権限がないと怒られる。
sudo ruby -run -e httpd DIRCTORY
か
ruby -run -e httpd -- --port[=]3000 DIRCTORY
などとすると良い。代表的なのはこんな感じになる。
ruby -run -e httpd -- --port 3000 .
WEBRick サーバを自分でスタートするよりは手軽だけどまだ Python に比べるとちょっと気を使うし、面倒な感じはある。
cf. ruby -run -e httpd -- --port=3000 . - %!zt! <diary> (2010-12-02)
インストール
- Windows なら http://rubyinstaller.org/
- Mac の場合は
- コンパイルしたくない場合は実は JRuby が手軽じゃないか
- jruby --1.9 -run -e httpd -- --port 3000 でイケる
Perl
Perl は Perl 入れて cpan から好きなもん入れてください。以上。
PHP
フロントエンドの人といちばん仲の良さげな PHP. 実は PHP も 5.4 から build-in の Web サーバを持つらしい。でもまだそれが本当に手軽に手に入る環境はないので、これも割愛。
まとめ
やっぱ手軽さでは Python か。PHP 5.4 が来たら実は本命になる可能性もあるのかなぁなんてことを思ったりしている。.htaccess と php.ini から解放されるなら、だけど。
2011-12-22 [長年日記]
_ bundler時代のrailsのaliasの話
Twitterのログ掘り起こし。
- wtnabe 12月21日 9時29分
かつて alias r=rails するという話があったけど、rvmとかrbenv環境の今、どうするのが楽なんだろう。とりあえず alias b=bundle はやったけど。
- hasimo 12月21日 10時22分
aliase be='bundle exec'だよね。
- hsbt 12月22日 10時10
bundle exec すると alias が消えるのか…、be r で R が起動してしまう病気
- sakuro 12月22日 10時23分
@hsbt alias -g r=rails か。 (いずれにせよzsh仮定)
- hsbt 12月22日 10時26分
@sakuro -g で行けました!(何で外れてたんだろう…)
- wtnabe 12月22日 10時30分
うまくいった :-) 昨日の alias be='bundle exex' と合わせて be r s で rails server が立ち上がるようになった。なんかかっけぇ。
というわけで今は
which rails > /dev/null 2>&1 && alias -g r=rails
してます。rails gem をグローバルに入れずにすべて bundle install している場合はセットされないけど、まぁ仕方ないかな。