2007/08/29

「ネットカフェ難民」はなぜ定住できないのか
- Reference: http://internet.watch.impress.co.jp/cda/news/2007/08/28/16718.html

インターネットウォッチの記事によるとネットカフェの業界団体が「ネットカフェ難民」という言葉とそれに伴なうネガティブなイメージによって経済的な被害を受けていると主張しているらしい。
何かしらを訴える行為自体は正しいと思うんだけれど、記事の中で厚生労働省の調査に対して「ネットカフェ難民ありき」だから協力しないと回答したとあるのは、イメージ悪化に結びつくんじゃないでしょうか。 それでも「マック難民」の方はあまり取り上げられないし、25-30年くらい前のゲームセンターと同じような役回りで少し気の毒な感じはする。

そんなネットカフェですが、悪い感じのイメージがついちゃった気がするし、イメージ戦略というか、もっと実利的な要請から、本人確認はやらないといけないんじゃないでしょうか。
未成年が深夜、早朝にネットカフェに出入りしていた報道もあったし、自主規制じゃ限界な部分もあるように思えます。

結局、法律で本人確認を義務付けないと確認をしない店舗の方が"流行る"気がするし、フェアではないでしょう。
そうなると「ネットカフェ難民」で明らかになった定住できない人たちの問題は、行政が介入する必要があると思うんだけれど、そっちにフォーカスしても解決できないから、わかり易いものに飛びつくところがあると思う。 そんな理由で、日ごと「ネットカフェ」を取り上げているのは、何かおかしい感じがするんですよね。

あまり甘やかすなとか、いろいろ批判はあっても、「日雇いの仕事をしているから定住できない」が正しいとしたら、やっぱりそれはおかしいと思う。
働く意欲や働く場を失なう前に救済するような制度がないと、結局税金を沢山使うような気がしますし、納税者としては最終的に安く上がる方法で解決して欲しいです。

2007/08/25

The Software-RAID HOWTO
- Reference: http://unthought.net/Software-RAID.HOWTO/Software-RAID.HOWTO.html

ふいに気がついたら、メインのCentOS 4.5マシンで、httpdがCGIを実行する時にファイルの権限が読み取れないというエラーメッセージを大量に出力していました。
どういうわけか、httpd_tドメインに許可を全て出しているSELinux上で、ホームディレクトリ以下へのアクセスが制限された状態になってしまった模様。

restoreconで直りそうな気はしつつ、permissiveモードに変更してなかった事にしたけれど、最初はfilesystemが壊れたかと思いました。
関係なかったものの現状のRAID 0では本当にファイルシステムが壊れた時に取り返しが付かないので、RAID1 or 5を構成することにしました。

だいたいの構成は、次のような感じ。

Cent OS 4.5

  • 用途: なんちゃって開発用メインマシン
  • 現状: SATAディスク2台で、/boot は RAID1、 / は RAID 0
  • 作業内容: さらに同容量のディスクを追加して、RAID 5
  • 変更のポイント: データがなくなる機会を減らす

セカンドマシンのUbuntu 6.06

  • 用途: NFS, DNSサーバーなど比較的重要
  • 現状: PATAのディスク1台で /, /boot
  • 作業内容: SATA-IIなディスクを2つ追加して、RAID 1
  • 変更のポイント: ローカルのpdumpfs用とCentOSからNFSマウントしてやはりpdumpfsでバックアップ
さっそく作業手順をみつけようとしたけれど、日本語版のLinux Software-RAID HOWTOでは mdadm を使用した説明がないらしい。そこで英語版を参考にしつつ、mdadmコマンドで構成してみました。

作業前、Ubuntu 6.06ではSATA-II 320GBなディスク2つを/dev/sda, /dev/sdb として認識しています。
fdiskを使用してパーティションをそれぞれ作成し、't'でパーティションの種類を0xfd (linux raid auto)に変更しました。これで作成されたパーティションは /dev/sda1, /dev/sdb1 の2つ。

さらに、これを /dev/md0 にするために、次のようなコマンドを実行します。

sudo mdadm --create --verbose /dev/md0 --level=raid1 --raid-devices=2 /dev/sda1 /dev/sdb1
実行後のメッセージは2行だけで、一瞬で作業が完了しました。
$ sudo mdadm --create --verbose /dev/md0 --level=raid1 --raid-devices=2 /dev/sda1 /dev/sdb1
Password:
mdadm: size set to 312568576K
mdadm: array /dev/md0 started.
さっそくext3ファイルシステムを作成しようとしますが、この作業には"-c"を指定したおけげで、時間がかかりました。
sudo mkfs.ext3 -c /dev/md0
RAID1で320GBの領域に対して作業時間はおおよそ1時間40分ほど。

続いて、tune2fs でfsckが走らないようにします。
まず実行前に'-l'オプションで内容を確認します。

$ sudo tune2fs -l /dev/md0
tune2fs 1.38 (30-Jun-2005)
...
Maximum mount count:      20
...
Check interval:           15552000 (6 months)
...
このままだと20回のマウント後と6ヶ月のどちらか早い方のタイミングでfsckが走ります。

tune2fsを実行して、自動的にfsckがかからないように、これらの値を変更します。

sudo tune2fs -i 0 -c 0 /dev/md0
tune2fs 1.38 (30-Jun-2005)
Setting maximal mount count to -1
Setting interval between checks to 0 seconds
さらに'-l'付きでtune2fsを実行して内容が変更されている事を確認します。
$ sudo tune2fs -l /dev/md0
...
Maximum mount count:      -1
...
Check interval:           0 ()
...
さて問題がおこったとして、そのリカバリー方法をシミュレーションしてみます。
  1. 仮に/dev/sda1に問題が起ったとして、これを切り離す
  2. 一度 /dev/sda1 を何か別のファイルシステムにしてしまって、完全に内容を消す
  3. 再び0xfdな"linux raid auto"領域にして、/dev/md0に追加する
一度デバイスの名前を確認しておきます。
$ sudo mdadm --detail /dev/md0
Password:
/dev/md0:
        Version : 00.90.03
  Creation Time : Sat Aug 25 23:12:44 2007
     Raid Level : raid1
     Array Size : 312568576 (298.09 GiB 320.07 GB)
    Device Size : 312568576 (298.09 GiB 320.07 GB)
   Raid Devices : 2
  Total Devices : 2
Preferred Minor : 0
    Persistence : Superblock is persistent

    Update Time : Sun Aug 26 01:20:49 2007
          State : active, resyncing
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0

 Rebuild Status : 42% complete

           UUID : fdf9005b:01e8f646:c5035d04:9b4f4505
         Events : 0.10

    Number   Major   Minor   RaidDevice State
       0       8        1        0      active sync   /dev/sda1
       1       8       17        1      active sync   /dev/sdb1
最後の2行で、/dev/sda1, /dev/sdb1 で構成されている事がわかるので これを /raid/0/ にマウントします。

これで準備ができたので、/dev/sda1を切離すことにして、いきなりは切離せないので、不良ディスクとする/dev/sda1を'-f'でマークします。
続いて、'--remove'で削除します。

$ sudo mdadm /dev/md0 -f /dev/sda1
mdadm: set /dev/sda1 faulty in /dev/md0
$ sudo mdadm /dev/md0 --remove /dev/sda1
mdadm: hot removed /dev/sda1
"sudo mdadm --detail /dev/md0" でディスクが一つになっている事を確認して、次に/dev/sda1を一度、関係のない用途に転用して内容を削除します。
$ sudo fdisk /dev/sda
Command (m for help): t
Selected partition 1
Hex code (type L to list codes): 83
Changed system type of partition 1 to 83 (Linux)

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
一度ext2でフォーマットする事で内容も書き換えてしまう。
$ sudo mke2fs /dev/sda1
....
ここで再び、fdiskを使用してパーティションのコードを'83'から'fd'に変更する。
$ sudo fdisk /dev/sda
Command (m for help): t
Selected partition 1
Hex code (type L to list codes): fd
Changed system type of partition 1 to fd (Linux raid autodetect)

Command (m for help): w
ここまで再起動はしておらず、カーネルがもつディスク毎のパーティション情報はちょっとおかしくなっているかもしれない。 さて最後にこの新しい/dev/sda1を追加する。
$ sudo mdadm /dev/md0 --add /dev/sda1
mdadm: hot added /dev/sda1
$ sudo mdadm --detail /dev/md0
....
    Number   Major   Minor   RaidDevice State
       0       0        0        -      removed
       1       8       17        1      active sync   /dev/sdb1

       2       8        1        0      spare rebuilding   /dev/sda1
"rebuilding"とあるので、同期を取っているようですが、 /proc/mdstat の内容も確認しておきましょう。
$ cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sda1[2] sdb1[1]
      312568576 blocks [2/1] [_U]
      [>....................]  recovery =  0.0% (179200/312568576) finish=4911.7min speed=1058K/sec
この結果から、およそ1MB/secのスピードだとわかるので、320GBの領域の同期に完了する時間はおおよそ、(320[GB] * 1000)[MB] / 1[MB/sec] = 320000[sec] = 533[min]と、およそ8時間だとわかります。

今日はこのぐらいにして、明日の朝にまた結果を確認してみます。

2007/08/24

パソコン使ってハッピーに過していますか?
- Reference: http://pc.watch.impress.co.jp/docs/2007/0824/config173.htm

今日読んだ山田祥平のRe:config.sysでは、Appleの"Numbers"とMicrosftの"Excel"の比較と、「デジタルはイネーブラだ」という言葉が紹介されていました。
最近思うのは、10年以上も主にlinuxを中心にコンピュータを使っているけれど、私たちの暮しはより便利に、よりハッピーになっているのだろうかという事です。

CPU、メモリ、二次記憶域なんかのハードウェアはどんどん拡張されて、ソフトウェアも(以前と比較すれば)より高度な事ができるようになっているけれど、運用なんかを仕事にしていると、不完全なソフトウェアの負の部分を、高度な柔軟性を持っている人間が補っているという実感がどうしてもなくなりません。 たしかにそれは仕事の一部ではあるのですが。

私はコンピュータは人間に対する便利な道具であるべきだと信じています。
現状は多くの人々は、開発者と呼ばれる人達のソフトウェアを消費する立場にいるだけで、Excelなんかのマクロを作成する事ですら、つまり自分が日頃使っている道具を少し便利にしようとするだけで、高度な技術が要求な敷居が高い作業だと考えられているように思えます。

なにしろ開発者と呼ばれる人たちの中でさえ、他人の作った雛型のコメントやフレームワークの説明書に書かれた事しかできない、見方を変えれば、ただの消費者でしかない人達も一部には含まれています。大部分の人たちは何かしら工夫をしたり、別の部分で作業効率を上げるような工夫ができる人たちだと思いますが。

Javaを中心にEase of Development (EoD)などと言われていますが、昔聞いたEnd User Computing (EUC)はどこにいったんでしょう。
紙と鉛筆を手にした人間が様々な作品を作り出したように、コンピュータを使ってそんな創造的な活動ができる事を、コンピュータリテラシーの目的に置く事が重要だと思います。 「読み書き、ソロバン」なんていうリテラシーの意味を説明する言葉に躍らされて、(セキュリティ対応含めて)メーラーとWebブラウザの操作ができれば情報の授受ができるからリテラシー教育としては万全なんていうのは間違っていると思います。

「コンピュータを使って何ができますか?」、この質問により具体的に、多くの回答を出すような教育が必要でしょう。
お金のある人が多くのソフトウェアを購入して、より多くの事ができるようになるなんていうのは、正しい方向性ではないと思います。

2007/08/06

Ruby 1.8 でCGI

VMWareで仮想サーバーを立てる時に、いろいろなしがらみで固定IPを作りたいので、家のDNSサーバーで頻繁に変更が入る。
これをお題にDNSのゾーンエントリを編集する、cgi.rb を使ったCGIを作ってみた。

Formタグを使うときに、POSTメソッドを使っていると、QUERY_STRINGの自動パースが行なわれないので、少し問題がある。
FormのActionに指定するのが "?cmd=checkout" だとすると、

@cgi=CGI.new
@cgi['checkout'] ..< nilになる
そこで手でちゃんと
CGI.parse("QUERY_STRING")["checkout"]
ぐらいをすると、 問題なくなるのだけれど、ちょっとはまった。

ここら辺の動きは、サーバー側の動きとして、どう動くのが正しいとかあるのかなぁ。
cookieが使えない場合とかURLに変数を埋め込むのも普通にあるから、POSTメソッドで渡ってきた変数も、Formで渡ってきた変数も、アクセスするAPIは統一しないと具合がわるい。

自動的に展開するなら、POSTで同名の変数がある場合は、まずQUERY_STRINGをparseしてから、Formの変数で上書きするのがPOSTを信用するために必要そうかな。