2009年01月05日
負荷分散、広域ストレージ利用向けのLinuxカーネルモジュールをオープンソースで公開
株式会社ディープバレイ(本社:愛知県北名古屋市、代表取締役社長:深谷 悟美)は、ファイル操作をリアルタイムに把握のできるカーネルモジュール「ffsrvmod」を開発し、オープンソースとして公開しました。
http://deepvalley.jp/archives/17/
2008年12月25日
disk image file
dd if=/dev/zero of=disk.img bs=1024k count=1 seek=5120
こんなんで、5Gのファイルが出来上がります。
出来上がったファイルを
mkfs -t ext3 -F disk.img
こうすると、ext3でフォーマットされたファイルが出来上がります。
さらに
mount -o loop disk.img /mnt
こうすることで、/mntへ普通にアクセスできるようになります。
ffsys ffsrvmod カーネルモジュール
ffsysは、ffsrvmodを使ったシステム全体の総称です。
ffsysの中心になるffsrvmodは、Linuxシステムコールのファイル操作に関するものだけをフックし、外部にメッセージを送信する カーネルモジュール(LKM) です。
カーネルモジュールとして動く ffsrvmod はシンプルであり、sys_open,sys_close,をはじめ,utime,rename…など、ファイル操作をメッセージ順にSocketへ流し込みます。ただそれだけです。
(全てではありません。最終的にファイルが完成?ファイル操作が終了?した時点でメッセージが流れるようにしています。)
ffsrvmod は、コマンド、ファイルのフルパス、その他必要なオプション(アクセス権など)を流すだけで、ファイルのデータそのものは扱いません。(もしかしたらデータも扱うかもしれませんが、今のところ予定はありません。)
現在はデータを冗長させるサンプルプログラムしか付属していませんが、今後ffsrvmodを使った大容量ストレージ・負荷分散・データベースの高速化を紹介して行く予定です。
2008年11月28日
カーネルスレッド
struct task_struct *kthread_create(int (*threadfn)(void *data), void *data, const char namefmt[], ...)
引数1 スレッド関数を指定
引数2 渡す引数
引数3 psで表示される名前
static int test_thread(void * num)
{
//thread処理
}
static int __init init_test(void){ //threadを生成する初期化モジュール
struct task_struct *th;
//省略
//thread生成
th = kthread_create(test_thread, &num, "test_thread");
if (IS_ERR(th)) {
//失敗
goto ERR_RET;
}
//threadスタート
wake_up_process(th);
}
2008年11月15日
イメージマジック imagemagick 変換できる画像の種類の一覧
convert -list format
2008年11月07日
OPENできるファイルの数
procファイルシステムの以下の項目を読むことで、fsに関する事がわかります。
procファイルシステムにはこれ以外にもたくさんの情報があります。
/proc/sys/fs/file-max
ファイルハンドルの最大数
/proc/sys/fs/file-nr
file-nr 内の 3 つの値は、割り当てられたファイルハンドルの数、未使用のファイルハンドルの数、ファイルハンドルの最大数、を示しています。
割り当てられたファイルハンドルの数が最大数に近いが未使用のファイルハンドルの数が 0 よりもかなり大きいならば、ファイルハンドル使用のピークでそれだけ使ったということを示しており、最大数を増やす必要はありません。
2008年11月05日
rcp scp rsh などは
192.168.10.10から接続したい場合、
接続先のサーバーで
echo rsh >> /etc/securetty
echo 192.168.10.10 root >> /root/.rhosts
yum install rsh*
chkconfig rsh on
/etc/init.d/xinetd restart
2008年10月04日
MRTG で DISK I/O
DISK I/Oに関する情報は /proc/stat に入ってます。これを使うのが一番手軽な方法かと・・
(ちなみに、カーネルによって/proc/statの場合と/proc/diskstatsの場合があります)
ローカルマシンが対象ならばこんなかんじでスクリプトをまず作ります。
#!/usr/bin/perl use FileHandle; my $fh = FileHandle->new("cat /proc/stat|"); while(<$fh>){ if(/^disk_io: \([^(]+\([0-9]+,[0-9]+,([0-9]+),[0-9]+,([0-9]+)\)/) { print "$1\n"; print "$2\n\n\n"; } } close($fh);
リモートが対象ならば
#!/usr/bin/perl open(SSH,"ssh 192.168.1.6 cat /proc/diskstats |"); while( ){ if(/hda [0-9]+ [0-9]+ ([0-9]+) [0-9]+ [0-9]+ [0-9]+ ([0-9]+)/) { print "$1\n"; print "$2\n\n\n"; } } close(SSH);
sshで接続してるので、sshをパスワードなしで接続ここの様にしておく。
ちなみに上記はPerlで作成してありますが、何でもOKです。
いっそのことシェルで作っちゃってもOKよ。(その場合、MTRG.CFGの中に直接記述できます。)
上記Perlで数字が2行と改行2行の計4行出力されてればOK。
MTRG.CFGはこんな感じで書きます
Target[diskio192.168.1.59]: `/etc/mrtg/diskio-1.59.pl` MaxBytes[diskio192.168.1.59]: 200 Title[diskio192.168.1.59]: Disk I/O PageTop[diskio192.168.1.59]: Disk I/O on 1.59
YLegend[diskio192.168.1.59]: Disk I/O ShortLegend[diskio192.168.1.59]: blocks/s LegendI[diskio192.168.1.59]:read LegendO[diskio192.168.1.59]:write
/proc/diskstats に関する情報
Field 1 -- # of reads issued
Field 2 -- # of reads merged
Field 3 -- # of sectors read
Field 4 -- # of milliseconds spent reading
Field 5 -- # of writes completed
Field 6 -- # of writes merged
Field 7 -- # of sectors written
Field 8 -- # of milliseconds spent writing
Field 9 -- # of I/Os currently in progress
Field 10 -- # of milliseconds spent doing I/Os
Field 11 -- weighted # of milliseconds spent doing I/Os
swap領域を簡単に増やすには
テスト環境なんかで適当に作った後、SWAPが足りなくてOutOfMemoryの連発なんてときは
dd if=/dev/zero of=swapfile bs=1024 count=1000000 (1Gです) mkswap -v1 swapfile swapon swapfile
これでOK
あくまでも一時的な処置です・・
2008年10月03日
Postgres create table
CREATE TABLE test2 as select * from test order by main_id desc , main2_id desc;
Pgpool-2
wget http://pgfoundry.org/frs/download.php/1843/pgpool-II-2.1.tar.gz
./configure
make
make install
cp /usr/local/etc/pgpool.conf.sample /usr/local/etc/pgpool.conf
cp /usr/local/etc/pcp.conf.sample /usr/local/etc/pcp.conf
vi /usr/local/etc/pcp.conf
USERNAME:MD5PASS
pgpool-II-2.1.tar.gzを展開したディレクトリの中の/sqlフォルダ内に
/usr/src/pgpool-II-2.1/sql/system_db.sql
があるので、system_dbを作成しておく
こんな感じ
createdb -U postgres -h localhost pgpool
psql -U postgres -h localhost pgpool < system_db.sql
PgpoolAdmin
wget http://pgfoundry.org/frs/download.php/1716/pgpoolAdmin-2.1-beta1.tar.gz
展開されたディレクトリをWEBアクセス可能な場所に移動
http://サーバー/PgpoolAdmin/install/checkDirectory.php
EXT3 チューニング
LABEL=/hoge /hoge ext3 rw,noatime,data=writeback 1 2
tune2fs -o journal_data_writeback /dev/md2
data=journal
ファイルデータとメタデータの両方を記録することでデータの整合性は一番高いモードですが、オーバーヘッドが非常に大きくなります。
data=ordered(標準)
このモードではメタデータのみが記録されます。ファイルデータを先に書き込むことでデータの内容は保証されます。
data=writeback
データの整合性よりデータへのもっともはやいアクセスを提供するオプションです。ステムクラッシュ時には古いデータのままである可能性があります。整合性を取らなくてもいいような一次的なファイルを保存するだけのファイルシステムであればwritebackモードを使用することも有効な手段と考えられます。
Postgres テーブルスペース
テーブルスペースの一覧
\db+
List of tablespaces
Name | Owner | Location | Access privileges
------------+----------+----------+-------------------
pg_default | postgres | |
pg_global | postgres | |
(2 rows)
テーブルスペースとは、その名の通りテーブルの場所です。
たとえば
CREATE TABLESPACE disk2 LOCATION '/disk2/pgdata';
のようなコマンドをたたくと
\db+
List of tablespaces
Name | Owner | Location | Access privileges
------------+----------+----------+-------------------
disk2 | postgres | |
pg_default | postgres | |
pg_global | postgres | |
(3 rows)
すでにあるテーブルを移動させたい時は
ALTER TABLE srctabl1 SET TABLESPACE disk1;
この基本的な使い方は、高負荷時のDiskI/Oの分散です。
負荷分散なので、同一Diskの別フォルダに作成しても意味ないので気をつけましょう。
SSH を パスワード なし で 接続したい
接続元マシンでの作業
ssh-keygen -t rsa を実行すると、自分の秘密鍵・公開鍵が/root/.ssh/に生成させる
いくつか質問がきますが(パスフレーズやファイルの生成場所)何も入力しない。
id_rsa(秘密鍵)
id_rsa.pub(公開鍵)
cat /root/.ssh/id_rsa.pub
接続先マシンでの作業
vi /root/.ssh/authorized_keys
この中に上記で作成された公開鍵の中身を記述しておく
cat ./.ssh/id_rsa.pub | ssh root@des_host名 "cat >> ./.ssh/authorized_keys"
こんな感じのコマンドならば、すべて接続元のマシンで完了するよ。
2008年09月30日
Redhat9 に yum を インストール
■すでにインストールされていれば良いのだが、確認しなければ先にインストールしておく
wget http://ftp.kddilabs.jp/Linux/packages/fedora.legacy/redhat/9/os/i386/libxml2-python-2.5.4-1.i386.rpm
rpm -ivh libxml2-python-2.5.4-1.i386.rpm
■yumのインストール
wget http://ftp.kddilabs.jp/Linux/packages/fedora.legacy/redhat/9/updates/i386/gnupg-1.2.1-9.i386.rpm
wget http://ftp.kddilabs.jp/Linux/packages/fedora.legacy/redhat/9/legacy-utils/i386/yum-2.0.5-0.9.2.legacy.noarch.rpm
rpm -ivh gnupg-1.2.1-9.i386.rpm
rpm -ivh yum-2.0.5-0.9.2.legacy.noarch.rpm
■rpmforgeのinstall
wget http://dag.wieers.com/rpm/packages/rpmforge-release/rpmforge-release-0.3.6-1.rh9.rf.i386.rpm
rpm -ivh rpmforge-release-0.3.6-1.rh9.rf.i386.rpm
■GPG-KEYのimport
wget http://dag.wieers.com/packages/RPM-GPG-KEY.dag.txt
rpm --import RPM-GPG-KEY.dag.txt
vi /etc/yum.confで以下の行を追加。既存のブロックは削除
[rpmforge]
name = Red Hat $releasever - RPMforge.net - dag
baseurl = http://apt.sw.be/redhat/9/en/$basearch/dag
mirrorlist = http://apt.sw.be/redhat/9/en/mirrors-rpmforge
enabled = 1
protect = 0
gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rpmforge-dag
gpgcheck = 1
2008年09月20日
DRBDの復旧
2台目でconnectすると必ずStandAloneになってしまう場合、何かの障害が発生してるため、データの保護目的で接続できない場合がある。(異常終了などで・・)
そんな時は、「connect」する前にこんな感じ「drbdadm invalidate r0」のコマンドを叩いてみよう。
(セカンダリ側で実行しましょう。ファイルシステムがGFSでprimary/primaryの場合はどちらでもOKかな?気をつけることは、両方でやらないこと!!)
/etc/init.d/drbd status とか cat /proc/drbd とかでステータスを確認すると、同期が始まってるはずです。
syncer {
rate 10M;
}
転送レートを設定しても、毎回 drbdadm adjust r0 を叩かないとデフォルトの速度でうごくので、忘れない様にしないとね。
でも、そんなにハードな使い方をしたわけでもないのに落ちちゃった・・・
もうしばらくテストしてみますが、5Gほどのデータを書き込んでこれなので、4Tのデータだときつい感じがします。
primary/primaryでガシガシ使い込むんじゃなくて、バックアップ目的でしか使えないかも・・
2008年09月12日
mount remount tune2fs
sync;・・・・・・・
init 1 <= シングルユーザモード
mount -o ro,remount / <=リマウント
tune2fs -c 0 /dev/hda1
2008年09月11日
mdadm で RAID
RAIDの作成
あらかじめfdiskでパーティーションタイプをfdにしておくこと
mdadm --create /dev/md0 --level=raid1 --raid-devices=2 /dev/sdb1 /dev/sdc1
または
mdadm -C /dev/md0 -l1 -n2 /dev/sdb1 /dev/sdc1
RAIDの状態確認
cat /proc/mdstat
mdadm -D /dev/md0
RAIDの解除
mdadm -S /dev/md0
2008年09月10日
CDをisoファイルに落とすには CD-ROMイメージを作るには
dd if=/dev/cdrom of=windows2000.iso
作成したisoはこんな感じでマウントすれば使えます。
2008年09月08日
Linux で CPU の情報を確認
cat /proc/cpuinfo
上記のコマンドで、以下のような情報が取れます。
processor : 0
vendor_id : AuthenticAMD
cpu family : 15
model : 31
model name : AMD Athlon(tm) 64 Processor 3000+
stepping : 0
cpu MHz : 1808.806
cache size : 512 KB
fdiv_bug : no
hlt_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 1
wp : yes
flags : fpu tsc msr pae mce cx8 apic mtrr mca cmov pat pse36 clflush mmx fxsr sse sse2 nx mmxext fxsr_opt lm 3dnowext 3dnow up ts fid vid ttp
bogomips : 4523.53
isoイメージのマウント
mount -t iso9660 -o loop shrike-i386-disc1.iso /cdimage/disk1
yumでエラー
画面を眺めてると、........libxml2.........と、メッセージの中に’libxml2’が出てきた場合・・
yumでインストールした以外のlibxml2がありませんか?
環境変数の設定を変えて、’/usr/lib/libxml2’より先に別バージョンの’libxml2’が呼び出されてる場合、パッケージの種類によっては完了しません。
(その場所は、OSやバージョンによってちがうでしょう。)
そんな時にpsやtopで見てみると、’scrollkeeper’が動きっぱなしになってるはずです。
パッケージ管理の一部を’xml’で書かれたテキストファイルで行っているようです。
libxml2はバージョンでかなり大幅に変更があるようです。PHPから使用するときも大変です。
(私はCentOS5.1で、libxml等ソースからコンパイルした物がたくさん入っていて、GTK-DOCのyum update のときにエラーでおかしくなりました。)
fdformat mke2fs
mke2fs /dev/fd0
fdformat /dev/fd0
mount -t ext2 /dev/fd0 /mnt
2008年09月04日
VNCでログインしたときのデスクトップをgnomeにする
/root/.vnc/xstartup
を編集します。
一番したの2行をコメントアウトして
#xterm -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
#twm &
この1行を追記します。
gnome-session &
2008年07月07日
Apache PHP emalloc() でエラー
HTTPのPOSTで、非常に大きなサイズのデータを受け取る必要があり、試行錯誤しているんですがなかなか解決しません。
Error.logには「emalloc(): Unable to allocate 1407033033 bytes」が連発です。
(まー、1G超をPOSTってどうよ・・って思うんですが、なにぶんここ最近急激な変化があったもので、仕方なかったんですぅ)
プログラム自身を見直すのが一番の近道で本道なんでしょうが、自社内だけの話ではなく、先方のプログラムも変更をしなければならないので、何か方法な無いものかと探していました。
エラーメッセージからすると、当然mallocから推測できるように、メモリ確保の失敗が原因らしいですが、何をどうしたら直るのかがわかりません。
PHPの設定は当然大きな値に変更しましたが、まったく状況は変わりません。
・・・・・・・・ということで、いろいろと情報を探ってみると
住商情報システムさん?株式会社アライドエンジニアリングさん?
http://www.scs.co.jp/advc/techinfo_linux.html
とか、大規模なシステムを組んでいるところから、いくつか技術情報がでてました。
----------------------上記サイトより抜粋--------------------------------
x86 (386, 486, Pentium ...) の Linux では, 最新のカーネルを使えば 64GB まで使える, などと聞かれたことがあるかも知れませんが, これはシステム全体として使えるメモリサイズで, 1 プロセスではこんなに使えません。 まず,32bit のアーキテクチャということで 4GB (2^32B) の壁 があるのですが,実は更に制限があります。 簡単にまとめますと,
1回の malloc のサイズが 128kB 以下のものの合計:約 1GB まで
1回の malloc のサイズが 128kB 以上のものの合計:約 2GB まで
・・・・・・・・
---------------------------------------------------------------
このようなことは、当然Linuxの技術文書にも載っていることとは思いますが、なにぶんエイゴはマッタクダメデース。
大変助かりました。
解決したわけではありませんが、原因がわかりすっきりしたところで、プログラムの変更です。
原因がわからないままでのプログラム変更は絶対にしたくない性質なので、これでさくさく仕事が進みそうです。
2008年03月28日
Apache API モジュールを作ろう
char *src = malloc(strlen(r->uri));
strcpy(src , r->uri);
char *src = ap_pcalloc(r->pool, strlen(r->uri) );
src = ap_pstrdup(r->pool, r->uri);
上と下のコードでは、結果が違う場合があります。
直接システムコールやライブラリ関数呼び出すことは避けましょう。
基本的な関数はApacheAPIとして用意してあるようです。
ほとんどが英語のドキュメントなので、サンプルを見ながら黙々と作業です。
低負荷な状況では問題がおこらなくても、高負荷になり連続してメモリの確保・開放などを繰り返すと問題が発生すると思うよ。
ってな事に気をつけて、具体的にモジュールを作成していきます。
今回作るのは、Apache1.3でのキャッシュモジュールです。
わけあってApache2に移行出来ずにいるWEBサービスで、画像ファイルのみをキャッシュさせる必要が出てきました。
画像ファイルは一つのDISKに入っていて、WEBサーバ約20台が表に立っています。
画像へのアクセスはすべてここにアクセスが来るため、これ以上WEBサーバーを増やしてもここがボトルネックになり、スピードが上がらない状況になりつつあります。
解決方法はほかにも色々とありそうですが、Apacheのモジュールを作ってみたいので、他の仕組みは考えません。(お金をかけたくないし、サーバーもできればこれ以上増やしたくないし、プログラムの作り替えといったリスキーな手法は避けたい、とか理由もありますよ!)
ってな事で、とにかく作成に取り掛かります。・・・・・・・
2008年03月22日
Apacheのモジュール作成 API Module
Apache1.3でモジュールの作成に挑戦してみます。
かゆいところに手が届く物は、やっぱり自分で作らなくちゃね!!
と言うことで、NDSで鍛えた英語力でApacheAPIの英語DocumentをGET&なんとなく読む
http://httpd.apache.org/dev/apidoc/
http://httpd.apache.org/docs/2.0/developer/modules.html
http://gnug.nu/index.php?option=com_content&task=view&id=25&Itemid=5
サンプルを物色する。
Apache1.3は下記の場所(Apacheの状態)でフック(処理の横取り)することができる。
module cgi_module = {
STANDARD_MODULE_STUFF,
NULL, /* initializer */
NULL, /* dir config creator */
NULL, /* dir merger --- default is to override */
make_cgi_server_config, /* server config */
merge_cgi_server_config, /* merge server config */
cgi_cmds, /* command table */
cgi_handlers, /* handlers */
translate_scriptalias, /* filename translation */
NULL, /* check_user_id */
NULL, /* check auth */
NULL, /* check access */
type_scriptalias, /* type_checker */
NULL, /* fixups */
NULL, /* logger */
NULL /* header parser */
};
全ての場所で、
FILE *stream2;
stream2 = fopen(LOG_FILE, "ab+");
fwrite("child_exit\n", strlen((char *)"child_exit\n"), 1, stream2);
fclose(stream2);
こんな感じでLOGを吐き出すようにして、Apacheを一通り動かしてみると早く理解できます。
続く・・・・
2008年02月11日
Linux Kernel 2.6 Local Root Exploit
Linuxカーネル2.6系にroot権限を奪われる脆弱性が発見される
http://it.slashdot.org/article.pl?sid=08/02/10/2011257
aquatix writes
"This local root exploit (Debian, Ubuntu) seems to work everywhere I try it, as long as it's a Linux kernel version 2.6.17 to 2.6.24.1. If you don't trust your users (which you shouldn't), better compile a new kernel without vmsplice."
Here is millw0rm's proof-of-concept code.
Account-mochi Coward 曰く、
本家/.の記事より。Linuxカーネルのバージョン2.6.17から2.6.24.1までのvmsplice()システムコールに穴があり、それを利用するとroot権限が取得できてしまうようだ。検証用コードも存在する。
対策としては今の所vmsplice()を外してカーネルを再コンパイルすることしかないらしい。穴を突いて動作中のカーネルをオンメモリパッチするアレゲな解決方法も既に公開されている。
2007年12月27日
cron の設定
■はじめに
cron とは、ジョブ(スクリプト)を自動実行するためのデーモンプロセスです。そして、Linux システムの管理を行なう場合、ログのローテートや、バックアップなど、定期的に自動実行したいジョブが数多くあります。特に、バックアップなどは、システムへの負荷が大きいため、通常は、ユーザからのアクセスが少ない、深夜や早朝に行なわれます。
このように、定期的に実行されるジョブは、crond というデーモンによって、自動的に行なうように管理することができます。そこで、今回は、cron の設定を行なうために必要なコマンドや、設定ファイルについて説明していきたいと思います。
■「/var/spool/cron/user」 ファイルの書式
crontabファイルでは、crond への命令を、「この日付のこの時刻に、このコマンドを実行して下さい。」といった形式で書き込みます。そして、ユーザは、それぞれのcrontabファイルを「/var/spool/cron」配下にuser という名前で所有しており、使用するコマンドは、そのcrontabファイルを所有しているユーザの権限で実行されるので、コマンド使用の際には注意が必要です。
また、このファイルの中は、おおまかに、コメント行、環境変数の設定、cronコマンドの実行、のいずれかに分けることができ、その内容を記述します。なお、コメント行は、通常のファイルと同様に、先頭に '#' を書きます。
なお、このファイルの作成/編集は、 'crontab -e' とコマンドを実行して行ないます。
09 05 01 * * /usr/local/bin/command
分 時 日 月 曜日 コマンド
| cron 参考 | |
|---|---|
| 分 | 0〜59 |
| 時 | 0〜23 |
| 日 | 1〜31 |
| 月 | 1〜12 or jan〜dec |
| 曜日 | 0〜7 [0,7は日曜日] or sun〜sat |
| コマンド | 有効なコマンドを記述します。空白を含むことも可能ですが、標準のBourne Shellの書式に従って記述します。 |
2006年10月03日
HDD ハードディスク ドライブ セクター 不良
/var/log/message等に
「kernel: hda: dma_intr: status=0x51」とかが残っているのを見つけたら、ハードディスク障害が発生している可能性が高いです。
badblocks -vs -o hda1.sector /dev/hda1
とやると 不良セクタがあった場合、「hda1.sector」ファイルができます。(不良セクタの場所なんかが記録されます。)
fsck -l hda1.sector /dev/hda1
とやるとその不良セクタを使用しないようになります。
2006年07月15日
デバックツール デバッガ strace
デバックツール デバッガ
strace
2006年04月28日
Linux起動時に実行されるe2fsckの起動サイクルを変えたい
# tune2fs -c 20 /dev/hda3
※/dev/hda3を20回マウントしたらe2fsckを実行するように変更
ちなみに現在の状況を確認するには
# tune2fs -l /dev/sda3
-l オプションをつける
pptpd
pptpd
windowsから接続し、しばらくすると勝手に切断されてしまう。
/var/log/messageを確認してみると
Apr 28 16:09:28 usergw pptpd[5278]: CTRL: Client 210.238.206.66 control connection started
Apr 28 16:09:28 usergw pptpd[5278]: CTRL: Starting call (launching pppd, opening GRE)
Apr 28 16:09:28 usergw pppd[5279]: pppd 2.4.1 started by root, uid 0
Apr 28 16:09:28 usergw pppd[5279]: Using interface ppp0
Apr 28 16:09:28 usergw pppd[5279]: Connect: ppp0 <--> /dev/pts/0
Apr 28 16:09:28 usergw /etc/hotplug/net.agent: assuming ppp0 is already up
Apr 28 16:09:31 usergw pptpd[5278]: CTRL: Ignored a SET LINK INFO packet with real ACCMs!
Apr 28 16:09:31 usergw pppd[5279]: CHAP peer authentication succeeded for fukaya
Apr 28 16:09:31 usergw pppd[5279]: found interface eth1 for proxy arp
Apr 28 16:09:31 usergw pppd[5279]: local IP address 192.168.10.102
Apr 28 16:09:31 usergw pppd[5279]: remote IP address 192.168.10.61
Apr 28 16:09:53 usergw pptpd[5278]: GRE: read(fd=5,buffer=80555c0,len=8260) from network failed: status = -1 error = Message too long
Apr 28 16:09:53 usergw pptpd[5278]: CTRL: GRE read or PTY write failed (gre,pty)=(5,4)
Apr 28 16:09:53 usergw pppd[5279]: Modem hangup
Apr 28 16:09:53 usergw pppd[5279]: Connection terminated.
Apr 28 16:09:53 usergw pppd[5279]: Connect time 0.5 minutes.
Apr 28 16:09:53 usergw pppd[5279]: Sent 3281 bytes, received 3332 bytes.
Apr 28 16:09:53 usergw /etc/hotplug/net.agent: NET unregister event not supported
Apr 28 16:09:53 usergw pppd[5279]: Exit.
Apr 28 16:09:53 usergw pptpd[5278]: CTRL: Client 210.238.206.66 control connection finished
切断された直後のメッセージを見てみると「error = Message too long」の行がありました。
結論
options.pptpdファイルに「mtu = 1400」の様にmtuを強制的に小さくしてしまう。
本来、自動で調整されるはずですが、なんらかの原因でたまにおかしくなることがあるようです。
2006年04月25日
NKF
nkf [options] [file]
オプション
-b バッファリング出力を行う
-u 出力時にバッファリングを行わない
-j JISコードに変換する
-e EUCコードに変換する
-s シフトJISコードに変換する
-i? JIS漢字を指示するシーケンスとして ESC-'$'-?を使用する
-o? 1バイト英数文字セットを指示するシーケンスとしてESC-'('-?を使用する
-r ROT13/47の変換する
-T テキスト・モードで出力する
-l 0x80-0xfeのコードをISO-8859-1 (Latin-1)として扱う。ただし,JISコードの時のみ有効
-f? 一行?文字になるように簡単な整形を行う
-Z X0208中の英数字と一部の記号をASCIIに変換する
-J JIS(ISO-2022-JP)と仮定して処理する
-E 日本語EUCと仮定して処理する
-S シフトJISと仮定して処理する
-X シフトJISと仮定して処理する。ただし,X0201仮名があるものとする
-B 壊れた(ESCが欠損した)JISと仮定して処理する。-B1の場合はESC-(およびESC-$)のあとのコードを問わない。-B2の場合は改行の後に強制的にASCIIに戻す
-x 通常行われるX0201仮名->X0208の仮名変換しない
file 変換元のファイルを指定する
説明
文字コードの変換を行う。オプションに何も指定しない場合は,JISコードに変換される。
使用例
EUCコードに変換する
$ nkf -e henkan.txt > henkan.euc
2006年04月22日
Analog
年別レポートを出したい時は「YEARLY ON」とanalog.cfgに記述する
YEARLY 年別レポート
QUARTERLY 4半期別レポート
MONTHLY 月別レポート
WEEKLY 週別レポート
DAILYREP 日別レポート
DAILYSUM 曜日別集計
HOURLYREP 時間別レポート
HOURLYSUM 時間別集計
WEEKHOUR 曜日別時間集計
QUARTERREP 15分間隔レポート
QUARTERSUM 15分間隔集計
FIVEREP 5分間隔レポート
FIVESUM 5分間隔集計
HOST ホストレポート
REDIRHOST ホストリダイレクションレポート
FAILHOST ホスト不成功レポート
ORGANISATION 組織レポート
DOMAIN ドメインレポート
REQUEST リクエストレポート
DIRECTORY ディレクトリレポート
FILETYPE ファイル種類別レポート
SIZE ファイルサイズレポート
PROCTIME 処理時間レポート
REDIR リダイレクトレポート
FAILURE 不成功レポート
REFERRER リンク元レポート
REFSITE リンク元サイトレポート
SEARCHQUERY 検索語句レポート
SEARCHWORD 検索語レポート
INTSEARCHQUERY 内部検索語句レポート
INTSEARCHWORD 内部検索単語レポート
REDIRREF リダイレクトされたリンク元URLレポート
FAILREF 不成功リンク元レポート
FULLBROWSER ブラウザーレポート
BROWSER ブラウザーの概要
OSREP OSレポート
VHOST 仮想ホストレポート
REDIRVHOST 仮想ホストリダイレクションレポート
FAILVHOST 仮想ホスト不成功レポート
USER ユーザレポート
REDIRUSER ユーザリダイレクションレポート
FAILUSER 不成功ユーザレポート
STATUS 状態コードレポート
2006年03月18日
LVSの活用
Linuxでバランサ LVSの活用
LVS(Linux Virtual Server)による負荷分散がカーネル2.6から標準でモジュールとしてついてくるようになったようです。
今まではRedHat9(カーネル2.4)を使っていましたが、カーネルのコンパイルが必要だったので作成に時間がかかっていたけど、今後は必要ないらしい(^^。
そこで、2.6を使っているFedoraで作成してみました。
まずはFedoraのダウンロードから
http://www.redhat.com/fedora/からISOイメージをダウンロード。
ひたすらインストール
lsmodでロードされてるモジュールを確認してみると、
ip_vsがあった。ついでに
modprobe ip_nat_ftp
modprobe ip_vs_ftp
でモジュールをロードしてみると全部ロードできた。これで今までどうりのバランサが作れそうです。非常に簡単になりました(^^。
次にルールを作るのにipvsadmというプログラム(コマンド)でルールを作成していたので、確認してみるとやっぱり入っていませんでした。
なのでhttp://www.linuxvirtualserver.org/からipvsadm-1.24.tar.gzをダウンロード。
gtarで解凍展開ご、makeをする。と ip_v4.hがないですエラーが出てしまうのでカーネルのソースを取得する。http://www.kernel.org/からダウンロード。
include/net/を/usr/include/net/にコピー(無いものだけにしときました)
make ; make installで完了。
早速ためしてみます。
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j MASQUERADE
ipvsadm -A -t AAA.BBB.CCC.DDD:80
ipvsadm -a -t AAA.BBB.CCC.DDD:80 -r 192.168.1.15:80 -m -w 1
でルールの追加
確認してみる
ipvsadm -L -n
IP Virtual Server version 1.2.0(size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP AAA.BBB.CCC.DDD:ftp wlc
-> 192.168.1.60:ftp Masq 1 0 0
TCP AAA.BBB.CCC.DDD:80 rr
-> 192.168.1.53:webcache Masq 1 26 139
-> 192.168.1.52:webcache Masq 1 14 145
-> 192.168.1.51:webcache Masq 1 13 146
-> 192.168.1.50:webcache Masq 1 16 145
こんな感じでよさそうです。
で、どのくらい使えるのかと言うとかなり使えます。商用では高価?(1ポートあたり30万円などですから、8ポートあると本体価格で320万円・上を見出すときりがない・・)なものがいくつかありますが、それらと比べてもたいして見劣りしません。もっとも商用のものは上記の機能以外にも色々な機能がついてますが・・