MIRACLE
メールサービス申込 ユーザー登録 パートナー情報
お問い合わせ FAQ サイトマップ
MIRACLE LINUXの特長 製品紹介 サービス案内 購入 サポート 技術フォーラム

プロフィール

コアテクノロジー部

ミラクル・リナックスのOS開発やサポートを担う、技術部の精鋭陣が交代で担当します。

ミラクル関連リンク

採用情報

サイト検索

2009年10月

        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

« 2006年7月 | メイン | 2006年9月 »

メガネっ子の逆襲

こんにちは。中学以来ずっとメガネっ子のkyagiです。今回はメガネについて昨今の比較を交えた雑談です。

一昔前のマンガでは「いつもは目立たないキャラがメガネをはずしたら美少年/美少女だった」というものがベタな展開でした。つまりメガネはキャラの変装用/別人格用のアイテムとして扱われていたわけです。メガネっ子が主人公になることはまれであり、たいていは癖のある脇役キャラであることがほとんどでした。大げさに言えばメガネをかけているだけでヒーローにはなれないというメガネっ子には受難の時代が続いていたのです。

ところが最近の有名マンガでは主人公がメガネっ子というのも珍しくないようです。同マンガの影響で一部では「メガネっ子萌え」とブームも起きているとかいないとか。オリエンタルラジオやおぎやはぎといったメガネキャラのタレントさんも増えてきました。(おぎやはぎさんはメガネのCMにも出ていますね)

メガネっ子が生きやすい時代になってきた(?)と同時に、メーカの生み出す製品も機能別、ビジュアル別に細分化されてきました。ひとくちにメーカといってもたくさんありますが、個人的に好きなのはフォーナインズです。同社のメガネはフレームのサイドにバネのような「遊び」部分を設けてあるので、側頭部の締めつけが少なく、かけ心地がバツグンです。社名は「1000まであと少し」を意味する純金の品質表示から由来しているのだそうです。

そういえば、ミラクルリナックスは 99.999%の信頼性をファイブナインズという言葉で表しています。意味は若干違うものの、どちらも現状に満足せずギリギリまで完璧に近付こう、常に高みを目指そうという姿勢を込めている点は一緒です。

中古PC市場

ノートPC(B5ノート)が欲しい、でもなかなか高くて手が出せないと思っている方、中古市場に活路を求めてみては。。。

先日、中古のB5ノートPCを購入したのですが、その時の話を書きたいと思います。中古PCを購入するにあたり、ネット購入なども考えましたが、中古PCは実物を見てみないと分からないと思い、久しぶりに秋葉原を散策することに。。。実は中古PCを購入するのは初めてなのですが、中古PCの市場も想像以上に活発で古い低スペックのPCからそこそこ新しい高スペックのPCまでかなりの流通量があるようです。秋葉原の中古PC市場では、B5ノートで流通量が多いのはやはり下記の2シリーズでした。

  • Panasonic Let's noteシリーズ
  • IBM ThinkPadシリーズ(中古品はまだIBMブランドのものです。)

取り合えず、Panasonic Let's noteシリーズでDVD-ROM & CD-R/RWが搭載されているモデルを探すことにしたのですが、状態のよいものはやはり中古でも10万円以上してしまうお店がほとんどで、大きく私の予算をオーバーしてしまいました。。。でも、諦めないで粘り強く探したところ、状態良好のものが予算内で手に入りました。話が長くなるので、詳しくは書きませんが、予算内で購入できたと思える私なりのポイントをいくつか列挙しておきます。(ちなみに、私の購入したPCは、Panasonic Let's note CF-W2(memory +256M増設)です。)

  • 色々なお店をまわり、品揃えもよく平均的に低価格なお店を探す。
    (PCの状態をあまりきにしないのであれば、路地裏などで掘り出しものを探すのもよいと思います。)
  • LinuxユーザなのでOSレスのPCを探す。
  • 当然OSレスなので某窓系OSのリカバリCDなどはいりません。
  • 説明書などのDocumentもいりません。
  • でも、バッテリーやACアダプタ、ディスプレイの状態は譲れません。
  • 後は、店員さんと仲良くなって価格交渉を開始します。予算を考えるならここが最大のポイントですよね。。
    (市場価格と自分の直感で無理のない範囲で交渉しましょう。)

釣り&BBQ&バナナボート

入社4ヶ月目の新人mamanoです。8/19日(土)に弊社のメンバといつもお世話になっている某社の方をゲストに迎え、金沢八景(横浜市)へ行きました。目的は漁船の上で、お酒を飲みながら釣り&BBQでワイワイ楽しむこと。釣れたのは鯖が大半で1、2匹くらい鯵で、合計するとかなりの数でした(クーラーボックスを見た限りでは20匹くらい?もっと?)。みなさん調子がよかったようです。ちなみに私は6匹釣れました。

Cimg0798Cimg0815_1

※クーラーボックスの水が真っ赤になっていますが、気にしないでください。

釣りの後はBBQ。釣った魚はさばいていただき、わさび醤油に漬けて一口。これがまたたまりませんね〜。最高です!肉も焼きそばもおいしかったですよ!

Cimg0807Cimg0812_1

お昼がすんだらいよいよバナナボート。漁船で引っ張るなんてことめったにありません(笑)。でも乗ってみると爽快ですね。20〜30キロのスピードで引っ張られ、左右に振られてドボン。すごく爽快でした。普段できないことをいろいろ体験できた一日でした。夏のイベントの、定番になりそうです。

Cimg0826Cimg0818

WirelessでLinux

いやーいろいろあるものですね、MyPCのLinux化。先週は自分のNotePCをLinux化しようと色々苦労してたのですが、最初に突き当たった問題がWireless?!ミラクル・リナックス社でも社内でWirelessを使えるようになっているのですが、サーバOSとして育ってきたMIRACLE LINUXからみるとWireless?見たいなところがあって社内に情報が転がっていません。仕方なく自分で始めたのですが。。。

1.我が家で

まず我が家の無線LANに接続してみました。こちらは割合とスンナリつながってくれました。YBBの無線LANオプション付きが我が家の環境ですが、家が田舎なもので特にセキュリティの設定もしていません。というわけで、私のNotePC=Panasonic CFW4Gでは

ifup eth1

するだけで、もともとインストール時にDHCPの設定にしていたこともあって問題なく設定完了。次に会社に持ってきて上のコマンドを起動したのですが。。。

2.会社で

もちろん会社では普段は有線LANを使っています。こちらはLANケーブルをつなぎ込んで

ifup eth0

でOK、取り合えず仕事ができます。さてここから無線LANの設定ですが、ミラクル・リナックスにも当然セキュリティの設定があります。詳しいことは書けませんが、当たり障りの無いところでessidだけでいうと

iwconfig eth1 essid 会社のESSID

と言う感じで設定後

ifconfig eth1 up

して

dhclien eth1

して全てを認識してくれました。。。

3.やっとできたと思ったら

やっとできたと思ったら、机の上では有線LAN->会議室では無線LANなので

。。。LANケーブルを引っこ抜いて上のコマンドたちを打ち込むと。。。

あれ動かない??なんかコンフリクトしてるみたいなので

dhclient -r eth1
ifconfig eth1 down

してからもう一度2項のようにESSIDをセットして、LAN起動、DHCP起動でやっと動きました。(><;)

5.全てが終わって

全てが終わって(といってもNetwork設定だけですが)LinuxのNotePCを設定するということは、Linuxサーバでの設定の常識が覆るということなんだなぁとつくづく感じました。Linuxサーバでは「全ての機器を起動してからOSを起動する」が当り前ですが、LinuxのNotePCの様にハンドヘルドにするには取り合えず最小限で立ち上げて周辺環境に合わせて設定を変更する必要があります。サーバから見るとまるでクラスタの設定をしているかの様に思えるこれらのことがNotePCでは常時行われていることにある意味驚きをかんじつつ、別の意味でこんなことが意識しない間に行われていたことへ、不信感とも言える感覚がありました。

 セキュリティを守るには、まず自分が本当は何をやっているかを知ることから始めなくてはならないのではないでしょうか?これからもLinux化でこのあたりを認識していかなくてはと心にちかいつつ。。。でもこれはこれで結構おもしろい、次は音でもならしてみるか  

iPodビデオで格闘

こんにちはyosuzukiです。最近、一部では話題になりつつあるPortable Multimedia Player(PMP)。mp3などの音楽だけでなく、DivXやMPEGなどの動画再生できるポータブルPlayer。私も早々iPodビデオにチャレンジした様子を今回は書きます。

もともとのきっかけは、通勤電車の中でiPod G5を使ってクールに映画を見ている人を見かけたのきっかけです。単に映画が見たいのもありますが、これで通勤途中に英語字幕で映画を見て、楽しく英語の勉強が出来るかと安易に思った次第です。#まぁ、嫁へのiPod 5Gを購入するための言い訳ですが。

早々、AmazonでiPod 5G(60GB)を購入し、専用のシリコンカバーも用意して準備完了。しかし、本題はここから、我が家にあるDVDをiPodで見れるようにしなければいけません。購入前に簡単にグーグってはいたので、無償ソフトでWindows環境で出来ることは分かっていました。

っが、実際やってみるとこれがとてつもなく時間と手間のかかることが分かりました。

簡単に手順を紹介すると、(使用ソフト)

  1. DVDからデータ吸出し(dvd shrink)
  2. 吸出したファイルをAVIファイルへ圧縮(Auto Gordian Knot) #英語字幕をつけるのに必要なステップ
  3. AVIファイルをiPod 5G用にMP4形式に変換(変換君)
  4. M4VファイルをiPodへ転送(iTunes)

大まかな時間の内訳は以下の通り。

  1. 30分
  2. 6時間
  3. 2時間
  4. 数分

そうなんです。この作業を完了するまでに半日以上かかるのです。時には努力空しく、画像と音声がずれることもありますが、それに懲りずに夜な夜なaviファイルを作る日々が続いています。ビデオ圧縮技術の進化とビデオダウンロードサービスが充実しないと、まだまだiPodビデオの生活は遠いかも知れません。

さて、やっと作ったハリーポッターをiPodで見たときには感動しました。電車で見るのはちょっと優越感を味わえますよ。

200608181932000

#現在、我が家のSambaサーバはDVD Vedioファイルや aviファイルやらで容量がいっぱい。週末にML4.0へアップデートしつつ、300GB追加する予定。次はLinuxでやってみます。

やっぱり毛だらけ

対野良猫軍団への反攻作戦第一弾「木酢液バラマキ作戦」が失敗におわり、敵にいいように蹂躙される毎日が続いています(涙)。ひどいときはフロントガラスに泥混じりの足跡と共に大量の毛が張り付いていて、汚いやら、情けないやら…。

その後も地道に研究(?)を続けていたところ、情報提供者A氏から有力な手段を仕入れました。A氏は自宅庭に毎度汚物を残していく敵に対して、かなり過激な方法で撃退したという戦歴を披露してくれました。

が、過激すぎて真似できん。

「よい子は真似しないでね!」では済みそうもないので、自粛。自宅の庭のように他人の出入りが無いことを前提に実行できるならいざ知らず、マンションの駐車場のように不特定多数が出入りする場所では何か間違いがあると大変なので、あえなく却下。

そしてついに当初のポリシーであった「なるべくお金をかけずに」を曲げ、かねてから気になっていたハイテク装置(?)を導入する決断をしたのです。

Gbmini

これは商品名「ガーデン○リア」というもののミニ版です。手元に届く迄は効果については確信を持てず、不安でしたがコイツはなかなか優れもの。センサを備えていて、有効範囲内に動く物体があると反応し、敵の嫌がる音波を出すと言うものです。さっそく通販にて購入し、単二乾電池4本を入れて自分を実験台にしてテスト。

「う、なんか気持ち悪い」

自分に向けてみると、かすかな耳鳴りと共に、三半規管がおかしくなるような(遊園地のコーヒーカップを無茶苦茶に回した後のような…あの感覚を軽くした?)感じがして、長時間は耐えられない気分に確かになります。

「ううん、効きそう。」

とまたもや性懲りもなく一人で悦に入ってしまいました。さて購入してはみたものの、これをどこに設置するかが次の問題です。購入前は駐車場横の柵にワイヤーで固定するつもりでしたが、そこは住人の通路にもなっており、自らその効果を確認した後では、人が通る通路に向けて高い位置に設置するのはおそらく迷惑。仕方がないので、まずは車の下に置いて足跡から推測される奴らの通路に向け仮設置してひとまず様子を見ることにしました。

さて、効果は如何に??

ご当地2

またまた全国各地を回っているtake0513の番となりました。前回は以下のようにご当地の名産でした。

http://blog.miraclelinux.com/ctd/2006/07/post_0c1a.html

今回は食ではなく、銅像です。(といってもあれからは鹿児島に盆に行っただけなので幕末関連ですが)

私は根っからの関東人なのですぐに思い出すのは上野の西郷さん

060810_1500_3

このように犬を連れていますね。しかもラフな格好。しかし鹿児島で見た西郷さんは以下のようにラフではあるが貫禄があったり、軍服を着ていたりと様子がまるで違います。(ラフな方は鹿児島空港からすぐの西郷公園にありますので、お立ち寄りの方は是非。私が到着した時は閉園時間を過ぎていたので公園外からの写真ですが、実際にはもっとすごいです)

060813_1850 060814_1401

同じ人物であってもこのように場所場所によって全然違う風体をしているのを見るのはなんとなく面白い。もちろん場所場所でのその人物への評価などもいろいろと違うのだろうなと考えながら感慨深げに見ていました。

携帯で撮ったりデジカメで撮ったりしていたので画質が違うのはご了承下さい。

最後に西郷隆盛ではないですが、せっかく天文館に出向いたので同じ時代のこの方も。

051219_0754_1

暗くてわかりづらいですが大久保利通です。この方は西郷さんと違って鹿児島の方には人気がないのだろうかと思ってしまう。まー確かに最終的には西郷さんと敵対をしてしまったのでしょうがないかなとは思うけど。どっちも国の為には役立った人物なのにな~と。やはり周りのイメージは重要なんだと改めて認識させられました。

次は新撰組関連の銅像などがある方面に行ってみたいな~と思うtake0513でした。

覚えゲー

いや、ゲームの話ではないです。すいません。

皆様お盆はいかがお過ごしでしょうか、家族サービス?それとも私のように働いていらっしゃるでしょうか。お盆の今週末はお客様先へ作業に出かけていました。一年中で、盆と正月に6時間くらいのメンテナンス時間を確保するのがやっとの重要なOracleRACシステムアップグレード案件です。

今回はサーバハードの交換とML30x86_64からML40x86_64へのアップグレードを目指しておりましたが、共有ディスクのポート障害発覚し、計画されたダウンタイムは修理作業に奪われ、あえなく時間切れとなりました。ここで問題となったポートは今まで使われていなかった空きポートで、「なぜ作業前にチェックしておかなかったのか?」というお客様のツッコミも当然至極です。

このような障害を「運が悪い」の一言で片付けられるようでは技術者ではありません、ユーザの要望を万難を排して完遂するのが担当技術者の使命であると思います。今回弊社はメインSIrではありませんでしたが、今後のSIに生かさねばなりません。

ただし、このような書き方をしてもSIは決して「覚えゲー」だけではありません。穴に落ちなければ落とし穴の位置はわかりませんが、地雷は踏んだらさようならなのです。ミッションクリティカルのSIには、穴に落ちている余裕はなく、地雷原さえ安全に通り抜ける準備と能力が必要なのです。

P.S.

ファイバーのポートが死んだくらいでストレージプロセッサごと交換しなければならないなんて、一体どういう設計をしているやら、GBICだけ交換できないファイバー製品なんて、安かろう悪かろうですな。どことは言いませんが、どことは。使えねーっす。

tonokiでした。

Altキー使ってますか?

こんにちは、okapです。2度目の登場になります。みなさんがAltキーを使用する場面はどういった時でしょうか。X上のアクティブウィンドウの切替えの[Alt-Tab]とかでしょうか。そこで今回は意外と知られていない(?)Altキーの便利な機能をご紹介したいと思います。

1. ウィンドウの移動

これは昔からのFAQですが、ウィンドウをマウスで移動する場合タイトルバーを摘んで行いますがX上ではAltキーを押しながらならそのウィンドウのどこを摘んでも移動が可能です。

2. Firefoxのタブブラウジング

次にご紹介するのはFirefoxにおけるタブブラウジングに関する機能です。例えばGoogleバーから検索するときその結果を新規タブで表示させたい場合、一旦空の新規タブを開いてから検索していませんか? そういう方はGoogleバーから検索する際Altキーを付けて[Alt-Enter]として見てください。検索結果が新規タブに表示されるようになったと思います。

この機能はGoogleバーに限らずロケーションバーでも可能です。ちなみにGoogleバーへのジャンプは[Ctrl-J]、ロケーションバーへは[Ctrl-L]で行えます。また、マウスでリンク先を新規タブで開きたいときは[Ctrl-クリック]もしくは[中クリック]で可能です。さらに余談になりますがロケーションバーなんて使わないよという方はFirefoxのクイックサーチ機能を調べて見てください。すごく便利です。

3. Bash上での操作 [Alt-.]

さてここからが本題です。ここではBash上でのAltキーに関する便利な機能をご紹介します。例えば興味を持ったディレクトリに移動しようとして勢いよくTab補完した結果

$ cd /proc/sys/kernel/sysrq
bash: cd: /proc/sys/kernel/sysrq: ディレクトリではありません

と怒られ慌てて

$ less /proc/sys/kernel/sysrq

としたという経験はないでしょうか。このとき対象ファイルを再度入力しているでしょうか?この場合lessに続けて[Alt-.]を一度だけ押すと直前のコマンドの最後の引数が補完されます。直前のコマンドの最後の引数なら「!$」や「$_」を使用している方もいるかと思いますが、では/proc/sys/kernel/sysrqの一つ上のディレクトリに移動する場合はどうでしょう?「!$」や「$_」では対応できませんね。ですが[Alt-.]であれば最後の引数である対象パスがビジュアル的に表示されますのでそれに続けて[Alt-Backsapce]を押して最後のフレーズ「sysrq」を削除すれば完了です。

$ cd /proc/sys/kernel/

このよに最後の引数が表示されるのでこれに対して編集ができるのが[Alt-.]の利点です。

次に、直前ではなく3つ前のコマンドの最後の引数を使用したい場合どうでしょう?

$ ls !-3:$
ls /proc/sys/kernel/sysrq

とすれば可能でしょうが、4〜5つ前といったaboutなときは向きませんね。しかも記号ばかりで打ち難いです。そこで先程ご紹介した[Alt-.]を数回続けて押してみてください。[Alt-.]を一回押すごとに一つ前の最後の引数が現れ、更にもう一度押すともう一つ前の最後の引数が現れてくれます。


$ less /proc/sys/kernel/sysrq
             ↓
$ less /proc/sys/kernel/
             ↓
$ less /proc/sys/kernel/sysrq

といった具合に。このように[Alt-.]は最後の引数を遡って表示できるので大変便利です。是非使ってみてください。一ヶ月後にはこの機能が手放せなくなっていることでしょう。ただAltキーを多用することになるとJISキーボードの方はAltキーのポジションに悩まされるのではないでしょうか。実に微妙な位置に存在しているのでどの指で押してよいか迷います。私の場合はUSキーボードを使用しているので両Altキーがスペースキーの両サイドに配置されており、親指Shiftならぬ親指Altといった感じで押し易いです。まあLinuxでは使用しない「無変換」や「前変換」をAltキーとして割り当ててしまえば問題ないと思いますが。

最後になりますが、その他のキーコンビネーションはbashのオンラインマニュアルをご覧下さい。ご自分の求めている機能も見つかるかも知れません。なお今回の[Alt-.]は「M-\.」で検索可能です。

¡Hasta luego!

作業ログの取り方

このブログをご覧のみなさんは、おそらく何らかの形で開発作業、あるいは設定作業の経験をお持ちだと思います。みなさんは、日々の作業の記録をどのように取られているでしょうか?もし、作業ログを取る習慣がない、あるいは忙しすぎて作業ログをとることに気が回っていないのであれば、作業ログを確実に取る習慣をつけることをお奨めします。この習慣は、きっとあなたの作業の信頼性を上げ、作業効率向上に貢献するはずです。

●作業ログがなぜ必要か

まず最初に、なぜ正確な作業ログをとる必要があるのでしょうか? その答えは簡単です。再現性を確保するためです。自分が不具合報告を受ける立場で考えてみてください。もし、部下やユーザから「動きません」や「バグです」という報告を受けた場合、すぐに問題があると判断するでしょうか? ほとんどの人は、まず報告されている状況を正確に理解したうえで判断したいと考えるのではないでしょうか?

●作業ログに求められるもの

では、報告を受ける人が求めている情報とはどのようなものでしょうか?私は、以下の 4 点を記録・報告することを心掛けています。

  1. どのような環境で起ったのか
  2. どのような操作が行ったのか
  3. どのような結果になったのか
  4. いつ発現したのか

ここで一つ注意があります。それは不具合報告だけでなく、問題が起らなかったという報告をする際にもこれらの情報が必要だということです。成功しているように見えて実は失敗なんて経験、いままでありませんか :-)

●なにを使って作業ログをとるか

最近は wiki や blog などのツールが充実してきました。これらのツールを使って作業記録をとっている人も多いと思います。これらのツールで記録しておけば、情報共有も簡単にできます。いいことづくめのようですが、私は再現性の確保という点については疑問を持っています。よく、コンパイル手順などを wiki に掲載しているページを見掛けますがどのように利用されているでしょうか? ほとんどの場合は、操作の部分をコピーして、自分が作業している端末にペーストしていると思います。うまく動いているときはいいのですが、何かが原因でうまく動かなかったとき、なぜ失敗したのかがはっきりしないことがあります。「ほんとにこの操作でうまくいったの?」という疑問を持った経験はないでしょうか? 私はこのようなことを引き起こさないために、シェルスクリプトと script コマンド使っています。

●正確な作業ログの取り方

  • 作業手順はシェルスクリプト

私は、作業手順を予めシェルスクリプトにまとめることで、作業手順の再現性を確保します。私の経験では、作業が一度で済むことはまずありません。何らかの原因でもやり直しが必要になることがほとんどです。この方法は、シェルスクリプトを実行することで同じ手順を再現するので、人間がコマンドライン操作をするよりも正確に作業を再現できます。また、環境変数の設定など作業の前提条件もまとめて記述しておけばさらに再現性は高くなります。

○Tips

作業をシェルスクリプトにまとめる際、忘れてはいけないおまじないがあります。

  1. 各コマンドの終了ステータス($?)の確認および表示する
  2. シェルスクリプトの最初と最後に date コマンドを実行する
  3. 影響を与えそうな情報は処理を始める前に表示する
  4. set -u

1.は、プログラムを書く上での基本です。終了ステータスを確認し、異常があればエラーメッセージを出してプログラムを停止させます。問題が発生したとき、どの処理の実行中にどのようなエラーが起ったのかを把握することができます。シェルは、シェルスクリプトの内容を読んで実行するだけなので、エラー処理を明示的に書かないと処理が先に進んでしまいます。エラー処理を怠ると思わぬ結果を引き起こします。

foo; ret=$?
if [ $ret -ne 0 ]; then
    echo "foo failed: exit status = $ret" >&2
    exit 1;
fi

2.は作業の開始時刻と終了時刻を記録することで、作業にどのくらい時間ががかかったのかが分かります。あまりにも早く処理が終わっていたり、時間がかかりすぎたりしていれば、なにか異常がないかを確認できます。また、一回当りの作業時間がわかれば、今後の作業時間の見積もりに使えます。

#! /bin/sh
date;
:
:
:
date;

3.は作業に関連する情報を表示しておくことで、実行時の環境を確実に記録します。たとえば、設定ファイルの内容が重要な場合であれば、cat コマンドで表示しておきます。

#! /bin/sh
date;
:
echo "### /etc/hosts ###"
cat /etc/hosts
:
:

4.は未定義の環境変数を参照したときに処理を停止するための指定です。これを指定しておかないと思わぬ副作業を引き起こしますので要注意です。以下の処理で、もし WORKDIR を WORKIDR のように typo したとき、どのようなことが起るでしょうか? 考えてみてください :-p

rm -rf ~/${WORKIDR}/*

○作業ログは script コマンド

作業ログは script コマンドを使ってとります。script コマンドはオプションでログファイル名を指定することができます(man script 参照)。なにもオプションを指定しないと typescript というファイル名にログが記録されます。複数回、script を実行するとログはtypescript ファイルに追記されてしまいます。これではせっかくログをとってもログの世代管理ができていませんので、イマイチ役に立ちません。script を実行する際には、日付、時間を含んだものログファイル名を指定することでいつのログなのかを分かるようにしておくと良いでしょう。

$ script `date +%Y%m%d-%T`.log

date コマンドはよく使うので、以下のようなシェルスクリプトを ~/bin に持っておくと便利です。

$ cat ~/bin/timestamp
#! /bin/sh
date +%Y%m%d-%T

さきほどの script との組み合わせは以下の通り。

$ script `~/bin/timestamp`.log

○ コラボレーション

わざわざ作業手順をシェルスクリプトにしたのは理由があります。それは、script コマンドと連携させるためです。scriptコマンドには、環境変数SHELL に指定されたコマンドを実行してログをとるという機能あります。作成した作業手順シェルスクリプトを環境変数 SHELL に設定して script を実行することで、実行する度に日付入りのログファイル名に作業内容を記録することができます。

$ env SHELL=./prog-build.sh script prog-buiild-`~/bin/timestamp`.log

●まとめ

以上の方法で、「作業ログに求められるもの」で書いた 4 点をすべて間違いなく記録することができます。一度失われた情報は二度と取り戻すことはできません。記憶に頼った作業では作業成果の信頼性を上げることはできません。

私はプロフェッショナルと素人との違いは、常に確実な作業ができるかどうかだと考えています。今回の作業ログについてもその一つです。些細な TIPS ですが、お役に立てれば幸いです。

ノートPCにLinux(2)

moriyama です。前回予告していた、Windows と Linux のデュアルブート設定の具体例を MIRACLE LINUX V4.0 を使って説明したいと思います。

ノートPCにLinuxをインストールして Windowsとのデュアルブートを行なうように出来るようにするための流れはつぎのようになります。

  1. Windows パーティションの縮小
  2. Linux インストール
  3. Linux ブートセクタの取り出し
  4. NTLDR 設定

step 1. Windows パーティションの縮小

株式会社ライフボート社製のパーティションコマンダーを購入して Windows パーティションの縮小と Linux パーティションの作成を行いました。

NTLDR の設定に際して、Linux のブートローダのイメージを NTFS の領域にコピーする必要があるのですが、Linux から NTFS パーティションへの書き込みが出来ない為、ファイルの受け渡し用に FAT32 パーティションを用意して、次のようなパーティション構成としました。

基本パーティション /dev/hda1 WindowsXP (NTFS)
基本パーティション /dev/hda3 Linux (/boot)
拡張パーティション /dev/hda4 論理パーティション /dev/hda5 Lnux (swap)
論理パーティション /dev/hda6 Linux (/)
論理パーティション /dev/hda7 FAT32
基本パーティション /dev/hda2 Windows リカバリー用

step 2. Linux ブートセクタの取り出し

以下の2点に注意して MIRACLE LINUX V4.0 のインストールを行ないます。

  • パーティションの設定では、「Disk Druid を使用して手動パーティション設定(D)」を選択する
  • ブートローダをインストールする場所は、/boot パーティション (上記パーティション構成の場合は /dev/hda3) の先頭のセクタを選択する。

Moriyamaax20install1_2

Moriyamaax20install2

注意: 手動パーティション設定では、パーティションの追加や削除、フォーマットの種類を変更すると、パーティション番号が代わってしまうようなので、マウントポイント "/boot" 、"/" の設定とフォーマットの指定のみ行なうようにし、ここではパーティションの追加削除などは行なわないようにした方が良いようです。

step 3. Linux ブートセクタ取り出し

MIRACLE LINUX V4.0 のインストールが終わったら、Windows のブートローダ NTLDR から Linux を起動できるようにするため、MIRACLE LINUX V4.0 のインストールCD からレスキューモードで Linux を起動します。

"boot: " プロンプトが出てきたら次のように入力して、[Enter] キーを押す事でレスキューモードで起動できます。

boot: linux rescue

次のような画面が出てきたら「続行」を選択します。

Moriyamaax20install4_1

次のようにして、/boot (/dev/hda3) のブートセクタを取り出します。

sh-3.00# chroot /mnt/chroot /mnt/sysimage
sh-3.00# mkdir /media/data
sh-3.00# mkfs -t vfat /dev/hda7
sh-3.00# mount -t vfat /dev/hda7 /media/data
sh-3.00# dd if=/dev/hda3 of=/media/data/ml40.pbr bs=512 count=1
sh-3.00# umount /dev/hda7
sh-3.00# exit

ブートセクタが取り出せたら CD を取り出しリブートさせ Windows を起動します。

bash-3.00# exit

step 4. NTLDR 設定

コマンドプロンプトを起動し、c:\boot.ini を編集可能な状態にします。

C:\> attrib -s -h -r c:\boot.ini

Linux のブートセクタを C: ドライブにコピーします。

C:\> copy d:\ml40.pbr c:\

c:\boot.ini をテキストエディタで、次のように編集します。(Windows XP の例を示します。)

[boot loader]
timeout=10
default=C:\ML40.PBR
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /fastdetect /NoExecute=OptIn
C:\ML40.PBR="MIRACLE LINUX V4.0 - Asianux Inside"

注意:default を Linux に設定した場合は、timeout を 0 に設定してしまうと、以後 Windows を起動できなくなってしまいますので、ご注意下さい。(Windows の C: ドライブが NTFS ファイルシステムの場合、Linux から c:\boot.ini ファイルを編集する事が出来ないため)

c:\boot.ini ファイルの属性を元に戻します。

C:\> attirb +s +h +r c:\boot.ini

以上で、Windows と Linux のデュアルブートの設定は完了です。

無線LANの利用

社内PCの主役から某プロプラ系OSを駆逐しようというプロジェクトが始まってはや数週間が経ちましたが、私個人の感覚としては、順調に行っているようで、順調に行っていないようで...という不思議な感想を持っています。
なぜこんな感想になるかというと、「ミラクルはLinux OSを提供する会社」だからです。するとどういうことになるかといいますと、
1.「おお意外と使えるもんだね」

2.「でも××の点が使えないからダメだ」

3.「じゃあ直しましょう(→直しました)」
という循環がおきるのです。3番目のステップが重要で、いくらオープンソースで勝手に直せるからといって、普通の会社では
・直せる技術力がない
・直せる技術力があるからといって勝手に直していいのか(管理は?/責任は?)
という問題が発生するので、2の時点でやっぱり移行は難しいのでは...と躊躇してしまうと思いますが、ミラクルに限って言えば
・直せる技術力が無ければミラクル(のコアテク)にはいない
・直したところは各自責任を持ってメンテすれば良いし、直した内容について他の人(エンジニア)が分からないということはまず発生しないし、さらに内容が変であればつかさずツッコミが入るので特に管理の必要もない
ということが言えます。
まず自分の会社をマイグレートということで始めたプロジェクトですが、Asianux 2.0をベースにするにはどうしても2→3が必要であり、それは普通の会社には難しいということについて、おいおい考える必要があるのではとふと思いました。

さて、本題のAsianux 2.0における無線LANの利用です。調べたところ、サーバ用OSということもあり、ほとんどツールが含まれていません。中には意図的に削除されてしまっているものもあります。したがって様々なツールを用意するところから始める必要があります。なお、下記作業はAsianux 2.0 SP1以降の環境を対象にしています。

●今時のチップとドライバ
まずはIntel Centrino規格のPCについてです。Asianux 2.0 SP1からCentrinoの内蔵無線LANドライバ(ipw2100/ipw2200)が標準で含まれるようになっています。したがってSP1上では、Centrino規格のノートPCをお持ちの人は特にドライバを用意する必要がありません。
Centrinoでない場合、おそらくAtheros(アセロス) Communicationsのチップを使用しているケースが過半数で、続いてBroadcomのチップとなるかと思います。Atherosのドライバはmadwifiという名前で知られており、これはSP1にも含まれていません。Broadcomのドライバはprism54という名前でありこれはSP1に含まれていますので特に用意する必要がありませんが、弊社では利用するユーザーが今のところいないため、本文では触れないことにします。(もし利用者が現れればその時にフォローします。)

で、ミラクルの全ての無線LANチップをLinuxでも使えるようにするには、madwifiドライバを用意すれば良いことが分かりましたので、これを作成しました。

もし、SP1のカーネル(2.6.9-34.21AX)以外で利用したい場合は、ソース rpmをダウンロードし、kernel-develパッケージのバージョンと今利用中のカーネルのバージョンをあわせてから、--target i686 を付けてリコンパイルすると今利用中のカーネル向けのドライバができあがります。

●無線LAN用の設定ツール
無線LAN用のコマンドラインツール(およびライブラリ)といえばwireless-toolsと相場が決まっていますが、これも無かったので作りました。

これをインストールすれば、とりあえずコマンドラインや設定ファイルを直接エディタで開いて設定して動かすことは可能です。

●無線LANの設定方法(暫定)
Asianux 2.0のGUIであるReFinDはKDEベースの環境ですので、本来であればKDE標準の設定ツールを用いて設定する方法を紹介したいと思ったのですが、残念ながらそのままでは動作しないので、ここでは設定ファイルを直接書き換える方法を紹介します。もしKDEのツールが動作するようになれば、その時点でフォローします。

  1. rootでログイン
    システムにrootでログインします。(以降で紹介するプログラムのいくつかはrootでの操作が必須です。)
  2. 各種rpmのインストール
    wireless-toolsのrpmをダウンロードしインストールします。インストールする際は、ダウンロードしたファイルをKonquerorよりダブルクリックし「インストール」を選択するか、コマンドラインよりrpmコマンドを使用します。madwifiドライバが必要な場合(製品仕様等よりAtheros製チップを使用しているのが判明した場合)や、あるいは逆にどのチップを使用しているのか不明な際はkernel-driver-madwifiパッケージもインストールしてください。その後再起動したときに、Atheros製チップを搭載している場合はkudzuに認識されます。なお、無線LANデバイスでは必要なESSIDやKEYの設定をまだしていないので、起動に時間がかかる場合があります。
  3. /etc/sysconfig/network-scriptsに正しい設定ファイルを用意する
    マイコンピュータ→ルートディレクトリ→etc→sysconfig→network-scriptsとたぐってください。network-scriptsディレクトリ内にifcfg-で始まるファイル名を持つファイルがいくつかあるかと思います。無線LANチップが認識されている場合、ここに設定ファイルが用意されています。
    • Centrino PCのケース
      ifcfg-eth1という名前でファイルが用意されていると思いますので、ダブルクリックして開き設定を追加します。
      ミラクル社内のケースでは、ESSIDとWEP KEYの設定をするため、以下の3行の追加が必要でした。

      ESSID=XXXXXXXXXXX
      KEY=XXXXXXXXXXXXXXXXXXXXXXXXXX
      TYPE=Wireless

    • Atherosチップ搭載PCのケース
      ifcfg-wifi0という名前でファイルが用意されていますが、まずファイル名をifcfg-ath0に変更します。
      次にファイルをダブルクリックして開き、DEVICE=の行をwifi0からath0に変更します。最後に、Centrino PCのケースと同様に無線LAN専用の設定を追記して保存します。
    以上で再起動すると無線LANが使えるようになりました。

今回提供できなかったGUI部分については可能な限り早い段階で提供できればと考えています。

GRUB と USB 接続 FDD とブート FD

さとうふみやす です。 雑談にしようかと思ったのですが、起承転結が思いつかなかったので技術ネタ。 USB フロッピーディスクドライブを利用したときの GRUB ブートフロッピーディスクの作成方法を書きます。 MBR に stage1 を、その後ろに stage2 を入れる方法ではなく、 MBR に stage1 を、ファイルシステムの中に stage2 を入れる手順です。 ブートローダーが壊れたシステムに対してはもちろん便利ですが、 フロッピーディスクのファイルシステム内に memtest86memtest86+, BusyBox の静的リンクバイナリを入れておけば、 様々な場面で役に立ちますよ。 以上でピンと来ない方は、ここでさようなら…。

以下は MIRACLE LINUX V4.0 での手順ですが、ほかの Linux でも同様です。

まずは USB 接続のフロッピーディスクドライブをマシンに接続します。 するとカーネルが認識し、dmesg(8) で確認すると次のようなメッセージが見られます:

usb 3-2: new full speed USB device using address 2
Initializing USB Mass Storage driver...
scsi3 : SCSI emulation for USB Mass Storage devices
  Vendor: MATSHITA  Model: FDD CF-VFDU03     Rev: 1026
  Type:   Direct-Access                      ANSI SCSI revision: 02
Attached scsi removable disk sdb at scsi3, channel 0, id 0, lun 0
Attached scsi generic sg2 at scsi3, channel 0, id 0, lun 0,  type 0
USB Mass Storage device found at 2
usbcore: registered new driver usb-storage
USB Mass Storage support registered.
SCSI device sdb: 2880 512-byte hdwr sectors (1 MB)
sdb: Write Protect is off
sdb: Mode Sense: 00 46 94 00
sdb: assuming drive cache: write through
SCSI device sdb: 2880 512-byte hdwr sectors (1 MB)
sdb: Write Protect is off
sdb: Mode Sense: 00 46 94 00
sdb: assuming drive cache: write through
 sdb: unknown partition table

この場合、フロッピードライブは /dev/sdb として認識されました。 それではドライブにフロッピーディスクを入れ、フォーマットします。 Linux だけでなく Windows システムでの利用も考慮すると、 ファイルシステムは VFAT がよいでしょう。 パーティションは必要ないので、デバイスまるごとフォーマットします。 デバイス名を間違えると悲惨なこと (ハードディスク内のファイルシステムが上書き) になるので、くれぐれも慎重に!

# mkfs -t vfat -v -I /dev/sdb
mkfs.vfat 2.8 (28 Feb 2001)
/dev/sdb has 1 head and 3 sectors per track,
logical sector size is 512,
using 0xf8 media descriptor, with 2880 sectors;
file system has 2 12-bit FATs and 4 sectors per cluster.
FAT size is 3 sectors, and provides 710 clusters.
Root directory contains 512 slots.
Volume ID is 44db30c4, no volume label.

次にフロッピーディスク内のファイルシステムをマウントし、 その中に GRUB の stage1, stage2 ブートローダーに入れ、 アンマウントします。

# mount /dev/sda /media/floppy
# mkdir -p /media/floppy/boot/grub
# cp -p /usr/share/grub/i386-asianux/stage? /media/floppy/boot/grub
# umount /media/floppy

stage1 は MBR に入れるのでファイルシステムにも置いておく必要はないと思うのですが、 それがない場合にこの後に実行する GRUB の操作方法を知らないので、今回は深く追求しません。 (ごめんなさい。知っている方、コメントください)

次に grub(8) を起動します。

# grub
Probing devices to guess BIOS drives. This may take a long time.

    GNU GRUB  version 0.95  (640K lower / 3072K upper memory)

 [ Minimal BASH-like line editing is supported.  For the first word, TAB
   lists possible command completions.  Anywhere else TAB lists the possible
   completions of a device/filename.]
grub> 

grub(8) に対し、 /dev/sdb が (BIOS から見たときに?) (fd0) であること、 GRUB の stage2 (あるいは stage1_5) や grub.conf (menu.lst) などがあるファイルシステムが (fd0) であることを教えてから、 フロッピーディスクの MBR に stage1 を書き込みます:

grub> device (fd0) /dev/sdb
device (fd0) /dev/sdb
grub> root (fd0)
root (fd0)
 Filesystem type is fat, using whole disk
grub> setup (fd0)
setup (fd0)
 Checking if "/boot/grub/stage1" exists... yes
 Checking if "/boot/grub/stage2" exists... yes
 Checking if "/boot/grub/fat_stage1_5" exists... no
 Running "install /boot/grub/stage1 (fd0) /boot/grub/stage2 p /boot/grub/grub.conf "... succeeded
Done.

これで完成! マシンを再起動しましょう。 BIOS の POST が完了後、フロッピーディスクがアクセスされているでしょうか? その後、GRUB Loading stage2... と表示され、 GRUB のプロンプト grub> まで表示されれば成功です。

以上は USB フロッピーディスクドライブ向けの解説でしたが、 ふつうのフロッピードライブでもほぼ同じ手順で作成できます。 また、それぞれの手順で作成したフロッピーディスクは相互に流用可能です。

Asianux開発での公用語

皆さんもご存知の通り、Asianux開発は現在の所、北京にて日中韓の三カ国の会社の共同作業により行われています。
母国語の違うそれぞれの国の開発者が集まり、作業を進めていく上での公用語はやはり英語になります。
Asianuxスタート当初は日中の二カ国だけでしたが、自分も含め、皆、英語はかなりヘタだったので会議等、異様に時間がかかっていました。一瞬ですが、日本語のできる中国人通訳を雇おうか。なんて考えたこともありました。
また、日本人の英語の発音と同様、中国にもそれに近いものが存在します。
例えば、「FILE」は中国語英語だと「フィル」という発音をしたり…(ただし、まじめに英語を勉強した中国人の英語の発音はすばらしいです)。
さすがに二年こちらで一緒に作業をしていると、そういった発音にもだいぶ慣れましたし、中国人技術者の発音もよくなってきたように思います。
会議においても昔はすぐに中国語が飛び交う状況(中国人技術者の数が圧倒的に多いため)になっていましたが、現在ではそのような状況になることも少なくなっています。

私自身は中国語をまともに勉強していませんが、それでも二年こちらにいると片言の中国語は話す・理解できるようになってきました。
こないだ、中国人技術者連中と飲みに行った時(以下の中国語が正しいかどうかは謎です ^^;)、
「我在开会的时候,你们都不会说秘密的事情。因为我现在有点听得懂你们说什么。(私が会議に出てる時、君らは秘密の話できないよ。だって私は今君らが何話しているのか少しわかるから)」
なんて言ってみました。すると中国人技術者の一人(中国南方出身)が、
「那我说我老家的方言。你应该听不懂吧。(じゃ、私は私の郷の方言を話す。あなたはきっと分からないでしょ)」
と言われたので、私は、
「肯定不懂啊。(きっとわからないよ)」
と。すると別の中国人技術者(北京出身)は、笑いながら、
「我也不懂。(私もわからないよ)」
と。
※ 中国では方言が他の地方では通じなくなったりするのでこのような会話になります。

と、話がそれてしまいましたが、そんなこんなで英語・中国語にて和気藹々と開発が進んでいます。 :)

サーバールームの管理

はじめまして、こんにちはtshojiです。

私の最近の命題は「サーバールームの整理整頓、管理を如何にするか」です。今日はそのへんの悩み(?)を打ち明けたいと思います。

まず、ミラクルリナックスではサーバールームがあるのですが、つい最近従来の倍の広さになりました。(私の住んでいる部屋より広い...)
私が今まで見たことのあるサーバールームに比べると比較的広いサーバールームになったわけなんですが、ここに基幹用や検証用、サポート用のサーバーがたくさんおいてあります。サーバー以外にも段ボールや周辺機器もたくさんあり、せっかく広い部屋がもったいないと考えていたわけです。

060811151802

 

 画像はタワー用のマシンが収納してある棚

 (他にもこのタイプが2つとラック用が2つあります。)





これをなんとか整理整頓してみんなが気持ちよく使えれば作業の効率も格段と上がるはず!というわけで、まずは「このマシン誰の?」、「この段ボール捨てちゃっていいの?」というところからはじめてみました。

少し始めてみると私以外にも不満をもっている方から協力していただいたり有用なアドバイスを頂くことが出来るようになりました。

マシンの管理は順次マシン名と使用者、目的等の情報を簡単に登録してもらい登録番号を発行してシールを張るといった簡単なことから始め、徐々にステップアップする体制をとってみました。簡単な登録だと手間がかからないのでみなさん積極的にやっていただけますし、「このマシン誰の?」といったこともとりあえず解決できます。

段ボールは目印のシールを張ってもらい、捨ててはいけない段ボールを明示するようにしてみました。毎月末には段ボール品評会を行いシールの張ってない段ボールを本当に捨てていいのか、といったことを品定めします。

他にも電源やケーブルの取り回しだったり、サーバールームを各用途でネットワークを細分化しようといったことも考えています。

こういった些細なことが後の作業のモチベーションをあげる要因の一つになればと、日々使いやすい空間を考えているtshojiでした。

VMの実現はXenやVMwareだけじゃないよぉ!!

PC上で仮想マシン(VM)環境を実現するソフトウェアと言えば、皆さん何を思い浮かべますか?

Xen、VMware、Virutal Server(MS社)といったところが、主だったものでしょうか。

最近、私が知ったもので、上記以外のものをいくつか紹介したいと思います。
#既にご存知の方は、この記事を読み飛ばして下さい。(^^;

まずは「Parallels Desktop for Mac」。Parallels社はVM製品をいくつか出荷していますが、「Parallels Desktop for Mac」は、Intel Mac上で動作します。Intel VT機能を利用して実装されているようで、性能面を一つのウリにしているようです。
#実際に試したことがないので、本当に速いのかどうかはわかりません。。。
「Parallels Desktop for Mac」は、VMware Workstationと同様にホストOS上に仮想マシン環境を構築するタイプのVMのようです。

先日、某VMセミナーで、びぎねっと 伊藤さんがデモしていたのを見て以来、私の物欲リストの上位にIntel Macがランキングされてしまいました。。。

次に紹介するのは、Virtual Iron社の製品です。Xen上にライブマイグレーションやプロビジョニング機能を実現する管理ツールを組み合わせて製品化しているようです。VMware社がVMware ESX Serverと管理ツールを組み合わせVMware Infrastructureとして製品化しているのと同じ形態といえるでしょう。XenそのものはGPLですが、Virtual Ironが提供しているツールは、GPLのものと商用ライセンスのものとがあるようです。

Virtual Iron社は最近までXenやVMwareとは異なるアプローチでVMを実装しようとしていました。複数の実サーバのリソースを統合管理(グリッド的?)できるVMの開発を目指していたようです。それが、途中で方針変更し、XenSourceと提携して、上位層のツール群の開発に注力するようになったようです。

最後に紹介するのは、SWSoft社のVirtuozzoです。恥ずかしながら、最近までその存在を知りませんでした。こちらの製品もVMware Workstationと同様にホストOS上に仮想マシン環境を構築するタイプのVMのようです。

夏はやっぱりビールでしょ

こんにちは。このところむし暑い日が続きますね。ちょっと夏バテ気味の kyagi です。

このたび、コアテク部に新しいメンバが加わり、歓迎会と気分転換を兼ねて、飲み会を開くこととなりました。そうとなれば、弊社は新橋駅から徒歩10分という地の利があります。飲みに行くお店に困ることはありません。

やっぱり夏はビールだよね、ということで今回はビアガーデンにいくことになりました。今回行ったビアガーデンはダンスあり、手品ありのエンターテイメントに溢れるお店で、メンバも一時の間仕事を忘れてハジけていました。

Mlbgmagic_1

Mlbgdance01_1

Mlbgdance02

そういえば、このまえ英語の先生(*注1)がおっしゃっていたのは

All work and no play makes Jack a dull boy.

仕事だけでなく、息抜きも重要ということですね。:-)

(*注1)弊社は希望する社員に対して格安で英語のレッスンが受けられます。

スピンロックその4

多忙のため、1ヶ月ほど間があいてしまいましたが、何事も無かったように平静を装って続けます。

今回は

(b) CONFIG_PREEMP と CONFIG_SMP がともに定義されている場合、すなわちプリエンプションなマルチプロセッサ・カーネルの場合。

のケースで _raw_spin_trylock() の確認からです。これは CONFIG_DEBUG_SPINLOCK が定義されているかどうかに応じて 2種類ありました。

  • CONFIG_DEBUG_SPINLOCK が定義されている場合

int _raw_spin_trylock(spinlock_t *lock)
{
        int ret = __raw_spin_trylock(&lock->raw_lock);

        if (ret)
                debug_spin_lock_after(lock);
#ifndef CONFIG_SMP
        /*
         * Must not happen on UP:
         */
        SPIN_BUG_ON(!ret, lock, "trylock failure on UP");
#endif

        return ret;
}

  • CONFIG_DEBUG_SPINLOCK が定義されていない場合

# define _raw_spin_trylock(lock)        __raw_spin_trylock(&(lock)->raw_lock)

ということで、両者を比較すると、上で定義されている場合の赤いエリアが省略された状態ですね(もちろん、間に関数呼び出しが入ってるとか違いはありますけど)。というわけで、上のほうのコードを確認しましょう。

まずはロックの中心の処理 __raw_spin_trylock() です。

static inline int __raw_spin_trylock(raw_spinlock_t *lock)
{
        char oldval;
        __asm__ __volatile__(
                "xchgb %b0,%1"
                :"=q" (oldval), "=m" (lock->slock)
                :"0" (0) : "memory");
        return oldval > 0;
}

ようやく出てきたインラインアセンブリ構文です。gcc (というより gas?) と縁の無い人にはサッパリ不明な構文ですが、A. SAITOH さんの「GCCでインラインアセンブリを使用する方法と留意点等 for x86」 あたりを読めば楽勝です。

"xchgb %b0,%1" が実行されるアセンブリコード、"=q" (oldval), "=m" (lock->slock) が出力オペランド、"0" (0) が入力オペランドですね。

"q" で自動割当されたレジスタ (eax,ebx,ecx,edx のいずれか) に 0 を代入して xchgb の第1引数として渡し、第2引数としてメモリ上の slock 変数を渡して xchgb を実行しています。そして実行後のレジスタの値を oldval 変数で受け取っています。ここの xchgb の b は byte の b ですね。

ちょっと分かりにくいでしょうか? 具体的なアセンブリコードも見たほうがいいですね。cc -O2 -c でコンパイルして objdump -D で逆アセンブルすると以下の結果になりました。右端に簡単なコメントも付けてみます。

00000000 <__raw_spin_trylock>:
  0: 55        push   %ebp            EBPを退避
  1: 89 e5     mov    %esp,%ebp       ESPをEBPにコピー
  3: 31 c0     xor    %eax,%eax       EAXを0に設定
  5: 8b 55 08  mov    0x8(%ebp),%edx  アドレスをEDXに
  8: 86 02     xchg   %al,(%edx)      ALとslockを交換
  a: 84 c0     test   %al,%al         ALとALの論理積
  c: 0f 9f c0  setg   %al             AL > 0を判定
  f: 0f b6 c0  movzbl %al,%eax        ALをEAXに拡張
 12: c9        leave                  EBPを復旧
 13: c3        ret                    リターン

8ビットの AL レジスタが使われているのが分かりますね。

まとめると __raw_spin_trylock(lock) は、lock->slock の値が 0(LOCKED) なら偽(0) を返し、1(UNLOCKED) 以上なら真(1) を返します。さらに lock->slock の値を 0(LOCKED) に設定します。

volatile unsigned int 型の slock を char 型の oldval で受け取るところはスピンロックその3でみた slock の char キャストと似た扱いですね。

なお xchg などの命令についての詳細は"IA-32 IntelR Architecture Software Developer's Manual Volume 2B: Instruction Set Reference, N-Z" を参照してください。

今回はここまでにします。
更新が遅いせいもあってか、なかなか進みがよくありませんね。もっと飛ばしてサクサク進んだほうがよい、または今のペースでもいいので逐一追ったほうがよい、などリクエストがあればコメントにお願いします。

フットサル

8月4日(金)、フットサルをやってきました。
対戦相手はインテルさん、ドワンゴさん。いろんな社さんが集まって
7分1本の練習試合を行う形式です。

結果は以下の通り。。。今回は負け越してしまいました。(><)
060804_201347_m_1 ● ミラクル 2 - 3 対戦相手

 ● ミラクル 1 - 4 対戦相手

 ○ ミラクル 3 - 2 対戦相手

 ● ミラクル 1 - 3 対戦相手

 ○ ミラクル 5 - 1 対戦相手


フットサルの雰囲気はこんな感じ。この時期体育館なので、
蒸し風呂状態。いいダイエットになるかも。

フットサルが終わった後は、打ち上げ。
060719_225439_mビールとお肉の組み合わせは最高。
夏バテ対策にもばっちり。
フットサルで消費した脂肪をここで
取り戻してきました。ダイエットの
意味なし。。。><;

AAAプロジェクトアップデート

こんにちは。AAAプロジェクトリーダのoishiです。
AAAプロジェクトについてはこちらをご参照ください。
今日時点での窓系OS駆逐率は36%です。これを多いと見るか少ないと見るかは微妙ですが、7/24開始から9/30完了目標なので、開始3週間足らずでこの割合はまずまずではと見ています。
これまでの様子を見ると、デスクトップ、ノートブックへのAsianuxインストールは思いのほかスムーズに行くようです。問題はインストール後の運用フェーズです。
AAAプロジェクトチームでは、下記のような点に関して、個別調査を行うことにしました。
   1. Officeソフト
   2. ファイルサーバアクセス
   3. カラープリンタ
   4. メーラ、ブラウザ
   5. 日本語変換
   6. 無線LAN
   7. プロジェクタ接続
   8. サスペンド設定
   9. サウンド
  10. 通信カード(H")
  11. USBメモリの使い方
  12. 圧縮アーカイブ中のファイル名のエンコーディング問題
  13. EXE形式の圧縮ファイルの対応
  14. アンチウィルスソフト
これらについては、問題があるかどうか、問題があればどのように解決するかという調査を行う担当を決め、進めています。
調査結果がまとまったものは今後公開して行く予定です。また各問題対応で作成したパッケージなども公開予定ですので興味のある方ご利用できます。
その他何かトラブル情報があれば、どうぞご一報ください。もちろんMIRACLE LINUXプロダクトサポート窓口ではなく、こちらのブログコメントへ!よろしく。

Qlogicドライバ failoverの話

雑談のネタがないので、技術系の雜話をします。どっちも雑ですが。。。

さて、Linuxを趣味で使用する方に、無縁かもしれませんが、エンタープライズにLinuxを使用すると、性能以外に、拡張性、耐故障性などが求められます。今回は、Qlogicのfailoverについて触れます。

ファイバーチャンネルでQlogic社のHBAのQlogicを使われる方が多いと思います。ポートが二つ以上あると、多チャンネル構成が出来ますので、ドライバのバージ>ョンによってI/Oのfailoverやloadbalanceが可能になります。最新のバージョンは両方できるようになっています。

2ポート以上の構成は見たことがないので、2ポートについての動作を書きます。この場合、チャンネルはそれぞれアクティブパス(Active Path)、スタンバイパス(Standby Path)を構成します。この構成がシステムのブート時に決まります。

Linuxブートプロセスで、PCIスキャンの時に最初に見つかったHBAのポートのチャンネルがディフォルトのActive Pathになります。その後見つかったものがStandby Pathになります。ここで、最初に見つかったHBAを0、次に見つかったHBAを1とします。

まず、カードが認識されていることをprocファイルから確認します。
次のprocファイルが存在します。

#ls /proc/scsi/qla2300/
/proc/scsi/qla2300/0
/proc/scsi/qla2300/1

次に、カードの情報を確認します。
#cat /proc/scsi/qla2300/0

QLogic PCI to Fibre Channel Host Adapter for QLA2340         :
        Firmware version:  3.03.06, Driver version 7.03.00-fo
              :
              :
Number of retries for empty slots = 0
Number of reqs in pending_q= 0, retry_q= 0, done_q= 0, scsi_retry_q= 0
Number of reqs in failover_q= 0
Host adapter:loop state= <READY>, flags= 0x860a33  <--この行に注目(1)
              :
              :
SCSI LUN Information:  <---- この情報に注目(2)
(Id:Lun)  * - indicates lun is not registered with the OS.
( 0: 0): Total reqs 12, Pending reqs 0, flags 0x0, 0:0:00,
( 0: 1): Total reqs 5, Pending reqs 0, flags 0x0, 0:0:00,
( 0: 2): Total reqs 5, Pending reqs 0, flags 0x0, 0:0:00,
( 0: 3): Total reqs 5, Pending reqs 0, flags 0x0, 0:0:00,

loop stateには、<READY>, <DOWN>, <DEAD>があります。それぞれは
<READY> =>  チャンネルのリンクが正常
<DOWN>  =>  チャンネルのリンクが異常 (リトライ中)
<DEAD>  =>  チャンネルのリンクが断線

上記(1)の情報から、HBA0のチャンネルが正常で、(2)からHBA0にディフォルのアクティブパスがあるということが分ります。

#cat /proc/scsi/qla2300/1
QLogic PCI to Fibre Channel Host Adapter for QLA2340
        Firmware version:  3.03.06, Driver version 7.03.00-fo
             :
             :
Host adapter:loop state= <READY>, flags= 0x860a33  <-- リンクOK。
             :
             :
SCSI LUN Information:  <---- なにもない。
(Id:Lun)  * - indicates lun is not registered with the OS.

SCSI LUN Information には、OSに登録されたSCSI ID - LUNの情報があります。起動時にディフォルトのアクティブパスから読み取った情報がカーネルに登録されます。スタンバイパスから読み取ったSCSI ID - LUN情報は、ドライバ内部で先に登録された情報にマージされます。このため、RAID上でLUNが4つがある場合、4 x 2 = 8個のディスクが見える筈ですが、failoverモードを使用すると、その半分の4つのディスクに構成されます。dupしたディスクが1つになったわけです。

ちょっとした実験ですが、アクティブパスのファイバーを抜いて、暫くして差し戻すと以下のdmesgの出力を確認出来ます。

#dmesg
             :
             :
qla2x00: FAILOVER device 0 from 5006xxxxxxxx7910 -> 5006xxxxxxxx7912 - LUN 00, reason=0x1
qla2x00: FROM HBA 1 to HBA 0
             :
             :
qla2x00: FAILBACK device 0 -> 5006xxxxxxxx7910 LUN 00
qla2x00: FROM HBA 0 to HBA 1
             :
             :

尚、このブログに書いた情報はMIRACLE LINUX 3.0 , kernel-2.4.21-20.29AXsmpの環境でQlogic 2340カードを使った時のものです。

Linux の割り込み処理 【第1回】

本日 「Linux の割り込み処理 【第1回】」 ということで書きたいと思います。
以下の内容は Intel 8086 系です。他のアーキは別の機会ということで。

「割り込み」 と一口に言っても、IRQ を介したハード割り込みや、CPU が発生させる例外など、色々あります。
各割り込みには 0 から 255 までの番号が付けられており、それぞれを 「割り込みベクタ」 と呼んでいます。
それらのベクタは idt_table (Interrupt Descriptor Table) というものに書かれており、ベクタの種類や割り込みに対する処理などを知ることができます。

crash> rd idt_table 512
c03cc000:  00605250 c02d8f00 006052e0 c02d8e00
c03cc010:  00605330 c02d8e00 006053c8 c02dee00
c03cc020:  006053f8 c02def00 00605404 c02def00
c03cc030:  00605410 c02d8f00 006052a8 c02d8f00

(中略)

c03cc7e0:  00605170 c02d8e00 00605190 c02d8e00
c03cc7f0:  006051f0 c02d8e00 00605210 c02d8e00

ベクタはサイズが 8 byte で 256 個ありますので、合計 2048 byte です。

そして、各割り込みの使用目的は以下のようになっています。

  • 0 から 31 までのベクタは例外と non maskable 割り込み
  • 32 から 47 までのベクタは IRQ による割り込み
  • 48 から 255 までのベクタはソフトウェア割り込み

例として、0 番について見ます。

crash> rd idt_table 2
c03cc000:  00605250 c02d8f00

40 - 43 bit がこのベクタの種類を表しており、

  • 0101 ならタスクゲート (最後が 500)
  • 1110 なら割り込みゲート (最後が e00)
  • 1111 ならトラップゲート (最後が f00)

となります。これはトラップゲートです。

次にベクタが呼ばれた場合の処理ですが、0 - 15 bit が low-part, 48 - 63 bit が high-part となる 32 bit のアドレスが使用されます。
この場合、アドレスは 0xc02d5250 となります。
これは以下のように、除算エラーの例外ハンドラです。

crash> sym c02d5250
c02d5250 (T) divide_error

次に、14 番について見ます。

crash> rd idt_table+14*8 2
c03cc070:  00605464 c02d8e00

40 - 43 bit が e00 なので、割り込みゲートです。
0 - 15 bit を low-part, 48 - 63 bit を high-part として組み合わせると、アドレスは 0xc02d5464 となります。
これは以下のように、ページフォールトの例外ハンドラです。

crash> sym c02d5464
c02d5464 (T) page_fault

今回はここまでにしますが、次回 (があれば) IRQ の割り込みや、システムコールについて書きたいと思います。

ブログの管理者に!?

こんにちは、このブログ初投稿の寺島です。仕事ではAsianuxチームに所属しており、Asianuxの開発以外にもMIRACLE HiZARDの担当をしています。今のチームに移ってからあまり時間が経っていないこともあり、これまでの仕事を継続して行いつつ、新しい仕事を覚えている日々です。

Asianuxの開発の話題はまた後日にゆっくりとお話することにしまして、実は先日、急にこのブログの管理者に任命されてしまいました。すでに読まれている方は御存じだと思いますが、このブログは弊社コアテクノロジー部のメンバー全員が交替で執筆しています。管理と言っているのは、その執筆者の割り当てと投稿の管理になります。

弊社も世の中のIT企業と同じく、仕事と時間に追われている人が多いため、なかなか記事を書いてもらえないことに苦労しているのですが、日本中の多くの方に読んで頂いている当ブログを盛り上げるためにも、色々と作戦を考えているところです。

さて、ここで皆様に公表してしまいますと、管理者として1日1記事以上という目標を考えております。簡単そうでなかなか実践できないものですが、継続は力なりということで頑張っていこうと思っています。お昼休みや休憩時間の合間など、ちょっとした時間に読んで頂けると嬉しく思います。

最後に、当ブログへのコメントやトラックバックは大歓迎です。加えて「こういう記事が読みたい!」、「ミラクル・リナックスのここが知りたい!」などの要望やご指摘も随時受け付けていますので、気軽に書き込みを頂ければと思います。

ML30へATOK for Linuxをインストールする

MIRACLE LINUX V4.0 (ML40) では scim と Anthy の組み合わせにより日本語入力の操作性が向上していますが、MIRACLE LINUX V3.0 (ML30) では canna と iiimf しか選択できないので、日本語入力環境に物足りなさを感じているユーザさんも多いと思われます。

ここでは、ML30 x86版で ATOK for Linux を導入する手順を紹介します。

なお、ML30でATOK for Linuxの動作を保障するわけではないので、ご了承ください。

  1. ML30 に標準で含まれている IIIMF 関連パッケージを削除します。

      # rpm -qa | grep iiimf | xargs rpm -e
  2. gtk2 パッケージをセキュリティアップデートで更新している場合、"/usr/bin/gtk-query-immodules-2.0" ファイルが "/usr/bin/gtk-query-immodules-2.0-32" ファイルに変更されているので、元のファイル名に対しシンボリックリンクをはります。

      # ln -s /usr/bin/gtk-query-immodules-2.0-32 /usr/bin/gtk-query-immodules-2.0
  3. ATOK for Linux の CD-ROM をマウントし、bin/setupatok スクリプトを実行します。以下の例では、/dev/cdrom を /mnt/cdrom にマウントすると仮定しています。

      # mount /dev/cdrom /mnt/cdrom
      # /mnt/cdrom/bin/setupatok
  4. インストールスクリプトで、「IIIMF をインストールする」を選択します。

  5. ATOK for Linux のインストールが成功したら、こちらからダウンロードできる "atok_xinput.patch" を以下のコマンドで適用します。

    atok_xinput.patchをダウンロード

      # patch -p0 < atok_xinput.patch
  6. atok サービスを起動します。

      # service atokx2 start
  7. X セッションを一旦閉じ、再度始めます。X の起動後、入力パレットが画面右下に表示されているはずです。

なお、ML30 では GTK+ のバージョン 2.2.4 が搭載されているため (パッケージ名 gtk2)、ATOK を動作させるのに GTK+ のアップデートは必要ありません。

feedpath tags:   generated by feedpath

AAAプロジェクト カラープリンタ対応

AAAプロジェクトで某社のカラープリンタでカラー印刷をできるようにするというタスクが割り振られました。色々と調べたところ、下記の2つの選択に絞られました。

  • 某窓系OSのサーバを構築して、そのサーバ経由でカラー出力をさせる
  • オプションのPS3モジュールを別途購入する

なぜ、Linuxの会社なのに始めからPS3モジュールないしLinux対応のカラープリンタを購入しないのかと思われる方もいると思いますが、購入当時はLinuxでのカラー出力を全く想定していなかったようです。(2006/07/24の記事参照)
検討した結果(たいして検討もしていませんが)、某窓系OSを構築するくらいならPS3モジュールを購入した方がコスト的にもよいということで、PS3モジュールを購入することになりました。最終的にお金で解決させるということになりました。。。。次回以降のAAAプロジェクトに関してはもっと技術的な内容になると思います。楽しみに。

子育てグッズ

ミラクル・リナックスでは多くのIT業者がそうであるように

  • 連絡はメール
  • スケジュールはWeb

です、そんなわけでノートPCさえあればどこでも仕事が出来たりします。
(いいのか、わるいのか)
私は特に家で仕事をすることが多いのですが、現在6ヶ月の暴れん坊がおり
なかなか思うように仕事をさせてくれません。

そこで PC関連商品を開発される業者様こんなものを作ってください

  • 防水型キーボード(洗えることが必須です)
  • 防水型マウス(洗えることが必須です)
  • 防水型モニタ(洗えることが必須です)
  • 防水型PC(洗えることが必須です)

ちなみにキーボードカバーも考えては見たのですが、おそらく一瞬で剥ぎ取られる
でしょう!

あと。。。耐衝撃性~(投げてもたたいても壊れないが必須です)もあればいいですね

任天堂DSが激売れの今、ちょっと変わった世代にアプローチしていくことが大切
ではないでしょうか?現在PC購入の中心となっている若い世代ではなく主婦層を
ターゲットとした戦略としていかがですか?もちろんミラクル・リナックスにもいっぱい
いる座布団ズ(尻にひかれっぱなしのパパ)にも馬鹿ウケ間違いないでしょう!

と、こんなグッズを持たない私は夜の夜中に一人静かにメールを打っています

060801_0048001
 写真は我が家で怪しく光る PC on a lunch on mat

会社情報 採用情報 個人情報保護方針 商標等取り扱い事項 English
Copyright(c)2000-2006 MIRACLE LINUX CORPORATION. All Rights Reserved.