mount namespace

試してみたのだが、うまくいかなかった。

通常は共有されるマウントツリーの空間だが、これをプロセス固有のものにすることができるのがmount namespaceだ。

mount namespace適用の方法はunshare –mount commandとなる。これでcommandが新たにマウントしたファイルシステムは、そのプロセスと子孫プロセスに固有のものになり、上流には反映されないという。

というわけで試してみた。

$ sudo unshare zsh
$ sudo mount -o subvol=testvol /dev/sdd2 /mnt/3
}

p {[
"しかし、異なるmount namespaceをもっているプロセスからもそれが見えてしまう。違うファイルシステムツリーをもっている環境を作りたかったのだが、それ以前の問題だ。",
"btrfs
]}

h3 "VineSeed"
p {[
"Vine Projectのお手伝いをすることにして、Seed環境を構築しようとしたのだが、マニュアルに従ってVirtualBox上で構築するも、うまくいかなかった。",
"ベースシステムで手順どおりにするとPlymouthのあとブラックアウト、フルインストールからではXDMが起動し、ログインしてもただちにXDMに戻る。",
"問題はVineSeed MLにレポート済み"
]}

h3 "ncでchat & ZeroMQで拡張を目論見る"
p {[
"LAN内のコンピュータととりあえずメッセージをやりとりするのに良い手段…と考えたのだが、なかなか良い方法がなかった。",
"最も手間がないのは、ssh+ncを使う方法だろう。",
"2つのコンピュータは、まず片方でつぎのようにして、コネクションを対話的に待ち受ける。",
]}

sb(c:"shell") { "$ nc -l 55555" }

p {[
"そしてもう片方のクライアントはSSHでログインし、ncで接続する。"
]}

sb(c:"shell) { <<-END
$ ssh -x user@host
$ nc localhost 55555

ふたりなら十分に実用になるが、頻繁に書いていると画面がごちゃごちゃになり、また消すことができない(日本語の場合)のも難点。

こういうのを処理するのがlibChat ZMQ Framework(私の作品)なのだが、そのベースになるようなシンプルなサーバーを書いてみた。

のはいいのだが、MageiaでRuby ZeroMQバインディングがインストールできない。Pythonのほうは用意されているのだが、

Building native extensions. This could take a while…
ERROR: Error installing zmq:
ERROR: Failed to build gem native extension.

/usr/bin/ruby extconf.rb
checking for zmq.h… yes
checking for zmq_init() in -lzmq… yes
Cool, I found your zmq install…
creating Makefile

make “DESTDIR=”
gcc -I. -I/usr/include/x86_64-linux -I/usr/include/ruby/backward -I/usr/include -I. -DHAVE_ZMQ_H -fPIC -O2 -g -pipe -Wformat -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -fstack-protector –param=ssp-buffer-size=4 -fPIC -fPIC -o rbzmq.o -c rbzmq.c
rbzmq.c: 関数 ‘internal_select’ 内:
rbzmq.c:324:9: 警告: ‘rb_thread_blocking_region’ は廃止されました (宣言位置 /usr/include/ruby/intern.h:839) [-Wdeprecated-declarations]
rb_thread_blocking_region (zmq_poll_blocking, (void*)&poll_args, NULL, NULL);
^
rbzmq.c: 関数 ‘socket_getsockopt’ 内:
rbzmq.c:968:7: エラー: ‘ZMQ_RECOVERY_IVL_MSEC’ が宣言されていません (この関数内での最初の使用)
case ZMQ_RECOVERY_IVL_MSEC:
^
rbzmq.c:968:7: 備考: 未宣言の識別子は出現した各関数内で一回のみ報告されます
rbzmq.c:990:10: エラー: ‘ZMQ_HWM’ が宣言されていません (この関数内での最初の使用)
case ZMQ_HWM:
^
rbzmq.c:991:10: エラー: ‘ZMQ_SWAP’ が宣言されていません (この関数内での最初の使用)
case ZMQ_SWAP:
^
rbzmq.c:995:10: エラー: ‘ZMQ_MCAST_LOOP’ が宣言されていません (この関数内での最初の使用)
case ZMQ_MCAST_LOOP:
^
rbzmq.c: 関数 ‘socket_setsockopt’ 内:
rbzmq.c:1292:10: エラー: ‘ZMQ_HWM’ が宣言されていません (この関数内での最初の使用)
case ZMQ_HWM:
^
rbzmq.c:1293:10: エラー: ‘ZMQ_SWAP’ が宣言されていません (この関数内での最初の使用)
case ZMQ_SWAP:
^
rbzmq.c:1297:10: エラー: ‘ZMQ_MCAST_LOOP’ が宣言されていません (この関数内での最初の使用)
case ZMQ_MCAST_LOOP:
^
rbzmq.c:1315:10: エラー: ‘ZMQ_RECOVERY_IVL_MSEC’ が宣言されていません (この関数内での最初の使用)
case ZMQ_RECOVERY_IVL_MSEC:
^
rbzmq.c: 関数 ‘zmq_send_blocking’ 内:
rbzmq.c:1443:5: エラー: 関数 ‘zmq_send’ へ渡す引数が少なすぎます
send_args->rc = zmq_send(send_args->socket, send_args->msg, send_args->flags);
^
In file included from rbzmq.c:28:0:
/usr/include/zmq.h:349:16: 備考: ここで宣言されています
ZMQ_EXPORT int zmq_send (void *s, const void *buf, size_t len, int flags);
^
rbzmq.c: 関数 ‘socket_send’ 内:
rbzmq.c:1512:9: 警告: ‘rb_thread_blocking_region’ は廃止されました (宣言位置 /usr/include/ruby/intern.h:839) [-Wdeprecated-declarations]
rb_thread_blocking_region (zmq_send_blocking, (void*) &send_args, NULL, NULL);
^
rbzmq.c:1517:9: エラー: 関数 ‘zmq_send’ へ渡す引数が少なすぎます
rc = zmq_send (s, &msg, flags);
^
In file included from rbzmq.c:28:0:
/usr/include/zmq.h:349:16: 備考: ここで宣言されています
ZMQ_EXPORT int zmq_send (void *s, const void *buf, size_t len, int flags);
^
rbzmq.c: 関数 ‘zmq_recv_blocking’ 内:
rbzmq.c:1541:5: エラー: 関数 ‘zmq_recv’ へ渡す引数が少なすぎます
recv_args->rc = zmq_recv(recv_args->socket, recv_args->msg, recv_args->flags);
^
In file included from rbzmq.c:28:0:
/usr/include/zmq.h:350:16: 備考: ここで宣言されています
ZMQ_EXPORT int zmq_recv (void *s, void *buf, size_t len, int flags);
^
rbzmq.c: 関数 ‘socket_recv’ 内:
rbzmq.c:1596:9: 警告: ‘rb_thread_blocking_region’ は廃止されました (宣言位置 /usr/include/ruby/intern.h:839) [-Wdeprecated-declarations]
rb_thread_blocking_region (zmq_recv_blocking, (void*) &recv_args,
^
rbzmq.c:1602:9: エラー: 関数 ‘zmq_recv’ へ渡す引数が少なすぎます
rc = zmq_recv (s, &msg, flags);
^
In file included from rbzmq.c:28:0:
/usr/include/zmq.h:350:16: 備考: ここで宣言されています
ZMQ_EXPORT int zmq_recv (void *s, void *buf, size_t len, int flags);
^
In file included from /usr/include/ruby.h:33:0,
from rbzmq.c:22:
rbzmq.c: 関数 ‘Init_zmq’ 内:
rbzmq.c:1675:50: エラー: ‘ZMQ_HWM’ が宣言されていません (この関数内での最初の使用)
rb_define_const (zmq_module, “HWM”, INT2NUM (ZMQ_HWM));
^
rbzmq.c:1676:51: エラー: ‘ZMQ_SWAP’ が宣言されていません (この関数内での最初の使用)
rb_define_const (zmq_module, “SWAP”, INT2NUM (ZMQ_SWAP));
^
rbzmq.c:1683:57: エラー: ‘ZMQ_MCAST_LOOP’ が宣言されていません (この関数内での最初の使用)
rb_define_const (zmq_module, “MCAST_LOOP”, INT2NUM (ZMQ_MCAST_LOOP));
^
rbzmq.c:1698:64: エラー: ‘ZMQ_RECOVERY_IVL_MSEC’ が宣言されていません (この関数内での最初の使用)
rb_define_const (zmq_module, “RECOVERY_IVL_MSEC”, INT2NUM (ZMQ_RECOVERY_IVL_MSEC));
^
Makefile:224: recipe for target ‘rbzmq.o’ failed
make: *** [rbzmq.o] Error 1

Gem files will remain installed in /home/aki/.gem/ruby/gems/zmq-2.1.4 for inspection.
Results logged to /home/aki/.gem/ruby/gems/zmq-2.1.4/./gem_make.out

libChat::ZMQにしてもZeroMQを使っているので試せない。サーバー用にVMを用意するなどすればいいのだが、なかなか厄介な事態だ。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA