No Such Blog or Diary

«Prev || 1 | 2 | 3 |...| 57 | 58 | 59 | 60 | 61 || Next»

RMagick Compilation with Older GCC

CGI での画像操作に ImageMagick の Ruby interface である RMagick を使いたい.ということで RMagick をサーバ上でコンパイルしたのだが,少々問題発生.

RMagick は古い gcc2.95 とかでコンパイルすると -std=gnu99 オプションのせいでコンパイルがこける.なので,ext/RMagick/extconf.rb.in の

$CFLAGS = "-std=gnu99 -Wall -g @CFLAGS@"

$CFLAGS = "-Wall -g @CFLAGS@"

に書き換えてオプションをはずしてしまう.これでコンパイルできる.ついでに,インストール先を変えた場合パスを通しておかないと動かないので,たとえば

./configure --prefix=/home/ls-al/local/usr/

としたときには

ruby -I/home/ls-al/local/usr/lib/ruby/site_ruby/1.8/ -I/home/ls-al/local/usr/lib/ruby/site_ruby/1.8/i386-freebsd4 -e'require "RMagick"'

みたいに RMagick.rb, RMagick.so へのパスを渡す.一般的には次のような感じだと思う.

./configure --prefix=_PREFIX
ruby -I_PREFIX/lib/ruby/site_ruby/1.8/ -e'require "RMagick"' -I_PREFIX/lib/ruby/site_ruby/1.8/_ARCH

CentOS

Redhat Enterprise Linux の商用部分を省いた形のパッケージである CentOS なるものがあることを知った.http://www.centos.org/

なにやらアップデートとかも速いらしいので安定に使うにはいいものかもしれない.とりあえず暇になったら試してみよう.

pLaTeX で EUC

cvs に上げられた TeX ファイルをコンパイルしようと思ったら EUC コードだった.普段使っている pTeX のデフォルトは SJIS なので当然のことながらこける.

で,せっかくなのでEUCをコンパイルするオプションを学んでみた.

platex --kanji=euc --fmt=platex-euc paper

これだけでコンパイルできるのでそれなりに簡単なのだが,platex -e ぐらいに単純だともっといいなぁと思う今日この頃.

ちなみに,オプションつけるより

platex-euc paper

としたほうが短い.

Meadow で文字コード変更

何度やっても忘れるのでここに書いておこう.Meadow での文字コード変更は

C-x Ret f
M-x set-buffer-file-coding-system

だ.

rsync でバックアップ

サーバのバックアップに SCP で全ファイル転送とかやるのもいい加減あほらしいので ssh を通した rsync でローカルを同期させることにした(さすがに rsh は使いたくない).とりあえず使い方と使いそうなオプションを見てみると

Usage:
 rsync [OPTION]... SRC [SRC]... DEST
Options: -v, --verbose 詳細表示 -a, --archive アーカイブモード(-rlptgoD) -r, --recursive 再帰 -l, --links シンボリックリンクそのまま -p, --perms パーミッション保存 -o, --owner オーナー保存(root only) -g, --group グループ保存 -D, --devices デバイスファイル保存(root only) -t, --times タイムスタンプ保存 -u, --update アップデート(より新しいファイルの上書きはしない) -n, --dry-run 転送されるものの確認(実際の転送を行わない) --delete 送信元に無いファイルは送信先で削除 -z, --compress データを圧縮する -e, --rsh=COMMAND リモートのシェルコマンドの指定

といった感じである.一々コマンド全部打つのも面倒なので使いそうなオプションの組み合わせで makefile を用意.

.phony : put-dry get-dry put get \
         put-del-dry get-del-dry put-del get-del default
  
LOCAL=./alldata
REMOTE=ls-al@ls-al.jp:
OPTIONS=-avzu -e ssh --exclude='*~' --exclude='*.bak' --exclude='CVS'
  
default: get
put:
	rsync $(OPTIONS) $(LOCAL) $(REMOTE)
get:
	rsync $(OPTIONS) $(REMOTE) $(LOCAL)
put-dry:
	rsync $(OPTIONS) --dry-run $(LOCAL) $(REMOTE)
get-dry:
	rsync $(OPTIONS) --dry-run $(REMOTE) $(LOCAL)
put-del:
	rsync $(OPTIONS) --delete $(LOCAL) $(REMOTE)
get-del:
	rsync $(OPTIONS) --delete $(REMOTE) $(LOCAL)
put-del-dry:
	rsync $(OPTIONS) --dry-run --delete $(LOCAL) $(REMOTE)
get-del-dry:
	rsync $(OPTIONS) --dry-run --delete $(REMOTE) $(LOCAL)

get/put で削除なしの同期(REMOTE→LOCAL / LOCAL → REMOTE)で,-del が付くと削除あり,-dry が付くと実際の転送なしで確認となる.

これでバックアップが楽になったぞ(ネットワークの負荷的に)

システムコール

Linux には strace というシステムコールやシグナルをトレースするコマンドがある.ある種のシステムコールAPIを調べたいときにそれを使っていそうなプログラムに対してstrace をかましてAPIのあたりをつけるのが普通の使い方となる(はず?)

こんなものがなぜ話題に出たかというと,それは実際に使いたい状況になったからで,具体的にはグリチャレで空いているエフェメラルポートを知りたいけどそのためのAPI がわからず,とりあえずポート関係を一通り調べられる netstat に対してトレースをして探そうと考えたから.

で,実際に netstat に使ってみると何の反応も無い.使い方がおかしいのかと思い,他のプログラムに対してトレースしてみるとちゃんと結果が出てくる.結論: netstat は API 使ってない... そんなバカな.netstat が変なコマンドなのか truss の使い方がおかしいのか良くわからんが,結局開きポートを得る方法もわからずなぞは深まるばかりであった.マル.

«Prev || 1 | 2 | 3 |...| 57 | 58 | 59 | 60 | 61 || Next»
Search
Feeds

Page Top