だめだめじゃない方は、まじめなぺーじもどうぞ
ツッコミの内容は検索サイトからの検索やサイトのレーティングに影響します。そのため問題があるキーワードを含むと思われるツッコミについては、当方の判断で削除することがあります。予めご了承ください。 なお、コメントspam避けのためツッコミの最大文字数は500文字に設定してあります。また、「http」を含む内容のツッコミは投稿できません。
まぁ、こういうだめだめな切符の買い方もありますということで
最近ふたりでやってます orz
誓って、ネタじゃありません(;_;)
Samba の検証やってて気づいたんですが、 Windows って基本的にマイクロ秒単位の精度しかないのかしら。
以下のようにファイルを作成して作成時刻を確認すると、マイクロ秒単位であることがわかります。
明示的に100ナノ秒の時間を設定するとちゃんと設定はできるんですが、なんとなく微妙なかんじ。
試してみました。
デフォルトでは yes になっているので、この状態で netstat すると以下のようになります。
netstat -an | egrep '13[789]|445' tcp 0 0 192.168.135.247:139 0.0.0.0:* LISTEN tcp 0 0 192.168.135.247:445 0.0.0.0:* LISTEN tcp6 0 0 fe80::20c:29ff:fe44:139 :::* LISTEN tcp6 0 0 fe80::20c:29ff:fe44:445 :::* LISTEN udp 0 0 192.168.135.255:137 0.0.0.0:* udp 0 0 192.168.135.247:137 0.0.0.0:* udp 0 0 0.0.0.0:137 0.0.0.0:* udp 0 0 192.168.135.255:138 0.0.0.0:* udp 0 0 192.168.135.247:138 0.0.0.0:* udp 0 0 0.0.0.0:138 0.0.0.0:*
赤字の部分が、このパラメータが yes であることで追加されているバインドになります。
Support for full Windows timestamp resolution has been added. This effectively makes us use Windows' full 100ns timestamp resolution if supported by the kernel (2.6.22 and higher) and the glibc (2.6 and higher).
と書いてあったので、lenny (linux 2.6.24 & glibc 2.7) 環境で確認してみました。
時刻を取得する - GetFileTime関数とかを参考にして、Windows 上のシステム時刻からとってきた 100ns 単位の時刻を SetFileTime() するプログラムを作って確認してみたんですが、1秒単位の精度でしか扱ってくれてないっぽく見えます。
考えてみれば、ファイルシステムが EXT3 だったのがいけなかったっぽいです。XFS でやったら問題なくうまくいきました。
以下のようなプログラムをコンパイルして
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdio.h>
int main (int argc, char *argv[]) {
struct stat sb;
stat(argv[1], &sb);
printf("Last file access: %s", ctime(&sb.st_atim.tv_sec));
printf("Last file access nano: %d\n", sb.st_atim.tv_nsec);
}
stattest という名前のバイナリを作って
$ echo aaa > dame.txt $ stattest dame.txt Last file access: Wed Mar 3 02:05:52 2010 Last file access nano: 799746954
のように、ナノ秒が設定されていることを確認のうえ、Windows 側でもこんなプログラム
#include <windows.h>
#include <stdio.h>
int main(int argc, char* argv[])
{
FILETIME tmTime;
HANDLE hFile;
GetSystemTimeAsFileTime(&tmTime);
hFile = CreateFileA(argv[1],
GENERIC_READ | GENERIC_WRITE,
0, NULL, OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL, 0);
SetFileTime(hFile, NULL, &tmTime, NULL);
CloseHandle(hFile);
return 0;
}
から、Samba 上のファイルの最終アクセス時刻を現在時刻で更新してみて、再度 Linux 側で参照してみると
$ stattest dame.txt Last file access: Thu Mar 4 01:06:19 2010 Last file access nano: 15625000
こんな感じで、ちゃんと更新されてました。もちろん Windows 側から Samba 共有上のファイルを GetFileTime() してちゃんとナノ秒(1秒より細かい単位)の時刻が取得できることも確認しています。
ナノ秒の時刻精度は EXT4 もサポートしているっぽいですね。
すべて監査、だとパフォーマンス上も、ログファイルのサイズ的にもよろしくないので、どこまで監査するか、ですが。
インターネット上で少し見て見ました。
full_audit:failure = connect disconnect opendir closedir mkdir rmdir open close rename unlink full_audit:success = connect disconnect mkdir rmdir open close rename unlink
full_audit:prefix = %u|%I|%S full_audit:failure = connect full_audit:success = connect disconnect opendir mkdir rmdir closedir open close read pread write pwrite sendfile rename unlink chmod fchmod chown fchown chdir ftruncate lock symlink readlink link mknod realpath
full_audit:prefix = %u|%I|%m|%S full_audit:success = mkdir rename unlink rmdir pwrite full_audit:failure = none
full_audit:prefix = %u|%I full_audit:failure = none full_audit:success = connect disconnect opendir mkdir \ rmdir closedir open close read pread write pwrite sendfile \ rename unlink chmod fchmod chown fchown chdir ftruncate lock \ symlink readlink link mknod realpath
full_audit:success = open pwrite unlink full_audit:failure = open pwrite unlink
full_audit:failure = connect disconnect opendir closedir mkdir rmdir open close rename unlink full_audit:success = connect disconnect mkdir rmdir open close rename unlink
full_audit:failure = connect disconnect mkdir rmdir open rename unlink full_audit:success = connect disconnect mkdir rmdir open rename unlink
full_audit:failure = connect disconnect opendir closedir mkdir rmdir open close rename unlink full_audit:success = connect disconnect mkdir rmdir open close rename unlink
fake directory create timesパラメータは、伝統的なUNIXではディレクトリの作成時刻の情報を保管していないことから、一律非常に古い時刻(1980年1月1日)を返却するようにするためのパラメータです。
ただ、*BSDではst_birthtimeという構造体メンバにこの情報が保管されていて、SambaでもSamba 3.2.4以降ではこの情報を使うようになってるみたいです。
* Add st_birthtime and friends for accurate create times on *BSD and MacOSX.
というのがあります。
FreeBSD 8.0上でpackagesのSamba 3.2.15で確認しましたが、ちゃんとこの情報を使うようになってました。
ということで、これらの環境ではfake directory create timesパラメータは不要ということで。
事前申し込みが100名超で、実際にも教室を埋め尽くすほどの方にいらっしゃっていただきました。
ありがとうございます。
今回は、実際に動くというところをお見せしようと思って、デモの比重を高めたんですが、やはり予想外に時間をとってしまう&予想外に動かない (-_-; ということで、不手際がありすみませんでした。
資料のほうは近々 OSC のサイトで公開予定です。
デモがうまく動かなかった理由なんですが、デモが終わったときに環境を基に戻し忘れていたという初歩的なミスもあるんですが、Windows が一度認証したユーザの情報をどこかに覚えていて、なかなか忘れてくれないというのも結構悩ましいところです。
ユーザAでログオンするとこうで、ユーザBでログオンすると…みたいなデモもやりたかったんですが、ちょっと難しいですね。

いわゆる黒本ですが、こちらもさらに紆余曲折あり……
LPIC本と出版時期が重なったのは単なる偶然ではありますが。 まぁ、そんなこんなで1月というか、昨年後半はかなり死んでましたです。
最初はもっと引っ掛けっぽい問題も作ったんですが、難しすぎるんで、もうすこし試験のレベルに落としてくださいといわれたりして、若干易しめにしましたが、それでも本番よりは難しいと思います。
ちなみにわたしが書いたのは1章〜3章です。
store dos attributesパラメータが FreeBSD 8.0でも使えるかを確認する際に、FreeBSD で拡張属性を使う方法を少し確認しました。
少なくとも UFS ではデフォルトで拡張属性は有効になっていました。
$ setextattr user DOSATTRIB 0x21 damedame.txt $ getextattr user DOSATTRIB damedame.txt damedame.txt 0x21
みたいな感じで、拡張属性にファイル属性を設定したり、書き込まれたファイル属性の値を確認できます。全体的な設定は extattrctl コマンドで行います。
最後に一山?ありましたが、ようやくモノを見るところまできました。
LPIC 301/302 は共に暗記問題なので、たぶんこの本とかに書いてあることを覚えていさえすれば、良くも悪くも合格できるのではないかと思います。
ということで、よろしくお願いしますm(_"_)m