最近、Wide character in null operation line xx
と言うのが出てamazonからうまく情報を引っ張ってこれないことが多かったので、ちょっと調べてみた。
コード変換関連であることはわかるのだが、なんだろう。
perl5.8.xになってからJcodeではなくEncodeというのが標準になっていたらしい(^^;
Jcodeで書いていたのを、そのままEncodeで書き直した。
それだけ。
参考にさせていただいたのはこちら。
http://www.bugbearr.jp/?Perl%2FUnicode
@IT: 仮想化技術の大本命「Xen」を使ってみよう 〜 インストール & Debian環境構築編 〜と
Xen Users' Manualを参考に、Debian Sarge上にxen-2.0.7-install-x86_32.tgzをインストールしてみた。
足かけ2日間(実働4時間程度)で何とか動いた。
#某師匠に色々言っている手前、自分自身でも時間を割いて、
#わずかずつでもテクニカルな取り組みも実施中よん。
本日、手元にUnix User 2005.2が届いた。
Book Reviewは別途書くとして、「よしだともこのルート訪問記」が100回を迎えたようだ。
おめでとうございます。
ただ、次回で最終回らしく、ちょっと寂しい。
さて、100回は京都大学大学院の立木秀樹助教授の研究室だった。
コンピュータだ、ネットワークだの話はあまりなかったのだが、非常に興味を引く内容があった。
どこかで見たような形のイラストがあった。それがメンガーのスポンジである。
これも馬鹿でかいので、見ない方がいいかも。
下の画像は相当でかいアニメーションGIFにリンクしてますので、ご注意を。

続きにも画像を置いていますが、小さめのものにしています。
続きも読む "Cubeを描く POVRAY編(その5)"もう一つ、animation。
重いので、見たくない人は続きを見ないで。
aviにもしてみた。
cube-anim-2.avi
その他、POVRAYで描いたもの。
ちょっとずついじりながら、イメージに近づけていった。
#試行錯誤も多いけど。
コマンドラインは
povray +Ipovtest-x.pov +Opovtest-x.jpg +W512 +H320 +V -D +X
以下、イメージデータが多いのでご注意。
結局、昔ちょっとだけいじったことがあるPOVRAYでも描いてみた。
#povrayの記法はすっかり忘れてました。
#昔作った.povファイルも見つからないし。
Persistence of Vision Raytracerを感謝しつつに参照させていただき、最初に作ったのがこれ。
続きも読む "Cubeを描く POVRAY編(その1)"いつも探してしまうperlでのファイル内文字列置換(その2)の続き?
よく考えたら(考えなくても(^^;)、複数行にマッチして、その行を特定のパターンに置き換えるだけなら、patchと言う強い武器があった。(ちょっと条件は付くが)
ここに、aaaa.txtと言うファイルがある。
<!--hogehoge--> <!--hogehoge-end-->この2つのタグの間に何かを挟みたいとする。
MLへの新着メールのrssでの情報提供(その4)につっこみが入った。
ヘッダがUTF-8なのに、エンコードはJISなので、文字化けが起きているのはわかっていたが、手元のsageだと、ヘッダにあわせてUTF-8で送ると逆に化けていた。
もう面倒なので(^^;、bodyにあわせてヘッダを変えた。
コードをいじったのは、
my $rss = XML::RSS->new(encoding => 'ISO-2022-JP');
#まぁ、いいかぁ(^^;
rssを生成するスクリプト。
ほぼ頂き物そのままで、順番をいじっただけに近い(^^;
まずはテンプレート
<HTML> [% ... %] <TITLE>[% title %]</TITLE> [% ... %] <li><em>Date</em>: [% doc %]</li> [% ... %]
perlスクリプトの方。
元の作者に敬意を表して、ttrss-multi.plと名付けた。
続きも読む "MLへの新着メールのrssでの情報提供(その4)"
rsyncとかtarでvオプションをつけずにどでかいファイルの操作を行っているときに、
今どこまで進んだのかわからなくて、いらいらすることがたまにある。
#よくあるかも。
screen内でvオプション付きで動かしたりすれば良いんだろうが
うっかり忘れたときに何をやっているか調べるのにstraceを使ったりする。
#邪道だろうなぁ。
いつまで経っても終わらないプロセスのPIDをpsなどで確認して、
strace -p PID
#ctrl-Cで終わろうね。
GV-1394TVからffmpegで直接mpeg2/4がとれないかなぁと試してみた。
hcube:/home/DV# ffmpeg -dv1394 dada.avi ffmpeg version 0.4.9-pre1, build 4718, Copyright (c) 2000-2004 Fabrice Bellard built on Sep 12 2004 09:27:55, gcc: 3.3.4 (Debian 1:3.3.4-11) Failed to initialize DV interface: Invalid argument Could not find video grab deviceうーん、なんじゃそれ。
ffmpeg-cvs-2004-07-12/libavformat/dv1394.cを見てみた。
/* Open and initialize DV1394 device */
video_device = ap->device;
if (!video_device)
video_device = "/dev/dv1394/0";
dv->fd = open(video_device, O_RDONLY);
if (dv->fd < 0) {
perror("Failed to open DV interface");
goto failed;
}
if (dv1394_reset(dv) < 0) {
perror("Failed to initialize DV interface");
goto failed;
}
openはうまくいっていて、その次が問題みたいだ。
dv1394_reset()を見てみると、
/*
* The trick here is to kludge around well known problem with kernel Ooopsing
* when you try to capture PAL on a device node configure for NTSC. That's
* why we have to configure the device node for PAL, and then read only NTSC
* amount of data.
*/
static int dv1394_reset(struct dv1394_data *dv)
{
struct dv1394_init init;
init.channel = dv->channel;
init.api_version = DV1394_API_VERSION;
init.n_frames = DV1394_RING_FRAMES;
init.format = DV1394_PAL;
if (ioctl(dv->fd, DV1394_INIT, &init) < 0)
return -1;
dv->avail = dv->done = 0;
return 0;
}
PALとして埋め込んでみるみたいだし、動いているのかなぁ(^^;。
UnixUser 2004.06の続きみたいなもの。
やっといじってみた。
「■第1特集 Linuxで多チャンネル同時録画」に載っていた
gv1394tv_ctrl_min.cは、sid環境下のlibraw1394-devとlibavc1394-devとの組み合わせでは
うまくコンパイルできなかった。
仕方なく、同雑誌付録CD-ROMのなかからlibraw1394_0.9.0.tar.gzとlibavc1394-0.4.1.tar.gzを作った上でやってみたところ、うまくできた。
そしてうまく動いた。作者に感謝。
できたバイナリをgv1394tv_ctrlにおいとこう。
いい加減なMakefileも、ついでに。
mtawsasin.pl 暫定公開していますが、その後ちょっとだけ手を入れています。
#小さな拡張と、細かなバグ取りだけです。
#まだ公開していません。
細かい変更するよりも、perl5の勉強兼ねてNet::Amazonを使ってさっくりと書き直すかなぁと考えています。
#やっぱりPerl5になっていろいろ拡張されたところにはついていけてないなぁ(^^;
Googleの方もNet-Googleを使えば、書ける人にはサクッと書けそうですね。
下記のようなものが出力できるMTのPluginを暫定公開します。
|
【題名】アライヴIV~地獄の交響曲DVD 【作者】キッスキッス 【制作】BMG JAPAN 【価格】¥ 7,350¥ 6,980¥ 1,800 【発売】2004-04-21 【ASIN】B0001M6IGC 【データ取得日】Fri Jan 1 18:51:19 2010 |
もうすぐ、prog/MTAwsAsin/に置きます。
小汚い部分があるので、腕に覚えがある方は、手直しして送って下さい。
追記:2004-05-16 21:20:40
|
【題名】Amazon Hacks 世界最大のショッピングサイト完全活用テクニック100選 【作者】ポール・ボシュ 【制作】オライリー・ジャパン 【価格】¥ 3,045¥ 3,045¥ 818¥ 3,045 【発売】2004-04-24 【ASIN】4873111811 【データ取得日】Sat Oct 13 21:19:02 2007 |
テストのため、
【booklog-biz】を
すべてpluginでのリンク貼りに書き直してみた。
#もともとのASINが間違っているものなども発見して、意味があったかな(^^;
#価格なんて表示するまいかとも思ったのだが、あればあるで判断基準になって良いな。
ソースをきれいに直してくれる人がいれば、こっそりお渡しします。
きれいになった後で公開しようかな(^^;
洋書の場合のテスト
<MTAwsAsin asin="0393041530">
|
【題名】Nexus: Small Worlds and the Groundbreaking Science of Networks 【作者】Mark Buchanan 【制作】W W Norton & Co Inc 【価格】¥ 4,788¥ 2,300 【発売】2002-07-09 【ASIN】0393041530 【データ取得日】Sat Oct 13 21:19:05 2007 |
DVDの場合のテスト
<MTAwsAsin asin="B0000C0FK4">
|
【題名】Abba Gold: Greatest Hits [DVD] [Import] 【作者】ABBA 【制作】Polydor 【価格】¥ 1,437¥ 1,349¥ 1,149 【発売】2003-09-09 【ASIN】B0000C0FK4 【データ取得日】Fri Jan 1 18:51:20 2010 |
CDの場合のテスト
<MTAwsAsin asin="B00003OTFK">
|
【題名】クイーン・グレイテスト・ヒッツ III?フレディ・マーキュリーに捧ぐ? 【作者】クイーンフレディ・マーキュリーエルトン・ジョン&クイーンクイーン&デヴィッド・ボウイフレディ・マーキュリー&モンセラート・カバリエジョージ・マイケル&クィーンブライアン・メイワイクレフ・ジーン 【制作】EMIミュージック・ジャパン 【価格】¥ 2,548¥ 1,980¥ 1¥ 2,980 【発売】1999-11-18 【ASIN】B00003OTFK 【データ取得日】Fri Jan 1 18:51:21 2010 |
作りかけのMT用のpluginのtestです。
bodyに書いているのは
<MTAwsAsin asin="4121001362">
の一行だけで、下のテーブルが出てくる作り。
|
【題名】発想法―創造性開発のために (中公新書 (136)) 【作者】川喜田 二郎 【制作】中央公論社 【価格】¥ 693¥ 693¥ 144¥ 693 【発売】1967-06 【ASIN】4121001362 【データ取得日】Sat Oct 13 21:19:07 2007 |
カバーイメージがないと、下記の様にまだきちんと動かない。
対策案はあるので、時間が出来たら。←超Ad hocに対応しました(^^;
|
|
【題名】心の底をのぞいたら (ちくま文庫) 【作者】なだ いなだ 【制作】筑摩書房 【価格】¥ 462¥ 462¥ 0¥ 462 【発売】1992-01 【ASIN】4480025952 【データ取得日】Sat Oct 13 21:19:07 2007 |
pluginを作ってみた。
と言っても、
mtmanual_programmatic.html
に書いているものそのものである。動くかな?
これ↓がpluginの出力
Uptime: 21:47:08 up 161 days, 20:42, 1 user, load average: 0.27, 0.14, 0.12
MTのエントリー(body)にMTのタグを記述しても通常は無視される。
MT-plugins.orgでproccess Tagpluginを発見したので、導入してみた。
例えばbodyに
<$MTVersion$>
と書くと、現在の私のMTのバージョンに変更されるはずである。
ここに書いてます→「4.38」
なんでこんなことをやっているかというと、
Amazon Web Service(AWS) を Movable Typeで使う方法。に書かれていることと、ほぼ同じようなことをしようと思ってである。
ただ、MTAmazonは機能が豊富すぎて単なるリンクを貼るにはかえって面倒なので、
ねぎ師匠のHyperNikkiSystem 用 ISBN タグ拡張リリースと同じことが出来れば良いなと。
1. はじめに
最近ではLinuxと言う言葉をご覧になった方は多いと思います。Linuxは日本語では「リナックス」とか「リヌクス」などと発音されることが多いですが、その実体はコンピュータのハードウエアの動作を司るオペレーティングシステム(以下OSと略します)の中核をなすカーネル(日本語で言えばまさに「核」)です。
続きも読む "Linuxのすすめ 〜 オープンソースソフトウエアの持つ意味 〜"
http://his.luky.org/ftp/pub/mirrors/
特にご愛顧頂いておりますlinux関連のweb/ftpのミラーサービスを継続してご提供いたします。httpでもアクセスできます。
Julius-users ML
lc99で話題になったLinuxなどで動作するフリーの高性能音声認識エンジンJuliusに関して議論するメーリングリストです。
のむら@ソニーさん作のPanasonic kxl-810 CD-ROM patch
うちでは安定して動いています。のむらさんありがとう(^^)
Linux usersのための新着情報ML
毎日3回、ring servers, ftp.rpmlinux.com,Linux新着情報ftpサイトなどでミラーしている各種Linux関連ソフトウエアのアップデート情報を配信するMLです。
Linux関連ドキュメント検索のフィードバック結果
現在は手動更新のため、ちょっと古いです(^^;。見せ方などのご意見募集中。
pppでのプロバイダ接続情報
LinuxからpppでISPに接続しているのであれば、設定情報を教えてください。
現在集まっているプロバイダの接続情報はppp-setting.eucでご覧いただけます。情報のご提供者に感謝m(_|_)m
OpenBlockS Usersの部屋
ちっちゃなPowerPCベースのLinux boxであるOpenBlockSの情報交換の場所です。
「幸せな家庭内LANへのメモ 〜 ADSL, rp-pppoe, ipchains, ipmasqadm, Dynamic DNS 〜」
自宅で行っているADSL関連の設定情報です
ちょっとしたスクリプトです。自分で忘れないように置いときます。
rmdupfile.sh dir_name
あるディレクトリ(上記のdir_name)配下の重複しているファイルを削除するためのrmコマンドを表示するスクリプト。
そのままパイプでshellにつなげば実行できるが、一度表示してから確認してやる方が良いときもある。
同一かどうかはmd5sumの値を比較して判断している。
rmdupmail.sh FolderName
~/Mail/配下のMH形式の特定のフォルダ(上記のFolderName)内の重複しているメールを削除するためのrmコマンドを-i付きで実行するスクリプト。
同一かどうかはimgrepコマンドを利用している。
cd dir; dir2dot.sh
特定のディレクトリ配下の深い階層下のファイル名を、階層のディレクトリ名を.でつないだ名前に変換するmvコマンドを表示するスクリプト。
作業したいディレクトリにcdしてから実行。
スクリプト内のgsub()内の文字列は適宜変更して利用。
そのままパイプでshellにつなげば実行できるが、一度表示してから確認してやる方が良いときもある。
cat file | maddrm.pl
あるファイルからメールアドレスらしき文字列を削除するperl script。あくまでも「らしき」文字列のため、使う環境/対象ファイルに注意必要。
mklslist.sh
ls-lR.htmlを生成するためのスクリプト。
あまりのadhocさに公開がためらわれたが、遂に公開(^^;
rmbanner.sh dir_name
インターネット上を徘徊して収集したイメージデータを特定のディレクトリ(上記のdir_name)配下に蓄えているときに、そのイメージデータの中からバナー広告らしきイメージデータを捜し出して削除するrmコマンドを表示するスクリプト。
バナーかどうかの判断はパーフェクトにはできないが、identifyコマンドの出力するイメージの形状を利用。
そのままパイプでshellにつなげば実行できるが、一度表示してから確認してやる方が良いときもある。
インターネットTVガイドや
テレビ王国で利用可能な
iEPGを利用したテレビ予約の仕組みです。
出来るだけ簡単な実装を心がけています。
クライアント側は、WebブラウザでiEPG情報をダウンロードする。
例えば、インターネットTVガイドでは
番組表の[iEPG]のマークをクリックすることで、
下記のようなデータがダウンロード出来る。
Content-type: application/x-tv-program-info; charset=shift_jis version: 1 station: TVQ year: 2003 month: 11 date: 09 start: 05:00 end: 06:00 program-title: 演歌◇健康
上記のデータにより、(一部の情報を補ってあげれば)録画予約設定に
必要な情報が得られることが分かる。
あとは、この情報を自動的にサーバ側に登録する仕組みを作れば良い。
よって、クライアントサイドで、上記のmime情報を自動的に
処理するスクリプトをブラウザ側に登録する。
下記のスクリプトは/usr/local/bin/iepg.shとして置いておく。
#!/bin/sh # iepg.sh 2003.11.09 Hisaaki Shibata<shibata@luky.org> # nkf -e $1 |mail -s iEPG icommand@server.uriuri.com
いかにも「そのまんま」なスクリプトである(^^;
Subject:やメールの送信先は、適宜変更する必要がある。
次に、
Content-type: application/x-tv-program-infoのデータをダウンロードするときに
このスクリプトが自動的に起動するようにする必要がある。
galeonの場合は、~/.galeon/mimeTypes.xmlに
<mimeitem name="application/x-tv-program-info" action="2" helper="/usr/local/bin/iepg.sh" helperNeedsTerminal="0" helperTakesUrl="0" alwaysUse="1"/>
などと記述すれば良い。
mailの送信先を自分のアドレスにしてみて、テストをすると良いでしょう。
尚、上記を見て気づかれたと思うが、iEPGのフォーマットさえ守れば、
人間がメールを送っても同じ事が出来る。
同じチャネルで連続して録画したいときなどは、独自にメールを作成して
送ればいいでしょう。
サーバ側は、クライアント側から送信されたメールを処理して、
しかるべき時刻に録画コマンドを起動する処理をおこなう必要がある。
/etc/aliasesに下記のような記述を追加し、root権限でnewaliasコマンドを実行する。
icommand: "|/usr/local/bin/icommand.sh"
つまり、icommand@server.uriuri.com宛のメールが届くと、
そのメールの内容をicommand.shの標準入力に流し込んで起動すると言う設定である。
/usr/local/bin/icommand.shの内容を下記に示す。
#!/bin/sh
# icommand.sh 2003.11.09 Hisaaki Shibata<shibata@luky.org>
#
nkf -e $1 |sed 's/:/ /g'|awk '
/station KBC/ {channel=1;bc="KBC";}
/station NHK総合/ {channel=3;bc="NHK";}
/station RKB/ {channel=4;bc="RKB";}
/station NHK教育/ {channel=6;bc="NHKedu";}
/station TNC/ {channel=9;bc="TNC";}
/station TVQ/ {channel=19;bc="TVQ";}
/station FBS/ {channel=37;bc="FBS";}
/year / {year=$2;}
/month / {month=$2;}
/date / {date=$2;}
/start / {startH=$2;startM=$3;}
/end / {endH=$2;endM=$3;}
END {if (endH >= startH) {
len = (endH * 60 + endM - startH * 60 - startM) * 60 - 10;
}else {
len = ((24 + endH) * 60 + endM - startH * 60 - startM) * 60 - 10;
}
printf("echo /usr/local/bin/va1000cap.sh %d %d \
/var/tmp/%s-%4d-%02d-%02d_%02d%02d\ > \
/tmp/%4d-%02d-%02d_%02d%02d.shn\
at -f /tmp/%4d-%02d-%02d_%02d%02d.sh\
%02d%02d %4d-%02d-%02d\n,\
channel,len,\
bc,year,month,date,startH,startM,\
year,month,date,startH,startM,\
year,month,date,startH,startM,\
startH,startM,year,month,date);
}
'|sh
上記のスクリプトは、
この例は、福岡市の場合であり、テレビ局名とチェンネル番号は、
各地域毎に作り直す必要がある。
それにしても、こてこての泥臭さである(^^;
さて、上記スクリプトでさらに起動されているva1000cap.shの内容を下記に示す。
#! /bin/sh # va1000cap.shby Hisaaki Shibata <shibata@luky.org>. NAME=va1000cap.sh DATE=`date +%Y%m%d%H%M` /usr/sbin/alsactl -f /home/shibata/asound.state restore /usr/bin/v4lctl setchannel $1 /usr/bin/ffmpeg -f avi -vcodec msmpeg4v2 -hq -acodec mp3 -y -b 1200 -ab 128 -r 30 -s 384x288 -cropbottom 6 -cropleft 4 -cropright 4 -ar 22050 -ac 2 -t $2 $3-c$1-$DATE.avi exit 0
出力AVIファイル名の指定などに冗長なところがあるが、指定した時刻と、
実際に動作した時刻を比較するためのものであり、必要に応じていじっていただきたい。
また、この程度のスクリプトであれば、別途作成せず、
直接icommand.shで記載しても良いと思う。
Disk /dev/sda: 255 heads, 63 sectors, 4864 cylinders Units = cylinders of 16065 * 512 bytes Device Boot Start End Blocks Id System /dev/hda1 * 1 4012 32226358+ 83 Linux /dev/hda2 4013 4226 1718955 82 Linux swap /dev/hda3 4227 4864 5124735 de Dell Utility
Disk /dev/hda: 255 heads, 63 sectors, 7296 cylinders
Units = cylinders of 16065 * 512 bytes
Device Boot Start End Blocks Id System
/dev/hda1 * 1 1275 10241406 7 HPFS/NTFS
/dev/hda2 1276 6374 40957717+ 83 Linux
/dev/hda3 6375 7012 5124735 de Dell Utility
/dev/hda4 7013 7296 2281230 82 Linux swap
00:00.0 Host bridge: VIA Technologies, Inc. P/KN266 Host Bridge 00:01.0 PCI bridge: VIA Technologies, Inc. VT8633 [Apollo Pro266 AGP] 00:05.0 CardBus bridge: Ricoh Co Ltd RL5c475 (rev b8) 00:05.1 FireWire (IEEE 1394): Ricoh Co Ltd: Unknown device 0551 00:06.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8139/8139C(rev 10) 00:10.0 USB Controller: VIA Technologies, Inc. USB (rev 80) 00:10.1 USB Controller: VIA Technologies, Inc. USB (rev 80) 00:10.3 USB Controller: VIA Technologies, Inc. USB 2.0 (rev 82) 00:11.0 ISA bridge: VIA Technologies, Inc. VT8233A ISA Bridge 00:11.1 IDE interface: VIA Technologies, Inc. Bus Master IDE (rev 06) 00:11.5 Multimedia audio controller: VIA Technologies, Inc. VT8233 AC97 Audio Controller (rev 50) 00:11.6 Communication controller: VIA Technologies, Inc. AC97 Modem Controller (rev 80) 01:00.0 VGA compatible controller: S3 Inc. VT8751 [ProSavageDDR P4M266] VGA Controller
#!/bin/sh
# this script was generated by ogl-tools
case "$1" in
start)
echo "Setting IDE devices ..."
/sbin/hdparm -c 1 -d 1 -m 16 -X 69 /dev/ide/host0/bus0/target0/lun0/disc
/sbin/hdparm -c 1 -d 1 -m 16 -X 69 /dev/ide/host0/bus1/target0/lun0/cd
;;
stop)
;;
restart)
echo "Reloading IDE setting..."
/sbin/hdparm -c 1 -d 1 -m 16 -X 69 /dev/ide/host0/bus0/target0/lun0/disc
/sbin/hdparm -c 1 -d 1 -m 16 -X 69 /dev/ide/host0/bus1/target0/lun0/cd
;;
*)
echo "Usage : /etc/init.d/ide {start|stop|reload}"
;;
esac
exit 0
Section "Device"
Identifier "Card0"
# Driver "vesa"
Driver "savage"
BusID "PCI:1:0:0"
Screen 0
VendorName "VIA"
BoardName "VT8751 [ProSavageDDR P4M266]"
EndSection
(--) PCI:*(1:0:0) S3 unknown chipset (0x8d04) rev 0, Mem @ 0xe8100000/19, 0xf0000000/27
とでてくるが、その後の方で
(II) LoadModule: "savage"
(II) Loading /usr/X11R6/lib/modules/drivers/savage_drv.o
(II) Module savage: vendor="The XFree86 Project"
compiled for 4.2.1, module version = 1.1.27
Module class: XFree86 Video Driver
ABI class: XFree86 Video Driver, version 0.5
とあり、無事読み込まれた模様。
OBSSを使って題記の実験をしてみました。
修理から戻ってきてDebianをインストールしたOBSSをnbdのクライアントにして、
自宅LAN内のPentium4マシン(これもDebian)をnbdのサーバにしてみました。
また、それだけではおもしろくないので、nbdサーバ側は2つのサービスをあげて
それをsoftware RAID 1でmountしてみています(^^;
<サーバの設定>
まず、サーバ側の設定ですが、apt-get install nbd-serverの後の質問に答えますが、
最終的には/etc/nbd-serverを設定すればいいようです。
とりあえず、実験サーバでは下記のようにしています。
NBD_PORT[0]=7777
NBD_FILE[0]=/home/nbd-export1
#NBD_SERVER_OPTS[0] is unset, but can contain -r, -m, -c or -a.NBD_PORT[1]=7778
NBD_FILE[1]=/home/nbd-export2
#NBD_SERVER_OPTS[1] is unset, but can contain -r, -m, -c or -a.#See nbd-server(1) for their meanings
#
#If you don't want this file to be rewritten after installation or upgrade,
#uncomment the following line:
#AUTO_GEN=n
# dd if=/dev/hda of=/home/nbd-export1 bs=2k count=1M
# cp /home/nbd-export1 /home/nbd-export2
その後、 /etc/init.d/nbd-server startでサービスが動き出します。
ps -axwwで見るとこんな感じ。
12512 ? S 0:00 /bin/nbd-server 7777 /home/nbd-export1
12513 ? S 0:00 /bin/nbd-server 7778 /home/nbd-export2
12514 ? S 0:24 /bin/nbd-server 7777 /home/nbd-export1
12515 ? S 0:26 /bin/nbd-server 7778 /home/nbd-export2
<クライアントの設定>
次にOBSS側でクライアントの設定です。
こちらもapt-get install nbd-clientの後の質問に答えますが、
設定ファイルは/etc/nbd-clientです。
実験マシンではこんな感じ。
# If you don't want to reconfigure this package after installing, uncomment
# the following line:
AUTO_GEN="n"
#
# Name of the first used nbd /dev-entry:
NBD_DEVICE[0]=/dev/nd0
#
# Type; s=swap, f=filesystem (with entry in /etc/fstab), r=raw (no other setup
# than to run the client)
NBD_TYPE[0]=f
#
# The host on which the nbd-server process is running
NBD_HOST[0]=192.168.0.100
#
# The port on which this client needs to connect
NBD_PORT[0]=7777
#
# The second networked block device could look like:
NBD_DEVICE[1]=/dev/nd1
NBD_TYPE[1]="f"
NBD_HOST[1]="192.168.0.100"
NBD_PORT[1]="7778"
/dev/nd0と/dev/nd1は以下のようにして作りました。
# mknod /dev/nd0 b 43 0
# mknod /dev/nd1 b 43 1
ここで/etc/init.d/nbd-client startでクライアントとして動き出しますが、
fsckが出来ないとか何とか文句を言われますが、無視して次へ(^^;
#file systemを作っていないから、文句言われて当然なので。
<クライアントでのsoftware RAIDの設定>
さらに、OBSS側でsoftware RAIDの設定をします。
apt-get install raidtools2を行った後に、/etc/raidtabを作ります。
実験OBSSでは以下のような感じ。
# raid-1 configuration
raiddev /dev/md0
raid-level 1
chunk-size 16
nr-raid-disks 2
nr-spare-disks 0device /dev/nd0
raid-disk 0device /dev/nd1
raid-disk 1
その後、
# mkraid /dev/md0
でうまく動けばサーバとクライアント間でネットワークのやりとりが発生し、
HUBのActiveランプが点滅を始めると思います。
これは、RAID1の構築(ディスク間の同期合わせ)を行っているためです。
この進み具合は cat /proc/mdstatを実行すればわかります。
同期合わせを行っているのもかまわずに(^^;、
# mke2fs /dev/md0
を行います。
#実はOBSをクライアントにした場合もやってみたのですが、
#このmke2fsでエラーになりました。原因調査予定。
同期合わせはこの間も進んでいますが、そのうち終わって/proc/mdstatを見ると
以下のようになるはずです。
Personalities : [raid1]
read_ahead 1024 sectors
md0 : active raid1 [dev 2b:01][1] [dev 2b:00][0]
2097088 blocks [2/2] [UU]
mount後のdfの結果はこんな感じです。
# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/hda1 38198332 25646976 10610960 71% /
/dev/md0 2064144 1362136 597156 70% /mnt
<考察>
この例では、通常のファイルシステムに使っていますが、
nbdはswapにも使えるようなので、CFだけで組んでいるOBSSでも
かなりいろんなことが出来るようになると思います。
また、今回は1台のサーバに対してsoftware RAID1にしていますが、
これを2台に分けるとか、片方をlocal device、もう片方をremote deviceに
するなど行えば、none shared storageタイプのactive-standby構成の
クラスタも組めるのではないかと思っています。
#OBSSでここまでやるべきかと言うと、ちょっと疑問ですが(^^;
今後はnfsとの性能比較などもしてみたいと思います。
<参考文献>
/usr/src/linux/Documentation/nbd.txt
http://www.it.uc3m.es/~ptb/nbd/
LinuxでUSBインタフェースを利用して外付HDDを接続してみました。 外付HDDそのものは「USB 2.0対応」と明記されていたので、 手元のノートPC内蔵のUSB 1.1と PC card の USB 2.0 インタフェースに 接続して非常に簡単な性能比較を行なってみました。
ご意見は、柴田までメールでお願いします。
尚、本ドキュメントは全文丸ごとであればどこへでも転載可能/リンク可能です(^^)
2002-08-20 Ver. 0.3
「ディスクが足りない。」この問題は、いつまでたっても付きまといます。
たとえノートPCの内蔵ディスク容量が1年毎に倍になったとしても、
何故か足りません。
私がメインで業務に利用しているノートPC Hitachi FLORA 220FX も
内蔵ディスク容量が20GBと一昔前では考えられないほどの容量になっても、
気がつくと使用率が90%を超しています。
これでは日々降り注ぐ添付ファイル付のメール豪雨を乗り切る事は出来ません(^^;
と、言う理由でUSB接続の外付HDDを購入する事にしました(^^;;
外付ケースにはどれも一長一短あったのですが、ドライブベイタイプとしても使えるものが比較的安く、しかも USB 2.0とあったので、購入してみました。
ついでと言っては何なのですが、ノートPC内蔵インタフェースであるUSB 1.1経由と、CardBusのUSB 2.0アダプタ経由で性能比較を行なってみました。
性能を計った事もあり、ある程度正確にモデル名を示すようにします。
hong:/home/shibata# lspci 00:00.0 Host bridge: Intel Corp. 440BX/ZX - 82443BX/ZX Host bridge (rev 03) 中略 00:0a.0 CardBus bridge: Texas Instruments PCI1410 PC card Cardbus Controller (rev 02) 中略 02:00.0 USB Controller: NEC Corporation USB (rev 41) 02:00.1 USB Controller: NEC Corporation USB (rev 41) 02:00.2 USB Controller: NEC Corporation: Unknown device 00e0 (rev 01)
FLORA 220FX NP2は USB1.1インタフェースを内蔵しているのですが、USB2.0は非対応であるため、 CardBusのUSB2.0インタフェース REX-CBU2 を利用しました。
CDC25U2/35Iへの給電は、USBのバスパワーが基本なのですが、足りない場合に備えてPS/2インタフェースから5Vを取り出すケーブル
が添付されています。今回もこのケーブルを利用しました。
尚、
CDC25U2/35I
の中にはHDDのATAインタフェースに接続する小さな基板
が入っているだけのシンプルなものです。
その基板上には
in-system
と書かれたインタフェース変換らしいチップが載っていました。
探してみたところ、CypressのISD300A1のようです。
どのようなディストリビューションでもいいと思います。
今回はDebian GNU/Linux 3.0(woody)で行ないました。
2.4.19からUSB2.0(ehci)が正式サポートされた事もあり、 ソースからmakeしたカーネルを利用しました。
USB経由でfsck,mke2fsを行なった外付HDD上に数万個以上のファイルをコピーし ました。ノートPCにmountした上でmountしたトップディレクトリから
# time ls -lR|tail
を実行した結果を示します。| USB 1.1 | USB 2.0 |
|---|---|
|
real 14m49.500s user 1m10.140s sys 0m19.560s |
real 9m11.731s user 1m10.800s sys 0m20.150s |
同じく100kbytes程度の数千個以上のファイルがある外付HDD上の ディレクトリ上で
# time find . -type f -exec cat {} \; > /dev/null
を実行した結果を示します。| USB 1.1 | USB 2.0 |
|---|---|
|
real 24m52.944s user 1m52.160s sys 0m22.390s |
real 4m7.810s user 1m52.460s sys 0m23.360s |
尚、それぞれのテストはUSB1.1→USB2.0の順番で実施しましたが、
USB1.1のテスト終了後に外付ドライブは一度unmountし、別のmount pointに
マウントした後に測定しています。
また、find & catでのusb2.0でのテストの後にもう一度usb1.1でテストを
行ないましたが、real で3秒程度の差しかなく、ファイルバッファの影響は
排除できているのではないかと判断します。
ディスクを同じくIBMの
Travelstar
シリーズの
IC25N020A
に変更し、Pentium III 673MHz x 2の自作SMPマシンに
GIGABYTEのUSB2.0インタフェースカードである
GC-USB20N
に変更して同じファイル群での性能測定も行ないました
ドライブそのものは一世代前のものなので、性能は低くなるかと
思ったのですが、まずはその結果を以下に示します。
| USB 2.0 |
|---|
|
real 2m7.539s user 0m8.080s sys 0m14.160s |
CardBusのUSB2.0インタフェースカードは、以前のカーネルではきちんと認識してくれなかったのですが、linux-2.4.19ではすんなり認識しehci-hcdモジュールが組み込まれたのですが、USB2.0インタフェースを利用した後にCardBusを抜去すると、カーネルごと固まってしまいます(^^;
手動でehci-hcdモジュールをrmmodした後に抜去すると問題ありません。
もう少し調査してみようと思います。
私がLinuxを使えるようにしてくださったすべての方に感謝いたします。
また、この文書作成にあたっては、JFをはじめとする多くのドキュメントを参考にさせて頂いています。ありがとうございますm(_|_)m
Linuxを家庭のゲートウエイとしてADSLでInternet接続する場合の各種設定に関してメモにまとめました。
思い返せば1996年5月に
「IP masqueradeとkerneldによるon-demand PPPで幸せな家庭内LANへのメモ」
からはや5年経ち、Internetへの接続環境も大きく変わりました。
当時は個人での常時接続は一部のリッチなユーザのものでしたが、現在は月額数千円でMbitオーダの接続回線が手軽に使えるようになりました。
これらをより使いこなすためにLinuxを使って簡単に設定できるところをまとめます。
ご意見は、柴田までメールでお願いします。
尚、本ドキュメントは全文丸ごとであればどこへでも転載可能/リンク可能です(^^)
2001-09-16 Ver. 0.1
家庭内LANもすっかり定着・安定してきたわが家ですが、ここ5〜6年の間に 外部接続は28.8kbpsでのモデム接続からISDNによるオンデマンドダイヤルアップ、 さらにはフレッツISDNによる常時接続へと進化してきました。
これらの進化は、接続時間を伸ばして常時接続にするという方向での進化でした。 家庭内のクライアント向けのサービスとしては、多少遅くても常時接続が出来ている と言うことが重要であり、ほぼ要求を満たすものでした。
一方、外部へのサービスを行うというニーズに対しては、ある程度高速な接続が必要であり、外部の太いネットワークに接続されているところにサーバをハウジングしなければなかなか難しいものでした。
しかしここに来て、ADSL、CATV、無線接続、FTTHといった高速接続環境も広く普及が始まっています。
こうなると、自宅のサーバを公開することも夢ではなくなりました。
ハウジング先に「リセットスイッチを押してくださいm(_|_)m」とお願いすることも
必要ありませんし、ディスクを増やすのも自由自在です。
#お金が続く限りにおいてですが(^^;
この文書では、サーバ公開をする上で必要な各種設定についてLinuxで実現する方法を順に示していきます。
手順としては、まず接続(PPPoE)、家庭内を守るファイヤーウォール(ipchains)、
サーバを公開する方法(ipmasqadm)、公開したサーバにhost名を割り振る方法(BINDでのDynamic DNS)と言う流れで説明します。
間違いや、より良い方法などありましたら教えてください。
実際の自宅のネットワーク構成(の一部(^^;)を下図に示します。
ちなみに、わが家はもともとISDNを引いており、ADSLを引く機会に、若干のコスト低減をもくろんで、メタル回線に戻そうとしたのですが、電話番号が変わると言われたため、そのままISDNを残しています。(タイプ2接続と呼ばれているものです。)
タイプ2だとISDNとの干渉が問題になるかとも心配したのですが、今のところ退官できるような不具合は全くありません。
割り当てられるIPアドレスが、接続都度変更になるのは何とかしてほしいけど...ADSL modemはNTT西日本のレンタルであり、modemとマシンA(hets)の間は10B-Tですが、家庭内は100B-Tです。
Internet<-->ISP
|
NTT
|
[ADSL modem]
|
|eth0
.------+-----. .------------.
|A NIC | |B |
| |eth1 | |
| NIC+--------------+ +-------------+NIC |
|Note PC |192.168.0.123 | | 192.168.0.12| |
`------------'hets | | `------------'hat
| |
.------------. .--+--+--. .------------.
|C | | | |C |
| NIC+-----------+ +----------+NIC |
| | | HUB | | |
| | `--------' | |
`------------'hawk `------------'hill
|
各マシンの概略仕様はそのうち追記します。
すべてLinuxを使っています。ライセンス上の問題は何もありません(^^)。
以下のソフトウエアや設定は、ADSL modemに接続されたマシンAで実施します。
どのようなディストリビューションでもいいと思います。
最近、「楽だなぁー」と思うのはVineです。redhat用の豊富なrpmが使える上に、
debianで確立されたaptが使えます。
rpmの取得には堀尾さん@北九州が砂場で運営している
ftp.rpmlinux.com
がおすすめですね。
いじり倒すなら相変わらずSlackwareかPlamoだと思います。
Debianもきっちり作るにはおすすめです。
最近の自宅内のマシンはほとんどがDebian/Gnu Linux woodyになってしまいました。
一度apt-getの楽さを知ってしまうと「もう他ではだめ」なのかも知れません(^^; (2002-05-18)
2.4系のカーネルは、自宅内の実験マシンでは既に実用的に使えていますが、
ゲートウェイとして安定的に使うのは、自分の慣れの意味もあり2.2系にしました。
カーネルはディストリビューション付属のものではなく、自前で再構築しています。
カーネルも自宅内のマシンのほとんどは2.4.xです。(2002-05-18)
PPPoEの実装はいくつかありますが、2.2系列で良く使われるのはrp-pppoeです。
本家は
http://www.roaringpenguin.com/pppoe/
です。
lukyでも公式にミラーしていて
http://roaringpenguin.luky.org/pppoe/
からもとれます。
redhat系のディストリビューションをお使いであれば、rpmを持ってきてそのまま
| rpm -i |
| rpm --rebuild |
| ./go |
実は、NTT西日本はフレッツADSLを契約すると各OS用の接続キットを CD-ROMに詰め込んで送ってくれて、Linux用のPPPoEのキットもソース込で 付いてくるのですが、MTUの設定関連でアクセスできないWebサイトがあるとか いろいろと不都合があり、結局はrp-pppoeに落ち着きました。
今では安定して動いています。
次に以下の設定fileを作ります。
専用の adsl-setup と言うコマンドでもある程度作れます。
詳しくは
how-to-connect.txt
を見てみましょう。
lock noipdefault holdoff 10 # wait 10 secs before trying to reopen connection lcp-echo-failure 4 # Connection is timedout after 4 failed echo requests lcp-echo-interval 0 # Send an lcp echo request every 30 secs. mtu 1454 #required PPP transmit frame size for PPPoE to fit in 1500 mru 1454 #required PPP receive frame size for PPPoE to fit in 1500 receive-all #permits some flexabililty in converting ethernet frames noauth #AC will not have to authenticate itself to your system #nopcomp #RFC-2516 pcomp NOT RECOMMENDED. If they ask, ok to allow. noaccomp #RFC-2516 MUST NOT ask for ACFC |
ETH='eth0' #「ユーザID」と「ISPのドメイン名」は各人の設定に合わせてね USER='ユーザID@ISPのドメイン名' DEMAND=no DNSTYPE=SPECIFY USEPEERDNS=no # 「DNS1」「DNS2」もISPから指定があったサーバのIPアドレスに合わせてね DNS1=10.0.0.1 DNS2=10.0.0.2 CONNECT_TIMEOUT=30 CONNECT_POLL=2 ACNAME= SERVICENAME= PING="." CF_BASE=`basename $CONFIG` PIDFILE="/var/run/$CF_BASE-adsl.pid" SYNCHRONOUS=no CLAMPMSS=1412 LCP_INTERVAL=20 LCP_FAILURE=3 PPPOE_TIMEOUT=80 FIREWALL=NONE LINUX_PLUGIN= PPPOE_EXTRA="" PPPD_EXTRA="" |
# PAP secrets file # Format: #name remote secret "ユーザID@ISPのドメイン名" * "パスワード" |
# CHAP secrets file # Format: #name remote secret "ユーザID@ISPのドメイン名" * "パスワード" |
とりあえず、この状態でredhat系ならば
| chkconfig --add adsl |
| /usr/sbin/adsl-start |
接続状態での/sbin/ifconfigの結果は以下のようになります。
尚、ADSL modem側のNIC(Eth0)のIPアドレスは、この場合あまり意味がありません。
(と、言うかifupしなくても良いようです。)
eth0 リンク方法:イーサーネット ハードウェアアドレス 00:80:C8:87:53:3B
inetアドレス:10.0.0.1 ブロードキャスト:10.0.0.255 マスク:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:103766133 errors:0 dropped:0 overruns:0 frame:0
TX packets:88349239 errors:0 dropped:0 overruns:0 carrier:0
衝突(Collisions):1709 TXキュー長:100
RX bytes:734847061 (700.8 Mb) TX bytes:916605863 (874.1 Mb)
割り込み:9 ベースアドレス:0x300
eth1 リンク方法:イーサーネット ハードウェアアドレス 00:E0:98:05:05:6D
inetアドレス:192.168.0.123 ブロードキャスト:192.168.0.255 マスク:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:75336055 errors:3 dropped:1806 overruns:0 frame:489
TX packets:91333879 errors:0 dropped:0 overruns:0 carrier:0
衝突(Collisions):0 TXキュー長:100
RX bytes:1423775122 (1357.8 Mb) TX bytes:1926202346 (1836.9 Mb)
割り込み:10 ベースアドレス:0x340
lo リンク方法:ローカルループバック
inetアドレス:127.0.0.1マスク:255.0.0.0
UP LOOPBACK RUNNING MTU:3924 Metric:1
RX packets:166174 errors:0 dropped:0 overruns:0 frame:0
TX packets:166174 errors:0 dropped:0 overruns:0 carrier:0
衝突(Collisions):0 TXキュー長:0
RX bytes:10578912 (10.0 Mb) TX bytes:10578912 (10.0 Mb)
ppp0 リンク方法:Point-to-Pointプロトコル
inetアドレス:61.xxx.yyy.zzz P-t-P:211.aaa.bbb.ccc マスク:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1454 Metric:1
RX packets:2082098 errors:0 dropped:0 overruns:0 frame:0
TX packets:1799927 errors:0 dropped:0 overruns:0 carrier:0
衝突(Collisions):0 TXキュー長:10
RX bytes:2090397793 (1993.5 Mb) TX bytes:192075749 (183.1 Mb)
|
psの状況も示します。
PID TTY STAT TIME COMMAND
1 ? S 0:41 init [3]
[中略]
1968 ? S 0:00 /usr/sbin/pppd pty /usr/sbin/pppoe -p
/var/run/pppoe.conf-adsl.pid.pppoe -I eth0 -T 80 -U -m 1412
noipdefault noauth default-asyncmap defaultroute hide-password
nodetach local mtu 1492 mru 1492 noaccomp noccp nobsdcomp
nodeflate nopcomp novj novjccomp user ユーザ名@ISPドメイン名
lcp-echo-interval 20 lcp-echo-failure 3
1969 ? R 35:42 /usr/sbin/pppoe -p /var/run/pppoe.conf-adsl.pid.pppoe
-I eth0 -T 80 -U -m 1412
[以下省略]
|
Linuxのポートフィルタもipfw -> ipfwadm -> ipchainsと進化しています。
2.4系のカーネルではさらに機能豊富なiptablesを使うようです。
2.2系のカーネルを採用したほとんどのディストリビューションで
ipchainsは採用されているようなので、インストールに関しては省略します。
シンプルな設定に関しては2 .関連情報/参考文献に
示してある文献を参考にして設定すれば十分でしょう。
以下は、私がマシンAで設定しているものです。
穴を見つけたら、教えてください(^^;
#!/bin/sh # # fire wall setting on hets.luky.org /etc/rc.d/rc.ipchains # last updated: 2001-04-21 Hisaaki Shibata |
ipmasqで囲ったプライベートアドレス空間上のサーバを外部に公開する方法として
ipmasqadmを使ったポート転送(port forwarding)を使う方法があります。
man pageにもport forwardingに関して詳しい記述はないですが、簡単な使い方は
/usr/sbin/ipmasqadm portfw -h を実行すると、下記のように表示される。
Usage: portfw -a -P PROTO -L LADDR LPORT -R RADDR RPORT [-p PREF] add entry
portfw -d -P PROTO -L LADDR LPORT [-R RADDR RPORT] delete entry
portfw -f clear table
portfw -l list table
portfw
|
ここでは、外部からマシンAのポート80(www)へのアクセスに対して、
家庭内のマシンB(192.168.0.12)のポート80へ単純に転送する、
つまりマシンBを外部に公開する例を示します。
コマンドレベルだと以下のようになります。
/usr/sbin/ipmasqadm portfw -f /usr/sbin/ipmasqadm portfw -a -P tcp -L ppp0のIPアドレス 80 -R 192.168.0.12 80 |
しかし、これをこのままスクリプトに埋め込むことはできません。
と言うのも私が契約しているISPはADSLユーザに対して固定IPアドレスを割り振らず、
接続毎にダイナミックにIPアドレスを割り振るため、接続都度IPアドレスが
変わるからです。
また、こちらから故意にISPへの接続を切らない場合でもどういうタイミングだか
わかりませんが、接続が切られる事があります。
再接続後は全く別のIPアドレスが割り振られています。
(再接続するようなrp-pppoeの設定にしているからまだ良い方なのですが)
ISPから割り振られたIPアドレスは /usr/sbin/ifconfig ppp0を実行すると、 下記のように表示されますので、これをipmasqadmの引数として渡せば良さそうです。
ppp0 リンク方法:Point-to-Pointプロトコル
inetアドレス:61.xxx.yyy.zzz P-t-P:211.aaa.bbb.ccc マスク:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1454 Metric:1
RX packets:2091425 errors:0 dropped:0 overruns:0 frame:0
TX packets:1809497 errors:0 dropped:0 overruns:0 carrier:0
衝突(Collisions):0 TXキュー長:10
RX bytes:2092322201 (1995.3 Mb) TX bytes:193103042 (184.1 Mb)
|
最も手間をかけずにやるときは、私はsedやawkをshellと組み合わせて使います。
例えば、下記のような感じです。
#!/bin/sh
echo "/usr/sbin/ipmasqadm portfw -f" > /tmp/ipmasqfw.sh
LANG=c /sbin/ifconfig ppp0|grep inet|\
sed 's/ *inet addr:/\/usr\/sbin\/ipmasqadm portfw -a -P tcp -L /;
s/ P-t-P.*/ 80 -R 192.168.0.12 80/;' >> /tmp/ipmasqfw.sh
. /tmp/ipmasqfw.sh
/bin/rm -f /tmp/ipmasqfw.sh
|
もっと最適化したやり方があるとか、本当はテンポラリなファイルを作らない方が 良いとか、セキュリティ上/tmpじゃない方が良いとか、エラー時にはそれなりの 報告をするとかいろいろありますので、その辺りのチェック/変更を加えれば 尚良いかと思います。
また、ftpサーバを公開したい場合のコマンドラインは
/usr/sbin/ipmasqadm portfw -f /usr/sbin/ipmasqadm portfw -a -P tcp -L ppp0のIPアドレス 20 -R 192.168.0.12 20 /usr/sbin/ipmasqadm portfw -a -P tcp -L ppp0のIPアドレス 21 -R 192.168.0.12 21 |
今までの所で家庭内LANのサーバを外部に公開するまでは出来ましたが、
ダイナミックに割り振られるIPアドレスをどうやって人に伝えるのかという
問題があります。
また、IPアドレスをURIとして人に伝える事ができたとしても、
次のタイミングでIPアドレスがわかることがあるので、
ドキュメントとして残すことはできません。
これらを解決する方法としてDynamic DNSと言うものがあります。
世の中にはDynamic DNSのサービスを無償で提供しているプロバイダもあるようですが、 ドメイン名はそのプロバイダのものであり、サブドメイン部分またはホスト名部分だけ が自前のものであるのは、私はちょっと頂けません。
外部にDNSに関して自由になるサーバがある事が前提(^^;になりますが、自前でDynamic
DNSサーバをあげてみましょう。
最近のBINDは非常に簡単にDynamic DNSが実現できます。
まず、静的なIPアドレスを持つDNS サーバをあげてみましょう。
以下のような設定を例とします。
より詳細な設定に関しては2 .関連情報/参考文献の
bind-8 のインストールメモ
などを参照してください。
options {
directory "/etc/named.db";
/*
* If there is a firewall between you and nameservers you want
* to talk to, you might need to uncomment the query-source
* directive below. Previous versions of BIND always asked
* questions using port 53, but BIND 8.1 uses an unprivileged
* port by default.
*/
// query-source address * port 53;
};
//
// boot file for name server
//
// NOTE: unconverted directive 'type domain source host/file backup file'
zone "." {
type hint;
file "named.root";
};
// NOTE: unconverted directive 'domain luky.org'
zone "localhost" {
type master;
file "localhost.d";
};
zone "0.0.127.IN-ADDR.ARPA" {
type master;
file "localhost.rev";
};
zone "UriUri.com" {
type master;
file "uriuri.com.zone";
allow-update { 127.0.0.1; 211.8.90.175;};
allow-transfer { any; };
allow-query { any; };
};
|
固定アドレスで割り当てるzoneファイルは下記のように普通に作成します。
;BIND DUMP V8 $ORIGIN com. UriUri 172800 IN MX 10 hoop.uriuri.com. ;Cl=2 172800 IN NS hoop.uriuri.com. ;Cl=2 172800 IN SOA hoop.uriuri.com. root.hoop.uriuri.com. ( 2001091007 7200 1800 1209600 172800 ) ;Cl=2 $ORIGIN UriUri.com. hoop 172800 IN MX 10 hoop.uriuri.com. ;Cl=2 172800 IN A 211.8.190.175 ;Cl=2 localhost 172800 IN A 127.0.0.1 ;Cl=2 mail 172800 IN MX 10 hoop.uriuri.com. ;Cl=2 www 172800 IN CNAME hoop.uriuri.com. ;Cl=2 hets 1200 IN A 61.xxx.yyy.zzz ;Cl=2 ns 172800 IN CNAME hoop.uriuri.com. ;Cl=2 ftp 172800 IN CNAME hoop.uriuri.com. ;Cl=2 |
動的なエントリの追加削除はnsupdateコマンドで実現できます。
試しに上記のサーバにloginして実行してみます。
root@hoop(6)$ nsupdate > update delete hets.uriuri.com A > update add hets.uriuri.com 300 A 61.xxx.yyyy.zzz > |
エラーも出なくてうまく行っているようだったら、nslookupしてみます。
root@hoop(14)$ nslookup Default Server: hoop.uriuri.com Address: 211.8.190.175 > hets.uriuri.com Server: hoop.uriuri.com Address: 211.8.190.175 Name: hets.uriuri.com Address: 61.xxx.yyy.zzz > exit |
念のためlogも見てみます。
この場合のlogは/etc/named.db/uriuri.com.zone.logになります。
;BIND LOG V8
[DYNAMIC_UPDATE] id 47831 from [211.8.190.175].4991 at 1000640318 (named pid 1346):
zone: origin UriUri.com class IN serial 2001091007
update: {delete} hets.uriuri.com. IN A
update: {add} hets.uriuri.com. 300 IN A 61.xxx.yyy.zzz
|
後は、ADSLゲートウェイとなっているマシンA側のIPアドレス割り当てに変更が あったときに、DNSサーバ上で上記コマンドを実行すれば良いことがわかります。
ここで問題になるのは、二つの点です。
どうやってIPアドレスが変わったことを検知するのかという事と、変更後のIPアドレス
を持つマシンAからDNSサーバ上でnsupdateを実行するかという事です。
これに関するスマートな解は ねぎ式: Dynamic DNS で固定ホスト名にして遊ぼう に書かれていますので、これを利用する方が良いでしょう。
私も、先に知っていれば上記のやり方をそのままパクっていたと思いますが、 私はもっと泥臭いやり方でやってます(^^;
まず、マシンA側でIPアドレスの変更を検知する方法ですが、
cronで1分毎にppp0に割り当てられているIPアドレスをチェックしています。
検知方法自体はipmasqadmのところで実現していますから、
これをちょっと修正すれば良いことがわかります。
具体的にはcrontabに下記のような記述をしています。
* * * * * /home/shibata/check_ip.sh |
check_ip.shは以下のようなものです。すごく泥臭いですね(^^;
#!/bin/sh /bin/mv -f /tmp/pppoe_ip.now /tmp/pppoe_ip.old /sbin/ifconfig ppp0|grep inet > /tmp/pppoe_ip.now diff /tmp/pppoe_ip.old /tmp/pppoe_ip.now > /tmp/pppoe_ip.diff if [ -s /tmp/pppoe_ip.diff ]; then /bin/mail -s hets.pppoe-ip_change 携帯電話のメールアドレス < /tmp/pppoe_ip.diff RSYNC_PASSWORD=hogehoge /usr/bin/rsync -av -e ssh /tmp/pppoe_ip.now nameduser@hoop.euqset.org::named) fi echo > /dev/null #end |
もちろんDNSサーバ側ではrsync --daemonを動かしておく必要があります。
ここではrsyncを動かすのに必要な/etcrsyncd.confの例だけを示しておきます。
# # /etc/rsyncd.conf # for hoop.uriuri.com # #global uid = nobody gid = nogroup use chroot = no max connections = 2 syslog facility = local5 pid file = /var/run/rsyncd.pid [named] path = /home/named comment = hoop.uriuri.com /home/named read only = no hosts allow = 61.0.0.0/8,hoop.uriuri.com auth users = nameduser secrets file = /etc/rsyncd.secrets |
さて、DNSサーバ側では以下のような設定にしてます。これまた泥臭い(^^;
まず、crontabです。
* * * * * /home/named/dnsup.sh |
上記で起動しているdnsup.shも示します。
#!/bin/sh
/bin/cat /home/named/hets.uriuri.com-templ > /home/named/hets.uriuri.com-ip
/bin/cat /home/named/pppoe_ip.now|\
sed 's/.* addr:/update add hets.uriuri.com 300 A /;
s/ *P-t-P.*//'>>/home/named/hets.uriuri.com-ip
echo >>/home/named/hets.uriuri.com-ip
/usr/bin/nslookup hets.uriuri.com hoop.uriuri.com|tail -2|head -1|sed 's/Address: *//' > /home/named/dns.now
/bin/cat /home/named/pppoe_ip.now|sed 's/.* addr://;s/ *P-t-P.*//' > /home/named/dns.next
/usr/bin/diff /home/named/dns.now /home/named/dns.next > /home/named/dns.diff
if [ -s /home/named/dns.diff ]
then
/usr/bin/nsupdate /home/named/hets.uriuri.com-ip
/usr/bin/nslookup hets.uriuri.com hoop.uriuri.com|\
mail -s "hets.uriuri.com IP change" shibata@luky.org
else
echo >/dev/null
fi
|
手間ひまをかけるよりも、安価な家庭用のブロードバンドルータと呼ばれるものが 出てきている(^^;
メールでの通知を行う方法も実施しました。簡単なので今は省略。(2002-05-18)(2)外部向けのサーバの構築を急ぐ。具体的にはストリーミング系のサービスを行いたい。
こちらも、一時期自宅にUSBカメラを置いて灰皿と温度計を監視し、灰皿から煙が立ち上っていないか、またPC内の温度が上がりすぎていないかを外部から監視できるようにしていました。(2002-05-18)
OpenBlockSでも動いたのですが、移行が面倒なのでそのままにしています。(3)bootable CD-ROMとFDの組合わせで今回の仕組みを実現する。
また、その後B-Fletsに移行したのを期に専用BBルータであるCentury Systems社XR-300に移行しました。
XR-300のハード構造はOpenBlockSSと同じであり、OSもLinuxで動いています。iptablesの定義などもそのまま行けるので楽しちゃいました。(2002-06-18)
XR-300に移行しちゃったので、なしですm(_|_)m (2002-06-18)(4)外部からのアタックレポートを公開する。
これはやめとこ(^^; (2002-06-18)
実は既に申し込み済です。(2001-10-09)
上記に書いたように、現在B-Flets + XR-300環境です。
でもお金はありません(^^;; (2002-06-18)
私がLinuxを使えるようにしてくださったすべての方に感謝いたします。
また、この文書作成にあたっては、JFをはじめとする多くのドキュメントを参考にさせて頂いています。ありがとうございますm(_|_)m
尚、今回のADSL対応サーバ構築においては、九州ギガポッププロジェクト:qgpopにおけるADSL実験として、複数ISPでの比較をする機会を頂きました。
特にqgpopリーダの平原様と、ISITにてADSL実験を取纏めて下さった大部様に感謝の意を表します。
柴田 尚明@福岡
shibata@opost1.netspace.or.jp
何らかの要因、例えば電源の瞬断などでハングアップしてしまったリモートにあるLinuxboxに対して、自動でハードウエアリセットしたり電源を落としたりして復旧させる仕組みを考えています。
公開してご意見を伺い、出来ればもうちょっと改良したいと思っておりますm(_|_)m。
続きも読む "mini Watch Dog Timer with Linux"
柴田 尚明@福岡
shibata@opost1.netspace.or.jp
Linuxに特有のIP masqueradeとkerneldによるon-demand PPPが
ある程度動きましたので設定の際に行った項目をメモにまとめます。
我が家におけるIP masqueradeの最大のメリットは
ご意見は、fj.os.linuxかメールでお願いします。
メールの方が圧倒的にレスポンスがいいはずです(^^)尚、本ドキュメントは全文丸ごとであればどこへでも転載可能/リンク可能です(^^)
1997/5/1 Ver. 0.91
1996/5/31 Ver. 0.4
1996/5/29 Ver. 0.3
1996/5/18 Ver. 0.2
1996/5/15 Ver. 0.1 新規作成
自作AT互換機の常で、自己増殖機能により我が家のPCが3台(FullTower, DeskTop, SubNote)になったことをきっかけに、家庭内LANを始めることにしました。
#Ver 0.6時点では新規導入したMiniTowerを子供用ゲーム機にして、お古となったDeskTopをLinux専用サーバとし、計4台に増殖しました(^^;しかし、ISPのLAN型dial-upの契約料は高いし、routerを買うお金もない。 さらにはISDNでもない、の三重苦(^^;によりあきらめておりました。
#Ver 0.6時点で我が家もISDN+テレホーダイ化しました(^o^)。OCNまでの短い命かもしれませんが....ちょうどその頃Linux-MLでIP masqueradeが話題になり、情報を集めてみると 「まさに求めていたもの」で、早速取り掛かることにしました。
#Linux-MLでは、その後も技術的な情報がやり取りされてます。
IP masqueradeについてはhttp://www.kt.rim.or.jp/~akira/にやまだあきらさんのわかりやすい解説が有ります(^^)
また、最近拡充されたものとしては、
梶原 健司さんのhttp://gandalf.doshisha.ac.jp/~kaji/ip_masq/とか、
星野 明さんのhttp://www.st.rim.or.jp/~akhoshi/ipmasq.html、そして荒木さんのhttp://www.mizuno.riec.tohoku.ac.jp/~yasu/linux/ipmasq/が有りますのでこちらもぜひご覧になってくださいm(_|_)m
その他にもNET-2/3-HOWTOに解説が有ります。こじまみつひろさんの和訳もGoodです。
on-demand dial-upに関しては、dialdを使う方法もあるとのことで、そのうち気が向いたら挑戦してみます。(かなり気は向いてるけど)
#と、言いながらkerneldに満足してしまい、dialdまでいたってませんm(_|_)m。linux-2.0.0にするときに気を付ける物としてはこじまみつひろさんが訳され、吉山さんがHTML化したものがhttp://jf.gee.kyoto-u.ac.jp/JF/v2.0/Changes-2.0.htmlに有りますのでじっくり読むのが良いと思います。
拡充計画はBIND+samba(済)->INN->DHCP
へ移って行きました(^^;
さらに、pppd-2.3.xでは、それ自体でon-demand dialupの機能が追加になっているようです。これももう少しβ版が安定してきたら手を出すかもしれません。
また、私が使い出したMN128に関するpppのchatスクリプトについてはhttp://www.st.rim.or.jp/~kanada/ISDN/connection-scripts.htmlに金田泰さんの実例がございます。
ISP-->Internet
|
.------------. .------------. NTT
|192.168.0.1 | |192.168.0.5 | |
| NIC+----------+ +-------+NIC 16550+-->TA-->DSU
| | | | | | (MN128)
| Silk | | | | Silver |
`------------'FullTower | | `------------'DeskTop
(Win95/3.1/Linux) | | (Linux)
| |
.------------. .--+--+--. .------------.
|192.168.0.2 | | | |192.168.0.3 |
| NIC+-------+ +------+NIC |
| | | HUB | | |
| Silvia | `--------' | Echos |
`------------'MiniTower `------------'Note
(Win95) (Linux/Win95)
家庭内LANを使う場合、プライベートaddress空間を使うことがお勧めです。私は、192.168.0.0/24を使いました。
#さすがにclass C x 1で足りない家庭内LANはないかと(^^;
#ちなみに、今日現在ではDHCPサーバが、Silver上で動き出しており、クライアントがLinuxの場合でもWin95の場合でも動的にIPアドレスを割り振ってくれるようになりましたので、上記のIPアドレスのまま動いているのはSilverだけとなりました(^^)。今後は、このon-demand機能を利用して、真夜中のテレホーダイタイムにNetNewsを自動取り込みすることを考えていますが、まだINNの設定ができてません(^^;
この内容はそのうちアップデートしてこの文書にも反映させます。

#Slackaware 3.1に3.2を上書きinstall(って言うのかな?)を行った場合は、その後に不都合が生じる場合があります。
#具体的にはkernelの再構築が出来ないようです。
#そういう時は/usr/binの中を削除してから再installしましょう(^^;

Linux-2.0.30からは、kernelのコンフィグレーションにもよりますが、今までIPmasqueradeされたネットワーク上から外部のネットワークに対して不可能であったpingなどのICMPを使ったやり取りなども実行可能になっているようです。
IP masqueradeを使えるようにする'make config'内容はやまださんのページや、NET-2/3-HOWTO、ipfwadmのarchive内のdocumentに書かれてます。
#このメモをupdateしたときにも簡単に触れるつもりでしたが、
#和訳されたChangesができたのでそちらをご覧ください。
#ところで、2.0.0リリースおめでとう!
#でもAIC-7850では新しいaic7xxxドライバは不安定(-_-)。
PIONEERのCD-ROMがboot時にエラーをだしまくるのでサブマシンのCD-ROMドライブ(PLEXTER)と入れ替えて対策しました(^^;
私の標準手順は以下です。('# 'はpromptのつもりです。)
# cd /usr/src/linux # make mrproper # make menuconfigこのあと、/etc/lilo.confを修正して、boot時に今まで動いていたkernelと新しいkernelを選択できるようにします。#ここでIP masqueradeが使えるようにする。どの項目をYにするかは2 .関連情報をご覧ください。# make dep && make clean && make zImage && make modules && make modules_install # cd /usr/src/linux/arch/i386/boot # /sbin/rdev -R zImage 1 # cp zImage /zImage.x.yy.z
# cat /etc/lilo.conf
#fileの中身やコマンドの出力を示す場合は、以下緑で示します
# LILO configuration file # generated by 'liloconfig' # # Start LILO global section boot = /dev/sdb1
#rootパーティションにinstallしてます。
#boot selecterはOS-BSがお気に入りです。
#compact # faster, but won't work on all systems. delay = 50 vga = normal # force sane state ramdisk = 0 # paranoia setting # End LILO global section # Linux bootable partition config begins image = /zImage.x.yy.z root = /dev/sdb1 label = linux read-only # Non-UMSDOS filesystems should be mounted read-only for checking # Linux bootable partition config ends # Linux bootable partition config begins image = /zImage.2.0.29 root = /dev/sdb1 label = linux.old> read-only # Non-UMSDOS filesystems should be mounted read-only for checking # Linux bootable partition config ends
そして、
# /sbin/lilo
でliloを入れて、kernelの再構築はおわりです。
尚、家庭内LANで使うときには/etc/rc.d/rc.inet1でdefaultroute(gateway host)でNIC側を選択している場合は、設定行をコメントアウトしておきましょう。
そうしないと、せっかくpppでのlinkが確立しても外に出て行けなくなってしまいます。
#複数のセグメントを持つ大規模家庭内LANユーザの方(^^;は
#話が変わってきますが。
#どうも、モジュールを新しくしたタイミングだと思うのですが
#sendmail-8.7.5が/etc/rc.d/rc.Mのなかでハングするように
#なりました(T_T)ので元に戻しました。
上記が終わったらarchive内のrc.hintsを元に/etc/rc.d/rc.Mにkerneldとdepmod、modprobeの起動scriptを追加します。
#簡単なので省略m(_|_)m
次に以下のppp設定fileを作ります。
# cat /etc/ppp/ip-up #!/bin/sh#ファイルの先頭行にこれを書いて、なおかつ実行可能フラグを立てないと #うまく行きません。これのせいでずっとハマッてました(^^;echo UP `date` >> /tmp/PPP-LOG#ダイヤルアップ開始時間を記録しますsendmail -q#送信用のqueueに溜まっているmailをflushするためkill `cat /tmp/request-route`#kerneldのrouting programのprocessを削除する#/sbin/insmod ip_masq_ftp#後述するIPmasquerade下でftpを行うためのおまじないでしたが、以下の4行に置き換えてます。だから今はコメントあうとしてます。/sbin/depmod -a /sbin/modprobe ip_masq_ftp.o /sbin/modprobe ip_masq_raudio.o /sbin/modprobe ip_masq_irc.o
次にarchive内のrequest-route.shを元に以下のfileを作ります。
#どうせDNSを引きに行くのでちょっと内容をサボってます
# cat /sbin/request-route #! /bin/sh LOCK=/tmp/request-route UP=/tmp/request-up PATH=/usr/sbin:$PATH #for ppp-2.2* export PATH pppd echo `date` > $UP#家庭内LANからのon-demandダイヤルアップであることの足跡を残してます。外部からのダイヤルインではこのファイルができないはずで、それによって制御を変えるようにしてますsleep 60 &#この値はいろいろとチューニングの余地があるようですsleepid=$! echo $sleepid > $LOCK wait $sleepid rm -f $LOCK
#上記にも示しましたが、ppp-2.3.xのβテストが始まってます。私の標準手順は
#pppd単体でon-demand dialupが出来るようになっているらしいです(^^)
# cd /usr/local/src/ppp-2.2.0f # ./configure # make kernel # make
#make前にppp用のlock fileのPATHを修正してました
#mgettyを使う場合です。今はmgettyの方を修正しています
#mgettyを使うのは外から自宅にdial-upするからです(^^)
# make install
このあと、以下の設定fileを作ります。
#どうせ一つのISPにしかアクセスしないでしょうから
#/etc/ppp/optionsで設定値を書いちゃいます。
# cat /etc/ppp/options
debug lock modem crtscts /dev/ttyS3 38400#私のモデムはSilkのCOM4です #最近買ったTA(MN128)はSilverのCOM1につながってます #COM1の時は/dev/ttyS0ですね(^^) #さらに現時点では、remote電源制御の絡みがあり、TAはCOM2(/dev/ttyS1)につながっています。COM1は電源OFF制御装置(^^;がつながりました。noipdefault netmask 255.255.255.0 defaultroute idle-disconnect 140
#また/etc/rc.d/rc.serialでspd_vhi設定をして、DTE速度を115200bpsにしてます。
#setserialの最新バージョンは1.12のようです。
#また、SMC系のマルチI/O制御chipはDTE速度を115.2k以上に設定できるらしく、
#Win95のドライバはfjにポストされてました。
#ドライバが置いてあるftpサイトはhttp://www.yk.rim.or.jp/~gigo/over115K/です。
大きな期待がかかるのがこのドライバの作者の友人がsetserialに
#このコードを統合するつもりだとの事です(^^)。#pppのトラフィックが140秒間ないとpppdが落ちる設定です。domain joy.netspace.or.jp
#このドキュメントのVer0.7まで間違った記述をしており、
#参照された方にはご迷惑をおかけいたしましたm(_|_)m#上の行は、不要かもしれませんname silk#上の行は、不要かもしれません。connnect /etc/ppp/ppp-on-script
実際に電話をかけるのは以下の部分の設定です。
(1)Rockwell系のv.34 modemの場合
# cat /etc/ppp/ppp-on-script
#!/bin/sh# 各行末のバックスラッシュ(\)に気を付けてねexec /usr/sbin/chat -v TIMEOUT 2 ABORT '\nBUSY\r' \ ABORT '\nNO ANSWER\r' ABORT '\nRINGING\r\n\r\nRINGING\r' \ '' AT \ 'OK-+++\c-OK' ATH0 \ TIMEOUT 30 \ OK ATDT電話番号 \ CONNECT '' \ ogin:--ogin: \\dユーザID \ assword: パスワード
# 最終行だけバックスラッシュによる改行のエスケープ不要
PAPやCHAPのISPへは/etc/ppp/pap-secretsや/etc/ppp/chap-secretsを記述すれば、上記のCONNECTの行まででOKのばずです。
#その時は、最後の行末の\をはずしてね
#また、PAPの時は/etc/ppp/optionsに+uaなどの記述が必要です。#尚、+uaの記述は推奨されているものではなくpppd-2.3.x以降では
#サポートされない事が有りそうなので、/etc/ppp/*-secretsを使用した方が
#よさそうです。
(21)MN128(非同期38.4k)の場合
http://www.st.rim.or.jp/~kanada/ISDN/connection-scripts.htmlの金田泰さんの実例をみてね。
尚、金田さんが書いているMN128のppp終了後のハングアップに関しては/etc/ppp/ip-downの後半のchatを起動する部分を下記のようにする事で、回避できています。
また、電源制御関連や、ダイヤルアップしていないときには不要なmoduleを削除する事も追加しました。
# cat /etc/ppp/ip-down
#!/bin/sh
#
# This is part 2 of the ppp-on script. It will perform the connection
# protocol for the desired connection.
#
if [ -f /tmp/request-up ]; then #家庭内LANからのダイアルアップならば
/bin/rm -f /tmp/request-up
echo DOWN `date` >> /tmp/PPP-LOG #コネクションを切った時間をlogに取る。
else #外部からのダイヤルインによるpppの起動のときは。
sync
sync
sync #転ばぬ先のsync三回(^^;
/sbin/shutdown -r now #おもむろにshutdownを動かす。
sleep 60
exit 1 #正常にshutdownが動いていれば、ここには来ないはず。
fi
#if [ `w|wc -l` -lt 3 ]; then #外部からのダイヤルイン判定の残骸
# sync
# sync
# sync
# /sbin/shutdown -r now
#fi
/sbin/rmmod ip_masq_ftp.o #不要なモジュールの取り外し
/sbin/rmmod ip_masq_raudio.o
/sbin/rmmod ip_masq_irc.o
# #MN128ハングアップ対策
exec /usr/sbin/chat -v \
TIMEOUT 3 \
ABORT '\nLINE OFF\r' \
ABORT '\nBUSY\r' \
ABORT '\nNO ANSWER\r' \
ABORT '\nRINGING\r\n\r\nRINGING\r' \
'' ATZ
また、DNS関連の記述は以下のようにしています。
# cat /etc/resolv.conf domain joy.netspace.or.jp nameserver 192.168.0.5#そうです。我が家の中にもDNSサーバが立ちあがったんです(^^; #これについては婆印度と産婆(^^;を見てくださいnameserver aaa.bbb.ccc.ddd
#ISPが推奨しているDNS serverのIP addressですね
ここまでで、rebootすれば「そのLinux機上で」
$ telnet sotono.host.or.jp
とか
$ mnews -Dsotono.NNTP.server.or.jp
とかで勝手にダイヤルアップを始めるはずです(^^)
V#ISDN+テレホーダイとかだと快適ですねぇ。
#テレホーダイなら繋ぎっぱなしにする?(^^;
#他の人にも回線あげなきゃ(^^)
ダイヤルを始めているときのプロセスの状況は以下のようです。
# ps -x
PID TTY STAT TIME COMMAND
1 ? S 0:16 init[5]
[中略]
111 ? S 0:00 sh /sbin/request-route aaa.bbb.ccc.ddd
114 S3 S 0:00 pppd
115 ? S 0:00 sleep 40
116 S3 S 0:00 /usr/sbin/chat -v TIMEOUT 3 ABORT \nNO AN...
[以下省略]
上記のaaa.bbb.ccc.dddはDNS ServerのIP addressになることが多いでしょう。
私が探した限りではipfwadmの設定に関する記述はアーカイブ内のmanファイルにしかありませんでした。
#NET-2/3-HOWTOにあるように、ipfwとは記法が異なります。私の設定は、以下です。
/sbin/ipfwadm -F -b -o -a masquerade -P all -S 192.168.0.0/24 -D 0.0.0.0/0 # End of rc.inet1
ここまでで、Dial-up routerと化したLinux機が出来上がりです(^^)
#RT100iはNATとやらに対応しているようですが
#複数のプライベートIP addressを一つのグローバルIP adressに
#変換する事はできないようですから、こいつはGoodです。
#しかしYAMAHAもRT100iのNATをエンハンスさせてIPmasqueradeのような機能を
#考えているようです(^^)
家庭内LAN上の全PCはdefaultrouteを192.168.0.5に向けます。
また、家庭内LAN上の全PCの/etc/hostsファイル上には全LAN内hostのエントリを追加しましょう。(DNSがあがっている現在は不要である事を確認していますが)
#さもなくば、LAN内でのtelnet/ftpなどでダイヤルアップを始めてしまいます(^^;そのLAN上のhostでWinVNなどを動かすと、dial-up routerであるsilverがダイヤルを始めるはずです(^^)
また、Win95の場合はNetBEUIをunloadしておかないとWin95起動時にパケットをはいてダイヤルアップを始める事があるようです
/etc/ppp/ip-upの中に
/sbin/insmod ip_masq_ftp
を追加しました。
#これって、本来のkerneldの使い方じゃないような気がします。この設定で、悩んでいたftpがちゃんと動作するようになりました(^^)Ver0.6
#on-demandでloadできる正しい使い方をご指導ください。
小さなftpやhttpだと問題にならないのですが、大きなファイルをanonymous FTPサイトから持ってきていると、きちんと終了しない事があります。この場合はhttp://www.hwy401.com/achau/ipmasq/ip_masq_ftpalive.patch.gzやftp.linux.or.jpなどからip_masq_ftpalive.patch.gzを持ってきてカーネルソースにパッチを当ててください。
パッチの当てかたは普通のカーネルパッチと同じだとおもいます。
Linux-2.0.30では、不要です。
家庭内LAN上のhostからIP masqueradeを利用して動作したものを示します
linux-2.0.30環境でWin95からIPmasquerade外部へのping
#IP addressでSMTP server/POP3 serverとしてsilverを指定してもその後の調査で、mailerやpopperには関係なくDNSを引きに行っているような状態が出ています(T_T)
#どうもWin95が何らかのタイミングでDNSを引くようです(^^;->IP masqueradeを起動しているマシン(silk)の/etc/hostsにNote PCの
0.6
->BINDを家庭内LANで運用を始めたところ、silver起動時の1回のみダイヤルアップが発生している。引き続き調査中。
#port53でした。問い合わせたらRIPでした。(--;idle-timeoutを5秒ぐらいにすると切れてくれるけど、これでは使い物にならない(T_T)
(2)問題点をFIXして、どこかのサイトにこの文書を置く。
->期間限定ですが、置きました。
#引き続き、引き取っていただけるところをお待ちしております。
#ご意見や情報を頂きたいのですが、よろしくお願いいたします。
(2)dialdを使った方法を追加する。 -> ftpが解決してから->pppd-2.3.xに移行するためなしm(_|_)m
(3)Linux-MLでの技術的な裏付け情報を付録で追加
-> 私が理解してから(^^; ->いまだに把握できていない(^^;
入れて、UPS付き(電池)低消費電力のdial-up routerを作っちゃう。
#私が持っておりますYAMAHAのPCMCIA ISDN cardのドライバ情報をデバイスドライバを開発するための情報はここに有ります。
#お待ちしていますm(_|_)m
私がLinuxを使えるようにしてくださったすべての方に感謝いたします。
特に、この文書作成にあたっては、Linux-MLの方々と、JFによるドキュメント、および関連のドキュメントがなければできないものでした。ありがとうございます。m(_|_)m
以上
この所、ディスク障害だとか、人為的チョンボとかで再installをする機会が多くて(^^;、 どのファイルをバックアップ取っとけば良いかわからなくなるんで、この際(自分のために)まとめとくものです。
(1)install時
(2)ppp+kerneld+IP_masquerade設定時
(3)BIND設定時
(4)Apatch設定時
(5)INN設定時
(6)samba設定時
[入り口へ]
[Akkoame Home Page]
柴田 尚明@福岡
shibata@opost1.netspace.or.jp
Linuxでのshutdown時に自動でPCの電源を落とし、また、外部からの電話着信で自動的にPCの電源が入るものを作りはじめました。
ある程度動いてますので、公開してご意見を伺い、もうちょっと改良したいと思っておりますm(_|_)m。
ご意見は、fj.os.linuxなどの関連NewsGroupかメールでお願いします。
メールの方が圧倒的にレスポンスがいいはずです(^^)尚、本ドキュメントは全文丸ごとであればどこへでも転載可能/リンク可能です(^^)


1996/11/6 Ver. 0.2
ATX機が自動で電源を落とせる話を聞いたり、某社のPCではモデムに着信があると電源を入れることができるという話を聞くたびに、良いなぁ〜と思っておりました。
また、会社から家に仕事のファイルを持ち帰って作業をして(^^;、そのまま忘れて会社に来たりしたことがあり、カミサンにPCの電源を入れてもらってダイヤルインしたりすることもありました(^^;;;;;;が、そうそう毎度は頼めません(^^;。
うちのサーバ機はCRTがついていないので、カミサンにはshutdown時の電源OFFのタイミングがわかりにくいという話もあります。そういう時は普通ATX機を買うのかもしれませんが、そんなお金はないです(T_T)し、ATXのマザーと電源の相性問題(?)もまだまだあると聞いてますので、買うにしてもしばらく待ちたいところです。
#ま、目標は、あくまで目標(^^;
ATXの電源制御仕様ってどこかに落ちてないでしょうか?
www.teleport.com/~atx/からたどっても、ろくなものは見つけられませんでした(T_T)
リモート電源制御の回路図に関しては下記をご覧ください。
#なお、このメインボードの回路が二つ分入ったものが4cm x 5cm程度のコンパクトな基板となり市販のキットとして1800円で販売されてます。私は、上記のメインボードと、パワーボード(3端子レギュレータとパイロットLED付き)とACアダプタを分解して(^^;取り出したトランス込みで、3.5"FDが10枚入るアクリルケースに詰め込んでます。そのうち写真もお見せしますね(^^;
大阪日本橋の「ワンダーキット」と言う会社のものです。
問い合わせ先は〒556大阪市浪速区日本橋4-4-1
TEL(06)644-4447 FAX(06)644-4448です。
私は福岡の「カホパーツセンター」で購入しました。注意する点として、このキットにはVcc(電源電圧)が5Vのものと12Vのものがあることです。私は回路図でお分かりのように5V版を使用しました。
#線材とかパイロットLED+LED用抵抗などは省略してますm(_|_)m
| Main | Name | Counts | Memo |
| 1 | HD414013 | 1 | CMOS-SSI |
| 2 | 2SC945 | 1 | Tr |
| 3 | 1S1588 | 3 | Diode |
| 4 | 1μF | 1 | Condenser |
| 5 | 10μF | 1 | Condenser |
| 6 | 4.7kΩ | 4 | Resister |
| 7 | 47kΩ | 3 | Resister |
| 8 | 100kΩ | 1 | Resister |
| 9 | G6C-1117 | 1 | Relay |
| 10 | Universal board | 1 | 5cm x 4cm |
| Power | Name | Counts | Memo |
| 1 | AC/DC Conv. | 1 | DC5V output |
| 2 | Switch | 1 | on-off-on toggle |
| 3 | Universal board | 1 | 3cm x 2cm |
| Set | Name | Counts | Memo |
| 1 | 9pin RS-232-C Conn. female | 1 | board mount type |
| 2 | 9pin RS-232-C Conn. male | 1 | board mount type |
| 3 | TLP521-1 | 1 | Photo-coupler |
| 4 | 470Ω | 1 | Resister |
| 5 | Universal board | 1 | 4cm x 3cm |
| Reset | Name | Counts | Memo |
| 1 | 9pin RS-232-C Conn. female | 1 | board mount type |
| 2 | TLP521-1 | 1 | Photo-coupler |
| 3 | 470Ω | 1 | Resister |
| 4 | Universal board | 1 | 4cm x 3cm |
以下のppp設定fileを作ります。(on-demand pppの設定で既に書いてますので、関連する記述のみ示します。)
4.1 /etc/ppp/ip-up
# cat /etc/ppp/ip-up #!/bin/sh#ファイルの先頭行にこれを書いて、なおかつ実行可能フラグを立てないと #うまく行きません。これのせいでずっとハマッてました(^^;echo UP `date` >> /tmp/PPP-LOG#ダイヤルアップ開始時間を記録します
#!/bin/sh
#
# This is part 2 of the ppp-on script. It will perform the connection
# protocol for the desired connection.
#
if [ -f /tmp/request-up ]; then #家庭内LANからのダイアルアップならば
/bin/rm -f /tmp/request-up
echo DOWN `date` >> /tmp/PPP-LOG #コネクションを切った時間をlogに取る。
else #外部からのダイヤルインによるpppの起動のときは。
sync
sync
sync #転ばぬ先のsync三回(^^;
/sbin/shutdown -r now #おもむろにshutdownを動かす。
sleep 60
exit 1 #正常にshutdownが動いていれば、ここには来ないはず。
fi
#if [ `w|wc -l` -lt 3 ]; then #外部からのダイヤルイン判定の残骸
# sync
# sync
# sync
# /sbin/shutdown -r now
#fi
# cat /sbin/request-route #! /bin/sh LOCK=/tmp/request-route UP=/tmp/request-up PATH=/usr/sbin:$PATH #for ppp-2.2* export PATH pppd echo `date` > $UP#家庭内LANからのon-demandダイヤルアップであることの足跡を残してます。外部からのダイヤルインではこのファイルができないはずで、それによって制御を変えるようにしてますsleep 60 &#この値はいろいろとチューニングの余地があるようですsleepid=$! echo $sleepid > $LOCK wait $sleepid rm -f $LOCK
# tail -15 /etc/rc.d/rc.6
# See if this is a powerfail situation.
if [ -f /etc/power_is_failing ]; then
echo "Turning off UPS, bye."
/sbin/powerd -q
exit 1
fi
sleep 15 ;echo off >/dev/cua0
echo "$message"
[ ! -f /etc/fastboot ] && echo "On the next boot fsck will be FORCED."
$command -f
動作したものを示します
何と言ってもISDNでの自宅へのダイヤルアップIP接続です。 TAがオフフックしていないようなのでいかんともし難いです。情報をお待ちしています。
まお、今回の電源制御は基本的にすべてRS-232-Cで行ってます。このあたりの情報はFA-NET-MLの皆さんと、alm-hokkaiの藪中さんから頂いております。
ありがとうございます。m(_|_)m
以上







柴田(ひ)アンテナ