Today アクセスカウンター Yesterday アクセスカウンター

Inferno on Debian GNU/Linux

昨日と同様に,特に問題無くできた.

$ mkdir -p inferno/inferno.inst
$ cd inferno/inferno.inst/
$ wget http://www.vitanuova.com/dist/4e/20070202/inferno.tgz
$ wget http://www.vitanuova.com/dist/4e/20070202/src.tgz
$ wget http://www.vitanuova.com/dist/4e/20070202/utils.tgz
$ wget http://www.vitanuova.com/dist/4e/20070202/Linux.tgz
$ tar zxvpf inferno.tgz
$ tar zxvpf src.tgz
$ tar zxvpf utils.tgz
$ tar zxvpf Linux.tgz
$ ./install/Linux-386.sh /home/aloha/inferno # inferno_root は絶対パスで指定しないと駄目みたい
$ cp -a ~/inferno/usr/inferno/ ~/inferno/usr/aloha
$ ~/inferno/Linux/386/bin/emu -r ~/inferno -g 1024x768
; wm/wm

Windows に比べると,はるかに動作が軽快な気がする.そういえば,インストールも一瞬で終わった.

もちろん,iso img を落として mount してインストールスクリプトを動かしても OK.というか,Windows でも,同じようにして (Linux.tgz の代わりに,Nt.tgz を落とす) 全部解凍すれば,DAEMON Tools とか入れなくても大丈夫だったなぁ.

これだけでは何なので,Plan9日記 ■ Limboプログラミング を参考に,limbo で hello, world してみた.

infernolinuxscreenshotlimboprogramminghelloworld.png


ちなみに,acme は 3 ボタンマウスを多用するエディタです.保存は,Put を中ボタンでクリック,終了は Exit を中ボタンでクリックです.

shell で Insert 補完 (Plan 9 は,Insert で補完ができる) が効かない… あと,ブラウザからコピペができなかったから,全部手で打ったよ.

まだ勝手がわからないので,いろいろ辛すぎですな.まぁ,Plan9 に比べると,Inferno はまだ UNIX に近い気がする.ls/mkdir/rm/cat あたりも普通に使える.システムの構成がさっぱりわかないけど.

今気づいたんだけど,Edit っていう,普通のメモ帳みたいなエディタも付いてるみたいだ.acme よりはとっつきやすそう.limbo モードとかも付いてるみたい.

Inferno on Windows XP

Inferno をインストールしてみた.Limbo にも興味があったし.

Plan9日記 より

2007-02-01 ■ Inferno on Plan9

Infernoは,Plan9の兄弟のようなOSだけど,これまた一風変わったOSである.ネイティブマシン上で動くだけでなく,UNIXやWindowsなどのホストOS上でも動くのだ.Infernoのアプリケーションは,Limboと呼ばれる言語で記述され,コンパイルしたバイトコードをDisと呼ばれる仮想マシン上で実行する.Plan9ユーザにとっては,charonというWebブラウザが動くのもうれしい.

2007-02-04 ■ Limboプログラミング

Infernoで使われているLimboって,どんなプログラミング言語だろう.

Infernoはセットトップブックなど,ネットワークでつながれた情報家電をターゲットにしているので,その手の割と非力な計算機による分散システム上で使われることを想定している.そこで,Limboは,ハードウェアのメモリ保護機構の支援がなくても,安全に拡張できることを考えた言語らしい.

つまり,Java だの .NET だの… 仮想マシンなぞなまっちょろいぞ ! 貧弱 ! 貧弱ゥ !!
超軽い OS をありとあらゆる環境に移植すればよかろうなのだーーーーーーーーッ !

という,bell lab らしい大胆な未来志向の夢溢れる分散 OS なのである.世界は Inferno で一つになる ! 裁きの日は近い.外山恒一に悪意の一票を !!

もし,Inferno が流行ったら… MS はビビる.… 私もビビる.

とかいう話はどうでもいい.

インストールも,腰が抜けるほど簡単.まぁ,Windows って OS は,CD イメージをマウントすることもできないので,そこだけがちと面倒なんだけど.

とりあえず,本家からインストール CD イメージ (ノンブータブル) を持ってくる.

spacer Inferno Fourth Edition: download and installation

つぎに,ここらへんを参考にしつつ DAEMON Tools をインストール.
@IT 仮想CD-ROMイメージをマウントする(DAEMON Tools編)
いったん再起動が必要になりますので,Suck OS と 10 回唱えつつ気長に待ちましょう.

外山恒一氏政見放送・テキスト起こし

プログラマ諸君!私が外山恒一である!
諸君!この OS は最悪だ!
Plan9 だとか何とか Inferno だとか、私はそんなことには一切興味がない!

あれこれ改革して問題が解決するような、もはやそんな甘っちょろい段階にはない!
こんな OS はもう見捨てるしかないんだ、こんな Windows はもう滅ぼせ!

私には、建設的な提案なんか一つもない!
今はただ、スクラップ&スクラップ、全てをぶち壊すことだ!

諸君!私は諸君を軽蔑している!
この下らない OS を!そのシステムを!
支えてきたのは諸君に他ならないからだ!
正確に言えば、諸君の中の多数派は、私の敵だ!

私は、諸君の中の少数派に呼びかけている!
少数派の諸君!今こそ団結し、立ち上がらなければならない!
奴ら多数派はやりたい放題だ!
我々少数派が、いよいよもって生きにくい
世の中が作られようとしている!

少数派の諸君! Inferno で何かが変わると思ったら大間違いだ!
所詮 Plan9 なんか、bell lab のお祭に過ぎない!
我々少数派にとって OS の研究ほど馬鹿馬鹿しいものはない!
多数決で決めれば、多数派が勝つに決まってるじゃないか!

ダウンロードしたイメージ (cdinstall.iso.tar) を解答して,デスクトップバーの右下の DAEMON Tools のアイコンをクリック,E ドライブを選択右クリック,cdinstall.iso を選択してマウントしてください.

あとは,E:\install\setup.exe をダブルクリックして,インストール先を指定するだけ.けっこう時間がかかるので,YouTube でも見て気長に待ちましょう.
install.png

なんかエラーがでてるけど… 大丈夫かね.

あとはテキトーにコマンドプロンプト開いて

C:\Documents and Settings\aloha>C:\Inferno\Nt\386\bin\emu.exe -rC:\Inferno
; wm/wm

とか打つと,Inferno のプロンプトが動きます.ちなみに 「;」 がプロンプト.終了は exit みたい.

そして,wm/wm で,普通にウィンドウが開きます.
infernoscreenshot.png


キーボードもマウスも使えるし,もちろんウェブも見れます.

infernocharon.png

Plan9 はデフォルトが多言語 OS (そもそも UTF-8 は Plan9 研究から生まれた) なので,普通に日本語も表示されてますね.

# いや,勝手に Windows のフォントとかを使うように何か設定済みなのかもしれないけど.

という感じで,Inferno は,ホスト OS の環境そのままで,ドライバなどを利用しつつ楽勝で Plan9 的環境が手に入るという大変良いものです.

う〜ん,もっと画面が大きくならないのかな ? たぶんできると思うけど.

acme の操作とかまだよーわからん.今日のところは install だけで,limbo プログラミングとかはまた後で.続く (かもしれない)



起動時に,

C:\Documents and Settings\aloha>C:\Inferno\Nt\386\bin\emu.exe -rC:\Inferno -g1024x768

とか,指定するだけで OK らしい.

ちなみに,終了したいときは,shell を開いて shutdown -h と打ち込めば OK

あと,log になにやらエラーメッセージが出ているのが気になったので,C:\Inferno\usr 以下に自分の Windows のユーザ名 (例えば aloha) というフォルダを作って,C:\Inferno\usr\inferno 以下を丸ごとコピー (inferno ユーザのをコピーして,リネームした) しておくと,とりあえず警告は出なくなる.

infernoscreenshot1024x768.png


それにしても,軽い.感覚的には,Firefox 立ち上げてるのとほとんど変わらない.

これなら,普通にマルチプラットフォーム共通のプログラミング環境としても使えそうだ.Plan9 は,UNIX の伝統をばっさり切り捨ててるから,癖が強すぎるけど (ちなみに,Plan9/limbo は,Unix/C を作った人たちによる直系の子孫)

本当にプリプロセッサでアセンブラ書いてるとは

以前書いたブログの記事に対する反応で,このような興味深い疑問が提示されていたのですが.

天泣記 2007-03-12

#define MOV_to_EAX(n7,n6,n5,n4,n3,n2,n1,n0) "\xb8" BYTE(n1,n0) BYTE(n3,n2) BYTE(n5,n4) BYTE(n7,n6)
#define RET "\xc3"

#define BYTE(hi,lo) BYTEX(hi,lo)
#define BYTEX(hi,lo) BYTE_##hi##lo
#define BYTE_00 "\x00"
...

こんなかんじでプリプロセッサでアセンブラを作るとしたら、どこまでできるだろう?

トークン連結を使うとプリプロセッサ内で表引きによりビット演算が実現できそうだから、それなりなところまでいくような気がするのだが。

まさか,ガチでプリプロセッサでアセンブラを組んでいるとは… Plan9 は凄すぎる.

Plan9日記 2007-03-22 ■[9fans] リアルモード用アセンブラ

以前,ブート部分がどうなっているのか気になったので,ソースコードを眺めてみたら,アセンブリが全部プリプロセッサのマクロで書かれていて驚いた.というのも,Plan9のアセンブラはリアルモード,16ビットのコードを吐けないからだ.

http://plan9.bell-labs.com/sources/plan9/sys/src/boot/pc/x16.h

ホントだ !!

よくわからんけど,*.s ファイルの中は,みんなこれで書かれている感じだ…

例えば,MBR (Master Boot Record) を読み込むっぽい,_start とか,いかにも重要げな識別子が定義されている

http://plan9.bell-labs.com/sources/plan9/sys/src/boot/pc/mbr.s

とか.まぁ,今時は GRUB か何かで起動される方が多いのだろうけど.

ふーむ.こうやって BIOS (Basic Input Output System) とか触ってんのかねぇ.いろいろ感動する.Lions 本も真面目に読んでないような人間なので,おなじみのマジックナンバー 0000:7C00 があるなー,程度しかわからないんだけど.



/*
* Start: loaded at 0000:7C00, relocate to 0000:0600.
* Boot drive is in rDL.
*/
TEXT _start(SB), $0
CLI
CLR(rAX)
MTSR(rAX, rSS) /* 0000 -> rSS */
LWI((0x7C00-Xtotal), rSP) /* 7Bxx -> rSP */
MW(rSP, rBP) /* set the indexed-data pointer */

MTSR(rAX, rDS) /* 0000 -> rDS, source segment */
LWI(0x7C00, rSI) /* 7C00 -> rSI, source offset */
MTSR(rAX, rES) /* 0000 -> rES, destination segment */
LWI(0x600, rDI) /* 0600 -> rDI, destination offset */
LWI(0x100, rCX) /* 0100 -> rCX, loop count (words) */

CLD
REP; MOVSL /* MOV DS:[(E)SI] -> ES:[(E)DI] */

FARJUMP16(0x0000, _start0600(SB))



後半の,エラーメッセージの無理やりさが,なんとも味わい深い.


/* "Invalid MBR" */
TEXT invalidMBR(SB), $0
BYTE $'I'; BYTE $'n'; BYTE $'v'; BYTE $'a';
BYTE $'l'; BYTE $'i'; BYTE $'d'; BYTE $' ';
BYTE $'M'; BYTE $'B'; BYTE $'R';
BYTE $'\z';


ふむ… 後で読む (かも)

ブートストラップローダの詳細
Linux2.4カーネル開始まで
ブートコードの解析はBochsを使え

未だに,UNIX V6 のブートコードさえもちゃんと読んでないんだよね.昔のコードだから,剰余取るのさえ凝ったアセンブリの hack が使われていたりするんだもん.

余裕があったら,30 日 OS 本とかも,ぜひとも一度読んで遊んでおきたいところなんだけどねぇ.OS までは,さすがに.

ftpfs : Plan9 の ftp クライアント

一応 ftp で ThinkPad から Debian に入れるようになった.

やり方は,前回書いたシェルスクリプト

## ftp通信用モジュールのロード(FTPの通過および応答を許可)
/sbin/iptables -t filter -A FORWARD -i eth0 -p tcp --dport 21 -j ACCEPT
/sbin/iptables -t filter -A INPUT -i eth1 -p tcp --dport 21 -j ACCEPT
/sbin/modprobe ip_nat_ftp
/sbin/modprobe ip_conntrack_ftp

とかかいて,テキトーな ftpd を Debina にインストールして起動するだけ.

今回は,なぜか

Starting ftp server: proftpd - IPv6 getaddrinfo 'localhost.localdomain' error: Name or service not known

とかエラーメッセージが出て,proftpd が使用できなかったので,vsftpd とかいうやつを使ってみた.(参考サイト : Redhat9.0 : vsftpdの設定 vsftpdを試してみる)

# apt-get install vsftpd

んで,デフォルトでは anonymous FTP サーバーとして動いているから,「530 This FTP server is anonymous only.」とか言われて蹴られてしまうので /etc/vsftpd.conf とかの

# Uncomment this to allow local users to log in.
# ローカルユーザがログインできるようにするなら yes にする
# local_enable=YES

のところのコメントアウトを外して,Debian のユーザがログインできるようにしておく (一応 hosts.allow とかも設定しておく.どうせ LAN 内限定だから, vsftpd : ALL : ALLOW とか超テキトーな設定だ).

あとは,/etc/init.d/vsftpd restart して,Plan9 から

term% ftpfs 192.168.0.1
220 (vsFTPd 2.0.5)
331 Please specify the password.
230 Login successful.
215 UNIX Type: L8
257 "/home/aloha"

とか,(とりあえず今のところは…) IP 直打ちで入る.

そうすると,/n/ftp 以下に,ホームディレクトリが「bind」される.


そしてこいつこそが Plan9 の真骨頂,every thing is file system です !

なんと,普通の FTP クライアントとは全く異なり,普通にマウントされたファイルシステムと同様にシェルが使えて, cd だの ls だの cat だの grep だのができる.ローカルとリモートの区別は全く付かない.素晴らしすぎる.

Plan9日記 2006-03-06 なんでもファイルサーバ

もしかして Debian でファイル作ると,即座に反映されたり,Plan9 でファイル作ったりもできるのかな ? と思ったけど,良く考えたら ftp の権限だからそんなことできるわけがない.

ということは,ということはだ.もし sshd かなんかを Debian で立ち上げておいて,Plan9 側からログインしたら,夢のような世界が広がるのではないだろうか (今は鍵の取得とかいろいろ面倒だからやらないけど,そのうち試してみよう.どうせ LAN 内限定だから,僕的には telnet で全然かまわないのだけど).

やばいよ分散 OS やばい.とにかくみんな,分散 OS のヤバさをもっと知るべきだと思います.

まぁ,確かに Plan9 は無いものの方が多い (ウェブブラウザすら無い) わけですが,逆に考えるんだ ! Linux や Windows にできることは,Plan9 ができる必要は無い.

とかく世の中,あれが無いこれが無いと否定面ばかり強調されがちですが,逆じゃないか ? とか,そんなことを思った秋の夜であります.

これはプログラミング言語とかでも同じなのかもしれない.Java や PHP (さらには COBOL/Fortran)にできることは,そいつらに任せておけば良い.RoR などのフレームワークが 「今の」 開発プロセスに適合するというのならば,バシバシ使って生産性を上げれば良い.民間にできることは民間に.そしてそいつらではできないこと,新しい時代を切り開くことこそが,新しい言語やパラダイムには求められているのである.

とかいっているような僕は,たぶん一生プロのプラグマティックプログラマーにはなれないなぁとか思った.

Linus の考え方は,技術論としては共感できるし,こういう姿勢は好きだけど,もし僕が運用している人だったらたまったもんではないなと.

ちょっと動かしてみたいだけなのに,バージョンごとに操作が変わったり互換性が無くなったりするから,マヌアルを読まないといけない.俺はいちいち説明書とか読む気にはなれない典型的日本人だし,常用するかしないかもわからないものに精通する暇もやる気もあんまり無いし,最悪,マニュアルすらあてにならない.

今回,いろんなところにはまって (いまだに,/etc/init.d/iptables が無い…) いろいろ心底うんざりした.

そういう意味では,全く変化しない,互換性完璧,というのも,価値としては重要なのではないかと.とかく変化や新しさが好まれる時代ですが.

だから僕は,中途半端に妥協と継ぎ剥ぎ的拡張を重ねてく言語が嫌いなんだな.C++/Java P 言語の一族とか.徹底した切捨てや割り切りがあって,もはや生きた化石みたいな言語,例えば C とか LISP みたいな言語が好きなのである (もちろん,研究は別よ).いろいろ矛盾しているけど.

# だから,たぶん僕は,いろんな体系や制限や拡張が乱立する型理論が絡む言語はあんまり好きじゃないんだよなぁ… 確かにいろいろ便利で役に立つかもしれないけど,型理論って,もはや理論のための理論になってしまっているというか… 当初の目的が失われている気がするよ. そもそも目的が無いのかもしれませんが.バグを数理的に撲滅する ? バグって何さ ? プログラムはいつも 100 % 正しい.バグは人間の心に存在する.結局は,プログラムのバグではなく,人間の心,仕様をデバッグしなければならない.そしてそれが本丸であり,仕様のデバッグの困難さに比べたら,プログラムの意味論的な不整合をハジくなんてのは枝葉に過ぎない.正しい仕様,正しい変換,正しいプログラム.この 3 つをシームレスに繋げる理論と枠組こそが重要だと思うのだけど… なんで世間はあさっての方向ばかり向いているのだろう.僕には理解できないよ (もちろん,王道は難しいからなんだけど.冒険なんてしないで,狭い世界で過去の成果をこねくり廻している方が楽だからね).とかいう話はどうでもいい.

(一つの記事に二つの相反する主張を入れる間違ったディベート管理人)

Plan9 のために DHCP サーバを立てる

Plan9 のネットワークの設定がイマイチわからないので,ネットにつながっている Debian/GNU Linux で DHCP サーバを立てて,そこからパケットフォワーディングしてインターネットに繋いでみるという作戦を取ることにした.

いや,こう書くと,明らかにオーバーキルなんですが,DHCP サーバを立てて家庭内 LAN を立ててしまえば,他にもいろいろ便利かなと.うちには光モデムがいっことデスクトップマシンとノート PC しかないので,LAN の構成はこんな感じにする予定.

the internet
|
B フレッツ VDSL modem(DHCP)
|
| eth1:global IP
Debian/GNU Linux Desktop PC (DHCP)
| eth0:private IP (192.168.0.1)
|
Plan9 ThinkPad A21e (private IP: 192.168.0.10-20)

とりあえず,この間インストール CD が欲しくて買ったのはいいけど,微妙に古くてけっこうアレだったなぁ… と後悔していた Debian GNU/Linuxでつくる骨太システム―安全・強靱なサーバの構築と管理 sarge対応版 を引っ張りだしてみたら,Debian はデフォルトで iptables に対応しているらしく,どうやら kernel をリビルドしなくてもパケットフォワードできるっぽい.あと,iptables の設定とかも少し載っていた.思わぬところで役にたって良かった.

ほんなら,とりあえず,dhcpd さえインストールしてしまえば良いんだな.まず,eth0 (うちの設定では,こっちに ThinkPad をつなぐことになる) に,固定ローカル IP を振っておこう.

# su -
# vim /etc/network/interfaces

んで,こんなのを書いておく.

auto eth1
iface eth1 inet static
address 192.168.0.1
netmask 255.255.255.0


(参考サイト : Debian Woody インストールメモ (be6))

んで,一回ネットワークを再起動して,ちゃんと eth0 が表示されるか確かめる.

# /etc/init.d/networking restart
# ifconfig
eth0 リンク方法:イーサーネット ハードウェアアドレス (一応 mac address は秘密のアッコちゃん)
inetアドレス:192.168.0.1 ブロードキャスト:192.168.0.255 マスク:255.255.255.0
...

ちゃんと表示されてるっぽいので,次に /etc/network/options を書き換える.

ip_forward=yes # noからyesに

dhcpd をインストールする.いろいろ注意されたので,言われた通りにする.

# apt-get install dhcpd
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了
注意、dhcpd の代わりに dhcp を選択します
以下のパッケージが新たにインストールされます:
dhcp
アップグレード: 0 個、新規インストール: 1 個、削除: 0 個、保留: 0 個。
110kB のアーカイブを取得する必要があります。
展開後に追加で 233kB のディスク容量が消費されます。
取得:1 http://ftp.jp.debian.org testing/main dhcp 2.0pl5-19.4 [110kB]
110kB を 0s で取得しました (122kB/s)
未選択パッケージ dhcp を選択しています。
(データベースを読み込んでいます ... 現在 54896 個のファイルとディレクトリがイン ストールされています。)
(.../dhcp_2.0pl5-19.4_i386.deb から) dhcp を展開しています...
dhcp (2.0pl5-19.4) を設定しています ...
Generating /etc/default/dhcp...

Please note that if you are installing the DHCP server for the first time you need to configure it first. Please stop (/etc/init.d/dhcp stop) the DHCP server daemon, edit /etc/dhcpd.conf to suit your needs
and particular configuration, and restart the DHCP server daemon (/etc/init.d/dhcp start).

You also need to edit /etc/default/dhcp to specify the interfaces dhcpd should listen to. By default it listens to eth0.

NOTE: dhcpd's messages are being sent to syslog. Look there for diagnostics messages.

Starting DHCP server: dhcpd failed to start - check syslog for diagnostics.
# /etc/init.d/dhcp stop
Stopping DHCP server: dhcp.
# /etc/dhcpd.conf

しかし,ここで dhcp.conf の設定でしばらく悩む… うちが契約している OCN では,固定 DNS がプライマリ 202.234.232.6,セカンダリ 221.113.139.250 で提供されているのだけど… これを dhcp.conf に書いても良いモノなのか ?

というのも (管理人はネットワークについてはド素人以下なのだが),これはモバイルやダイアルアップ接続用のやつなので,B フレッツなどでは,たぶん動的に DNS を取得するのが正しいはず.

… しかしまぁ,私はよくわかってないので,pppoeconf の時とかに固定 DNS を直に指定しているから,どのみちその二つしか使われてないようだ.

ふーむ,やっぱり.

DNSサーバのリレー

しかし,他の dhcp.conf の設定例とか見ていると,みんな DNS 直打ちのような ?

う〜ん,他の,OCN で dhcpd 使って家庭内 LAN 組んでいる人達は,いったいどうしているのだろう… ? みんながみんな,OCN みたいな巨大 AS 内で,みんながみんな高々二つの DNS を固定で指定したら,パンクしそうな気もするけど… ? 大丈夫なのかなぁ… まぁ,そもそも LINUX とか使っている人は極小数なので,全然問題無いのかもしれない.

# もし,ものすごく駄目なことをしていたらどうしよう… 教えて ! > 識者

というわけで,設定ファイル /etc/dhcpd.conf はこんな感じにしてみた.


option routers 192.168.0.1;
option domain-name "myhomelan";
option domain-name-servers 202.234.232.6, 221.113.139.250;

option subnet-mask 255.255.255.0;
default-lease-time 600;
max-lease-time 7200;

subnet 192.168.0.0 netmask 255.255.255.0 {
range 192.168.0.10 192.168.0.20;
}



# 余談 : 最初,セミコロンを忘れていて,dhcp が起動しなかった… 怒られたとおり /var/log/syslog とかを tail して見てデバッグした.

んで,適当に参考リンク先の sh スクリプトを書き換えて (eth0 を eth1 にしただけ)

#!/bin/sh
# -- start

IPTABLES=/sbin/iptables

# -- flush
$IPTABLES -F INPUT
$IPTABLES -F FORWARD
$IPTABLES -F OUTPUT

$IPTABLES -P INPUT ACCEPT
$IPTABLES -P FORWARD ACCEPT
$IPTABLES -P OUTPUT ACCEPT

# -- masquerade
$IPTABLES -A POSTROUTING -s 192.168.0.0/255.255.255.0 -o eth1 -j MASQUERADE

# -- log
$IPTABLES -A INPUT -i eth1 -m state --state INVALID,NEW -j LOG
$IPTABLES -A FORWARD -i eth1 -m state --state INVALID,NEW -j LOG

# -- drop
$IPTABLES -A INPUT -i eth1 -m state --state INVALID,NEW -j DROP
$IPTABLES -A FORWARD -i eth1 -m state --state INVALID,NEW -j DROP


/etc/init.d/iptables save active
# -- end

実行して,それを保存.

# chmod +x iptables.sh
# ./iptables.sh
iptables: No chain/target/match by that name
./iptables.sh: line 27: /etc/init.d/iptables: そのようなファイルやディレクトリはありません

ありゃ… 怒られた.というわけで,/etc/init.d/iptables を,骨太 Debian を参考にしつつ作ろう…

と思ったら,/usr/share/doc/iptables/ 以下に,examples/oldinitdscript.gz なんて存在しないぞ… orz

おまけに,なんかこの本怪しい.makedir って何だよ.mkdir だろ.

あと,iptables: No chain/target/match by that name とか…

[fol] iptablesの設定について

state モジュールを使いたかったら,kernel の再構築がやっぱり必要らしい.う〜ん.

と思ったら…

# ls /lib/modules/2.4.27-2-386/kernel/net/ipv4/netfilter/
arp_tables.o ipt_DSCP.o ipt_length.o
arpt_mangle.o ipt_ECN.o ipt_limit.o
arptable_filter.o ipt_LOG.o ipt_mac.o
ip_conntrack.o ipt_MARK.o ipt_mark.o
ip_conntrack_amanda.o ipt_MASQUERADE.o ipt_multiport.o
ip_conntrack_ftp.o ipt_MIRROR.o ipt_owner.o
ip_conntrack_irc.o ipt_REDIRECT.o ipt_pkttype.o
ip_conntrack_tftp.o ipt_REJECT.o ipt_recent.o
ip_nat_amanda.o ipt_TCPMSS.o ipt_state.o
ip_nat_ftp.o ipt_TOS.o ipt_tcpmss.o
ip_nat_irc.o ipt_ULOG.o ipt_tos.o
ip_nat_snmp_basic.o ipt_ah.o ipt_ttl.o
ip_nat_tftp.o ipt_conntrack.o ipt_unclean.o
ip_queue.o ipt_dscp.o iptable_filter.o
ip_tables.o ipt_ecn.o iptable_mangle.o
ipchains.o ipt_esp.o iptable_nat.o
ipfwadm.o ipt_helper.o

あきらかにデフォルト kernel には存在してるよなぁ.

なんか Debian の変化が激しいなぁ.

というわけで,手動で sh スクリプトで全て起動することにした.男は init.d なんかに頼っていてはいけない (嘘です.助けてくださーい (世界の中心で iptables を叫ぶ))

iptablesの起動および設定 も参考にしつつ,こう書き換えた.

#!/bin/sh
##モジュールをロードする
/sbin/modprobe iptable_nat
echo 1 > /proc/sys/net/ipv4/ip_forward

IPTABLES=/sbin/iptables

# -- flush
$IPTABLES -F INPUT
$IPTABLES -F FORWARD
$IPTABLES -F OUTPUT

$IPTABLES -P INPUT ACCEPT
$IPTABLES -P FORWARD ACCEPT
$IPTABLES -P OUTPUT ACCEPT

# -- masquerade
$IPTABLES -t nat -A POSTROUTING -s 192.168.0.0/255.255.255.0 -o eth1 -j MASQUERADE

# -- log
$IPTABLES -A INPUT -i eth1 -m state --state INVALID,NEW -j LOG
$IPTABLES -A FORWARD -i eth1 -m state --state INVALID,NEW -j LOG

# -- drop
$IPTABLES -A INPUT -i eth1 -m state --state INVALID,NEW -j DROP
$IPTABLES -A FORWARD -i eth1 -m state --state INVALID,NEW -j DROP

とりあえず,エラーは出なくなった.

# ちなみに,最近話題になっていたファイルを空にする技 :> file が,さっそく何度も役に立った :-)

う〜ん… しかし,うまくいかない.

dhcpd -f -d とかしてみると,DHCPDISCOVER DHCPOFFER とかでてて,ThinkPad を eth0 で捕まえて,IP を割り当てているところまでは確認できるんだけど…

んで,plan9 側で

term% cat /dev/sysname

とかすると,最初は空白なんだけど,

term% ip/ipconfig

をやると,debian 側の dhcpd が反応して,その後

term% cat /dev/sysname

すると,192.168.0.12 とか,ホスト名が割り振られているのが確認できる.

ここで,

term% /bin/ip/ping -n 2 204.278.31.2(ベル研) とか,
term% hget http://www.google.co.jp

とかすると,

hget: too many errors with no progress cs: can't translate address '/srv/dns' file does not exist

とかでる.

term& ndb/dns -r

とかテキトーにすると,上記のエラーは出なくなるけど,パケットは届かない.192.168.0.1 には届くけど (とりあえず,NIC の動作は確認できたね ♪).

なんか dns がおかしいっぽいけど… もしかして,domain-name-servers で指定してるのが違うのかな ?

それとも,もっと根本的なところなのかも.

あー,ping とか http とか,そもそも通ってないんじゃない ? アホだな,俺.

/sbin/iptables -t filter -A FORWARD -m state --state ESTABLISHE,RELATED -j ACCEPT

## pingの通過および応答を許可
/sbin/iptables -t filter -A FORWARD -i eth0 -p icmp -j ACCEPT
/sbin/iptables -t filter -A INPUT -i eth1 -p icmp -j ACCEPT

## DNS問い合わせの通過および応答を許可
/sbin/iptables -t filter -A FORWARD -i eth0 -p udp --dport 53 -j ACCEPT
/sbin/iptables -t filter -A INPUT -i eth1 -p udp --dport 53 -j ACCEPT

## wwwの通過および応答を許可
/sbin/iptables -t filter -A FORWARD -i eth0 -p tcp --dport 80 -j ACCEPT
/sbin/iptables -t filter -A INPUT -i eth1 -p tcp --dport 80 -j ACCEPT

でも,これを足しても駄目だ.もうわからんね.寝てないので眠い.レポートもまだ終ってないのに,何やってんだ…

(生活ペースが狂いすぎて不眠症管理人)

ちなみに,USB マウスは,とりあえず 9fat: して /n/9/plan9.ini に usbstart とか書いておけば使えるようだ.ちゃんと設定してないから,時々 I/O エラーとか起きるみたいだけど.

あと,本当にいまさらだけど,端末でプログラムが暴走したときとか,普通のシェルだと Ctrl + c とかで割り込みをかけて停止させるけど,Plan9 の場合は Delete キー (ちなみに補完も Tab じゃなくて Insert キー).

これがわかるまで苦労した…

Plan9日記 ■ [Tips] intrはCtrl-cではなくDEL

初心者が確実にハマる罠にまんまとはまってしまったようです.




もう 10 時だよ.ていうか,もう朝どころか,昼だよ.もう僕は死んだほうが良いな.もったいないから死なないけど,本当に世間のルールよすいません ☆

ていうか,そもそも固定 IP 割り付けで良かった罠.
ディストリごとに作法が違う罠.
微妙に人によってオプションとかの付け方や iptables の書き方が違う罠.
情報が軒並古い罠.
それ以前に Plan9 なんて使っている人がそもそもいない罠.
クライアントが 1 台しか無いから dhcpd の設定が間違っているのか plan9 の設定が足りないのかすらわからない罠.
接続ツールが無いとネットにさえ繋げないような厨が使っている時点で何もかも間違っている罠.
気が付くともう 9 月も半ばな罠.
もう金曜日じゃないか ! 曜日感覚が欠落している罠.
レポートを書かないと駄目なのに眠れなくてフラフラな罠.

かように,世の中には罠がいっぱいなのだ.
Linux は素晴らしい,Windows は素晴らしい.
みんな気を付けようぜ !

(罠に詳しい管理人)
プロフィール
  • Author:あろは (alohakun)
  • 京都のデバッガベンダーに勤めるアラサー会社員。

    本ブログの内容は,あくまでも個人的な感想や意見であり,会社の意見を代表するものでは一切ありません.

    連絡先 : alohakun ___at___ gmail.com
    mixi : http://mixi.jp/show_friend.pl?id=182927
    twitter : http://twitter.com/alohakun













    あわせて読みたい


    この日記のはてなブックマーク数


    スカウター : ホワット・ア・ワンダフル・ワールド


    Map
FC2カウンター
ブロとも申請フォーム

この人とブロともになる

最近のコメント
リンク
最近のトラックバック
人生の残り日数
日本人男性の平均寿命は 28700日.
RSSフィード
カテゴリー
  1. RSSリーダー