綾小路龍之介の素人思考

テクニカルな話。

本記事にはなりそうもないけれど、テクニカルな話をしているメモ書きではある。

目次

[linux] nfsrootで使う。

debianの純正カーネルはnfs rootモジュールとNICドライバを、組み込みモジュール、組み込みドライバとしていないので、純正カーネルではnfs root出来ない。そこで、基本的な設定は純正カーネルに準拠して、nfs rootに必要な、nfs rootモジュールとNICドライバを組み込みにする。

まずnfs root環境の整備。nfsのrootになる場所(/tftpboot/Linux/)にdebian lennyをdebootstrupでインストール。debootstrapでlennyをインストールした場所にchroot。以降、カーネルコンパイルが終わるまでこの環境の下で作業。

server:~$ su -
server:~# mkdir -p /tftpboot/Linux
server:~# debootstrap --arch i386 lenny /tftpboot/Linux http://ftp.jp.debian.org/debian
server:~# chroot /tftpboot/Linux

純正カーネルのコンパイルに必要なパッケージをインストールするためにaptラインにdeb-srcを追加(/etc/apt/sources.listにdeb-srcのaptラインを追加)。aptitude update、aptitude upgradeを行う。

server:/# cat /etc/apt/sources.list
deb http://ftp.jp.debian.org/debian lenny main
server:/# echo "deb-src http://ftp.jp.debian.org/debian lenny main" >> /etc/apt/sources.list
server:/# cat /etc/apt/sources.list
deb http://ftp.jp.debian.org/debian lenny main
deb-src http://ftp.jp.debian.org/debian lenny main
server:/# aptitude update
server:/# aptitude upgrade

純正カーネルをビルドする際に必要なパッケージのインストール。

server:/# aptitude -R build-dep linux-image-2.6.26-1-686

debian lenny純正カーネルのソースパッケージをインストール(recommendパッケージは無で)。

server:/# aptitude -R install linux-source-2.6.26

ソースがインストールされたディレクトリに移動して、パッケージの解凍。解凍して出来たディレクトリから同じディレクトリにあるlinuxにシンボリックリンクを張る。

server:/# cd usr/src/
server:/usr/src# ls
linux-source-2.6.26.tar.bz2
server:/usr/src# tar jxf linux-source-2.6.26.tar.bz2
server:/usr/src# ln -s linux-source-2.6.26/ linux

debian純正のconfigファイル(/boot/config-2.6.26-1-686)を使うためにカーネルイメージをインストール。途中2回yes/noで質問。1回目をYes、2回目をNoで答える。インストールされた純正コンフィグファイルをコピーする。

server:/usr/src# ls /boot
server:/usr/src# aptitude -R install linux-image-2.6.26-1-686
Package configuration

Configuring linux-image-2.6.26-1-686

There is no vmlinuz symbolic link.

Such a link can be created now and will be updated by subsequently installed
image packages. This will be useful with some boot loaders such as LILO.

Create a symbolic link to the current kernel image?

<Yes>                         <No>

Package configuration

Configuring linux-image-2.6.26-1-686

You are attempting to install an initrd kernel image (version 2.6.26-1-686).
This will not work unless the boot loader is configured to use an initrd.

An initrd image is a kernel image that expects to use an INITial Ram Disk to
mount a minimal root file system into RAM and use that for booting.

The boot loader must be configured to use such images and the system will not
boot until this is done.

This message will appear for any new kernel installation unless the following
is added to /etc/kernel-img.conf:

"do_initrd = Yes"

Abort initrd kernel image installation?

<Yes>                         <No>

server:/usr/src# cp /boot/config-2.6.26-1-686 linux/.config

linuxディレクトリに移動。make oldconfigの途中でgccがないと怒られる(gcc-4.1はある。)のでgccをインストール。シンボリックリンク貼ればよいのかな。さらに、sys/types.hが無いとか言われるのでlibc6-devパッケージをインストールする。warningが残るがこのwirningは無視。

server:/usr/src# cd linux
server:/usr/src/linux# make oldconfig 1> ../oldcfg.stdout 2> ../oldcfg.stderr
server:/usr/src/linux# cat ../oldcfg.stderr
/bin/sh: gcc: command not found
make[1]: *** [scripts/basic/fixdep] Error 127
make: *** [scripts_basic] Error 2
server:/usr/src/linux# aptitude -R install gcc
server:/usr/src/linux# make oldconfig 1> ../oldcfg.stdout 2> ../oldcfg.stderr
server:/usr/src/linux# vi ../oldcfg.stderr
server:/usr/src/linux# aptitude -R install libc6-dev
server:/usr/src/linux# make oldconfig 1> ../oldcfg.stdout 2> ../oldcfg.stderr
server:/usr/src/linux# cat ../oldconfig.stderr
scripts/kconfig/lex.zconf.c:1628: warning: 'input' defined but not used

oldconfigが通ったので次にmenuconfig。ncrusesのライブラリがないと怒られるのでlibncurses5-devをインストール。でnfs bootとNICドライバ(Intel i82559に対応するe100かeepro100)の設定を変更する。と思ったがなぜかNICドライバは組み込みにしなくても動いた。(CONFIG_E100=yではなくCONFIG_E100=mのまま)。

server:/usr/src/linux# make menuconfig
 *** Unable to find the ncurses libraries or the
 *** required header files.
 *** 'make menuconfig' requires the ncurses libraries.
 ***
 *** Install ncurses (ncurses-devel) and try again.
 ***
make[1]: *** [scripts/kconfig/dochecklxdialog] Error 1
make: *** [menuconfig] Error 2
server:/usr/src/linux# aptitude -R install libncurses5-dev
server:/usr/src/linux# make menuconfig
  1. Networking support -- Networking options -- IP: kernel level autoconfiguration
  2. Networking support -- Networking options -- IP: kernel level autoconfiguration -- IP: DHCP support
  3. Networking support -- Networking options -- IP: kernel level autoconfiguration -- IP: BOOTP support
  4. Networking support -- Networking options -- IP: kernel level autoconfiguration -- IP: RARP support
  5. Filesystems -- Network File Systems -- NFS filesystem support

出来たファイルのdiffをとるとこんな感じ。コンフリクトチェックのためにCONFIG_DEBUG_SECTION_MISMATCH=yを入れておいたほうが良かったかな。

server:/usr/src/linux# diff /boot/config-2.6.26-1-686 .config
4c4
< # Sat Jan 10 17:07:32 2009
---
> # Sat Mar 14 03:07:02 2009
505c505,508
< # CONFIG_IP_PNP is not set
---
> CONFIG_IP_PNP=y
> CONFIG_IP_PNP_DHCP=y
> CONFIG_IP_PNP_BOOTP=y
> CONFIG_IP_PNP_RARP=y
3869c3872
< CONFIG_NFS_FS=m
---
> CONFIG_NFS_FS=y
3878c3881,3882
< CONFIG_LOCKD=m
---
> # CONFIG_ROOT_NFS is not set
> CONFIG_LOCKD=y
3881c3885
< CONFIG_NFS_ACL_SUPPORT=m
---
> CONFIG_NFS_ACL_SUPPORT=y
3883,3884c3887,3888
< CONFIG_SUNRPC=m
< CONFIG_SUNRPC_GSS=m
---
> CONFIG_SUNRPC=y
> CONFIG_SUNRPC_GSS=y
3887c3891
< CONFIG_RPCSEC_GSS_KRB5=m
---
> CONFIG_RPCSEC_GSS_KRB5=y
4087c4091
< CONFIG_CRYPTO_BLKCIPHER=m
---
> CONFIG_CRYPTO_BLKCIPHER=y
4106c4110
< CONFIG_CRYPTO_CBC=m
---
> CONFIG_CRYPTO_CBC=y
4144c4148
< CONFIG_CRYPTO_DES=m
---
> CONFIG_CRYPTO_DES=y

で、カーネルパッケージファイルを作る。

server:/usr/src/linux# make-kpkg clean
server:/usr/src/linux# make-kpkg --append_to_version -1-i686 --initrd --revision=custom.2.0 kernel_image
....................................................
  LD [M]  sound/usb/usx2y/snd-usb-usx2y.ko
make[1]: Leaving directory `/usr/src/linux-source-2.6.26'
/usr/bin/make  EXTRAVERSION=-1-i686  ARCH=i386 \
                             -C Documentation/lguest
make[1]: Entering directory `/usr/src/linux-source-2.6.26/Documentation/lguest'
cc -Wall -Wmissing-declarations -Wmissing-prototypes -O3 -I../../include    lguest.c  -lz -o lguest
lguest.c:34:18: error: zlib.h: No such file or directory
make[1]: *** [lguest] Error 1
make[1]: Leaving directory `/usr/src/linux-source-2.6.26/Documentation/lguest'
make: *** [debian/stamp/build/kernel] Error 2

コンパイルの途中でzlib.hがないといわれるので導入。改めてmake-dpkg。

server:/usr/src/linux# aptitude -R install zlib1g-dev
server:/usr/src/linux# make-kpkg --append_to_version -1-i686 --initrd --revision=custom.2.0 kernel_image

出来たパッケージをインストール。質問にはNoで答える。

server:/user/src# cd ../
server:/user/src# make-kpkg --append_to_version -1-i686 --initrd --revision=custom.2.0 kernel_image
Configuring linux-image-2.6.26-1-i686

You are attempting to install an initrd kernel image (version 2.6.26-1-i686)
This will not work unless you have configured your boot loader to use initrd.
(An initrd image is a kernel image that expects to use an INITial Ram Disk to
mount a minimal root file system into RAM and use that for booting).

As a reminder, in order to configure LILO, you need to add an
'initrd=/initrd.img' to the image=/vmlinuz stanza of your /etc/lilo.conf

I repeat, You need to configure your boot loader -- please read your
bootloader documentation for details on how to add initrd images.

If you have already done so, and you wish to get rid of this message, please
put
 "do_initrd = Yes"
in /etc/kernel-img.conf. Note that this is optional, but if you do not, you
will continue to see this message whenever you install a kernel image using
initrd.

Do you want to abort now?

<Yes>                         <No>

chroot環境での仕事はこれで終了。exitして元の環境に戻る。

server:/user/src# exit
server:~#

で、クライアントを起動。ブロックデバイスや、スピーカがこれで使えるようになる。ためしにlsmodしてみると多くのモジュールが読み込まれていることがわかる。

nfsrootclient:~# lsmod

メモリを大量に食わせて落とす。一方の仮想コンソールで走らせて、もう一方の仮想コンソールでtop -sするとメモリが食われていく様子がわかる。確かにメモリ確保に失敗しそうなタイミングでおちる。

nfsrootclient:~# cat test.pl
#!/usr/bin/perl -w

use warnings;
use strict;

my $f;
my $i = 0;
my $j = 0;

for ($i = 0; $i < 1000; $i++ ) {
        for ($j = 0; $j < 1000; $j++ ) {
                print "$i\t$j\n";
                $f->{$i}->{$j}++;
                my @F = (1..100);
                $f->{$i}->{$j} = \@F;
        }
}
nfsrootclient:~# perl test.pl

ブロックデバイスのパーティションタイプをチェックしてswap領域をfstabに追加する。swap領域を有効化して状態チェック。

nfsrootclient:~# fdisk -l /dev/hda
nfsrootclient:~# echo "/dev/hda5       swap    swap    defaults        0       0" >> /etc/fstab
nfsrootclient:~# swapon -a
nfsrootclient:~# swapon -s

再度先のメモリ食いつぶしプログラムを走らせながらtop -sでチェック。VIRTが物理メモリよりも大きくなり、swapが発生し、swap領域を使い果たし、落ちることを確認。swap領域が再起動時に自動マウントされることを確認。

rootパスワードの登録。一般ユーザの登録。rshサーバの導入。終了。

nfsrootclient:~# passwd
nfsrootclient:~# adduser hoge
nfsrootclient:~# aptitude -R install rsh-server
nfsrootclient:~# shutdown -h now

再起動して、サーバ側からrshで接続。

hoga@server:~$ rsh -l hoge 192.168.1.5

ログイン成功したらrootになる。ethtoolの導入。wol出来るようにeth1を変更。終了。

hoge@nfsrootclient:~$ su -
nfsrootclient:~# aptitude -R install ethtool
nfsrootclient:~# ethtool -s eth0 wol g

magic packetに反応するか確認。

server:~# wakeonlan -i 192.168.1.5 00:00:00:00:00:00

aptitudeを使うためにパッケージリストのupdateとupgrade。debian lenny純正カーネルのソースパッケージをインストール(recommendパッケージは無で)。tftpbootのルート(/tftpboot)を/etc/exportsに追加。

server:# echo "/tftpboot 192.168.0.0/255.255.0.0(rw,no_subtree_check,no_root_squash)">> /etc/exports
server:# ls /boot
server:# cp /boot/config-2.6.26-1-686 .config
server:# cat ../oldconfig.stderr

nfs関係のモジュールとNICどらいばを組み込みにする。

server:# make menuconfig
server:# diff /boot/config-2.6.26-1-686 .config
3,4c3,4
< # Linux kernel version: 2.6.26
< # Sat Jan 10 17:07:32 2009
---
> # Linux kernel version: 2.6.26-1-i686
> # Fri Mar 13 09:37:32 2009
505c505,508
< # CONFIG_IP_PNP is not set
---
> CONFIG_IP_PNP=y
> CONFIG_IP_PNP_DHCP=y
> CONFIG_IP_PNP_BOOTP=y
> CONFIG_IP_PNP_RARP=y
1679c1682
< CONFIG_MII=m
---
> CONFIG_MII=y
1749c1752
< CONFIG_E100=m
---
> CONFIG_E100=y
3869c3872
< CONFIG_NFS_FS=m
---
> CONFIG_NFS_FS=y
3878c3881,3882
< CONFIG_LOCKD=m
---
> CONFIG_ROOT_NFS=y
> CONFIG_LOCKD=y
3881c3885
< CONFIG_NFS_ACL_SUPPORT=m
---
> CONFIG_NFS_ACL_SUPPORT=y
3883,3884c3887,3888
< CONFIG_SUNRPC=m
< CONFIG_SUNRPC_GSS=m
---
> CONFIG_SUNRPC=y
> CONFIG_SUNRPC_GSS=y
3887c3891
< CONFIG_RPCSEC_GSS_KRB5=m
---
> CONFIG_RPCSEC_GSS_KRB5=y
4087c4091
< CONFIG_CRYPTO_BLKCIPHER=m
---
> CONFIG_CRYPTO_BLKCIPHER=y
4106c4110
< CONFIG_CRYPTO_CBC=m
---
> CONFIG_CRYPTO_CBC=y
4144c4148
< CONFIG_CRYPTO_DES=m
---
> CONFIG_CRYPTO_DES=y
server:# ls /usr/src
linux        
linux-source-2.6.26
linux-source-2.6.26.tar.bz2
linux-image-2.6.26-1-i686_custom.1.0_i386.deb
server:# cp linux-image-2.6.26-1-i686_custom.1.0_i386.deb /tftpboot/Linux/usr/src

nfsのrootになるディレクトリにchroot。dpkgに依存関係でおこられた。linux-image-2.6.26-1-i686_custom.1.0_i386.debが必要としているパッケージをaptitudeでインストール。純正のlinux-image-2.6.26-1-686パッケージと依存関係はほとんど同じと思われるが、怒られたものだけをインストール。再度カーネルのインストール。

server:# chroot /tftpboot/Linux
server:# cd /usr/src
server:# aptitude show
server:# dpkg -i kernel-image-2.4.26-1-i686_custom.1.0_i386.deb
server:# aptitude show linux-image-2.6.26-1-686
Package: linux-image-2.6.26-1-686
New: yes
State: installed
Automatically installed: no
Version: 2.6.26-13
Priority: optional
Section: admin
Maintainer: Debian Kernel Team <debian-kernel@lists.debian.org>
Uncompressed Size: 59.6M
Depends: module-init-tools, initramfs-tools (>= 0.55) | yaird (>= 0.0.13) | linux-initramfs-tool
PreDepends: debconf | debconf-2.0
Recommends: libc6-i686
Suggests: linux-doc-2.6.26, grub | lilo
Conflicts: initramfs-tools (< 0.55), yaird (< 0.0.13)
Provides: linux-image, linux-image-2.6, linux-modules-2.6.26-1-686
Description: Linux 2.6.26 image on PPro/Celeron/PII/PIII/P4
 This package provides the binary image and pre-built loadable modules for Linux kernel 2.6.26 on Pentium Pro/Celeron/Pentium II/Pentium III/Pentium 4 machines.
server:# aptitude -R install initramfs-tools yaird linux-initramfs-tool
server:# dpkg -i kernel-image-2.4.26-1-i686_custom.1.0_i386.deb

nfsクライアントの起動。ハードウェアが使えるようになっていることを確認。

client:# fdisk /dev/hda

[linux] whoisコマンドとwhoisサービス

whois検索するためのwhoisクライアントとしてwhoisとjwhoisとある。上手くいかないときはwhoisサービスで。

で、whoisコマンド探してみた。jwhoisとwhoisパッケージがそれらしいのだが、GNUがパッケージメンテしているjwhoisパッケージを入れてみる。jwhoisパッケージは設定ファイルでwhoisサーバを指定できるそうな。だから、jwhoisにしてみた。

$ aptitude search whois
p   gwhois                          - generic Whois Client / Server
p   jwhois                          - Improved Caching Whois client
p   libnet-whois-raw-perl           - Perl Module providing an API to access who
p   libnet-whois-ripe-perl          - RPSL whois client
p   libnet-xwhois-perl              - Whois Client Interface for Perl5
p   whois                           - an intelligent whois client

で、導入。使う。

# aptitude -R install jwhois
# jwhois yahoo.com
# jwhois example.com

jwhois example.comはなぜだか上手くいかないのよ。ということで、whoisパッケージも入れてみて、使う。

# aptitude -R install whois
# whois yahoo.com
# whois example.com

whoisコマンドにすると、example.comでも成功するのだけれど、両方で成功していたyahoo.comの出力結果が違う。まぁそれでもだめならwhoisサービスを使う。googleでwhoisで検索して結果から適当に選んで使えばよいのよ。結局出力の違いは使うサーバの違いで、同じ.comドメインでも別サーバを参照してwhoisの結果を引っ張ってくればそりゃぁ結果も変わるわけだ。

jwhoisはそこのところ良くわかっているようで、設定ファイル/etc/jwhois.confを編集することで設定を変えることが出来るようだ。jwhoisもwhoisも参照するwhoisサーバを変えることが出来るので、あまり問題では無いともいえるが、もううちはwhoisやってませんとか言われる場合は恒久的な変更が必要なわけで、その場合はwhoisよりもjwhoisのアプローチのほうが正しいのではなかろうかと思えてしまう。

  1. whois - Google 検索
  2. WHOIS - Wikipedia
  3. Debian -- lenny の jwhois パッケージに関する詳細
  4. Debian -- lenny の whois パッケージに関する詳細
  5. whois manpage - Google 検索
  6. whois(1): client for whois service - Linux man page
  7. jwhois manpage - Google 検索
  8. jwhois(1): client for whois service - Linux man page

IPアドレスやFQDNから地域情報へ

アクセス解析や転送速度測定のページなどで、なぜか、自分がどこからアクセスしているか表示されている。どうしてだろう。と思って調べたら、IP-based Intelligence Technology SurfPointというAPIを使った、サービスが見つかった。IPひろばと言うサイトで、IPアドレスやFQDNを入れると、対応した地域情報が表示されるようだ。1日の接続回数が制限されているようで、上限に達すると検索できなくなる。

1つのIPアドレスに複数のドメインネーム

バーチャルドメインという技術は一つのIPアドレスを複数のドメインネームで共有しているが、その技術の根幹はアプリケーション層で各ドメインごとのリクエストを捌いている点にある。IPの含まれるインターネット層だけではどのドメインに対するリクエストなのかを出来ない。つまり、パケットの中にどのドメインに対するリクエストなのかを判断する情報が含まれているプロトコルで無い限り、バーチャルドメインという技術はカバーできないのだ。

バーチャルドメインという技術がある。例えば、digで、あるドメインネームをIPアドレスに変換する。このとき単一のドメインから単一のIPアドレスにに変換されるわけだが、別のドメインネームからIPアドレスに変換された場合も同じIPアドレスに変換されたとする。つまり、複数のドメインネームが1つのIPアドレスを共有している。

このような場合は別に珍しく無いと思っていた。それは人間にとってのわかりやすさのために、mail.example.comとwww.example.comをあえて別にしておくことだと思っていた。しかし、そうでないこともあるのだ。つまり、全く別のドメイン。TLDすら同じでないドメインネーム同士が一つのIPアドレスを共有して同じサービスを使っている場合がある。

ドメイン持参の共有webスペースはこの典型的な例だと思う。持ち寄るドメインはどんなものでも良いのだが、持ち寄られたドメインは全て同じIPアドレスを共有している。digでみると良くわかる。

同じIPアドレスを共有しているにもかかわらず、ブラウザでそれぞれのドメインネームでアクセスすると別のページが返ってくるわけだ。こりゃあどういうことなんじゃと思っていたら、80番ポートをリッスンしているApache等のwebサーバがブラウザなどが送ってきたhttpリクエストのhostヘッダを読んで、hostヘッダの内容ごとに別の内容を返しているのだそうな。つまり、IP layerだけでは話は済まなかったということね。

どうしてこのことについて話す気になったのかというと、

この「ネタ帳」ブログは neta.ywcafe.net でありそのIPアドレスは 59.106.13.216 である。共用レンタルサーバーなので他にも使っている人が当然いる。

他にも30個ぐらいあるらしいのだがとりあえずこの3つだけあげてみる。上記のWebサーバのIPアドレスはすべて 59.106.13.216 である。別におかしなことではない。借りたレンタルサーバーが同じだっただけのことで、いわば「たまたま同じマンションに住んでいる人」である。

という記述を見て、ああ、そういえばと思ったからです。

  1. tcp ip osi - Google 検索
  2. TCP/IP と OSI 参照モデル
  3. ip アドレス ドメイン dig 共用 - Google 検索
  4. 共用レンタルサーバー ip アドレス ドメイン - Google 検索
  5. バーチャルドメイン - Google 検索
  6. バーチャルホスト - Wikipedia
  7. spamhaus.orgをはじめとするIPアドレスベースのブラックリスト(RBL)を使ってはいけない

無料ホームページスペースの広告削除は真か偽か

無料モデルの利益の源泉は広告である。無料であることの代償としてユーザは企業の広告塔であることを強制される。

無料であることの責任

たとえ広告が挿入される無料ホームページスペースであったとしても、管理者は訪問者に広告を見せない様にサイトを構築することが可能である。果たしてそれは真か偽か。もちろん、ホームページスペースを貸し出す側の企業は商業的メリットがなければ、わざわざ無料でホームページスペースを貸し出すようなことはしない。ホームページスペースの管理者は本来ならば、企業に貸し出されたホームページスペースの対価を払わねばならないはずだ。サービス利用者に対価を求めない無料サービスは、利用者がサービスを使用することそれ自体が収入の源泉になっている。無料ホームページスペースとは、管理者が訪問者にとって魅力的なコンテンツを配信し、このサイトから無料サービス供給元へのトラフィックを成立させてこそ成り立つ、広告収入モデルなのである。つまり、サイト管理者は無料サービス供給元のセールスマンなのである。

転送メールを無料サービスとして成立させることが難しい理由はここにある。最近、Infoseekの転送メールサービスが打ち切られた。転送メールとは、あるメールアドレスに送られたメールを別のメールアドレスに転送するサービスである。転送時にメールに手を加えない場合、どうやって

How to organize a information? - 情報の整理

情報の再利用と検索という観点から見て、情報の電子化が叫ばれて久しい。そして情報の電子化を推し進めた結果、僕らは次の問題に直面した。それは情報が多すぎるという問題だ、キーワードマッチングによる検索はごみをよく拾ってしまう。ごみを拾わずにWebやメールといった電子化された情報を整理するにはどうすればいいのだろうか。ツリー構造、代替リンク、タグ付け

ツリー構造

ツリー構造とは昔からの整理方法である。各々の情報に単一のマークを付けて、このマークを基にして情報にアクセスする。例えば、WebでつかわれるURLとかURIとかはツリー構造の一つである。僕が情報管理の方法に欠点を感じる点は、単一のマークを情報にマークすることである。シンボリックリンクという技術はこの点をうまく回避し、同じ情報に対して複数のマークをつけることが出来る。

代替リンク

シンボリックリンクという考え方をもう少し考えてみる。あるプールにまとめて収められている情報に複数のマークを付けてみる。例えば、./row/ というディレクトリに全く未分類の情報が入っているとする。このディレクトリに含まれている情報にディレクトリを介したシンボリックリンクを貼ることでタグを付ける。

$ ls ./row/
001.txt 002.txt 003.txt
$ cd ./tag/game/
$ ln -s ../../row/001.txt uno.txt
$ cd ./tag/boy/
$ ln -s ../../row/001.txt tom.txt
$ ls ./tag/*
tag/game:
uno.txt -> ../../row/001.txt
tag/boy:
tom.txt -> ../../row/001.txt
tag/girl:

このようにすることで、001.txtにgameとboyというタグを貼ったことになる。もし、タグの名前を変えたくなった場合は./tag/game/というディレクトリの名前自体を変えてしまえばよい。

$ cd ../
$ mv game games

ただし、絶対にしてはいけないことは、./row/ ディレクトリに含まれるファイルのファイルネームを書き換えてはいけないということだ。正しく言えば、./row/ ディレクトリの中身のことは忘れようということだ。ファイルの実体はそこにあっても、書き換えや変更はタグディレクトリの中で行うようにすることだ。ここで、001.txtにどのようなタグがつけられているかを探してみよう。

$ cd ./tag/
$ find . -lname '*001.txt*'
./boy/tom.txt
./games/uno.txt

ということで、001.txtにはgameとboyの2つのタグがつけられていることがわかった。ひとつの情報に複数のタグを付けることが出来たのでこの方法は面白いようにも見える。しかし、この方法にも問題点が存在する。それは、タグによる情報の検索だ。ここで、gamesとboyというタグがつけられた情報を選び出したいという場合を考える。当然ながら、001.txtがヒットすればOKだが、これをするには結構コストがかかる。やってみよう。

$ ls -l tag/games/ tag/boy/ | perl -F'/->\s/' -lnae 'print $F[1]' | sort | uniq -c | grep --regex "^\s*2"
      2 ../../row/001.txt

という感じだ。これで、gamesとboyのタグが両方つけられた情報が001.txtという名前だとわかった。さらに、boyとgamesとgirlのタグがつけられたものを探してみる。注意点は、lsコマンドに与えるタグにgirlを追加することと、grepの引数を2から3に変えることだ、次のようにする。

$ ls -l tag/games/ tag/boy/ tag/girl/ | perl -F'/->\s/' -lnae 'print $F[1]' | sort | uniq -c | grep --regex "^\s*3"

当然ながらヒットしない。ヒットしなくてよいのだ。このやり方は問題がある。例えば、gamesのディレクトリに同じ情報を別名でシンボリックリンクを貼っている場合を考える。すると、3つの同じリンク先を持つシンボリックリンクがあるため、ヒットしてしまう。

模倣者の存在を中継する者による大衆行動の操作

大衆行動の動機付けとなる情報の媒介者とは、オリジナルの模倣者でもオリジナルの提供者でもなく、模倣者予備軍に模倣者のイデオロギーを的確に知らせる情報の中継者である。そして、大衆はその行動のオリジナリティを模倣者に感じ、本来のオリジナルの提供者には感じることは稀である。この傾向はWebにおける大衆行動に特に見られるものではない。中継者としての高い能力は大衆の行動の動機付けとなり模倣者の数を増やす。

オリジナル vs 媒介者

オリジナルを頒布するための媒介者となること。ブログ記事や動画共有サイト等で、他人の作成したモノを紹介してそのことで自分のページへのトラフィックを増やす。このようなモデルでどこまで「紹介サイト」の人気が伸び続けるか、僕は見てみたい。新聞やテレビといったメディアと呼ばれるタイプの基本姿勢はまさに「すでにある事実の紹介」である。公正や事実をもって尊しとなす、情報媒介者たちはその情報のオリジナルである必要はない。巨大なオリジナルの媒介者である。

情報の2次配布に伴う事実の公正性については、オリジナルのコピーがオリジナルとなりえるというデジタル情報の特徴ゆえ問題はないと思われる。ただし、ここで問題なのは「紹介サイト」が生き残るためには巨大であらねばならないのではないか、という点だ。情報のハブとして十分に機能するためには、その紹介サイトの信頼性が問題になってくると思う。僕は特に、オリジナルの媒介者としての機能しか持たない「紹介サイト」の人気を保つには十分に大きくなければならないと思っている。その大きさを維持する努力をやめればその信頼性をも揺るがしかねないことになると思う。

ではこれに対して情報のオリジナルであることについてはどうだろうか。常にオリジナルであることはかなり難しいが、サイトのサイズは小さくてもよいという点で優れているように思う。オリジナルであることは、それが存在するだけで十分に価値のあることなのだ。

Web 2.0

Web2.0は集合知というキーワードで説明され、Web2.0を推し進めている企業の株価がどんどん上がっている。集合知はその言葉じりから連想されるような「3人寄れば文殊の知恵」で素直に説明されるのだろうか。僕はそう単純に説明できるものではないと感じている。雑多な情報を整理して提供することで集合知を実現させ、ここで得られた知恵をさらに発展できる誰かからの情報提供で、集合知はより洗練されていく。

僕らが注意しなければいけないことは、集合知が洗練されていく過程には「誰かからの情報提供」が必要であるという点だ。当然ながらWeb2.0を推し進める企業はその点についてよく理解し、これまでWebを見るだけ聞くだけにとどまっていたユーザーがWebに情報を提供しやすい土壌を意図的に作り出している。このことは近年広がりを見せてきた口コミサイトでよく見られ、書き込みなどの方法によってユーザーが能動的に情報を発信せずとも、サイト内でのユーザの行動から情報を吸い上げるシステムが設置されている。

APIとプロトコル

間違っているのだけれど感覚的な理解として、プロトコルは業界団体が定めたものって感じで、APIは一企業が定めたものってきがする。API上がりはプロトコルになれるのかな。

検索エンジン登録

検索エンジンに登録することはどこまでSEO的に使えることになるのか。僕のページはこれまでどこの検索エンジンにも登録していなかったが、いくつかの検索エンジンのクローラがサイトを訪れているし、検索エンジンからのアクセスもある。コンテンツの充実と検索エンジン登録とどちらが使えるSEO対策なのか。

Wikiとかxoopsとかを設置して

レンタルサーバにアカウントが出来たので、wikiとxoopsを設置してみた。で、思ったことがひとつ。下馬評にあったようにxoopsは設置が結構面倒だなと感じた。設置しただけでは使えなく、モジュールの導入などが必須だ、モジュールの導入なしにはただの統合システムという感じだ。wikiはその点簡単だ、導入すれば書き込みだけはすぐにできるという点では安心である。しかし、色々凝ったことをしようとすると無理が出てくる。

とにかく設置が終わっての第1印象はあまりよくない。その理由は出力されるソースだ。単純極まりない構成のはずがソースを見るとかなり複雑になってしまっている。このことはそれほど不思議ではない。僕がこれまでに使ったことのあるホームページを作ってくれるソフトの多くは見た目がきれいだがソースが汚い。これと同じようなもんだろう。さらに最新の技術が使いにくいという点も問題だ。僕は多くのcmsプログラムを知っているわけではないが、すでに公式文書が何年も前にリリースされていながら、xhtml+mathml+svgのDOCTYPEに対応したcmsを知らない。これまでの傾向として、公式文書、ビューア(ブラウザ)、コンテンツの順にインフラが整備されていくことは仕方がないが、せっかくよいビューアがあってもそれを使い倒せるコンテンツがないというのは残念だと思う。いつまでたってもtraditionalなHTMLを使うのはよくないし、これを変えるにはCMSのソースを読まないとだめだし、手書きしないとDTDとか覚えられない僕にとってはあまりうれしいことではない。ということで、やはり導入してみたけれど使わないという状態が続いてしまっている。

そもそも、僕にとっての根源的な問題はWebに上げるネタに困るということだ。確かにCMSとかの導入はコンテンツの管理が簡単になったり、利点が多い。しかし、魅力的なコンテンツの創作には色々と問題があってしかるべきだと思う。CMSを使っても魅力的なコンテンツをかける人はかけるし、かけない人はかけない。その点においてやはり僕にとってはCMSはいらないんじゃないかなぁと思ってしまう。

非技術系サイトで使われているブログではよく見かける、サイトトップに大きなタイトル両側にメニュー最後にはコピーライトという構成、このとき必要な情報はページのど真ん中にある。このような構成をしている場合、サーバから取得したデータ量に比べて見たかった情報はほんのわずかしかないという状況がよくある。これはあまりよくないと思う。必要な情報にすぐにアクセスできるようなアクセシビリティを求めることは正解だと思うが、サイドメニューは本当に必要なのかよくわからないものが大量にくっついている。いまどき転送量の足かせがあるサーバは珍しいのかもしれないが、ユーザに対して必要な情報を的確に教えるページのほうが、よりよいのでないかとおもえる。

意外とすごいと思うのは自身の配信する情報で閉じている技術ニュース系サイトだ。CMSを使っていようがいまいが、ユーザに対して必要と思われる情報をしっかりと選んで見せてくれる。ニュースサイトとして有名なYahooニュースはその対象が多すぎるためか情報の篩い分けに失敗しているように思えてならない。

wikiやxoopsの問題点はいちいち負荷がかかるということだ。ページの表示をするためだけに、それぞれの文法をパースして、HTMLで書き直して表示している。これを短所と見るか、長所と見るかは人それぞれだが、例えば、1つのコンテンツが非常に大きい場合、サーバに負荷がかかり、その結果表示さえ出来なくなるということを考えれば、特に無料レンタルサーバなどに設置する場合には欠点と感じられることもあるだろう。例えば、僕はiswebに設置したfswikiにおよそ500KBytesのwikiデータを持つページをアップロードしたが、その結果、表示の際にinternal server errorとなり、表示さえ出来なくなってしまった。fswikiのような単純な文法を持つwikiエンジンでさえ、パースにかなりのCPU時間を食うということなのだろうか。まぁ500KBytesというのは単一のページとしては大きすぎるという考え方もあるだろうが。

動的ページの付加を静的ページに近づける工夫

wikiにしてもxoopsにしても動的ページと呼ばれるものだ。そもそもの考え方として、動的ページが静的ページに比べてものすごく重いとか負荷がかかるという考え方は正しさと間違いを両方含んでいると思う。あるプログラム(wikiにせよxoopsにせよ)がwebページを生成することを考え、このwebページの内容は別のファイルに依存して変化するとしよう。あるプログラムは依存関係を元にwebページを生成し、生成対象のwebページと依存関係にあるどのファイルにも変更が無ければ何もしない。依存関係を元にファイルを生成する仕事を簡単に行うプログラムは相当昔からある。makeコマンドだ。wikiやxoopsに同様の機能を組み込むことは結構簡単なのではないかと思う。ただし、慎重に考えなければいけないのはwebページとしての特徴、つまり依存関係だ。例えば、全てのページに全てのページへのリンク(サイトマップ)を入れるとしよう。この場合新しいコンテンツが増えると全てのページを新しくしなければならない。そして、リンクをユーザに踏ませる際にmake.cgi?makefile的な形にして、make.cgiのなかでは依存関係チェックとコンテンツ生成を行い、最後にlocationヘッダでmakefileに対応した生成ページへ飛ばすようにすれば、万事解決のような気がする。まぁプロトタイプすら作っていないのでどうなるかわからないが。でもなぁこういう機能ってすでに有名所には実装されていそうな気がする。

違法アップロード等

難しいな、どうすればいいんだろう。アップロードを違法と考えてをやめさせる、というのが1つ。アップロードする行為自体を第3者による合法的な販路の拡大行為と考えて、不特定多数のアップロードを推奨してダウンロードした人から何らかの形で吸い上げを図る、というのが1つ。前者はこれまでうんざりするくらい行われてきたけどやっぱりうまくいかない。後者がうまく行かないのコンテンツの内容が問題だからかな。

キーワードとユーザーの想い

自殺というキーワードを色々なサーチエンジンで検索してみると、トップに上がるサイトがそれぞれ異なる。各々の結果をどう評価すればいいのだろうか、自殺というキーワードを入力したユーザは自殺について知りたいのか、自殺を踏みとどまりたくて検索したのか。たった一つのキーワードからではその判断は難しいと思う。

http://blogoscoped.com/archive/2008-05-15-n59.html

Google Analitics

同様のサイズのサイトとはセッション数で篩い分けしているそうな。どのくらいのセッション数があるとどの程度のサイズと判断されているのかわからないが。

パスワードと記憶

個人情報をパスワードと関連付けてはいけないということ。でも、パスワードを覚えておなかいといけない。どうすればいいんだろう。個人情報を元にしてパスワードにするのがだめなら、ランダムに生成したパスワードを多少無理をしてでも個人情報と関連付けるというのはどうでしょう。

最適化とコスト

パームレストよりもアームレスト

長時間打鍵しているとパームレストではものたりなくなってきた。ひとつの要因はキーボードと手が近すぎることが原因だろうと思う。近すぎると、キーボードの全体を使うには指が長くないとだめな気がする。僕はそんなに指が長くないのかもしれない。一般的なフルサイズキーボードよりも、ノートPCで採用されているような小さ目のキーボードのほうが使いやすいと感じることが多い。さて、そんな僕だからこそ、キーボード上を縦横無尽に指が動くためにはパームレストだと動ける範囲が狭くて嫌になってしまう。ということで、アームレスト。お金がないので厚めのタオルを折り畳んでパームレストにしている。結構快適。

c言語のネタメモ

  1. http://atoztoa.blogspot.com/2008/06/linux-commands-i-hardly-knew.html
  2. http://www.ideaxidea.com/archives/2008/05/unixunix_commanline_kung_fu.html
  3. (意見: Webの最適なビジネスモデルは?)http://www.infoq.com/jp/news/2008/07/business-model-for-web
  4. (世界的に有名なオーケストラがスクラムに似た手法を採用)http://www.infoq.com/jp/news/2008/07/self-organizing-orchestra-orpheu
  5. (Google C++スタイルガイド日本語訳)http://www.henshi.net/k/hiki.cgi?GoogleCppStyleGuide
  6. (link集/ライブラリ系/C++)http://www.nbrains.net/php/pukiwiki/index.php?link%BD%B8%2F%A5%E9%A5%A4%A5%D6%A5%E9%A5%EA%B7%CF%2FC%2B%2B

それでもエンドユーザにLinuxパソコンが普及しない理由

それは、エンドユーザにとってパソコンは電源を入れれば使えるものであって欲しいからだ。Linuxを選択しない人の多くはコンピュータを目的遂行のための一手段として考えているからだ。つまり、目的遂行をどのように行うかが問題で、その手段は出来る限り簡単であって欲しいという思いがあるからだ。もし出来合いのシステムを使うことが当たり前で、ハードとソフトはセットで購入するべきだとの想いがある人がいたとしよう。その人にとってハードをそのままにしてOSをLinuxに変えることは苦痛でしかないだろう。いまどきの出来合いのシステムではOSの標準機能と思われているいくつかの機能、具体的に言えばサスペンドやハイバーネーションや音や無線LANや画面やマウスの制御、は上手く動かない可能性がある。また、オフィスソフトやブラウザなどのアプリケーションはそれまで使っていたのと同じものを使えない可能性がある。

彼らにとって一度操作できるようになったものを別のものに変えるには、これまでかかっていた手間よりも少ない手間で目的が達成できねばならない。現在の自分で導入するLinuxでは、出来合いのシステムに比べれば、手間が増えるという点では否めない。つまり、「使えることが保障されているシステム」対「自分で使えるようにしなければならないシステム」の構造である。エンドユーザにとってシステムは使えてこそのものなのである。だからこそOSとその上で間違いなく使える保障があるソフトがシェアを奪っていくし、システムのアップグレードには二の足を踏む。前者の最たる例がMicrosoft WindowsとMicrosoft Officeであり、後者がいまだにWin98やVB6を使い続ける場所があるという点だ。

ここまでのことを考えると、Linuxのディストリビュータはエンドユーザに対して「使えることが保障されているLinuxシステム」を提示できていないことが普及しない理由の一つであると考える。しかし、現在の流れはこれを解決する向きに動いていると僕は感じている。MicrosoftがそうであったようにOSとその上で動くことが保障されるソフトウェアを提示すること、さらにOSが走ることを保障したハードウェアの普及に勤めること。同じような流れがLinuxのコミュニティにも出来ていると感じている。このような流れはエンドユーザからシステム導入に際する不安を取り除くことになり、普及の一助となるような気がする。

一からLinuxが何をやっているか知りたい

debianという安定なディストリビューションを使っていて、またインストーラが何でもやってくれるディストリビューションを使ってみて思うことは、こんなに便利な環境を提供するまでにどれだけ苦労しているのだろうという点だ。そして非力なコンピュータを使っていて思うことは、出来る限りマシンに仕事をさせないであげるにはどうすればいいのだろうという点だ。僕の場合、こういう悩みを解決するには「じゃぁ自分で全部やればいいのではないか」という結論になってしまい、こんな変態的な話をしているんだろう。そんなわけで、速さとか安定とかメンテとかそういうことは全部自分(ユーザとか管理者)のスキルに伴う自己責任と考えて、全部自分でやってください的なオレ流Linuxはないものかということで探してみた。で、見つかったのが下。LFSとかは面白いと思う(自己満足できるという意味でね)。

  1. 連載記事 「LFSで作って学ぶLinuxの仕組み」
  2. Gentoo Linux -- Gentoo Linux News

youtubeの仕様変更

2008年の10月ごろだろうか、仕様変更があったようだ。Operaでyoutubeのユーザチャンネルを見た場合、リンクのいくつか(get_page関数を呼ぶ)が効かなくなっている。Javascriptを有効にしてリンクをたどるとログインページに飛ばされるようだ。scriptタグのsrcに書いてある外部ファイルにはget_pageが定義されているがうまくいかないようだ。

情報のソースと真贋

インターネットに多くの情報が上がるようになって、どのようにして其の真贋をみくぁめればよいのかという点について考えるようになった。ぼくは、口当たりのよい情報に騙されてはいないだろうか。僕はどのようにして情報の真贋を見極めているのだろうか?第3者的に自分を見つめなおす。

論文を読む際に其の論文の内容の真贋についてどのように僕は判断しているのだろうか。論文は論文になるまでにいくつもの審査を経ている。其の中で、だめな論文は振り落とされるし、追記が必要なものはそのようにされる。つまり、論文とされているものは其の時点で十分な査読がされているものと考えられ、その内容を信じてもよいかも知れない。

ここで、プレプリントサーバについて考えてみよう。プレプリントサーバは未査読の論文をアップロードすることも出来るが、これを使うユーザは内容の真贋をどのようにして見極めているのだろう。

電話機の代替としてのソフトウェアはあるのかな

電話がうるさいので、色々と考えてみた。古今東西、Linuxで動く自動電話応答装置があればいい、ということで。サーバで電話を受け、発信者番号及び入力されたDTMFを取得したい。 -OKWaveAsteriskが回答なのかなぁ。

シリアルコンソールサーバ

メンテナンスされる側のコンピュータのシリアルポートにシリアルコンソールサーバは接続されている、これは問題ない。メンテナは外のネットワークからシリアルコンソールサーバに接続してシリアルポートを介してメンテナンスされる側のコンピュータに接続する、じゃぁシリアルコンソールサーバのメンテナンスはどうするんだと言うことで。よくわからん。

10の資質

納得がいくことばかりである。でも僕はおそらく不良なんだろうけど。

  1. プログラマーを採用する際に重視すべき10の資質 - IT業界を生き抜く秘密10箇条 - ZDNet Japan

それでもダウンローダ

ダウンローダに付いている機能。分割ダウンロードとか平行ダウンロードとか。サーバの管理者によってはこういうのを禁止しているわけだ。管理者たちは色々と工夫をしてダウンローダに厳しく、通常の利用者に優しくなる設定にしているわけだ。で、いたちごっこと。僕はこのようなことを聞くと全く本当に残念でならない。ダウンローダを使うユーザはコンテンツを楽しむためにダウンローダを使っているわけで、ネットワークから切り離されてもなおコンテンツを楽しもうとしているいいお客さんなんじゃないかなと。僕はそう思う。

ユーザの観点からすれば、すぐにダウンロードできないと困るわけだ。どうしてって、コンピュータをONに出来る時間は限られているから。だから、OFFにしないコンピュータでダウンロードが出来ればゆっくりでも良いような気がする。

squidやdelegateに対するtorの利点は通信レイヤー

The advantage of Tor over Squid and Delegate is the layer that Tor belongs to. torを使って何が出来るのかということを考えるとね。結局のところ、socksサーバとして振舞うtorクライアント。socksに対応したプログラムならば、socks Proxyとしてtorクライアントが動いているサーバとバインドしているポートを指定すればよいということだ。公式ドキュメントにも言及されている点だが、torはエンドツーエンドの通信を暗号化してはくれない。このことはある意味で当然なのだが、其のことを言及せねばならないほどユーザは無知ということか。torがしていることは相手エンドに対して自分のIPアドレスの詐称をしている。

パケット内容の傍受という観点から言えば、torに依る通信の暗号化が行われるのは自分から相手までの経路の内、自分から出口ノードまでなので、自分から出口ノードの一歩手前までのtorサーバ管理者は暗号化された通信内容しか見れないが、は出口ノードの管理者は生パケットを見ることが出来る。従って、パケットの内容に大きな価値がある場合にはやはりエンドツーエンドの暗号化(ssl等)が必要なのである。

torを使って出来ないことを知っておくことは重要である。torを使ってエンドツーエンドの暗号化が出来るのならば最終的なパケットの受け取り相手はtorによって施された暗号の解読わ行えなければならないが、そうでないことは明らかだろう。だから、通信の内容を暗号化してエンドツーエンドの暗号化通信を確立してこそ、相手に重要な情報を渡せて、なおかつ其の発信元の隠匿が出来るのである。

torクライアントのユーザの観点からそのようなシチュエーションに当てはまるような人を考えるとどうだろう。つまり、「匿名で重要な情報を提供する人」まぁタレコミ人ということか。そのような人はそんなにたくさんいるとは思えないけれどね。

実際にはどうだろうか。torクライアントのユーザはどのようにしてtorを使っているのか。使い道としてはエンドツーエンドの暗号化を行わない使い道もあるだろう。つまり、tor本来の機能だけを用いた、IPアドレスの詐称ということだ。

perl ポートスキャン

http://www.google.co.jp/search?q=IO%3A%3ASocket+%E3%83%9D%E3%83%BC%E3%83%88%E3%82%B9%E3%82%AD%E3%83%A3%E3%83%B3

irvineでDOoS攻撃?

  1. var/タワゴト(09-06[長年日記])

UWSCとかを使ってアクティブウィンドウをキャプチャして一定時間ごとにサーバにアップロード

http://www.geocities.co.jp/SiliconValley/8653/b2j.htm

while True
  id = GETID(GET_ACTIVE_WIN)
  titl = STATUS(id, ST_TITLE)
  if titl <> "" then SAVEIMG("toomp.bmp", id)
  DosCmd("D:\bin\b2j32_13\b2j32.exe D:\bin\uwsc31b\toomp.bmp /q80 /a /dd",FALSE,TRUE)
  sleep(10)
//  Print "No"
wend

やっぱcurl使うしかないかなぁ

toomp

ソーシャルブックマーク

  1. はてなブックマーク
  2. Google Bookmarks
  3. del.icio.us

ChangeLog

  1. Posted: 2003-12-28T23:48:33+09:00
  2. Modified: 2003-12-28T19:50:07+09:00
  3. Generated: 2017-07-10T23:10:59+09:00