2008年12月19日金曜日

vserver + aufs その後

vserverのディレクトリをaufsで共有することで複数のvserverを立ててもディスクへの圧迫が小さいようにする.

まずテンプレートとなるvserverをつくっておく.centos で

> vserver template build -m yum --hostname xxx --interface ech0:xxx.xxx.xxx.xxx/24 -- -d centos5
で,これをcloneする.
> vserver newone build -m clone --hostname xxx --interface ech0:xxx.xxx.xxx.xxx/24 -- --source /vservers/template
これでできたnewoneができたわけだがここでできたディスクは使わないで消す. で,/tmp/newone に空のディレクトリを作ってこれをtemplateのディレクトリにかぶせてマウントする
mount -t aufs -o br:/tmp/newone:/vservers/template=ro none /etc/vservers/newone/vdir
とやる.で起動すると起動するには起動するが,
WARNING: '/etc/vservers/newone/vdir/bin/cat' does not end on newline
こんなエラーが無限にでる.結構はまってしまったが,/etc/vservers/newone に直接vdirをマウントしてしまったのが良くなかったらしい.configurationファイルを探すスクリプトが,findでvdirの中身を全部スキャンしていた.だから一度別のところにマウントしてからsymlinkを張ればよい.
mount -t aufs -o br:/tmp/newone:vservers/template=ro none /mnt/newone
ln -s /mnt/newone /etc/vserver/newone/vdir
さらに既存の/usrや/homeをマウントしたいaufsでマウントするベースディレクトリにbindでマウントすればいいかなと思い,
mount --bind /usr /tmp/newone/usr
とやってみたが,うまく行かない.どうもaufsでマウントするともとのブランチのbindマウントされている点は全部無視されてしまうようだ.aufsのマニュアルにはこれを使ってブランチをaufsの外からいじれなくするハックが書かれている.

でどうしたかというと,aufsでマウントしたところに,あとからbindしてみた.こちらはうまく行く.

mount --bind /usr /mnt/newone/usr
ただしこの場合 vserver のなかで/usrに書き込むと,大本の/usrに書き込まれてしまう.これはうまくない.が今のところ解決法が見当たらない.

2008年12月17日水曜日

Jam

C++ のライブラリ boost のビルドに使われているビルドツール http://en.wikipedia.org/wiki/Perforce_Jam http://freetype.sourceforge.net/jam/index.html - #includeを読んでdependencyを自動的に解析してくれるらしい.そりゃ便利だ. - オリジナルのJamと改良版のFT Jamというのがあるらしい.FTはFreeType. texのようなツールか? - kjamという別実装もあるようだ. - boost でつかわれているのは bjam というもので,また微妙に違うものらしい. - ここに簡単な言語のチュートリアルがある. http://www12.ocn.ne.jp/~dante98/bbv2-tutorial.html

dpkg

インストール済みパッケージ一覧
dpkg -l 
パッケージでインストールされたファイルの一覧
dpkg -L PACKAGE_NAME

2008年12月16日火曜日

vserver + aufs

vserver に stackable file system の一つであるaufsを組み合わせてみる.aufsはanother union file system の意.linuxにはunionfs というstackable file systemがありカーネルへのマージも予定されていたりするらしいのだが,aufsのほうが安定している,という話もあるようなので,いろいろ迷うところ.aufs は日本人の方が開発なさっているようだ. CentOS 5.2にvserverをいれた環境に入れてみる.aufsはsourceforgeでホストされているのだが,ダウンロードは用意されていなくて,cvsからチェックアウトするしか無い.cvsとはいってもstable版のみ置くようにしているということなので安心.その割には毎週月曜更新という頻度が逆にちょっと怖い.

google して参考になりそうなサイトを発見.ありがたいことだ.

  1. NFS と AUFS (Another Unionfs) を使って、ディスクレス (diskless) サーバ群からなる低コスト・高可用な大規模負荷分散システムを構築する
  2. CentOS で aufs (another unionfs) を使う
  3. OpenVZ でunionfsを使ってみた
インストール 結構手間取った.vserverだったから.まず,kernelのソースをインストールしておく.vserverをyumで入れていれば,そのまま
  yum install kernel-devel  
で入るはず. 次に参考リンクの1に従って,ディレクトリを掘り,cvsからチェックアウト.make -f local.mk で カーネルもジュールができるはずなんだけど,コンパイルエラー.vfs_xxxxの類いの関数が軒並み too few argument になっている.確かにincludeファイルの方は3引き数なのに,aufsのソースは2引数で呼ぼうとしていたり.googleでいろいろ調べてみると本来2引数なのに,vserverが3引数にしているらしい.

よくパッケージを見るとpatchディレクトリにvserver用のパッチがある.これをaufsのソースに当てればよさそうだ.aufsのメイリングリストにも,vserverと組み合わせてアクティブに使われている方がいるようだ.非常に心強い.

patch -p 0 < patch/vserver-2.6.22.19-vs2.2.0.7.patch 
ところが,パッチあて失敗.どうもパッチとソースコードのバージョンの対応がとれていないようだ.幸い,失敗している部分はちょっと行がずれているだけで,見ればわかるようなものだったので,ソースを手で修正.makeするとaufs.koができる.
> mkdir /lib/modules/2.6.22.19-vs2.3.0.34.1/kernel/fs/aufs
> cp aufs.ko /lib/modules/2.6.22.19-vs2.3.0.34.1/kernel/fs/aufs
> depmod -a
でモジュールのデプロイ完了.これでとりあえず動くようになった.すばらしい.

ヘルパスクリプトのインストール

マニュアルに従って.
> install -m 500 -p mount.aufs umount.aufs auplink aulchown auchk /sbin
> install -m 644 -p etc_default_aufs /etc/default/aufs
> more /etc/default/aufs 
> echo FLUSH=ALL > /etc/default/auplink

vserverとの組み合わせ

まだ組み合わせて使ってみていないのだけど,MLには時々変なことがおこるようなことが書いてある.どうも,vserverのディレクトリをaufsで構築し,vserverごとdestoryすると正規の手続きを踏まずにumountされることになっておかしなことになるらしい. 注意しないと.

2008年12月15日月曜日

vserver hashify

vserver には複数の仮想環境のファイルをハードリンクする機能がある.むかしはunifyと呼ばれる機能があった.多分これはファイル名をキーにして同じかどうかを判別していたのだと思われる.その後追加されたのがこのhashifyでこちらは,ファイルのハッシュ値を使って同一性を判別するようだ.

こちらのFAQを参照して,vserver2とvserver3をunifyしてみる.

まず準備として,hashifyが利用するディレクトリを作る.

> mkdir /etc/vservers/.defaults/apps/vunify/hash /vservers/.hash
> ln -s /vservers/.hash /etc/vservers/.defaults/apps/vunify/hash/root
ただし,私の環境では,1行目で作っているディレクトリはすでに存在した.

次に,各仮想サーバのほうにもディレクトリを作る.

> mkdir /etc/vservers/vserver2/apps/vunify
> mkdir /etc/vservers/vserver3/apps/vunify
で,仮想サーバを起動しておいて,順次hashifyする.動作中のをいじるのは怖いような気もするが,逆に停止中だとhashifyできない.
> vserver vserver2 hashify
Duplicate hash-dir entry 'root' found
> vserver vserver3 hashify
Duplicate hash-dir entry 'root' found

効果は?

duの値を比べてみる.
hashify 前
  vserver2: 260736 
  vserver3: 254308 
hashify 後
  vserver2: 257304 
  vserver3: 199300 
vserver3は大きく減っている.といっても20%程度だが.そもそもvserver3はvserver2をクローンしたものなのに,これだけしか減らないというのも不思議な話だ.

2008年12月14日日曜日

java class ファイルのバージョン

mac osであれば, file コマンドでわかる.javap -v でも分かるらしい.
$ file test.class
test.class: compiled Java class data, version 50.0
バージョン番号とJDKの対応は
48  - JDK 1.4
49  - JDK 1.5
50  - JDK 1.6
ということ.

2008年12月6日土曜日

Eclipse 起動せず

気がついたらMac上で,eclipseが起動しなくなっていた... 基本的に一度立てたら立てっぱなしなので,なにが原因なのかわからないのだが,今朝software updateして再起動している. いろいろ調べてみると,eclipseはmacの64bitのJVMでは動かないらしい.しかたなくdefaultのjavaを
/Utilities/Java/Java Preferences 
で32bitの1.5に切り替えたりもしてみたのだが,なんかうまく動かん.うーん面倒くさい. 結局 eclipse/Eclipse.app/Contents/Info.plist のなかに,それらしい部分があったので,コメントアウトされている1.5の設定をアンコメントして復旧.しかし面倒だなあ.

2008年11月28日金曜日

vserver で ネットワークインターフェイスを追加

/etc/vservers/XXXX/interfaces に 0 とか1とかいうディレクトリができている.XXXXはvserverの名前.

このディレクトリの中にdev, ip, prefixというファイルがありそれぞれ eth0 とか xxx.xxx.xxx.xxx とか 24 とかいう値が入っている.prefixはnetmaskのビット数.

新しいネットワークインターフェイスを追加するには,連番のディレクトリを掘って,適切に値をいれてやればよい.

> mkdir 3
> echo eth0.1173 > 3/dev
> echo XXX.XXX.XXX.XXX > 3/ip
> echo 24 > 3/prefix
で vserverを再起動する.
> vserver ce5 stop
> vserver ce5 start
これで新しいネットワークデバイスが中からみえるようになる.

openvz vps にネットワークインターフェイス追加

> vzctl set 101 --ipadd xxx.xxx.xxx.xxx --save
とかやるだけ.いくらでも追加できるようだ.また,maskやらgatewayは指定しない.どうもホストで中継しているような...

追加しただけだとうまく動かないみたい.

> vzctl exec 101 servce network restart
として中のネットワークをリスタートしたり,
> service network restart
としてホストのネットワークをリスタートしたりする必要があるかも.

追加は簡単だが削除の仕方がわからない...とおもってマニュアルを見ると

> vzctl set 101 --ipdel xxx.xxx.xxx.xxx
とやるようだ.ipadd はIP Addressの略かと思っていたのだが IP add だったのね.びっくり.

vlan

linux で tag vlanを作る.

/etc/sysconfig/network-scripts/eth0.xxx というファイルを作る.これはeth0に作る場合. xxxはvlanタグ. 中身は.

DEVICE=eth0.xxx
IPADDR=yyy.yyy.yyy.yyy
NETMASK=255.255.255.0
BOOTPROTO=none
ONBOOT=yes
で,vconfig コマンドで vlanを作る.
> vconfig add eth0 xxx
ifup する.
> ifup eth0.xxx
意外に簡単だ.

これだけだと再起動のときにまたvconfig / ifupしなくてはならないようだ. /etc/sysconfig/networkに

VLAN=yes
を追加したらだいじょうぶになった.

2008年11月26日水曜日

openvz on centos5

ここに書かれた通りに導入.簡単.パケットのフォワーディングをいじっているのはなんなんだろう.この手順で入るのはカーネルだけなので,必要なツール類をyumで入れる.
yum install vzctl vzquota vzpkg
テンプレートという概念がある.テンプレートもパッケージで入れるものらしい. 残念ながらcentos5のテンプレートのパッケージは無いようだ. どこかに転がっていないかなあ.
> yum list | grep vztmpl
vztmpl-centos-4.i386                     2.0-2                  openvz-utils    
vztmpl-fedora-7.i386                     1.1-1                  openvz-utils    
vztmpl-fedora-core-3.i386                2.0-2                  openvz-utils    
vztmpl-fedora-core-4.i386                2.0-2                  openvz-utils    
vztmpl-fedora-core-5.i386                2.0-2                  openvz-utils    
vztmpl-fedora-core-6.i386                1.2-1                  openvz-utils    
> yum install vztmp-* 
でとりあえずあるものを全部入れてみようと思ったのだが,fedora-7のパッケージがサインされていないとかで入らない.ので,centos-4だけいれてみよう.
> yum install vztmpl-centos-4
入れるとvzpkglsで見られるようになる.
> vzpkgls
centos-4-i386-minimal
centos-4-i386-default
> vzpkgcache
をやらないと実物をとってこないので,事前に実行する必要がある.

VPS ID

各VPS(Virtual private server) にはIDをふってやる必要がある.このIDはハードウェアごとにユニークであればよい.0はリアルノードを指す.1-100まではシステムリザーブということになっている.IDのレンジは32bitということだが,最後の1ビットがちゃんと使えるのかな.

101以降であればなんでもいいが,マイグレーションでもこのIDは変わらないので,マイグレーションするつもりがあるなら.その範囲でユニークになるようにするべき.あとはTCPアドレスをベースにしてもよい,とのこと.なるほど.

VPSの作成

> vzctl create 101 --ostemplate centos-4 --config vps.basic
で作る.最後のconfigでTCPバッファサイズやら,CPU利用割合などのパラメータを 設定している.

起動前に幾つかのパラメータを設定しなければならない.ホスト名,アドレス,DNSなど.

>  vzctl set 101 --hostname vzce4.hpcc.jp --save
>  vzctl set 101 --ipadd 192.50.74.41 --save
>  vzctl set 101 --nameserver 192.50.74.10 --save
で起動.
>  vzctl start 101
起動後に,sshdを起動.
>  vzctl exec 101 service sshd start
パスワードを設定.
>  vzctl set 101 --userpasswd root:XXXXXXX
で,sshすると無事入れた.
>  ssh 192.50.74.41

2008年11月24日月曜日

Mac で動画キャプチャ

http://alphaomega.software.free.fr/screenmovierecorder/Screen%20Movie%20Recorder.html
 screen movie recorder 

なんだか知らないが,ものすごくでかいファイルができる.1分半で1Gとか.

http://www.squared5.com/svideo/mpeg-streamclip-mac.html
  mac で簡単な編集.flashへの書き出しはうまくできなかった.
  screen movie recorder で撮ったものをmpegに変換することができる.

ffmpegx 
  これでmpegをflush化できるはずなのだが,なぜかできない.mpegは認識できている
  ようなのだが...実行すると0byteのファイルができる.うーん.

Riva FLV Encoder
  http://www.download.com/Riva-FLV-Encoder/3000-2140_4-10320097.html?part=dl-RivaFLVEn&subj=dl&tag=button&cdlPid=10381392

   Macで完結させたかったのだが,あきらめてwindowsソフト.なんとか変換できた.
   

結局,キャプチャして,mpegにして,flvにと3段階.これは面倒くさいなあ...

iShowU だと,キャプチャしたものを直接Rivaで変換できるようだ.
そもそもキャプチャの質が全然違って遥かにスムーズ.有料版を買うかな..

http://www.katch.ne.jp/~kakonacl/douga/mpgstclip/mpgstclip.html
この辺をみると,Macのフリーの画像編集,変換ソフトは地雷原という感じらしい.

2008年11月11日火曜日

wgetでCGIチェック

ファイルに出力されるとうざいので標準出力に
  -O - 
ログ出力を抑制
  -q
ファイルをポスト
  --post-file XXXX
wget -q -O - --post-file projects/jaxbtest/sampleXML/vcOp.xml http://localhost:8000/vc/cgi-bin/op.py

2008年11月8日土曜日

subclipse

svn のサーバマシンを再インストールしたら,eclipseからつかえなくなった.ふつうのsvnからは使えている.
org.tigris.subversion.javahl.ClientException 
とかいうのが出ている.googleで調べても直接該当する話はなかったが,どうもserverのバージョンがあがるとクライアントがついていけなくなることがあるようだったので, subclipseをバージョンアップ.ついでにeclipseもeuropa からganymedeにバージョンアップ.

したらなおった.めでたしめでたし.

2008年11月5日水曜日

sh での ファイル名の切り出し.

パスからファイル名だけ取り出す.
> X=/usr/local/bin/sh
> echo ${X##*/}
sh
ディレクトリを取り出す.
> echo ${X%/*}
/usr/local/bin

Condor MW おぼえがき

  • メッセージはPacking してから送出されるが,MWのレベルでは パッキングができるだけで,送出を制御できない. したがって,pipeline的な処理は期待できない.

    それだけならいいが,パッキングのバッファはオンメモリに確保 されるので,サイズは固定.むう.デフォルトは16Mbyteと小さい.

  • indp は便利だが,結構メッセージまわりの挙動が違っていまいち 当てにならない.
  • file 版を生成しないようにconfigure することができない. そもそもfile版も動きそうなものなのだが,build でエラー. 原因は,condor内のライブラリ同士が衝突しているように見える. 同じ関数が二つ別のライブラリに入っているとか.

2008年11月1日土曜日

hard linkとdu

hard linkしたときduで正確な値がでるのかどうかを確認.結論はでる.
mkdir /tmp/test1
mkdir /tmp/test2
dd if=/dev/null of=/tmp/test1/test0 count=10000
/tmp/test1/test0 にテスト用のファイルを作った.これをtest2からハードリンクする.
> cd /tmp/test2
> ln ../test1/test0
確認.確かに同じinodeになっている.
> ls -ial /tmp/test1
total 5024
1015814 drwxr-xr-x 2 root root    4096 Oct 24 13:35 .
1015809 drwxrwxrwt 9 root root    4096 Oct 24 13:35 ..
1015815 -rw-r--r-- 2 root root 5120000 Oct 24 13:35 test0
> ls -ial /tmp/test2
total 5024
1015817 drwxr-xr-x 2 root root    4096 Oct 24 13:35 .
1015809 drwxrwxrwt 9 root root    4096 Oct 24 13:35 ..
1015815 -rw-r--r-- 2 root root 5120000 Oct 24 13:35 test0
> cd /tmp
> du -s .
...
5016 test1
4 test2
たしかに,最初に作った test1のほうの容量だけが計上される.ちなみにtest1からの参照を削除するとちゃんとtest2のほうに計上される.
> rm test1/test0
> du -s .
...
4 test1
5016 test2

vserver clone

vserver では既存のゲストをcloneして他のゲストを作ることができる.yumとssh だけを追加したcentOSでclone の影響を見る.
> vserver vserver3 build -m clone --hostname vc5clone\\
  --interface eth0:192.168.84.131/24 -- --source /vservers/vserver2
時間を計ってみると38秒掛かっている.vmwareの中なのでディスク操作が遅いという可能性はある.

使用されるディスクの容量は,dfによると254Mbyte.あれ?ハードリンクかなにかで処理しているわけではないのか...

# du -s /etc/vservers/.defaults/vdirbase/*
202896 /etc/vservers/.defaults/vdirbase/vserver2
254316 /etc/vservers/.defaults/vdirbase/vserver3
duでディレクトリを見てみると,なんと クローンしたvserver3のほうが大きいという非常に意外なデータが..そもそもハードリンクした場合duでどう見えるのかという問題もあるがvserver3のほうがでかいというのもなぞ.

ls で共有されても良さそうなファイルのinode番号を表示させてみても,やっぱり別ノードだ.マニュアルには,リンクできる共有部分はリンクし,そうでないところはcopyするとなっているのだが,実際には完全にコピー?

[root@localhost ~]# ls -ail /etc/vservers/.defaults/vdirbase/vserver2/bin/bash 4755804 -rwxr-xr-x 1 root root 729292 May 25 06:04 /etc/vservers/.defaults/vdirbase/vserver2/bin/bash
[root@localhost ~]# ls -ail /etc/vservers/.defaults/vdirbase/vserver3/bin/bash 
4884402 -rwxr-xr-x 1 root root 729292 May 25 06:04 /etc/vservers/.defaults/vdirbase/vserver3/bin/bash

2008年10月31日金曜日

vserver on CentOS5

vserver をubuntu に入れようと思っていろいろ調べ, カーネルのコンパイル準備をして,さあ,パッチをあてるぞ, と思ったら.カーネルが新しすぎて入らない...

方針変更で,CentOS5を試す.こちらは簡単. http://linux-vserver.org/Installation_on_CentOS に書いてあるとおり,yumで行ける.

ちょっと引っかかったのは,

yum install kernel 
とやったときに,vserverのレポジトリの他に 別のカーネルがなぜか引っかかってきて,そちらの バージョンが現行版より古いという理由で,vserver用の カーネルのインストールも失敗すること.
yum install kernel-2.6.22.19-vs2.3.0.34.1
のように直接指定すればOK.

インストール

vserver はファイルシステムを構成しないと機能しない.vserver-utilにはこのためのツールがふくまれており,簡単にファイルシステムを構成することができるようになっている.このツールでは幾つかのディストリビューションがサポートされている.

http://linux-vserver.org/Building_Guest_Systems に書いてあるとおり

vserver vserver2 build -m yum --context 42 \
    --hostname vserver2.mydomain.com \
    --interface eth0:192.168.1.11/24 -- -d centos5
とかやる.yumのレポジトリは,ホストの設定を使うようだ.

インストールされたファイルシステムの実体は,

/etc/vservers/vserver2/vdir/ 
以下に展開される.
vserver vserver2 start
で起動.
vserver vserver2 enter
とやるとゲストにroot で入れる.ネットワークもちゃんとできている.ifconfigで確認できる.

この状態では,ssh もsshdも立たないので,yumで入れてやる必要がある.と思ったらyumも入っていない.こりゃ面倒.

実はホスト側でvyumというものを使うらしい.一度

vserver vserver2 stop
として,ゲストを落としてから
vyum vserver2 -- install yum
とやるとゲストの中にyumがインストールされる.あとは,パッケージの管理を中でやるという宣言をしてから,ゲストを再度立ち上げる.
vserver vserver2 pkgmgmt internalize
vserver vserver2 start
vserver vserver2 enter
これで中でyumが使えるのだが,/etc/resolv.confがないのでDNSルックアップが効かない.のでここでこのファイルを作ってやる必要がある.が,この時点ではゲストには vi もないので,
cat > /etc/resolv.conf 
とやって標準入力から食わせる.もしくは落ちているときに,ホスト側からファイルシステムを直接いじってもいいのだろう.

これで中でyumが使えるようになったので後は中で設定できる.

参考リンク: http://www.os-museum.com/linux/vserver/vserverfc5/vserverfc5.htm

2008年10月25日土曜日

linux での Java のタイムゾーン

ここ参照

/etc/localtime をいじってもだめで, /etc/sysconfig/clock のZONEを設定しないとだめ. ということで.面倒だなあ...

linux timezone

/etc/localtime を /usr/share/zoneinfo 以下のどれかにln -sするのが流儀. が,ubuntuもCentOSもcpしているようだ.

/etc/timezone というファイルもあるが,これはAsia/Tokyo というような/usr/share/zoneinfoからの相対パスに一致する情報が 収められている.どうも消去しても特に影響はないようだ.

TZ=JST-9
のように環境変数を書くことでオーバライドできる.

2008年9月29日月曜日

latex で大きい図があるときに改ページしないようにする方法

\renewcommand{\dblfloatpagefraction}{0.99} もしくは \renewcommand{\floatpagefraction}{0.99}

2008年9月20日土曜日

iShowU と Jing

マックで画面の動画キャプチャを撮るフリーウェアiShowUを使ってみる.バージョンは1.68 よくできていて,簡単に使える.が,シェアウェア20ドルなので,登録するまでは録画したものに大きな文字列が表示されてしまう.むむ.

ちなみに,ここに同様のものがまとまっている.

Jing

Jingというのを使ってみた.これまたよくできているのだが,これは基本的に録画したものをWebでシェアするためのモノらしく,書き出す形式がswfしか選べない.

Coprnicus

Copernicus というのもある.これは,movを吐く.が,なんかフレームレートが低い.4fpsしか出ない.ちょっと悲しい.しかも,出てくるmovが異常にでかい.iShowUではわずか400Kぐらいだったものが,こちらだと20Mになる.まあ,freeのものにケチをつけるのは申し訳ないが...さらに,google videoにアップロードしてみたら化けた.ちょっと残念.iShowUのほうは,大丈夫.

こうして見ると,iShowUに20ドル払うのが正解という気がするなあ...

2008年9月6日土曜日

BloggerでGoogle Analytics

Google Codeでは,設定画面にAnalyticsのトラッカーIDを入れるフィールドがあり,ここにIDを埋めるだけで,Analyticsが使えた.はてなでも同じように簡単だった. が,Bloggerの設定画面にはそのような項目が見当たらない.なぜだ...おなじGoogle のサービスのくせにうまく連携できなくていいのだろうか. 検索したらこんなページを見つけた. どうも,HTMLのテンプレートに,トラッキング用のコードを埋め込まなければいけないらしい.なんだかなあ...

2008年9月5日金曜日

ubuntu を vncでmacから使う.

CotVNC

まずは,vnc clientを選ぶ.いろいろ検索したが,事実上これしかfreeのものはない,という話のChicken of the VNCを使用.Mac Portsに入っているので,
sudo port install cotvnc
であっさり入った.インストール先はApplication/MacPorts以下.ちょっと戸惑った. これのフルスクリーンモードはかなり徹底していて,ほとんどすべてのキーを食ってしまう.出方がわからなくて,めちゃめちゃ戸惑ったが,検索してみたら control-option-command-` で出られた.まいったまいった.

ssh でトンネル

vncの認証はかなりお粗末だし,iptablesでssh 以外通さないようになっているので,sshトンネルでvncを使う.クライアント側のbashrc に以下を定義.
alias vnc="ssh -n -L 5901:localhost:5901 SERVER sleep 100d &"
sleep 100d は100日間寝る,という意味.まあ,その前に接続は切れるだろう. こうしておいて,ターミナルからvncと打てば,トンネルができる. cotvncでは,localhostの1番ディスプレイを見に行くように指定すれば良い.

vncserver の設定

いきなり起動しただけだと,twmも立たない.(デフォルトで入っていないからなんだが).なので,./vnc/xstartup を編集し, twmを呼んでいるところで,gnome-session でgnomeを起動. これでいいのかどうかわからないが,とりあえず動いているようだ.

ubuntuでiptables

ubuntuは大変良いのだけど,FedoraやらRHやらと違って,ファイアウォールなどがデフォルトでは入らない.自分で設置してみよう. iptable を呼び出すスクリプトを書く. このサイトを参考に.設定としては,とりあえずsshのみを通すことに.必要ならその都度あければいい.
#!/bin/sh

ssh_port='22'

# Flush & Reset
iptables -F
iptables -X

# Deafult Rule
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP

# loopback is OK
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

# The response of the packet which connection established is OK
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# ICMP(ping)
iptables -A INPUT -p icmp -j ACCEPT

# ssh
iptables -A INPUT -p tcp --dport $ssh_port -j ACCEPT    
自動でこれが実行されるように,/etc/rc3.d と /etc/rc5.dからリンクをはればいい.ほんとうは,start/stopを解釈するようにしなければいけないのだが,面倒なので省略.

2008年9月4日木曜日

MySQLの日本語設定

Djangoで遊ぼうと思ったら,なんかDBまわりにエラーがでて動かない. 原因は,MySQLの文字コードだった.Django自体はutf-8なので 大丈夫なのだが,MySQL のほうがlatinになっているため. http://d.hatena.ne.jp/lpm11/20070616/1181971116 によると
Schema を作る前なら /etc/my.cnf の [mysqld] セクションに default-character-set=utf8 を追加しておくなどすれば良い
. だそうだ.が,そもそもこのファイルがない. /usr/local/mysql/support-files/my-small.cnf を/etc/my.cnf にコピーしてこの内容を追記,MySQLを再起動してみる. で,いちど作ったデータベースの文字コードを変える方法があるのかどうか わからなかったので,データベースをdropして作り直し.
 
drop database django;
create database django;
これでなんとか動いた.

2008年9月3日水曜日

profile.d

RH系だと,システムワイドな設定は profile.dに書いておくというのが 一般的だが,deb系にはこれに相当するディレクトリがない.ので勝手にいれる. /etc/profile の上のほうに下記を追記
if [ -d /etc/profile.d ]; then
  for i in /etc/profile.d/*.sh; do
    if [ -r $i ]; then
      . $i
    fi
  done
  unset i
fi
で, あとは/etc/profile.d/*.sh をいろいろ書くと. cshのほうは最近とんと使わないので無視. たとえば,/etc/profile.d/globus.sh はこんなだ.
export GPT_LOCATION=/usr/local/gt4.2
export GLOBUS_LOCATION=/usr/local/gt4.2
. $GLOBUS_LOCATION/etc/globus-user-env.sh

2008年9月2日火曜日

GRAM2 設定.

/etc/services に下記を追記.
gsigatekeeper      2119/tcp                   # Globus Gatekeeper
/etc/xinetd.d/globus-gatekeeper を新しく作る. 内容は下記.
service gsigatekeeper
{
   socket_type  = stream
   protocol     = tcp
   wait         = no
   user         = root
   env          = LD_LIBRARY_PATH=/usr/local/gt4.2/lib
   server       = /usr/local/gt4.2/sbin/globus-gatekeeper
   server_args  = -conf /usr/local/gt4.2/etc/globus-gatekeeper.conf
   disable      = no
}

マップファイルに登録

/etc/grid-security/grid-mapfile に下記を登録.
"/O=Grid/OU=GlobusTest/OU=simpleCA-orange/CN=nakada" nakada

Globus Simple CA

Simple CA

を使って,ホスト証明書とユーザ証明書の設定. なんどやっても面倒だ.
sudo su globus
export GLOBUS_LOCATION=/usr/local/gt4.2/
/usr/local/gt4.2/setup/globus/setup-simple-ca 

GSIのセットアップ

export GLOBUS_LOCATION=/usr/local/gt4.2
sudo -E /usr/local/gt4.2/setup/globus_simple_ca_21f546b8_setup/setup-gsi -default
-E をつけないと,環境変数が引き継がれず,面倒なことになる. /etc/grid-security 以下にいろいろなものが配備される.

ホスト証明書の作成

  証明書リクエストの作成  
  sudo -E /usr/local/gt4.2/bin/grid-cert-request -host orange

  証明書をサインして配備
  sudo -E su globus   
  cd /tmp
  /usr/local/gt4.2/bin/grid-ca-sign -in /etc/grid-security/hostcert_request.pem  -out hostcert.pem 

  sudo mv /tmp/hostcert.pem /etc/grid-security/hostcert.pem
  sudo chown root:root /etc/grid-security/hostcert.pem

ユーザ証明書の作成

  証明書リクエスト作成
  /usr/local/gt4.2/bin/grid-cert-request

  サイン
  sudo -E su globus   
  cd /tmp
  /usr/local/gt4.2/bin/grid-ca-sign -in ~nakada/.globus/usercert_request.pem\
  -out usercert.pem 

  配備
  cp /tmp/usercert.pem ~/.globus/usercert.pem

gt4.2 を ubuntuにインストール

debianのパッケージがうまくインストールできなかったようなので,ソースから
sudo mkdir /usr/local/gt4.2
sudo chown globus:globus /usr/local/gt4.2

sudo su globus  - 以下globusユーザ

export GPT_LOCATION=/usr/local/gt4.2
export GLOBUS_LOCATION=/usr/local/gt4.2
export JAVA_HOME=/usr/java/jdk1.6.0_10/

cd /tmp
tar zxvf ~/Download/gt4.2.0-all-source-installer.tar.gz 
cd gt4.2.0-all-source-installer
./configure --prefix=/usr/local/gt4.2 --disable-system-openssl
make
make install

configure の --disable-system-openssl は,システムにインストールされているopensslを使用せずに,パッケージ内のopensslを使うというオプション. 本来これが無くても動くはずなのだが,これがないと,authentication に失敗したというエラーがでる.

ubuntuのホームディレクトリ内のうざい日本語名リンクを英語に変えるには

LANG=C xdg-user-dirs-gtk-update