DELL Studio 1558 のUbuntu 9.04で音が出た

こちらを参考に、

/etc/modprobe.d/alsa-base に
options snd-hda-intel model=dell-m6

を追加して、再起動したら、最初は分からなかったがBeep音が出たので、PCMとマスターの音量調整が出るようになった。しかし、PCMの音量を大きくしようとすると、相対的にBeepがとてつもなくデカくなる。つまり、参考にしたページにも書いてあるけど、PCMの音量が小さい。

前のLet’s Note CF-W2はPC speakerの設定があったが、studio 1558には無い。うーむ…
とりあえず、音が出たのでよしとする。

あとは、DVDが再生できない件だな。
Let’s note CF-W3では再生できていたのに、USBディスクを繋ぎ替えただけの studio 1558では再生できないつーのは、多分、ドライブのせいだと思うが、Panasonic BD-RE UJ235Aってモデルは地雷なんだろうか?

とりあえず、昨晩からかかってWindows 7のディスク領域を縮めたので、ディスクの後ろの領域を使われて、Linuxインストール領域が確保できなくなる事は無くなったので、BIOS、ドライバ、ファームウエアのアップデートをやってみるかな。

まだ暫くstudio 1558でのLinux本格稼働までは時間がかかりそうだ。

ZoneMinder

最近、ZoneMinder と戯れている。

Ubuntu 10.04 LTS を、Let’s note CF-W2で使用すると、Xが不安定で、DVDやビデオ再生でXがブチ落ちてハングアップしてしまうので、Ubuntu 9.04にZoneMinderを入れたが、リポジトリのパッケージは古いので、本家のUbuntu 9.04用パッケージを入れた。

入れ方は結構Webにあるが、
sudo ln -sf /etc/zm/apache.conf /etc/apache/conf.d/zoneminder.conf
sudo adduser www-data video

と設定して、再起動した方がいいみたい。
わしは、/etc/group を直接編集したから、再起動が必要だったのかよく分からないが、www-data の権限で、/dev/video0 が読めれば大丈夫。

で、ZoneMinderの設定でのハマりがあって、最初からあるモニターに設定をすると、動体検知でのalarm 状態から待機に戻らなくて、延々と画像を記録し続けるというのがある。

最初からあるモニターをさっくり削除して、”Add new monitor”で新しくモニターを作り直すとエンドレスアラーム状態の不具合から解放される。

わしが使っているカメラは、UVCカメラで、Device FormatがPAL、Device PalletがYUVVでZoneMinderで画像が取れる。この方式が違っていても画像が出ないので注意が必要。

既定のゾーンの設定で、Modect(Motion detect)でカメラに自宅前を見張らせておいたら、わしの帰宅を捉えた図(笑)

赤外線カメラなので、木々の葉の赤外線反射で白っぽくなる。

画面の中央やや左に光ファイバーケーブルがあり、こいつが風で結構揺れるのだが、それには反応しないので、よくできた動体検知だ。

Ubuntu 10.04 LTSにupgrade

家のマシンで、COREGAのCG- HDC2EU3100にUbunt 9.10 Desktopを新規にインストールして、使っていたが、UVC Webカメラをxawtvで表示させると、Ubuntu 9.04なら表示できるのに、9.10 は表示できない。

そこで、「10.04 LTSにアップグレードできます」というボタンをポチった。

30分程で upgrade は完了したが、途中、「NetworkManagerのリソースがありません」というダイアログが出たり、IPA モナーフォントを使っていたせいか、 upgrade の詳細の画面が豆腐だらけで読めなくなった。

で、zoneminderで何か警告が出て、 y という文字と、 continueって文字があったので、y↲とやったら取り敢えず、継続し、upgradeできた。

さて、再起動をしてみると…

X が表示されねーよ orz
検索すると、どうやら、Intel 855GMチップセットはハマりらしい。
このページ

echo options i915 modeset=1 | sudo tee /etc/modprobe.d/i915-kms.conf
sudo update-initramfs -u

で、やっと X で画面が見えるようになった。

xawtv を起動したが、やはり、grubdisplay で映像が見えない。9.04で -hwscan で表示されていた port の部分が無いから、Intel chipset絡みかねえ。

9.04から乗り換えられんな。

COREGAのCG-HDC2EU3100発注

SATAのハードディスク500GBが2台余っているので、活用方法をどうするか考えていた。

ちなみに家には、SATAで接続できるマシンは今の所無い。
OpenRD UltimateはSATAとeSATAが付いてるので、これで使えるのだが、環境構築時にフラッシュメモリへの書き込みを避ける為に使用する用途位なので、最終的に余ってしまう。

そこで、PCに接続できるHDDケースを探してみたら、eSATAとUSB3.0のどちらかで1台のHDDを接続できるタイプとか、eSATAとUSB2.0のどちらかで接続できて、2台以上のHDDをRAID構成で接続できるものとかあった。

で、余ってるのは2台なので、COREGAのCG-HDC2EU3100にした。これはeSATAとUSB2.0で接続できるが、家の古いLet’s note CF-W2に繋げる事ができるし、新しくマシンを買ったとしてもeSATAで接続できるかもしれん。

まあ、その時にはeSATAなんてI/Fは無くなってるかもしれんが(^^:

これでRAID1にして、家のマシンのLinux環境のrecoverbilityを向上させる。ただ、夏の灼熱環境に耐えられるかどうかだな。

未だに古いLet’s noteを使っているのもこの灼熱地獄の部屋で24時間運用して、壊れずに今まで動き続けている事が大きい。

前にRAID5を構築したマシンを部屋で運用していた時には、5インチベイ×2のサイズに3台のHDDを搭載するタイプで、熱の逃げ難い真ん中のHDDだけが1年で確実に壊れるという状況だった。

今度の奴は放熱性はその3台詰め込み式よりは良さそうだが、結果は来年以降 🙂

OpenRD ultimate

OpenRD ultimate(旧OpenRD Client)をこうにう。

SKU: Product Quantity Price Ext. Price
003-RD0005 OpenRD-Ultimate 1 $249.00 $249.00
Order Notes:
Unit Price does not include Duty or Tax that may apply.
SubTotal: $249.00
Shipping: FedEx International Priority $46.04
Tax: $0.00
Total: $295.04

shippingには、ちょいと豪勢にFedex International Priority。Economyに比べて$4しか変わらないけど (^^;

近所で玉砂利が盗まれそうになるとか、物騒になってきたので、こいつにUSBカメラを接続して、監視カメラソリューションでも作ろうかと思っている。

ARM7だから、余りパフォーマンスは良くなさそうだけど、監視カメラがダメだったら、余ってるSATAのディスク繋いで、ファイルサーバ兼ルータにでもするか。

dkms

Dellの最近のPCにUbuntuを入れる場合、tg3を組み込んでやらないとネットワークが認識しない。

で、ドライバはBroadcomのサイトからダウンロードして、野良ビルドでさっくり入るのだが、カーネルバージョンアップの度にmakeするのも面倒だし、うっかり忘れてリブートしたら、リモートでログインできなくなる。

dkms(Dynamic Kernel Module Support)という機構を使えば、カーネルバージョンアップの時に自動的にビルドして、ドライバをインストールしてくれるから、できればこれを使いたい。

Dellのサポートサイトにも記述はあるのだが、dkms.confとか作成してないし、dkmsに登録もしてないから、dkmsをインストールするって手順は無意味でないかい?

色々と、Webを見ても、日本語の記述がごく僅かしか無いし、tg3のdkms.confの記述なんか皆無だ。

で、何とか dkms.conf をでっち上げて、dkms add …、dkms build… ってやると、tg3_flags.h の作成でエラーと言われて止まる。

make.log見ても中身はdkmsのメッセージのみでエラーが無く、空っぽで、元ソースでtg3_flags.hを作っておいて、dkms.confでCLEAN=”make -q clean”と定義してやると、cleanでexit code 1になるけど、ビルドには成功する。

Makefileの
sh makeflags.sh > tg3_flags.h
の行が悪いのだろうというのは分かるが、Why?

shellの多重起動がいかんのかな?

F-Secure Linux gateway

今更ながらに Ver.4.03にバージョンアップした。

元々、インストールした時に debパッケージは無く、tar ballの野良ビルドだったが、今は debパッケージがあり、それを入れると、ちゃんと、野良ビルド環境の設定を引き継いで何の問題もなく、バージョンアップが終了した。

そこで、設定を見ていてふと気づいたのが、SPAM RBL関係が「無効」になっている。

わしは余り深く考えずに、自動で SPAM を排除してくれる便利なもの程度で、気軽に有効にしていたが、時折、Junkにお客さんのメールが叩き込まれる事があり、難儀していた。

そして、会社からお客さんに送信したメールが届かないってので、調べると、お客さんのプロバイダに迷惑メールフィルタサービスがああり、どうもRBLを利用してるっぽい。

よくよく調べると、規制方法として、ボランティアの報告者が「SPAM業者許すまじ!」とIPアドレスグループでごっそり拒否とかしていて、無関係の善良なサーバがそのとばっちりで、SPAM発信者と誤認される事が多々あるそうだ。

それに、マルチドメインサーバーが多い昨今で、IPでの規制はすごく問題があるな。だから、F-SecureのLinux gateway はデフォルトで無効にしたのか。

会社で「メールが届きません」ってメールが来る事が度々あり、調査をするのだが、送信が正常にも関わらず、「届いていない」というのは、メールソフトの迷惑メールフォルダに入ってるか、サーバの迷惑メールフィルタで届く前に捨てられているかのどちらかだ。

しかし、この調査結果を依頼者に言うと、それを元にお客さんにメールで返答しているようだ(´・ω・`)

そのメールも届かない可能性が高いってのは思い巡らないのだろうか?

結局、お返事メール書いたところで、お客さんに届いていないのであれば、意味が無いし、メール書くのに費やした時間も全くの無駄だ。

インターネットで通販やってる会社で、インターネットの仕組みを理解して、ちゃんとした運用をやってる会社ってのは、案外少ないのかもしれないな。

イヤ~ンな仕様

ファイルのアップロードでディスクへの格納に、お客様の名前のディレクトリを作成して格納するって事になっている。

このお客様の名前というのは、フォームの名前欄で、どんな文字でも入力できるので、わしなら絶対に採用しない仕様。

とりあえず、phpの関数しか使っていないし、ヤバそうな文字は予めエスケープしたり、文字置換したりしているからいいかと思っていたが、バックアップでファイルをリアルタイムでコピーするって話になってさあ大変。

最初は php の move_uploaded_file() が成功したら、バックアップディスクにもファイルをcopy() でコピーするコードを書いた。

しかし、ファイルコピーが終了するまで、phpスクリプトが終了しないので、完了時間が数秒延びてしまう。

ディレクトリが入力フリーダムな状況で、その文字列をシェル渡しにするなんぞ、絶対にやりたく無かったが、仕方がないので、exec() でバックグラウンド起動し、スクリプトはすぐに終了するようにした。

シェル渡しにすると何が問題になるのか?

たとえば、名前欄に「野泉雄嗣」と入れて、次のコマンドが実行される様な事を期待していたとする。

copy /var/www/upload/野泉雄嗣/filename.lzh /backupdisk/野泉雄嗣/filename.lzh

では名前欄に「; rm -rf /;」って入れたらどうなるか?

copy /var/www/upload/; rm -rf /;/filename.lzh /backupdisk/; rm -rf /;/filename.lzh

で、これがシェルに渡ると5つのコマンドと解釈される。
1. copy /var/www/upload/
2. rm -rf /
3. /filename.lzh /backupdisk/
4. rm -rf /
5. /filename.lzh

1,3,5はエラーで終わるが、2と4が実行されると、apacheに書き込み権のあるディレクトリのファイルが全部削除される。

php の copy() はパス名にこういうヤバい文字が含まれていても、うまい事握ってくれるが、exec()でやるとなると、この辺は自前で何とかしないといけない。

変なコマンドを実行されない為には、次の様にヤバい文字をエスケープすれば良い。

copy /var/www/upload/;\ rm\ -rf\ /\;/filename.lzh /backupdisk/\;\ rm\ -rf\ /\;/filename.lzh

escapeshellcmd()とか、ヤバい文字をエスケープしてくれる関数があるが、これはマルチバイト非対応で、漢字文字列があると全部削除される。

つまり「野泉雄嗣」の様な漢字のディレクトリが作られる事を想定しているプログラムには使えない。

とりあえず、escapeshellcmd()でエスケープする文字に空白とかも追加して
$str = addcslashes($str,’ \'”#&;`|*?~<>^()[]{}$\\’.”\x0A\xFF”);

とやったが、これってUTF-8の漢字の一部に該当するコードがあっても置換される予感がするなあ…。前に組んだmb_replace_string()って自作関数使った方が良さそう。

しかし、そもそも論で言えば、「何で人間が見て分かる形にする必要があるの?」ってのがある。

システム化というのは、「人間が見て判断する」という非効率でヒューマンエラーが発生しやすい状況を改善する事が目的である。

効率化を追求した結果、これ以上効率化が無理だからシステム化するってなら分かるが、非効率な手順は一切変えず、それを無理矢理システム化するってのは、システム化に対する幻想がある気がするな。

友人が電気店で見たある客がMacを指差しながら店員に「これ買ったらすごい絵が描ける様になるんですよね!?」って言ってたって話を思い出したな 🙂

Ubuntu 9.10のFDTI USB シリアル通信

会社でRBIO-2Uのシリアル通信プログラムが動かなくなったので、テストプログラムでテストしてみた。

ソース

Ubuntu 9.10 Desktop kernel 2.6.31

Ubuntu 9.04 Desktop kernel 2.6.28-16

9.04だと、”PCR01″って送信したら、”\r\nOK\r\n”って文字が返ってきている。
シリアルポートの設定は同じだが、read()で読み出した時の挙動が違う。
これは、kernel 2.6.31のFTDIのドライバか、シリアル関係がバグってそうな予感…。

Ubuntu 9.10

会社のマシンのUbuntu 9.04のアップデートマネージャが「9.10にアップグレードできます」とアップグレードさせる気満々だったので、ついポチっとボタンを押してしまった。

9.04で快調に動いていたRBIO-2U用の自作シリアル通信プログラムが動かなくなりました(´・ω・)

コマンドを送ったら、ちゃんとリレーは作動するので、送信はできてるっぽいが、受信で殆ど文字列が帰ってこない。1文字受け取るまで受信をブロックするってシリアル設定にしたら、read()で返ってこなくなってデッドロックする。

gtktermで繋ぐと問題無いので、カーネルヘッダか、それとも何かパッケージで抜けているものがあるのか…。

とりあえず、来週は、VirtualBoxで新規インストールして、シリアル通信プログラムをコンパイルして試すつもり。

これで、カーネルが悪いのか、アップグレードが悪かったのかが分かるだろう。