follow me

CPU limitはどのようにCPUリソースを制限するのか?

UNIX系OSで指定したプロセスのCPUリソースの使用を制限するプログラムとしてCPU limitは以前紹介しましたが。
実際にどのように使用リソースの制限をしているのでしょうか。

ソースをのぞいてみてシンプルさに驚いたw
kill(pid,SIGCONT)
kill(pid,SIGSTOP)
この2個だけですね。

SIGSTOPシグナルでプロセスを一時停止させて休ませて、SIGCONTシグナルでまた戻す。
これを短時間で繰り返すだけですか。

PIDを自身のPIDではなく、親PIDみて制限するように改良して、
複数同時に立ち上がってるプロセスへのリソースの分配方法を決めてやれば、
ごちゃごちゃプロセス起動するプログラムでも制限かけれそうですね~。

う~ん、どうやって分配すれば綺麗に動くんですかね~?
follow me

floppyfwのキーボード配列をjp106に対応

floppyfwを使ってみる。
キーボード配列がUSなのに、イライラしてしまう。
配列をjp106に対応するためのPackageを作成。

で、jp106キーボードの対応方法は、loadkmapコマンドが初めから入っていたので、別のLinux端末でキーマップファイルを作成。
この時、キーマップファイルの生成は、busybox用の物を作成しなければならないので、busyboxをビルドし、dumpkmapコマンドで生成します。

その後、パッケージの作成。
floppyfwが起動した際に配置する位置になるよう、ディレクトリ構造を作成し、bz2圧縮すれば終わり。
あと、Packagesディレクトリ以下に保存された「post-***.ini」ファイルが実行される仕様なので、キーマップを読み込むスクリプトを記述。
キーマップ対応は、これで完了。
作成したファイルは、以下にアップしています。

ついでに、telnetdのPackagesを組み込んでみるが、
一点telnetdで注意すべき点が、うまく接続できないtelnetクライアントがあるためクライアントを選ぶ必要があります。
Linuxのtelnetは問題なし、Windowsのtelnetは接続は出来るが挙動がおかしい、Teratermは接続できず、puttyでは「どのLFにもCRをいれる」をチェックしていれば問題なく接続が可能。

以下、Packageファイル
post-jp106.ini
jp106.bz2
以下、jp106キーボード対応とtelnetd入りイメージ
floppyfw-3.0rc2-jp.img
follow me

ext4ファイルシステム登場

Linux kernel 2.6.19-rc1で、ext4が対応したそうです。

ext4をサポートしない古いカーネルからでもext3ファイルシステムとしてマウントできるように下方互換性が考慮されているらしいので、
事前にファイルシステムだけ作って、普通にディストリインスコしてから、kernel再ビルドすれば、普通にext4環境構築できんのかな~と

で何が違うのだろうか?
・1024PByteまでのストレージのサポート
・ファイル断片化を防ぐextent file writingの導入
どっちも、個人レベルでは、あまり関係が無いような・・・
follow me

ログイン時のメッセージを遊んでみる

ログインした際に表示されるメッセージを遊んでみよう。
UNIX系OSでは、/etc/motdの内容がログイン時に表示されます。
こんな感じに遊んでみる。
Last login: Wed Oct 11 14:06:20 2006 from 192.168.73.131
####################################################################
        カタカタ
       ピーー____ ____
     ∧_∧   ||\  .\   |◎  |   Slackware11.0 だぽ。
     ('´∀`)  ||  | ̄ ̄|  |:[].|      ---------------------
  ┌(  つ/ ̄l| / ̄ ̄/ |  =|
  | └ ヽ |二二二」二二二二二二二二二」    ∧_∧
   ̄]|__)_) .| ||    | ||     ( ・∀・)ツナイデツナイデ
  / ̄\      / . ||    /  ||       ( ∪ ∪
  ◎  ◎..   [__||  .[__||       と__)__)

####################################################################
root@sempron:~#
ちなみに、自分で書いたわけではない。
あいむの珍妄想ページより拝借しました。

たまには、こんなネタも楽しい。
follow me

intel-iscsiでのISCSI Target

以前iSCSI Enterprise Targetを使って、Linux機に接続されたDDS3 Tapeドライブを外部へ公開しようとしていた訳だが、うまくいかず、今回intel-iscsiで行ってみました。

intel-iscsiを使った結果は、またもやうまく動作せず。
udisk -d /dev/sg0

LUN 0: Vendor HP       Model C1537A           Rev L005
READ_CAPACITY failed
結果は「READ_CAPACITY」ではじかれました。

ソースを見てみると、disk.cの273行目
if (sg_cmd_ioctl(fid, read_capacity, 10, data, 8, SG_DXFER_FROM_DEV, 10000)!=0) {
    fprintf(stderr, "READ_CAPACITY failedn");
    return -1;
}
で、エラーが出ている。
で、関数内に飛んで
ioctl(fid, SG_IO, &sg_hdr)
で、取得してくる「sg_hdr」内の「sg_hdr.status」と「sg_hdr.resid」が0以外なのが原因。
で、実際に戻ってきている値は
status: 2
masked_status: 1
msg_status: 0
sb_len_wr: 22
host_status: 0
driver_status: 8
resid: 8
duration: 8
info: 1
で、residの値がどうやら、sg_cmd_ioctl()の5番目の引数の値がそのまま出ている様だが。
また、以下の3番目の引数が「10」となっているが、2番目の引数の長さは「9」これっていいのか?
sg_cmd_ioctl(fid, read_capacity, 10, data, 8, SG_DXFER_FROM_DEV, 10000)
って所でよくわからんので、終了。
follow me

iSCSI Enterprise Targetで出来るのは?

LinuxでのiSCSI targetの実装のひとつであるiSCSI Enterprise Targetを試したわけですが。。。
納得いかない現象ばっかり。。。

導入自体は、足りないdkmsをビルドして、dkms-iscsi_trgtビルドして、iscsitargetビルドして終わり。
なのですが、なぜか鯖を再起動して、iscsi-targetを起動するとkernelがハング・・・
また、インストールし直して、鯖再起動するまでは動作・・・
kernel moduleを疑ったもののlsmodに出てくるし・・・
意味不明状態・・・

あと、イメージファイル、実HDDの公開は出来るが、CDROM、DDSドライブの公開は出来ない。
CDROM公開しようとするとkernelがハングします。
どうやら、HDDとしての公開しかうまく動かないようです。

で、見つけてきたintel-iscsiなる実装。/dev/sg0みたいに公開できるらしい。
こっちを使えばテープドライブを公開できるのか。
intel-iscsiを試すためカーネル再ビルド中、すでに30分。。。もぅちょい、オプション削ったらよかったと後悔。。。
follow me

Mondo Rescueでシステムバックアップ

ちと検証機を空ける為に、システムバックアップ取ったんですが。普通にdumpってのも芸が無いのでMondo Rescue使ってみました。
ディスクまるごと、MBR領域まで取ってくれるっぽいので、どんなもんかなと。。。
まぁ、実際試してみると、2時間ばかり待って(気が付いたらバックアップ終わってた)、リストア用の起動ディスクFD1枚と、DDS3のテープ1本が出来上がりました。
リストアは、いろいろ他の事で検証機使用してからって事ですが、とりあえずバックアップまでの方法をメモ。

ダウンロードしてきたrpm突っ込んで、コマンド一発で完了。
#rpm -ivh mkisofs-2.01.0.a32-0.EL3.2.i386.rpm 
#rpm -ivh afio-2.4.7-1.i386.rpm 
#rpm -ivh cdrecord-2.0-11.i386.rpm
#rpm -ivh buffer-1.19-4.i386.rpm 
#rpm -ivh mondo-2.0.9-2.rhel3.i586.rpm
#rpm -ivh mindi-1.0.9-2.rhel3.i586.rpm
#rpm -ivh mindi-kernel-1.05-254.rhel3.i386.rpm
#rpm -ivh mondo-2.0.9-2.rhel3.i586.rpm

#mondoarchive -Ot -d /dev/st0 -l GRUB -f /dev/hda -k FAILSAFE
   ・・・・・
FYI, the data disks are stored on tape/CD for your convenience.
Done.
Backup and/or verify ran to completion. Everything appears to be fine.
/root/images/mindi/mondorescue.iso, a boot/utility CD, is available if you want 
Data archived OK. 
Mondoarchive ran OK.
See /var/log/mondo-archive.log for details of backup run.
#
follow me

CPANモジュールを指定箇所に入れまひょ

何かと仕事で利用するPerl、個人的にはあまり好きではないが。。。(Rubyの方が綺麗じゃないか。。。)
とりあえず、パーツとしてCPANモジュールを追加したいと状況になりまして、ディストリでrpmも公開されていない、rpm作るのは簡単だが、それでは依存関係がめちゃくちゃになる可能性があるし、他の環境に影響が。。。

て事で、初めて知った、ビルドする時に、
perl Makefile.PL PREFIX=導入パス PERL_LIB=すでに導入しているライブラリパス
こんな方法あったとは、こりゃいいな~。
うん、これからはrpm作らずこの方法で行こうw

後は自前スクリプトでuse lib qw( ・・・ );しちゃえば、幸せになれる。。。
まぁ、指定して入れても一部おかしい場合もあったり、そこは適当に、pmファイル内にuse lib入れて強制的に。。。こんなやり方いいのか?。。。
follow me

PHPで「undefined mail() function」のエラー

PHPで「undefined mail() function」なるエラーが出た。
う~ん、mail()は標準関数なので、ビルドする際のオプションには関係ないしと思ってたら、ビルド時にsendmail等が存在しない場合、この関数が削られてしまうと情報が。。。

とりあえず再ビルド、再パッケージング。。。
標準関数なのに、削られる事があるってどうなんだろう。
follow me

qmailがビルドできない

qmailが以下のようなエラーが出てビルドできないです。
./load auto-str substdio.a error.a str.a
substdio.a(substdo.o)(.text 0x47): In function `allwrite':
: undefined reference to `errno'
collect2: ld returned 1 exit status
make: *** Error 1
調べたところ、conf-ldファイルを編集することでビルドできるようになるみたいです。

変更前
gcc -s
変更後
gcc -s /usr/lib/libc.a
詳しい事はわかんないです。わかる方おられましたら宜しくお願いいたします。