2011年04月03日

bonding multipath

bonding
multipath



2011年01月16日

ジャーナリング

vi /boot/grub/menu.lst
kernel /vmlinuz-2.6.9-55.ELsmp ro root=/dev/md2 rhgb quiet rootflags=data=writeback

vi /etc/fstab
/dev/md2 / ext3 defaults,noatime,data=writeback 1 1

tune2fs -o journal_data_writeback /dev/md2



2010年11月10日

SYN cookies

SYN cookies

/proc/sys/net/ipv4/tcp_syncookies
0 -> 1

SYN cookies を使ったサーバは、通常の (SYN flood 攻撃を受けていない) 状態では他のサーバと同じようにふるまい、SYN パケットがひとつくるごとに記憶領域を割り当てる。
しかし他のサーバは SYN flood 状態 (割り当てるべき領域が不足した状態) になるとクライアントからの SYN パケットを捨ててしまうのに対して、SYN cookies を使ったサーバは SYN flood 状態になると 記憶領域を割り当てずに SYN ACK パケットを返す。
http://ja.wikipedia.org/wiki/SYN_cookies



2010年09月13日

複数のネットワークにつながるサーバー・・

ip route add 0/0 via 192.168.10.1 table 1
ip rule add from 192.168.1.0/24 table 1 pref 32000
(192.168.1.0/24の ネットワークは、192.168.10.1 がゲートウェイ)
(内部からのアクセス用などに)

ip route add 0/0 via 192.168.20.1 table 2
ip rule add from 192.168.20.0/24 table 2 pref 32001
(192.168.20.0/24 から来た接続は、192.168.20.1 をゲートウェイとする)
(下記の 192.168.30.1 から来たものも混じる為、明記する)

ip route add 0/0 via 192.168.30.1 table 3
ip rule add from 0/0 table 3 pref 32002
(上記以外は 192.168.30.1 をゲートウェイとする)



2010年07月31日

rsync

rsync -av --bwlimit=1000



drbd

drbdadm create-md r0
drbdadm -- --overwrite-data-of-peer primary all
drbdadm primary all
drbdadm secondary all
drbd status



2010年06月09日

CakePHP

1.2 から 1.3 変更点

View::set('title', $var)をしてもレイアウト中で、 $title_for_layoutにセットされなくなりました。$title_for_layoutはデフォルトのままです。もしカスタマイズしたいなら、$this->set('title_for_layout', $var)を使用してください。
View::$pageTitleは削除されました。代わりに$this->set('title_for_layout', $var);を使用してください。

だそうです。

だーかーらー、こう言うフレームワークとかってヤダって言ったんだよぅー

でも、こんな小さな事で大きな利益を見過ごすなよ!
使うメリットは大きいはずだよぅ。



2010年06月03日

virt-install

virt-install --paravirt --name=dvserver-kusakabe-centos4 --vcpus=4 --ram=512 --file=/var/lib/xen/images/centos.img --file-size=20 --location=http://192.168.1.56/cdrom/ --nographics --nonsparse



2010年05月20日

scsi sata

echo 0 - 0 > /sys/class/scsi_host/host0/scan
echo 0 - 0 > /sys/class/scsi_host/host1/scan
   ・
   ・
   ・
echo 1 > /sys/class/scsi_device/0:0:0:0/device/delete



2010年05月15日

GRUB ブートローダー centos

[root@localhost ~]# grub
Probing devices to guess BIOS drives. This may take a long time.


GNU GRUB version 0.97 (640K lower / 3072K upper memory)

[ Minimal BASH-like line editing is supported. For the first word, TAB
lists possible command completions. Anywhere else TAB lists the possible
completions of a device/filename.]
grub> root (hd1,0)
root (hd1,0)
Filesystem type is ext2fs, partition type 0x83
grub> setup (hd1)
setup (hd1)
Checking if "/boot/grub/stage1" exists... yes
Checking if "/boot/grub/stage2" exists... yes
Checking if "/boot/grub/e2fs_stage1_5" exists... yes
Running "embed /boot/grub/e2fs_stage1_5 (hd1)"... 15 sectors are embedded.
succeeded
Running "install /boot/grub/stage1 (hd1) (hd1)1+15 p (hd1,0)/boot/grub/stage2 /boot/grub/grub.conf"... succeeded
Done.
grub> quit
quit

wget http://download.fedora.redhat.com/pub/epel/5/x86_64/epel-release-5-3.noarch.rpm
http://rpms.famillecollet.com/enterprise/remi-release-5.rpm
rpm -Uvh epel-release-5* remi-release-5*

yum --enablerepo=remi --skip-broken update php* mysql*



2010年05月03日

vsftpd 仮想ユーザー

vsftpd_vuser_list.txt の作成
--------
testuser1
testpassword1
testuser2
testpassword2
-------

textをdbへ
db_load -T -t hash -f vsftpd_vuser_list.txt vsftpd_login.db

仮想ユーザーがマッピングされる実ユーザーの作成
useradd ftp_user

vsftpdの設定ファイルの編集
--------
anonymous_enable=NO # 匿名ユーザーのFTPを不許可
chroot_list_enable=YES # ユーザーのホームディレクトリ以外に移動できないようにする
user_config_dir=/etc/vsftpd/vsftpd_user_conf/ # ユーザーごとの設定ファイルを定義できるように
userlist_enable=YES # ユーザーリストファイルに含まれるユーザーだけにFTPを許可
guest_enable=YES # ログインするユーザーを全てバーチャルユーザーとみなす
guest_username=ftp_user # バーチャルユーザーがマッピングされるOS上のユーザー
anon_upload_enable=YES # バーチャルユーザーがファイルアップロードする事を許可する
anon_mkdir_write_enable=YES # バーチャルユーザーが新規にディレクトリを作成する事を許可する
anon_other_write_enable=YES # バーチャルユーザーがファイル名の変更やファイル削除をする事を許可
anon_world_readable_only=NO # World Readableなファイルのみをダウンロードできるというオプションを無効にする
anon_umask=022 # バーチャルユーザー用のumask
virtual_use_local_privs=YES # バーチャルユーザーをマッピングしたOSユーザーと同等の権限にする

PAMの設定を変更
/etc/pam.d/vsftpd
------
auth required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
account required /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
------
を追記
元々ある記述はコメントアウト
(64bitは「/lib64」)

ユーザーごとの設定ファイル
/etc/vsftpd/vsftpd_user_conf/testuser1
------
local_root=/home/virtual/testuser1
------



2010年01月09日

LVM ボリュームグループ名の変更

標準インストールすると、たいてい「VolGroup00」「VolGroup01」・・・なんてVG名が命名されます。
そのまま、たくさんのインストールをこなして、あるとき一台のマシンにトラブル発生。
DISKは大丈夫そうなので、別のマシンにつないでデータを吸い上げようと試みたが・・・
あれ?あれれ?
そうなんです。VG名が同じなために認識されないんです。
いや、認識はされてるんですが、アクティブにならないんです。

なんて時は・・
まず、変えたいボリュームグループを無効化させます。
vgchange -an VolGroup00
lvscanで、「inactive」になっていればやる必要ないですが。
(※作業マシンはキチンと準備してね。VG名が違うマシンを準備するか、レスキュー起動で同じVGがない事を前提にしてますよ。)

で、
vgrename VolGroup00 NewGroup
を叩くと「NewGroup」に変更されます。

これで、別のマシンに繋がってたHDを持ってきて、内容を読み書きなんて出来ちゃいます。
LVMは便利なんだか、不便なんだか・・・



2009年11月11日

Centos5.3 MCP97 GA-E7AUM-DS2H オンボードLANが認識しない

8月中旬にGA-E7AUM-DS2Hを購入しCentOSでサーバーを構築。
マザーボードにこだわりはなかったが、価格とグラフィックがオンボードで搭載されていて、別途購入する必要がなかったためこれに決定しました。・・・・が・・・・・・

早速、家に帰ってCentOSのインストール。
インストール時にオンボードNICが認識されなかったので、余っていたNICカードを挿入しとりあえずネットワークでインストール完了。
せっかっくのGigabit LANなのでドライバーを探してインストールして見るもののすべて認識せず。
余っていたNICは10Mのため遅い・・・。用途がWEBサーバーなので現時点では10Mフル活用していないので、まあいいかっとそのまま11月まで放置。

最近時間が出来たので、認識されていないオンボードNICを何とかしようと探しまわり、いろいろ試すがまたもや撃沈。

lspci
でも認識しているし、
00:0a.0 Ethernet controller: nVidia Corporation MCP79 Ethernet (rev b1)

kudzu -p
でも認識しているし、
class: NETWORK
bus: PCI
detached: 0
device: eth1
desc: "nVidia Corporation MCP79 Ethernet"
(network.hwaddr: 00:24:1d:73:c7:ae ・・この行はドライバが読み込まれていなかった時はなかったよ。)
vendorId: 10de
deviceId: 0ab0
subVendorId: 1458
subDeviceId: e000
pciType: 1
pcidom: 0
pcibus: 0
pcidev: a
pcifn: 0

お手上げ。
nVidiaのネットワークドライバはforcedethでよいはず。
メーカーサイトでも確認。
手動で「insmod forcedeth」後、lsmodで読み込まれている事を確認。
でもダメ。

実はチップの実態がRTL8xxx(8211,8139,8168,8169・・・)だという情報に翻弄されながら1日が終わってしまう。

翌日再挑戦!!
が、出てくる情報は同じものばかり・・・

でっもっ、解決の糸口になったのがこの方の情報「http://d.hatena.ne.jp/shiftdown/20090818」。
insmod するときにフルパスで記述してあったのを見て、あっときずきました。
そのページには「insmod /lib/modules/2.6.18-8.el5PAE/kernel/drivers/net/forcedeth.ko」
と書いてありましたが、「PAE」に目がとまりました。
「2.6.18-8.el5PAE」の部分はカーネルのバージョンで、普通自分でコンパイルせずにインストールすると「2.6.18-8.el5」(PAEとかはつきません。)になります。(バージョンが違ったり、手動で再コンパイルするとそれぞれ数字が違ったり、後ろにいろんなものが付いてくるので、自分の環境は自分で調べてください。uname -a とかすると、動いているカーネルのバージョンが表示されます。)
そういえば、カーネルはXEN・・・
早速「/lib/modules/2.6.18-8.el5/kernel/drivers/net/」と「/lib/modules/2.6.18-8.el5xen/kernel/drivers/net/」のディレクトリをそれぞれ覗いてみると、案の定「forcedeth.ko」がどちらにもありました。

そこで、「insmod /lib/modules/2.6.18-8.el5xen/kernel/drivers/net/forcedeth.ko」とXENカーネル用のドライバを手動であててみると・・・見事に成功。

ふーっ、なんて事だ!
(でも、インストールしたまま何もいじっていないのに、xenを見に行っていない事自体がおかしいですね。)


追記
じつは、「/lib/modules/2.6.18-128.4.1.el5xen/kernel/drivers/net/」にあるドライバがおかしかったらしいです。
ちゃんとxenを見ていました。
古いドライバにしたら動いたということになります。
最新のドライバが出てるのかな?




2009年01月07日

supattobox(スパットボックス) 第1回

コピペと簡単な修正で作るファイル同期ソフト「スパットボックス」

ネットにあるソースのコピペだけ(ちょっとは手を加えますが・・)で作るDropBoxのようなWindows向けのファイル同期ソフトを作りましょう。
多分、全5回くらいの記事でそれなりの完成になると思います。
http://lab.deepvalley.jp/archives/category/supattobox/



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 カーネルモジュール

http://lab.deepvalley.jp/

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(<SSH>){
        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]: <H1>Disk I/O on 1.59</H1>
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

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万円・上を見出すときりがない・・)なものがいくつかありますが、それらと比べてもたいして見劣りしません。もっとも商用のものは上記の機能以外にも色々な機能がついてますが・・

 

ハワイ旅行| サトピの子連れグアム旅行記| グアム旅行の情報サイト| ガーデニング|

Copyright (C) 2009 Anne Corporation. All Rights Reserved.