2010/12/27

unknown host localhost

OpenVZのVE上に構築したOpenVZ WEB Panel(owp)を1.7アップグレードしようとしたら、
名前解決出来ないためにwatchdogが起動出来ない → owp 死亡のスパイラルに嵌まった。

VE作成過程は忘れたけど、結局は

/etc/nsswitch.conf

が空ファイルだったことが原因だった。

上記ファイル中に、下記記述を追加して解決した。

....中略....
hosts:      files dns
....以下、略。

あまりに単純な原因だったお陰か、
ググっても簡単には解決に継らなかった。
owpの評価は別の機会に。

2010/12/05

ReverseProxyでまじめにWEBサイト引越し(2)

まず、httpd環境を準備する。
rpafモジュールを追加する。
http://stderr.net/apache/rpaf/
からソースを取得してビルドする。

wget http://stderr.net/apache/rpaf/download/mod_rpaf-0.6.tar.gz
tar xf mod_rpaf-6.0.tar.gz && cd mod_rpaf-6.0

Apache 1.3

sed -i 's/$(shell which apxs)\/usr\/sbin\/apxs/' Makefile  && make rpaf && make install


Apache 2.0 以降

sed -i 's/$(shell which apxs2)\/usr\/sbin\/apxs/' Makefile && make rpaf-2.0 && make install-2.0


設定ファイル( /etc/httpd/conf.d/rpaf.conf )を作成する。
[設定例]
LoadModule rpaf_module modules/mod_rpaf-2.0.so
RPAFenable On
RPAFsethostname Off
RPAFproxy_ips 127.0.0.1

当初はvarnishとか組み合わせてPoCしたかったけど、サービスINまでの時間がなかったので、
旧サイト(Apache)  ReverseProxy ->  新サイト( Apache )
としてDNS切り替えまでのタイムラグを凌いだ。
Apache 2.0以降は標準でproxyモジュールが導入されるため、設定ファイルに以下を追記するだけで対応出来た。


[設定例]
ProxyRequests Off
ProxyPass / http://*.*.*.*/  ( 新サイトのグローバルIP )
ProxyPassReverse / http://*.*.*.*/  ( 新サイトのグローバルIP )

2010/11/14

ReverseProxyでまじめにWEBサイト引越し(1)

WEBサイトを引越しする際、DNSのAレコード切り替え中に旧サイトを参照されると困る。
(MXとSPFは別の機会にする)
特に新旧サイトでCMSが違うとか根本的に変更されていて、指定時間に公開する予定の場合、
DNSに依存するとマズイ。
対応としては、

  1. 新サイトは、httpd.confでDirectoryディレクティブでギリギリまで旧サイトを運用する。
    定時になったら、httpd graceful で新サイトに切り替える。
  2. 新サイトは、ギリギリまでReverseProxyで旧サイトを引っ張ってくる。
    定時になったら、Proxy設定を外す。
案1は、新旧コンテンツが衝突するコンポーネントを持つ場合は無理がある。
DBとかインフラが問題になると面倒。
grep一発で切り替え可能であれば、まずまずな方法。
とはいえ、特殊な仕組みを追加する必要もなくてお手軽。
でも...旧サイトと各種OSコンポーネントのバージョンが同じでないと新サイトのインフラがカオス化する恐れ有り。
Java/PHP等でセッションに依存するロジックがあるとやれば出来るけど、色々と大変。

案2は、新サイトと旧サイトが物理的に分離されている為、コンポーネント衝突やインフラ差異による問題はほぼない。
でも...ReverseProxyの為に別途機能追加が必要、かつhttpd graceful的な切り替えが出来ない場合がある。

諸般の都合で案2を試す。
構成的には、

  • HTTP ->  varnish -> httpd
  • HTTPS -> Pound -> httpd
とする。
Poundはキャッシュが使えない、でもvarnishはSSLを扱えない。
Pound外してhttpdに直接送ってもいいけど、両Proxyを使ってディザスタリカバリーを見据え、
DNSRR(ラウンドロビン)でアクティブサーバーが生きている内にウォームスタンバイ用サーバーに来たら、アクティブサーバーを引っ張ってる構成の検証するために採用した。
DRBD的な構成が出来れば簡単だろうけど、VPSとかレンタルサーバーではまず出来ないので。
スプリット・ブレインはとりあえず無視しして、まずはPoC。

2010/11/06

10.10アップグレードでデグレード

今更ながら、10.10にアップグレードした。
X起動しないので、リカバリーモードで起動してみるとXorgログでエラー出力されていた。

毎度のことながら、fglrxで引っかかっていた。やっぱりRadeonは鬼門なのか?
しかも、今回はfglrxナイヨ!とか云われてた。
削除モジュールに入っていたのか?
しぶしぶ、

apt-get install fglrx

等と実行してインストールした後にResumeすると、ようやくX起動した。
しかしながら別記utouchインストール中に/usr/lib/dpkg/stateのvirtualbox3.1のリビジョン書式が異常だとか、
/usr/lib/dpkg/availableのvirtualbox3.1が腐ってるとか云われた。
今更3.1なんて使わないので、適宜削除と修正を実施して回避した。
いい加減、そろそろ一度クリーンインストールしたくなってきた。

※以下、追記

しばらく使ってみたが、やっぱりfglrxはダメだった。
ビデオメモリを一度に消費するtotemとかrdp系ツールを起動するとSegment Fault?で必ずXが死亡した。
ここに来て初めてググると、fglrx自体がUbuntuに追いついておらず、独自パッチがあるとかないとか...
AMD純正ドライバの最新版を取得して、

ati-driver-installer-10-4-x86.x86_64.run --listpkg

と実行すると...


Status: *UNVERIFIED*
Ubuntu Packages:
Ubuntu/gutsy
Ubuntu/hardy
Ubuntu/intrepid
Ubuntu/jaunty
Ubuntu/karmic
Ubuntu/lucid
Ubuntu/source
Ubuntu/maverick

などと出力される。

半ば諦めつつも、

ati-driver-installer-10-4-x86.x86_64.run --buildpkg Ubuntu/maverick

と実行して組み込んでみたが、症状は変化しなかった。

結局、諦めてGeforceを調達してきた。
差してすぐ使えるもんだと思っていたが、念のためにNvidiaから純正ドライバを取得しておいた。
やはり予想通りで、NouvauではUbuntu起動スプラッシュが崩れるの症状が発生した。
リカバリーモードで起動し、

NVIDIA-Linux-x86_64-260.19.12.run


と実行して純正ドライバをインストール開始したが、Nouvau (゚⊿゚)イラネとか云われた。
しぶしぶNouvau関連を削除して再起動すると、ようやくインストール出来た。
インストール終了後、再起動すると未だ慣れないGDM画面が無事表示された。
mplayerにndpau導入とか、いろいろイジりたいとこだけど時間の都合上、別の機会にした。
それにしても、
Radeon HD 2400 ProGeforce GT210
に切り替え、I/Fも
VGA → DVI-*
にようやく切り替えたが、モードラインの追記から解放されたことは一番の嬉しい誤算だった。

Smart Track + Majestouch で快適ホームポジション

ホームポジションを崩してマウス操作するのが嫌、でも某トラベルキーボード的なものは皆パンタグラフかメンブレンだから嫌。
そんなニッチな要望を満たしてくれたのが、Smart Track Neo FTP500UB だった。
各所レビューを参考にしつつ、人柱覚悟で買ってみた。

流行りのマルチタッチにwktkしてメインマシンのXUbuntuに差してみたが...撃沈したorz
utouch入れても、マルチタッチって何ですか?的な状態だった。
きっとサポートリストに入ってないとか、インストール設定の不備辺りが原因かな?
諦め切れず、どこまで使えるのか調べてみた。
調査手順は、入力系ハードウェアの認識手順と一緒。
スペシャルキー( Fnキー+* とか、ノートパソコン独自の変態ボタン )の設定

今回は、xevで片付いた。というか、それ以上はutouchが機能しないと無理そう。
[xevで調査した結果]

  • 2本指タップでbutton 2 ( ホイールボタンクリック )
  • 3本指タップでbutton 3(右クリック)
  • 2本指上スライドでbutton 4 (上スクロール)
  • 2本指下スライドでbutton 5 (下スクロール)

調査中に気がついたが、おおよそ説明書に記載されている通りの反応だった。
不満があるとすれば、

  • チルトホイールが使えん
  • マクロ系操作に何のボタン(キー)も生成されない

といったところか。
チルトホイールは、phpMyAdminのクエリ結果で大量に列出力してしまった時にあると便利なんだが、
残念。

とはいえ、正直な感想はレビューほどは酷くない。
まぁ、大多数のレビュアーはWindowsな方々で標準ドライバとか使っての評価だろうけど。
後は、ThumbSense的な設定をすれば極上の環境に仕上がりそう。
尚、Chrome & FireFoxはvimperator入れて十分すぎる快適性を実現出来ている。

2010/10/17

Windows XP HomeからLinux(CentOS)へ業務環境の移行(3)

下地は完成したから、次は苦悶のwineを入れる。
まずは、rpmforgeからwine本体を適宜導入する。
rpm -Uvh http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.1-1.el5.rf.i386.rpm
yum install -y wine cabextract

定番のwinetricksを取得する。
wget http://www.kegel.com/wine/winetricks

winetricksの詳しい情報はこちらを参照。

Windows XPからFontsをコピーし、フォントキャッシュを更新する。(ライセンス的に黒い気がする...)
fc-cache


それでは、MS Office 2000 Personal をインストールに取りかかる。
といっても、入れるのはExcelとWordだけ。
インストールする際、事前にOLEAUT32.DLLをコピーする。これを忘れるとエラーで中断される。
cp インストールメディア/SYSTEM/OLEAUT32.DLL ~/.wine/drive_c/windows/system32

準備が整ったので、セットアップを実行する。
wine インストールメディア/SETUP.EXE

Font設定や依存ライブラリ等が正しく構成されていると、見慣れた画面が表示される。



尚、Excelのマクロにはdcom98が必要になるため、別途winetricksから入れる。
winetricks dcom98
導入されるrpcrt4は、他PGへの影響が多大なのでExcel.exeのみの利用として設定する。

Windows XP HomeからLinux(CentOS)へ業務環境の移行(2)

まずは、CentOS 5.5をインストールする。
[ 構築対象PCのスペック ]
CPU Phenom II X4 945
MEM DDR3 PC3-12800 1GB x2
MB 880GMH-LE/USB3
HDD1 WD5000AAKS-R ( 500GB )
HDD2 0S02600 ( 500GB )
我ながらツッコミどころ満載な構成だが、金銭コスト優先(約¥36K)ながらRAIDでHDD破損を担保したつもり。
RAIDは、FakeRAIDではなくソフトウェアRAIDで構築。
CentOSの追加パッケージは、Desktop ( Gnome )のみ。
他はデフォルト。

方針としては、Windowsの使用感を損なわせないことを念頭においた。
参考WEBサイト:


そんな訳で、各種テーマは下記を選定した。
Vista icon theme
XPLuna
Windowze Professional 1.0

適用前適用後

何とも如何わしい雰囲気だ。
アイコンは、本来ならGomeXPなんぞが適しているのだろうけど、CentOSでは素直に使えなかった。
仕方なくvista風にした。
突き詰めるなら、XP Transformation Packを入れると良さそう。

Windows XP HomeからLinux(CentOS)へ業務環境の移行(1)

Windows XP Home を業務利用していたクライアントのPCがウイルス感染したり、物理破損で使い物にならなくなった。
そこでクライアントのPCをAMD系自作機でCentOS仕様に移行してみた。
ちなみに、クライアントのIT知識レベルは高くなく、オフィスは従業員5人程度の小規模な個人事務所。
そして、以前より...

ブラウザ= IE 1:Firefox 9
メーラー= Outlook  0:Thunderbird 10
オフィスソフト= MS Office 6: OpenOffice 4

の比率でOSSを可能な限り利用するよう促していた。
地盤は整っていたから、一般的なクライアントに対する業務利用への投入よりは違和感が少ないと思いたい。

[ 移行条件 ]
  • MS Officeが利用したい。Excelにマクロは必須
  • マクロに依存しない業務は、OOOを使ってもよい
  • ブラウザは、IE必須の業務が停止したため、Firefoxのみでよい
  • AutoCADが必須
  • 可能なら、弥生会計も移行したい

ハードルは高いが、作図業務の生じる個人事務所での一般的なモデルとしては良さそうなので軌跡を公開する。

※色々とソフトウェアライセンスやPCのサービスレベル等の問題はあるが...気にしないことにした。

2010/10/02

CentOS5でOpenVZ(5)

OpenVZでGlusterFS(Fuse)は鬼門なのか、インストール時と同様にバックアップでもハマった。
単純にvzdumpでdumpすると、fuse領域を頑張ってdumpしようとするらしくて、
必ずエラーが発生して異常終了する。
エラーを回避するには、fuseプロセスを停止させるしかないようだった。
とはいえ、バックアッププロセスの前後で停止・起動させていては、数分間もサービスが停止状態してしまう。
そこで、hook-script.plを利用することにした。
実装したい動作は、dump処理中に発生するVEサスペンド・レジュームに連動してfuseプロセスを操作する。
しかし、スクリプトで扱えるイベントが微妙でキャッチしたいレジューム時の処理は提供されていなかった。
仕方ないので、パッチを作成した。

vzdump-1.2-4.noarch.rpm
/usr/share/perl5/5.8.8/PVE/VZDump.pm
----------------------
893a894
> $self->run_hook_script ('post-restart', $task, $logfd);
918a920
> $self->run_hook_script ('post-restart', $task, $logfd);
994a997
> $self->run_hook_script ('post-restart', $task, $logfd);
997a1001
> $self->run_hook_script ('post-restart', $task, $logfd);

パッチ適用後は、適宜hook-script.plを編集する。
21c21,22
< $phase eq 'pre-restart') { --- > $phase eq 'pre-restart' ||
> $phase eq 'post-restart') {
後は、好きなように記述すればいい。

以上

CentOS5でOpenVZ(4)

OpenVZ導入した方々が割とよく遭遇しているCan't Allocate Memory Errorに直面した。
原因調査に、
cat /proc/user_beancounters
を実施すると、やはりKMEMSIZEに大量のfailcntが発生していた。
当座の対応として総メモリ値の10%を割り当てるため、
 vzctl set $veid --kemesize ( privvmpages値 / 10 ) --save
を実行した。
ついでに、最低保証メモリ値に総メモリ値の50%を割り当てるため、
 vzctl set $veid --vmguarpage ( privvmpages値 / 2 ) --save
を実行した。

とはいえ、せっかくowpで運用コンソールを構築しておきながら、
メモリ割り当てやインストール毎に上記コマンドを実行するのはナンセンス。
そんな訳で、owpのパッチを作成。

owp ( 1.5 )
/app/models/virtual_server.rb
97a98
-------------
 vzctl_set("--vmguarpage #{memory * 1024 / 4 / 2} --kmemsize #{memory * 1024 / 4 / 10} --save") if memory_changed?

-------------

2010/09/11

CentOS5でOpenVZ(3)

OpenVZの導入をゼロからやっている身としては、VE構築時の作業は定形スクリプトを書いてしまえばいい。
しかし、不慣れな人には面倒で複雑な作業が盛りだくさんなOpenVZ。
そこで、plesk的なWEBコンソールを探してみた。
とはいうものの、該当するプロジェクト・プロダクトはあるものの殆ど死んでいるor枯れてしなびているものばかりだった。
そのなかでもOpenVZ WEB Panelは、Railsで書かれていてモダンな雰囲気があったので早速試してみた。
本家通りに、
wget -O - http://ovz-web-panel.googlecode.com/svn/installer/ai.sh | sh
をHNで実行すると大量に依存ライブラリをインストールしてくれる。
インストール完了後、自動的にwebrickを起動してくれ、http://$HN_IP:3000などとすると
本家のscreenshotと同じ画面が表示される。


初期ログインアカウントは、ID: admin  PSWD:  admin。
ログイン後の画面。






喜んで早速ログインしたがHNの監視が出来ない…。



事前にhw-daemonを起動させておかなければならないらしい。
ここまで自動起動しておきながら、少し不親切。
hw-daemonと同一サーバーかつ、自動インストールした場合はowp起動時に実行されると後々判明...
渋々、 
cd /opt/ovz-web-panel/utils/hw-daemon/
vi hw-daemon.ini  ( テキトーに編集 )
ruby hw-daemon.rb start
として、再びWEB画面でconnect操作するとHN監視を開始出来た。

試しにVEを作成する。


ここの画面で表示されるOS TemplateはOWP起動時の/vz/template/cache/*.tar.gzを出力している模様。
事前にvzpkgcache実行するなどして作成しておかないと表示されず、OWP起動後は認識されなかった。

CentOS5でOpenVZ(2)

レンタルサーバーでファイルシステムをクラスタリングしたい!
自炊するならDRBDとかOCFSなんかが選択肢に上がるけど、普通レンタルサーバーでベアメタルなんて有り得ない。
と言うわけで、OpenVZ上にGlusterFSを導入してみた。

GlusterFSの仕様上、fuseが必要になるけどOpenVZでfuseは少し手がかかる。
事前にHN上でfuseをインストールした後に、
# vzctl set $veid --devices c:10:229:rw --save
# vzctl exec $veid mknod /dev/fuse c 10 229
# vzyum $veid install fuse
などと実行しておかなければならない。

これでようやくGlusterFSが利用できる。
後は前述本家ドキュメントと/etc/glusterfs/*.volを参考にC/S両方を記述する。
この際、クライアントで type cluster/replicate を指定するといわゆるDRBD的なクラスタリングが構築出来る。
ちなみに、サーバー側でtype features/locksを指定しないとハマる。

CentOS5でOpenVZ(1)

某レンタルサーバーのRedhatEL5上で仮想化するのにKVMだとフットプリント+稼働台数制限があるらしく、急遽OpenVZで構築することになった。
CPUとかメモリ使用率を柔軟に制限したい要件と合致していたことが決め手になった。
とはいうものの、RedhatEL5の評価版だと何かと面倒だったからCentOS5で検証した。
以下、その記録。

セットアップ手順は本家を参照。
Linux環境下での「x86_64は鬼門」というのは未だ健在の模様で、ご多分に漏れず色々と問題があった。

まず、標準のリポジトリではx86専用だったため、setx86_64スクリプトを実行してx86_64用のrpmをインストールした。
次にテンプレートは、CentOS5 x86_64用metaを入れる。
早速VEを作成してとemacs-noxなんぞをyumするとrpmがlockされた?らしいエラーメッセージが大量出力された。
基本に立ち戻ってvzpkgcacheを実施、10分程度経ったのちに無事centos-5-x86_64.tar.gzが作成された。
これでようやくまともなVEを作成できた。

しかし、別鯖で同様の手順で構築を実施したら、vzpkgcacheが異常終了した。
面倒だったから先に作ったcacheを流用してお茶を濁した。
そもそも、precreat を使えば良かったとscpで転送中に気がついた…


ちなみに、vzpkgcacheは腐ってるらしく、


 /usr/share/vzpkg/cache-osスクリプト中、以下を修正する必要がある。
VECFG=$VECFGDIR$VEID.conf
VECFGSAMPLE=$VECFGDIRve-basic.conf-sample

VECFG=${VECFGDIR}$VEID.conf
VECFGSAMPLE=${VECFGDIR}ve-basic.conf-sample