08/05: Inotify

Category: Linux
Posted by: kato
もう梅雨も終わりですね
そろそろ台風がくる季節でしょうか、雷や停電に備えないといけないですね

さてさて、今日は linux でファイルに変更があったときに教えてくれる Inotify の紹介です。
この Inotify ですが、 dnotify とくらべて非常に簡単に扱えます。
  1.  
  2. int fd, wd;
  3. fd = inotify_init();
  4. wd = inotify_add_watch(fd, "/path", IN_CREATE | IN_DELETE);
あとは fd から read で読み出せばいいわけです(読み出したデータは 'struct inotify_event' 構造体です)。

» Read More

Category: Linux
Posted by: kato
HTTP で POST をするプログラムが必要になったので書こうと思いました。
流れは、
  1. 送信するデータの作成
  2. 送信先ホストに接続
  3. 送信
ですね。

C とかで作るのは面倒なので perl で作ろうと思います

まずは送信データのためのテンプレートを書きます。

が、その前に linux だと改行コードが違うのでまずは unix2dos を書くことにしました
コード。
  1.  
  2. ---- unix2dos ----
  3. #!/usr/bin/perl -p
  4.  
  5. s/\x0a/\x0d\x0a/;
  6. ---- unix2dos ----
・・・(^^;

さて、送るデータのテンプレートを書きます(perl の TemplateToolkit を使うのでそれようのテンプレートです)。

» Read More

Category: Linux
Posted by: kato
もうすぐ夏ですね。
夏といえば PC が熱くなる季節なので色々と対策をしないといけないです。
熱対策といえばソフトでは cpu の動作周波数を下げたりファンの回転数をあげたりするのが有効ですよね、ということで cpu の動作周波数を変更するシェルスクリプトを書いてみました(Linux 用です)。

cpufreqd などを使えと言われるかもですけどうちのノートPC には入れる余裕が無いです(cpufreqd パッケージは 0.25MB もあるんです!)。
それにそんなに高度な制御はノートPC では使わないかなあと思うから

以下、コード

» Read More

Category: Linux
Posted by: kato
buildroot を使います
今回ディスクレス化の対象にしたのは NEC の PC-VL1000N87D です。
なぜ、このPCをディスクレスにしたかったかというと、HDD が死んじゃったんです。
それで、買ってくるのもめんどくさいなーってことで FDD を利用したネットワークブートをすればいいんじゃないかと思ったわけです(って FDD ってディスクじゃん、ディスクレスじゃないw)。


今回のブートローダとOSのイメージファイルの作成の手順。

» Read More

Category: Linux
Posted by: GUI
最近ネットワークの勉強がしたくて自宅でLinuxの
ディストリビューションであるCentOSをインストールして楽しんでます。
LAN内でですが。。

初めはNICが認識しないという定番パターンにこけて悩んだときもありつつ、
DNSやDHCPやIPパケットのルーティングに感動したりしました。

わからないことが次々と出てきていますが、なかなか楽しいですし、いいものです。

セキュリティの勉強もしたいなぁ。
う~ん。
まずはファイルサーバをLAN内で立ててみよう。
null
null
Category: Linux
Posted by: kato
こんにちは、kato です。
最近寒いですね、ここ数日で急に冷え込んできた気がします。
風邪には気を付けたいものですね。


さてさて、前回前々回と LFS を作っている事を書いたわけですが、今日もその流れです。

前回の記事ではさらっと流されてますが、実は今構築中のシステムではスワップ領域を使いません!!(前回の free コマンドの出力の Swap の部分を見てもらえるとわかると思います)。
さらに、ハードディスクへの書き込みも無くそうとがんばってます。
が、そこで引っかかってくるのが /etc 以下にある mtab や、 resolv.conf などのデーモンやプログラムによって書き換えられてしまうファイル郡です。
/var などはそのまま ramdisk にしてしまえばいいのですが /etc を丸ごと ramdisk にするわけにもいかず(主にメモリ容量の問題)、ソースファイルを修正するのもあんまり現実的じゃないので、シンボリックリンクやハードリンクを使ってうまく解決しようかと思っていました・・・が、そこで素朴な疑問が。
「KNOPPIX ってどうやってるんだろう?」


えーと一応知らない人に説明しとくと、KNOPPIX とはハードディスクドライブにインストールせず(ハードディスクドライブにインストールする事も出来る)に CD から起動できるドイツ生まれの Linux OS です。
これはどういうときに使うかというと、MBR などに書き込んでしまって起動できなくなったときに復旧するために使ったり、いつでもどこでも同じ環境で使いたい人などが使うかもしれないです。
ちなみにハードディスクドライブが無くても動くと思います(未確認)。
なのでハードディスクドライブをケチって買わなかった人などにもお勧めです(笑)。


さて、今回重要なのはハードディスクにインストールしないで使えるという部分です。
なんで、それが重要なのかというと KNOPPIX は普通 CD-R に書き込んで使います。
CD-R に書き込んでそこからブートするということはルートファイルシステムが読み込み専用になるということです。
読み込み専用になるということは書き込みが出来ないという事ですよね?ということはそのあたりの実現の仕方をまねすればいいんじゃないだろうかと思ったわけです。
それを思いついたのが学校から帰る途中だったので、部屋に戻ったら早速調べてみよう・・・
と、思いましたが、部屋に着いたのが9時10分くらいだったので
「もう Xファイル ザ・ムービー 始まってるじゃん!!」
ということでテレビ見ながら調べてました。


まず google 先生に聞いてみようと思い。
KNOPPIX 仕組み、などのキーワードで1時間くらい検索してみましたがそれっぽいのは引っかからなかったので、実際に KNOPPIX を使って調べたほうがいいんじゃないかと思って、KNOPPIX を起動させていろいろ試して見ることにしました。

・・・

調べた結果、、、
ディレクトリ構成
/ramdisk   ここが ramdisk になってる
/KNOPPIX  ここにCDの中身が入ってる。
/UNISONFS ここは/KNOPPIX と /ramdisk をあわせたものが入ってる。
/dev デバイスファイル
/sys 同じく。
/proc procfs
あとはシンボリックリンク多数。

こんな感じになっていて、/UNISONFS というディレクトリには基本的に /KNOPPIX のファイルがそのまんま入っていて、変更したりファイルを追加したりすると /ramdisk に入っていくというものになってました。
/UNISONFS を調べてみると、このディレクトリが aufs というファイルシステムであることがわかりました。
そこまで調べたところでちょうど Xファイル ザ・ムービー が終わったのでとりあえずブログに書いておくことにしました。
終わり。
次回は、「aufs で作ってみる。」です、きっとあります。


それにしても Xファイル ザ・ムービー 面白いですね。
Xファイルシリーズは見たことが無かったのですが、なんかエイリアンとか出てきて面白かったです。
Category: Linux
Posted by: kato
こんにちは、kato です。
昨日の予告通り今日はカーネルの再構築をしています。

この文章はデスクトップ PC で書いているのですが、この文章を書いている最中も隣ではノート PC がカーネルのビルドをがんばってやってくれています。
今回のビルドで変更したのは、
make menuconfig などを実行したときに表示される項目の中の上3つの項目を変更しました。
  1. General setup - 全般的な設定
  2. Enable loadable module support - モジュールとか
  3. Enable the block layer - ブロックレイヤ?いまいちうまく翻訳できないですが、要するにブロックデバイスの基本的な設定です(I/O スケジューラとか)

...

カーネルのビルドが終わったので早速再起動します。。。その前に、ブログに書くために .config ファイルをデスクトップの方に送っておきます。
今回の .config ファイル(ファイルの形式が zip になってますが嫌がらせではなく(笑)、このブログの制限で zip ファイルしかアップできないからです)
ちなみに、今回 Linux 環境を構築した PC は kcg パソコン(ver2007)です。


さて、気を取り直して新しくビルドしたカーネルでブートしてみましょうか。

...

とりあえず起動しました。だいたい問題なく動いてるみたいなので free コマンドを使ってメモリ使用量などを調べて見ます。

結果。
起動直後
    $ free -m total used free shared buffers cached Mem: 1249 22 1227 0 2 9 -/+ buffers/cache: 10 1238 Swap: 0 0 0
X を起動させた状態(WM は twm を使っています)
    $ free -m total used free shared buffers cached Mem: 1249 103 1146 0 3 30 -/+ buffers/cache: 69 1179 Swap: 0 0 0
なかなかいい感じですね。
X を起動させた状態で空きメモリが 1146-1179 MByte です。


とりあえず今日はここまでです。
明日はもう一回カーネルの再構築をするか、ブートスクリプトの調整とか、削除とかをすると思います。
ただ、ブログに書くかどうかはわかりません(笑)
それでは、また会う日まで
Category: Linux
Posted by: kato
こんにちは、久しぶりに書き込みます。
kato です。


最近は LFS を作ってました。
LFS とは、全部のパッケージをソースからコンパイルして Linux 環境を構築することです。

なんか、全部ソースからコンパイルするって書くと依存関係とかアプリケーションの相性とか、各アプリケーションのバグとか(笑)考えないといけないから大変そうに思いますが、
Welcome to Linux From Scratch! このサイトにいろいろ情報が(と言うか、パーティションを作るところからの手順がすべて)書いてあるので割とつまることなくできました。

で、 LFS の基本部分は2週間位前に出来上がっていて今は X をインストールしてみたり、細かい修正とかしてる所です。
とりあえず、カーネルのバージョンを 2.6.22.5 から 2.6.27.4 に上げてみました。
最初は glibc もバージョン上げたりしなきゃいけないかな、と思ってましたが案外すんなり動いてラッキーだったです。

で、次はもう一度ビルドオプションを設定しなおして再構築します(最初は動作確認をするだけだったので古い方の Linux カーネルの .config ファイルをコピーして make oldconfig しただけでした)。
なのでとりあえず、明日は設定をやり直して再構築しようかと思います。
それでは、また明日(あくまで、予定です(笑))

09/23: LD_PRELOAD

Category: Linux
Posted by: kato
こんにちは、katoです。
最近このブログに書いてなかったのでひさしぶりに何か書いてみようと思いました。
今回は、実行ファイルをいじったりできそうな感じのお話です。

ld.so(linux の動的リンカ・ローダ 、共有ライブラリとかもってきてくれるひとです) が使う環境変数に LD_PRELOAD と言うのがあります。
この LD_PRELOAD は、名前の通りライブラリを前もってロードしといてくれます。
つまり、

LD_PRELOAD="./hoge.so" ./a.out

とすると、カレントディレクトリの hoge.so を a.out の実行時にロードしておいてくれます。
以下、簡単なテスト

# テスト用の実行バイナリ作成。test.c a.out が作られる。
$ echo '#include 
int main(int argc,char *argv[]){
    printf("I am %s \n",argv[0]);
    return 0;
}' > test.c ; gcc test.c

# 共有ライブラリの作成。preload.c preload.so が作られる。
$ echo '#include 
__attribute__((constructor))
void helloworld(void){
    printf("hello world \n");
    return ;
}' > preload.c ;gcc -fPIC -shared preload.c -o preload.so

# 実行してみる。
$ ./a.out
I am ./a.out
# LD_PRELOAD 付きで実行してみる。
$ LD_PRELOAD="./preload.so" ./a.out
hello world 
I am ./a.out

なんか、すごいですね。
passwd とかにロードさせればセキュリティホールにもなりそうですが setuid された実行ファイルにはロードできないようになっているみたいです。
いろいろ組み合わせればおもしろいことができそうです。
この機能を使ったらパッチとか簡単に作れそうですね、というか、今回のネタの元になったのが
ついカッとなって実行バイナリにパッチ
という、ブログの記事でした。
その記事を読んで、 linux でもいろいろできるんだなーとか思っていろいろ調べてみたしだいです。

それにしても、linux でメモリへの展開のされかたがいまいちわかんないorz
Category: Linux
Posted by: mayuge
ファイルシステムを復旧するためのコマンドとしてfsckというのがありますが、とても万能と言えるものではありません。カーネルが急に落ちたりして迷子のiノードが発生しまうと、fsckコマンドでは復旧することができません。

そこで考え出されたのがジャーナリングという方法です。これはあるコマンドを実行する前にそのコマンドをこれから実行するという事実をログとして保存しておくというものです。これにより、迷子のiノードが発生した場合でも、ログを参照することで復旧することができます。

この機能はぜひ私たち人間にも欲しいものです。何かしようとした時に横から話しかけられたりして、自分が今から何をしようとしていたのかを忘れてしまったことはありませんか?私はよくあります。ジャーナリングシステムを人間にも搭載してほしいと思う今日この頃です。