IE6対策はいつまで…

ひさびさ IE6 でハマったのでメモ。

Location ヘッダでページを移動する場合、IE6 ではスクリプト名だけを指定すると正常に移動しない。
http: 以下を全て指定すると正常に移動する。

不正 : "Location: admin.php?page=list"
正常 : "Location: http://server/directory/admin.php?page=list"

まあ Locationヘッダの仕様としては正当なんですが、IE7 以降も含めてその他のブラウザではどちらでも OK なんですよね。

いまさら IE6 なんですけど、まだシェアは 20% 程度あるようなので、対応しておかなければなりません。

ほんっとに IE6 はお荷物になりました。

microSDHC は物理ディスクとして使用しない方が良い

しばらく microSDHC 16GB を VMware の物理ディスクとして、Ubuntu 9.04 の仮想マシンをインストールして使用していました。
しばらく順調に使用していましたが、仮想マシンの起動ができない場合が多くなりました。

原因はよくわからないのですが、USBがらみのようです。
SDカードリーダはUSB接続なので、対策は難しいと判断しました。
このマシン固有の問題かもしれません。

結局、電源を交換(300W→400W)してHDを追加(SATA 160GB)しました。
物理ディスクの使用はあきらめ、フラットイメージの仮想ディスクを使用する事にしました。

Dexpot が Aero に対応

仮想デスクトップの Dexpot の最新版を試してみたところ、Windows Vista の Aero に対応していました。
デスクトップを切り替えた時にウィンドウの一部が真っ白になってしまうバグが修正されています。

しばらく VirturaWin を使っていましたが、これで Dexpot に戻れます。

あきらの Ubuntu 9.04 初期設定のまとめ

あきらの Ubuntu 9.04 初期設定のまとめです。
あきら自身のメモと、みなさんの参考のために。

仮想マシンの作成

今回は SDHC 16GB をRAWディスクとして環境を作成します。

なぜ SDHC にインストールするのか?これは以下の理由です。

・16GBあれば Web システムの開発に支障が無い
・Eclipse(Java)の実行速度が格段に速い
・SDHC を挿しかえれば他のパソコンの仮想マシンとして開発を継続できる
・SDHC を丸ごとコピーすればバックアップができる
・16GB の microSDHC はパソコン工房で約 4,000円で購入可能

仮想マシンの起動時に UAC の確認画面が表示されるのが少々面倒ですが、性能が良いので良しとしました。

以下、VMware Workstation での作成手順です。

画像(180x132)


画像(180x132)


画像(180x132)


画像(180x132)

「Linux」「Ubuntu」を選択

画像(180x132)

仮想マシンの名前を入力します。

画像(180x132)

CPUは 1個でも良いのですが、ホストが Vista/7 の場合は複数割り当てたほうがレスポンスが良いように感じます。

画像(180x132)

メモリはケチらずに割り当てましょう。
あきらは1GBを割り当てました。
ちなみにホストの全メモリ容量は3GBです。

画像(180x132)

お好きなネットワーク接続を選択してください。

画像(180x132)


画像(180x132)

ここで「物理ディスクの使用」をクリックします。
UACの確認が表示されるので、「続行」をクリックします。

画像(180x132)

物理ディスクとして SDHC を選択します。
あきらの環境では「PhysicalDrive 2」となります。

※ 絶対に「PhysicalDrive 0」は選択しないでください!システム(ホスト)が破壊されます!

画像(180x132)


画像(180x132)

「完了」をクリックして VMware Workstation を終了します。

VMXファイルの修正

作成した仮想マシンの VMXファイルに以下を追加します。

svga.vramSize = "67108864"
mainMem.useNamedFile = "FALSE"

Ubuntu 9.04 のインストール

インストールディスクを CD/DVDドライブにセットして、VMware Player で仮想マシンを起動します。
UAC の確認が表示されるので「続行」をクリックします。

画像(180x148)

BIOSの起動画面が表示されたら、すかさず画面をクリックして F2 を押します。
失敗したら仮想マシンをリセットして再チャレンジします。

画像(180x148)

「Boot」を選択して「CD-ROM Drive」を一番上にします。

画像(180x148)

「Exit」を選択して「Exit Saving Changes」で Enter を押します。
確認が表示されるので「Yes」で Enter を押します。

画像(180x148)

仮想マシンが再起動されます。

画像(180x148)

カーソルキーで「Ubuntuをインストール」を選択します。
まだ Enter は押さないでください。

画像(180x148)

起動時のオプションを追加します。

F6 を押してオプション選択が表示されたら Esc を押します。

画像(180x148)

_(アンダーバー)を入力したいので、F3 を押してキーマップ「USA」を選択して Enter を押します。

画像(180x148)

「clocksource=acpi_pm」を追加します。
キーマップが USA だと以下のように入力します。
「=」->「^」
「_」->「Shift」+「-」

画像(180x148)

念のためキーマップを「Japan」に戻しておきます。
あとは通常のインストールを行ってください。

ソフトウェア・ソースの追加

インストールが無事完了してUbuntuが起動したら、ソフトウェア・ソースに Ubuntu-X Team の X-Updates を追加します。

アップデート・マネージャが起動している場合は終了しておきます。
コンソールを起動して以下のコマンドを実行します。

$ sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com AF1CDFA9

ソフトウェア・ソースに以下の2つを追加します。

deb http://ppa.launchpad.net/ubuntu-x-swat/x-updates/ubuntu jaunty main
deb-src http://ppa.launchpad.net/ubuntu-x-swat/x-updates/ubuntu jaunty main

アップデート・マネージャでアップデートを行います。
「再起動が必要」と表示された場合は再起動をします。

デスクトップの設定

操作しづらいのでデスクトップを設定します。

■「システム」>「設定」

・「ディスプレイ」> 1152×864
・「スクリーンセーバー」> 「アイドル状態になったらスクリーンセーバーを起動する」のチェックをはずす
・「電源の管理」> 画面をスリープしない
・「自動起動するアプリ」> チェックをはずす「Bluetooth Manager」「Evolution Alerm Notifire」

■ ワークスペースを4つに

■ 時計

・24時間表示
・日付を表示しない
・秒を表示
・場所を設定

■ 「システム」>「システム管理」

・インターネット上のサーバと同期させる
・ntp.jst.mfeed.ad.jp

パッケージのインストール

Synaptic で以下のパッケージをインストールします。

vim
xserver-xorg-input-vmmouse
postgresql
apache2
php5
php5-ffmpeg
php5-imagick
php5-mcrypt
php5-mysql
php5-pgsql
php5-sqlite
php-pear
phppgadmin
gftp
ssh
sun-java6-jre
winbind

「システム」>「システム管理」>「日本語環境セットアップ・ヘルパ」をインストールされている場合は、必要なパッケージを選択してインストールします。
あきらは FlashPlayer などをインストールしました。

PostgreSQL の設定

UTF-8 以外も利用可能にします。

$ sudo -i
# service postgresql-8.3 stop
# cd /var/lib/postgresql/8.3/
# cp -rfa main/ main.back
# rm -rf main/*
# su postgres
$ /usr/lib/postgresql/8.3/bin/initdb --no-locale --encoding=UTF8 -D /var/lib/postgresql/8.3/main
$ exit
# cd main/
# ln -s /etc/postgresql-common/root.crt root.crt
# ln -s /etc/ssl/certs/ssl-cert-snakeoil.pem server.crt
# ln -s /etc/ssl/private/ssl-cert-snakeoil.key server.key
# cp -a ../main.back/postmaster.opts .
# rm postgresql.conf
# rm pg_hba.conf
# rm pg_ident.conf
# service postgresql-8.3 start
# exit

ローカルでパスワード無しで接続可能にします。
/etc/postgresql/8.3/main/ph_hba.conf の該当箇所を修正します。

local   all     postgres                        trust
local   all     all                             trust
host    all     all             127.0.0.1/32    trust
host    all     all             ::1/128         trust

Apache2 の設定

作業用のユーザーアカウントで実行するようにします。
/etc/apache2/envvars の該当部分を編集します。

export APACHE_RUN_USER=ubuntu
export APACHE_RUN_GROUP=ubuntu

ドキュメント・ルート以下のオーナーを、作業用のユーザーにします。

$ sudo chown ubuntu:ubuntu -R /var/www/

必要な機能を有効にします。

$ sudo a2enmod include
$ sudo a2enmod rewrite
$ sudo a2enmod ssl
$ sudo a2ensite default-ssl

ディレクトリを設定します。
/etc/apache2/sites-availavle/default と /etc/apache2/sites-availavle/default-ssl の該当部分を編集します。

<Directory /var/www>
Options Indexes FollowSymLinks Includes ExecCGI
AllowOverride All
Order Allow,Deny
allow from all
</Directory>

PHP の設定

アップロードサイズを調整します。
/etc/php5/apache2/php.ini の該当部分を編集します。

post_max_size = 48M
upload_max_filesize = 40M

phpPgAdmin の設定

管理者・パスワード無しのログイン可能にします。
/etc/phppgadmin/config.inc.php の該当部分を編集します。

$conf['extra_login_security'] = false;
$conf['min_password_length'] = 0;

LANでアクセス可能にします。
/etc/phppgadmin/apache.conf の該当部分を編集します。

allow from 127.0.0.0/255.0.0.0 ::1/128 192.168.11.0/255.255.255.0

Windows ファイル共有の設定

バックアップやコピーが容易なように、ファイル共有を設定します。
事前に /var/www のオーナーは作業用ユーザー(ubuntu)にしてあるものとします。

画像(180x142)

共有するディレクトリ(/var/www)で右クリックをして「共有のオプション」をクリックします。

画像(180x142)

「このフォルダーを共有する」をクリックすると、SAMBAがインストールされていない場合、「共有サービスがインストールされていません」と表示されるので、「Install service」をクリックします。

画像(180x142)

パスワードの入力をします。

画像(180x142)

インストールが実行されます。

画像(180x142)

インストールが完了したら、「閉じる」をクリックします。

画像(180x142)

「Restart session」をクリックします。

画像(180x142)

「他人がこのフォルダーへ書き込むのを許可する」
「ゲストによるアクセス(ユーザーアカウントを持たない人々向け)」
にチェックをして「Create Share」をクリックします。

画像(180x142)

自動的にディレクトリのパーミッションを設定するか聞いてくるので、「自動的にパーミッションを付加する」をクリックします。

以上でディレクトリの共有設定は完了です。

続いてSAMBAを設定します。
/etc/samba/smb.conf の該当箇所( @ )を修正、行( + )を追加します。
workgroup は LAN の Windows ワークグループに合わせます。
guest account は作業用ユーザー(ubuntu)にします。

@    workgroup = PENGUIN
+    guest account = ubuntu
+    force create mode = 0755
+    force directory mode = 0755

Windows ネットワーク名前解決の設定

パッケージ winbind はインストール済みとします。
/etc/nsswitch.conf の該当箇所を修正します。
「wins」を追加します。

hosts:          files mdns4_minimal [NOTFOUND=return] wins dns mdns4

VMware Tools のインストール

VMware Tools をインストールすると、カーネルがアップデートされるたびに vmware-config-tools.pl を実行しなければならないのが面倒です。
今回は特に不便は無いので、VMware Tools はインストールしませんでした。

・xserver-xorg-input-vmmouse はインストールされています。
・xserver-xorg-video-vmware はインストールされています。
・VMware の共有フォルダは使用せずに SAMBA でファイル共有を行っています。
・SDHC にインストールしたため十分な性能です。

DD-WRT で無線ルータを Ethenet コンバーターに

無線ルータが壊れたようです。

ルーターをリセットしたタイミングで、インターネットにアクセスできなくなりました。
00:30 頃だったため、プロバイダもNTTも連絡ができず、翌朝 9:30頃にプロバイダとNTTに調査してもらいました。
結果、接続は出来ているとの事でしたので、もうルーターしか疑う事ができません。

機種は BUFFALO WHR-G54S で、4年ほど使用していました。
WDS を使って 中古で買った BUFFALO WHR2-A54G54 を中継に使うよう設定していました。

便利に使っていましたが、WDS を使用すると WEP しか使えません。
もともとBUFFALO WHR2-A54G54 は WEP しか使えません。

なので、今度買い換える時には4ポートのEthernelコンバーターが欲しいなーと思っていました。
WDSを使わなくても良くなります。

さて、とにかくネットに接続できなければ仕事になりません。
2万円を握りしめてYAMADA電気米子店に走りました。
結局 BUFFALO WHR-HP-G/E を約 13,000 で購入しました。

急いでノートパソコンの無線LANを無効にして、直接LANケーブルを新品の無線LANルータに繋いで、ブラウザで初期設定を行うと、あっさり繋がりました。
あとはAOSSが可能な機器は全てAOSSで接続し直して完了です。
Wii・DSi(上級者モード)・EthernetコンバータはAOSSで接続し直しました。

さて、壊れた BUFFALO WHR-G54S ですが、日経Linux 2008年10月号に記事があった DD-WRT を試してみることにしました。

Supported Hardware を開いて、入力欄に 「buffalo whr-g54s」 と入力します。
サポートしている機種の一覧が表示されるので、該当機種の行をクリックすると、ダウンロードページに移動します。
今回は「v24 SP1 [Stable] build 10020」「Standard Generic」dd-wrt.v24_std_generic.bin を選択しました。

あとは 日経Linux を参考に、無事Ethernetコンバータ化出来ました。
Ethernetコンバータの設定例があったので、大変助かりました。

※ 著作権に触れる恐れがあるので、詳細な設定内容については割愛いたします。

avast! 使用時に Windows Defender を無効にする

avast! をインストールした場合は Windows Defender を無効化した方が良いようです。
Windows Vista の場合は何も表示されないのですが、Windows 7 の場合は、パフォーマンスが低下するのでどちらかを無効化するように表示されます。

Windows Defender を無効化する手順は以下の通りです。

■ Windows Vista

コントロールパネルはクラッシック表示にするとわかりやすいです。

コントロールパネル>Windows Defender>ツール>オプション>リアルタイム保護を使用するのチェックをはずす

■ Windows 7

コントロールパネルの表示方法をアイコン表示にするとわかりやすいです。

コントロールパネル>Windows Defender>ツール>オプション>リアルタイム保護>リアルタイム保護を使用するのチェックをはずす

結構、効果があるように感じます。

VirtualBoxで漢字キーが使えない問題の対策

ホストWindows、ゲストUbuntu 9.04 の場合、漢字キーを押すとオートリピート状態となって使い物にならない。
今日、偶然 2ch の os 板に VirtualBox のスレがあるのを見つけた。
なんと上記の対策が書かれていた。

74だが、Windowsホストにおける、ゲストOS上での半角/全角連打を防ぐ方法をやっと見つけた。
何で今まで気づかなかったんだろうか・・・。
xset -r 49
あとは適当な方法でログイン時に読み込むようにしとく。
Linuxでは半角/全角のキーコードが標準で49になっていると思われ。違っててもキーコード調べて特定キー(半角/全角)を連打しないようにすれば直った。

しかし、Compizを有効にしたらマウスカーソルがずれまくるので、今はVMwareを使っています。

Ubuntu 9.04 の vmmouse をビルドする – 必要は無くなりました

Ubuntu 9.04 の vmmouse をビルドする必要は無くなりました。
非公式ですが、以下のサイトからアップデートを取得します。

X Updates

手順は以下の通り。

1. 公開鍵をインストール。

$ sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com AF1CDFA9

2. ソフトウェアソースに以下を追加

deb http://ppa.launchpad.net/ubuntu-x-swat/x-updates/ubuntu jaunty main
deb-src http://ppa.launchpad.net/ubuntu-x-swat/x-updates/ubuntu jaunty main

3. アップデートマネージャーでアップデートを行う。

以上で完了です!

今のところ、不具合はありません。
Intelチップの場合も同様に対策できます。

Ubuntu 9.04 の vmmouse をビルドする

Vista 上の VMware で Ubuntu を開発環境として使いたいのだが、問題があった。

vmmouse をインストールすると、デスクトップで右クリック時の動きが異常なのだ。

コンテキストメニューの一番上が、勝手にクリックされたように動作してしまう。
開発環境なのでエディタ(Eclipse)を使うのだが、右クリックが使えないとなると致命的だ。

vmmouse をアンインストールすればこの問題はないが、Windows のデスクトップに戻るのに、いちいち Ctrl + Alt を押すのが面倒だ。

VirtualBox を試してみた所、このような不具合はなく、Compiz も有効に出来たが、半角/全角キーを押すとフリーズしたような状態となってしまう。

こちらの方が致命的だ。

結局、しばらくデュアルブートにして直接 Ubuntu 上で開発を行っていた。
しかし、動画の再生・プリンター・Skype 等で不便を感じていた。
やはり現時点では Windows の方がデスクトップとして環境が整っている。

問題は vmmouse だけなんだがなー、と思って数時間ググって、以下のページを見つけた。

Bug #366521 in xserver-xorg-input-vmmouse (Ubuntu): “VMWare fusion host + vmmouse driver generates drag events on any click”:

バグ報告だけかと思っていたら、vmmouse.c を修正してみたらしい。

よし、試してみよう!という事で、以下のページを参考にさせてもらって、ソースからビルドしてみた。

Ubuntuでソースから.debの生成方法 – フリップフラップ:

$ sudo apt-get install dpkg-dev devscripts
$ mkdir debuild
$ cd debuild
$ apt-get source xserver-xorg-input-vmmouse
$ cd xserver-xorg-input-vmmouse-12.5.1
$ vi src/vmmouse.c
(該当箇所を修正)
$ sudo apt-get build-dep xserver-xorg-input-vmmouse
$ debchange -i
(リビジョン情報を編集)
$ debuild -uc -us
$ cd ..
$ sudo apt-get install mdetect
$ sudo dpkg -i xserver-xorg-input-vmmouse_12.5.1-4ubuntu6_i386.deb

一旦ログアウト。ログイン画面から新しいドライバーが有効になる。

結果、うまく行った!満足!

これは暫定の修正ですので、ソースやパッケージは公開しません。
この記事を参考にチャレンジしてみて下さい!

Ubuntu 9.04 で PostgreSQL + phpPgAdmin

CentOS で開発したシステムを保守用に Ubuntu へ移行中です。
すんなりとは行きませんねぇ。

PostgreSQL のインストール

Synaptic で PostgreSQL と php5-pgsql をインストール。

PostgreSQL の設定

開発環境なのでパスワード無しでログイン可能にしておく。
パスワードはなんだったっけなー、と思い出したり調べたりせずに済むので、作業効率がかなり上がります。

...
# Database administrative login by UNIX sockets
#local   all         postgres                          ident sameuser
# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD
# "local" is for Unix domain socket connections only
#local   all         all                               ident sameuser
# IPv4 local connections:
#host    all         all         127.0.0.1/32          md5
# IPv6 local connections:
#host    all         all         ::1/128               md5
local   all         postgres                          trust
local   all         all                               trust
host    all         all         127.0.0.1/32          trust
host    all         all         ::1/128               trust

PostgreSQL に設定を反映します。

$ sudo /etc/init.d/postgresql-8.3 reload

PostgreSQL で UTF-8 以外のエンコードを使用可能にする

RedHat系の時もあったのですが、パッケージインストール時の initdb で –no-locale が指定されていないため、UTF-8 以外のデータベースが作成できません。
このため、initdb をやりなおします。

$ pg_dumpall -U postgres > dumpall.sql
$ sudo su
# /etc/init.d/postgresql-8.3 stop
# cd /var/lib/postgresql/8.3/
# cp -ra main main.back
# rm -rf main/*
# su postgres
$ /usr/lib/postgresql/8.3/bin/initdb --no-locale --encoding=UTF8 -D /var/lib/postgresql/8.3/main
$ exit
# cd main/
# ln -s /etc/postgresql-common/root.crt root.crt
# ln -s /etc/ssl/certs/ssl-cert-snakeoil.pem server.crt
# ln -s /etc/ssl/private/ssl-cert-snakeoil.key server.key
# cp -a ../main.back/postmaster.opts .
# rm postgresql.conf
# rm pg_hba.conf
# rm pg_ident.conf
# /etc/init.d/postgresql-8.3 start
# exit
$ psql -U postgres -f dumpall.sql

データベースが元通りであることを確認して、バックアップを削除します。
万が一の場合でも pg_dumpall で作成した SQL があるので安心です。

$ sudo rm -rf /var/lib/postgresql/8.3/main.back/

phpPgAdmin のパッケージをインストール

Synaptic で phpPgAdmin を検索してインストール。
パッケージ名は全て小文字の phppgadmin。

phpPgAdmin の設定

/etc/phppgadmin/apache.conf でアクセスを制限。
あきらは以下の部分のみ修正してLANのネットワークアドレスを追加した。

allow from 127.0.0.0/255.0.0.0 ::1/128 192.168.11.0/255.255.255.0

/etc/phppgadmin/config.inc.php で phpPgAdmin を設定。
あきらは以下の部分のみ修正して、ユーザー postgres でのログインと パスワード無しのログインを可能にした。

...
//$conf['extra_login_security'] = false;
$conf['extra_login_security'] = false;
...
//$conf['min_password_length'] = 1;
$conf['min_password_length'] = 0;
...

※ パスワード無しのログインを可能にするには /etc/postgresql/8.3/main/pg_hba.conf を修正しておく必要があります。

おまけ – phpPgAdmin の SQL アップロードでハマりました

SQLをアップロードした所、以下のエラーが表示されました。

サーバーが指定されていません!

いままで見たことのないエラーなので、よく分かりません。
面倒ですがソースを追いかける事にしました。

(1) 表示しているスクリプトの特定

Firefox で右クリックして「このフレーム」>「フレームの情報を表示」で、sql.php と判明

(2) ソースを調べる

とりあえずソースを見たが、メッセージを表示している場所を特定できなかった。
しかし、$lang にメッセージが格納されているようなので、言語別メッセージファイルからアプローチする事にした。

/usr/share/phppgadmin/lang/japanese.php と見当をつけ、該当メッセージを検索した。
該当メッセージは $lang[‘strnoserversupplied’] と判明。

再び sql.php を調べたが、$lang[‘strnoserversupplied’] は検索できなかった。
grep ‘strnoserversupplied’ -R * で一括検索を行った所、libraries/lib.inc.php と判明。

さらに該当箇所を特定。

...
// Create data accessor object, if necessary
if (!isset($_no_db_connection)) {
if (!isset($_REQUEST['server'])) {
echo $lang['strnoserversupplied'];
exit;
}
...

(3) 状況の調査

該当箇所で print_r( $_REQUEST ) ; とした所、$_REQUEST[‘server’]が渡されていないことが判明した。
さらに SQL をアップロードしない場合はちゃんと渡されていることが判明。

(4) 原因の推理

a. 今まで見たことが無いエラーである -> 今回の環境特有
b. SQL をアップロードした場合のみ発生 -> ファイルのアップロード時

以上から、PHP のアップロード設定ではないかと推測できた。

(5) 対策

/etc/php5/apache2/php.ini の以下を修正

...
post_max_size = 20M
...
upload_max_filesize = 18M
...

Apache2を再起動

$ sudo /etc/init.d/apache2 restart

(6) 確認

エラーとなっていた SQL のアップロードが正常に実行されることを確認。

おつかれ?

新しい環境になると結構 php.ini の設定は忘れがちなんだよね?(俺だけかも)