お仕事の最近のブログ記事

「コンピュータ&ネットワーク EXPO '09 広島」に行ってきた。

091111_130554.JPGう~ん・・・なんか、うちみたいな零細が商売のネタに出来るようなものは皆無で(経理系のパッケージソフトとかの紹介はあったけど、まったく興味ないし)、あまり面白くなかった。

あと、狭い通路の両側にずらっと並んだセールスマンが鬱陶しい。(^^;
会社から、出来るだけ多くのパンフを渡してくるように言われているのだろうが、ちょっと目があっただけですぐにパンフを持った人間が近づいてくるのは恐怖だ。(^^;
こっちはじっくり展示されている商品と掲示してある説明を読みたいというのに、気が散って仕方ない。故に、「面白いものが何もなかった」という状況になるのだ。
こっちが説明を聞きたいときだけ寄ってきてくれればいいのに。

ま、だいたいこういうのは、セールスマンじゃない人間がこの日だけ無理矢理「売り子」をさせられるわけで、その辺の機敏が分からないのは仕方ないのだが。それに、この業界は、年寄り(特に団塊の世代)にセールス能力の無い人間が多いしなあ。
変なコンサルに「街角で大きな声で歌をうたうことで営業力が付く」かのような誤った教育を受けた世代がちょうど偉くなって、若いヤツに「何が何でもパンフを受け取ってもらうことが営業の第一歩だ」的な誤った指導をしちゃってるんだよな。

営業は技術です。
そんな精神論なんて糞食らえ。精神論なんかじゃ動かず、でも、精神論的なものが好きなお客さんの前では、精神論大好きっこのように演じられる技術を持たなくちゃいけません。
それと、本来営業でもない社員にパンフを配らせるなんつう無駄なことをするより、ちゃんとブースのディスプレイを考えるべき。力の向けようが全然駄目。街角で歌をうたったりしてたオヤジどもには無理な注文なんでしょうがねえ。

つーことで、持って帰ったパンフは、本業とは全然関係ない「CREATEC JAPAN 2009 立体ハイビジョン IP 伝送実証実験」のものだけだったという・・・(笑)
さて、Perl の sprintf で、文字列の右側に 0 を補完するのはどうすればええんじゃろうねえ?

例えば、

$d    = '112200225';

して、この値を sprintf で編集すると、

$d      = sprintf("%020d", $d);

なら、00000000000112200225 となっちゃうんだけど、実際は、後ろに 0 を補完して、11220022500000000000 としたいのよ。

試しに sprintf("%-020d", $d) ってやってみたけど、これじゃあ何も補完されないだけだった。

後ろにスペースを埋めるというやり方はあるので、先にスペースを埋めてからそれを正規表現で 0 に変換しちゃえばいいんだが、こういうやり方しかないんかいのお?

$d    = '112200225';
$d    = sprintf("%-20s", $d);
$d    =~ s/\s/0/g;
print "$d\n";

とすれば、出力結果は 11220022500000000000 だ。
これをね、sprintf 一発でやりたいんだけどなあ。

識者の方、ぜひご教示ください。

今日は、ちゃちゃっと済ませたいプログラム修正があったので、久しぶりに Futaba@Cafe に。
駅前のジュンク堂に用があったので、そこからまた観音本町まで移動するのが面倒だったので。(^^; ちょうど、プログラムをバックアップしていた USB メモリも持ってたんでねえ。

で、今日座った席は、OS が Vista になってるなあ。前は XP だったと思うが。
で、で、そのせいか、フタバのパソコンで発生していた「Gmail でプチフリーズする」現象が出なくなってた。

おお!素敵。

ぱちぱち入力している最中に、数十秒だけど反応がなくなったりして、ほんとに使いづらかったもんなあ、あれ。
いやあ、Gmail が快適だと、仕事もはかどりますなあ。

091001_160528.JPG・・・が、反対に別の問題が。

Schwertkreuz 上で秀丸エディタを使っているのだが、ファイル関係の操作でフリーズしてしまうようになった。
ファイルを開こうとしたり、名前をつけて保存とかしようとすると、秀丸エディタが(応答なし)の状態になってしまうのだ・・・
ただ、100%駄目というわけではなく、極稀にうまくいくこともあるから問題だ。

やれやれ・・・多分、Vista の「腐れセキュリティ機能」のせいだろうなあ・・・
最悪 OS の面目躍如だなあ、Vista よ。
「Vista は良い OS」って言ってるヤツら、俺に謝れ。(笑)

仕方ないので、秀丸エディタを新規インストールして作業した。
ま、そのほうがレスポンスもいいので、仕事ははかどるんだけどねえ。

うちで運営している地域 SNS のお知らせメール(デイリーニュース)が今朝は配信されてなかった。

サーバに入って maillog を見てみると、

Sep 30 08:01:32 snsserv postfix/qmgr[58514]: 94EE75096C: from=<sns@snsserv.exsample.com>, size=4796, nrcpt=1 (queue active)
Sep 30 08:01:32 snsserv postfix/qmgr[58514]: 94EE75096C: to=<hogehoge@xxx.xxxx.ne.jp>, relay=none, delay=7268, status=deferred (delivery temporarily suspended: connect to mail2.exsample.com[202.XXX.XXX.XXX]: Connection refused)

なんてログが山のように・・・

ああ・・・そうだ・・・以前、この地域 SNS サーバを非固定 IP で運用していたとき、怪しいサーバと判断してメールを受け取ってくれないサーバがあったので、固定 IP の mail2.exsample.com を経由(RELAY)するよう設定してたんだった。

で、実は、昨夜、mail2.exsample.com は SMTP を止めたのよ。
以前、ここでも書いたように、このサーバを預けていたデータセンターがハウジングのサービスを止められるもんで。今日、実際にサーバを撤去したんでね。前夜に SMTP サービス自体は止めてたって話。

ということで、Postfix の設定を変更を。

/usr/local/etc/postfix/main.cf の中に、

relayhost = mail2.exsample.com

という記述があるのでコメントにして、

# /usr/local/sbin/postfix reload

で設定ファイルを再読込させる。これでOK!

後は、queue に溜まっているメールを、

# postqueue -f

で、強制排出。

ま、こんなことせずにほっておいても、そのうち配送されるんだけどねえ。

いやあ、しかし、Postfix を使っているのはこの SNS サーバだけなので、毎度コマンドを思い出すのに時間がかかるよ。(メモしとけって話だけど(^^;)

ま、そのうちこの地域 SNS もサーバを移すので、その時には Postfix ではなく、qmail の利用に変更しようてえ。

これも移行したサーバでの話。

tDiary を動かしているサーバを別の場所に動かしたんだけど、そしたら

env: ruby: No such file or directory

というエラーが出て、tDiary が動かなくなってしまった。
どうも、Ruby のパスが取れてない様子。

tDiary のスクリプトは、シェル宣言で直接 /usr/local/bin/ruby という Ruby のパスを指定せず、

#!/usr/bin/env ruby

という具合に、env コマンドで ruby のパスを指定している。(ruby のインストールディレクトリがどこになってもいいようにだろう)

で、/usr/local/bin にある ruby が No such file or directory になるということは、プログラムファイルを探す経路情報である環境変数 PATH に、/usr/local/bin が含まれていないということだ。

実際、CGI で取得出来る環境変数を調べてみると、PATH は、

/sbin:/bin:/usr/sbin:/usr/bin

となっている。/usr/local/bin は確かに含まれていない。

これに関しては、Apache の起動スクリプトで、apachectl を実行する前に、環境変数 PATH に /usr/local/bin を足し込んでやればいい。
こんな感じ。

#!/bin/sh

export PATH=$PATH:/usr/local/bin
/usr/local/apache2/bin/apachectl startssl

しかし、マシンを再起動するまでは、問題なく動いていたのに何故?

同じ OS(FreeBSD 5.X-R)で、マイナーバージョン違いの Apache を動かしているうちのサーバで調べてみると、Apache の環境変数 PATH に、/usr/local/bin は含まれている。

/sbin:/bin:/usr/sbin:/usr/bin:/usr/games:/usr/local/sbin:/usr/local/bin:/usr/X11R6/bin:/root/bin

あれれ、これ、.cshrc 内で指定しているパスじゃん。

set path = (/sbin /bin /usr/sbin /usr/bin /usr/games /usr/local/sbin /usr/local/bin /usr/X11R6/bin $HOME/bin)

そうか・・・
以前、tDiary をインストールした時、こういう問題が発生せずにすんなり動いたのは、自動起動された Apache ではなく、ユーザが apachectl コマンドをシェル上から実行した Apache だったからかぁ。
謎が解けた。

つまり、/usr/local/etc/rc.d 以下の自動起動スクリプトで起動された時は、PATH には /etc/rc で指定されている

PATH=/sbin:/bin:/usr/sbin:/usr/bin

この値がセットされるのだろう。
で、ユーザが起動した時は、そのシェル上の環境変数 PATH の値がセットされるというわけだろう。

このサーバ、既に4年近くノンストップで動いてて、再起動したことなかったもんな。
それまでに、Apache は何度か STOP/START してるんで、/usr/local/bin へのパスも通っており、tDiary でもエラーが出なかったんだな。

つーことは、/etc/rc の PATH に /usr/local/bin を追加しておけばいいということか。
システムファイルを編集するのは少々気持ち悪いが、/usr/local/bin は追加しても全然問題無い気はするがな。
ま、取りあえず tDiary 以外で問題は発生していないので、暇が出来たら実験してみるということでよかろうてえ。

ちなみに、FreeBSD だと /etc/rc だが、Linux なら /etc/init.d/functions の中でディフォルトの PATH は設定されているようだ。

ああ、原因が分かってすっきりした。寝よ。
新しいサーバにうちのメールサーバを移したら、なんと特定のアカウントだけメールが届かない現象が・・・

どういう基準で「届く/届かない」状況になっているのかよくわからなかったのだが、やっと先ほど判明した。

ちなみに、qmail-1.03 + ucspi-tcp-0.88 + vpopmail-5.4.28 という環境である。

で、どうも、VirtualDomain のユーザディレクトリの下に置いた .qmail ファイルに、配送先として Maildir を書いた場合に、

delivery 3: deferral: client_connect:_warning:_config_begin_failed/Aack,_child_crashed._(#4.3.0)/

というエラーが出て(warning って出てるけど、実際にメールが配送されないんで、これはエラーだ)、メールの配送に失敗してしまうのだ。(Maildir/new にも入っていないし、その下に書いていた転送先にも転送されていない)

で、.qmail を置かなければ問題なく Maildir/new にメールデータは書き込まれる。
.qmail を置いた場合も、転送先が書いてあるだけなら(Maildir が書かれていなければ)、問題なくその転送先に転送される。
つまり、他のアドレスに転送するだけなら、そのアドレスだけを書いた .qmail を置けば問題なく動作するし、転送をしないのなら .qmail を置く必要もないので、これまた何の問題もない。
問題になるのは、他のアドレスに転送しつつ、Maildir にもデータを置きたいという場合である。

ちなみに、Maildir の指定方法は、

./Maildir/
/home/vpopmail/domains/exsample.com/hogehoge/Maildir/

のように、相対パスでも絶対パスでも、どちらでも駄目。

一応、解決策も見つけてて、ドメインのディレクトリ直下に、

.qmail-hogehoge

というファイルを作って、そこに、

/home/vpopmail/domains/exsample.com/hogehoge/Maildir/

と絶対パスで書いてやれば正常に配送されることが確認出来た。
何か気持ち悪いけど、取りあえずはこれで行くしかないなあ。何せ、古いサーバは 9月いっぱいしか使えないので。

ググってみても、同じ現象に遭ってる人はいないなあ。
この話が一番近いくらい?多分。
 ↓
http://search.luky.org/linux-users.9/msg04669.html

取りあえず、ユーザディレクトリの下に置いてある .qmail をチェックして、Maildir が指定されているものはドメインディレクトリ直下に .qmail-XXXX を作成していこうてえ。

めんどくさ・・・
PHP で作られている某社の Web サイトを、うちの古いサーバから新しいサーバに移動したのだが、そしたらデータの登録画面で

Warning: mktime() expects parameter 1 to be long, string given in ~

なんつう Warning が発生し始めた。

ま、Warning なので、そのまま処理は進んでいるようなのだが、どうもデータ的にはボロボロになっているようで、本来表示されるべき場所にデータが表示されない。でも、同じデータをもう一度登録しようとすると「既に登録されています」のエラーになる。
日付が正しく入ってないので、検索条件からこぼれてるんだろうなあ。
(他人が作ったソースを追っかけるのは面倒くさかったので、DB の中身は確認してないけど。)

日頃 PHP を追っかけてないのでよくわからないのだが、ググってみると、どうも mktime の仕様が途中で変わり、パラメータの空値を許さなくなったためのようだ。

確かにソースの該当箇所を見てみると、

$date = mktime($hh,$mm,00,$month,$day,$year);

となってるんだけど、ソース中を調べても $hh には何の値もセットされていない。空値が渡されている。ここを試しに

$date = mktime(00,$mm,00,$month,$day,$year);

とかすると Warning は出なくなるので、やはり空値が問題のようだ。

PHP のバージョンは、古いサーバが 5.0.5、新しいサーバが 5.2.6。どうも、5.1.0 辺りで結構関数の仕様変更があったようなので(あくまで「ようなので」ですが(^^;)、やっぱその影響かなあ。

つーことで、この PHP プログラムを作成した会社に、お客さん経由で「新しい PHP のバージョンに対応した修正を行ってくれ」と依頼したんだが拒絶されたらしい。(^^;
おいおい・・・(^^;

旧サーバはあと2週間くらいで停止させるので、うちの方で直すしかないか・・・
やれやれ・・・(^^;

取りあえず、第一引数が空値なら date(H) をセット。第二引数が空値なら date(i) をセット・・・みたいに直してみればいいかな。

今、ざっと grep してみたら、mktime を使ってて、尚かつ引数に空値をセットしそうなソースが 11本あった。

他人が書いた PHP ソースを 11本も見るのは疲れるのお・・・(^^;

以前にも書いたが、某社がデータセンターでのハウジングサービスを止めるので、うちのサーバも含め、8~9月はまさにサーバ移行ラッシュである。

で、今日も1台サーバ移行作業を行なった。

レンタルサーバ間の移行ではなく、実機を移動するのでそこそこ大変である。
それに、InternetExplorer の「狂った仕様」にも振り回されたし。(是非、今後の動作確認は Firefox だけで行わせてほしい(笑))

090909_153626.JPGつーことで、移行作業終了後に遅めのランチとなったのだが、疲労回復のため(笑)、いつもよりリッチに Royal Host のスパイシーグリルメニュー「大粒ホタテのミックスグリル クリーミィーカレーソース」のAセット 1,580円(税込 1,659円)なのである。
しかも、FREE の小瓶を付けたので、2千円オーバーである。

Royal Host のメニューを「リッチ」と言ってしまう社長ってどうなのよ!?(^^;
いや、しかも、お客さんに奢ってもらったし・・・(^^;

さて、さて、来週にかけてまだまだ大物が残ってますぜ。

ま、改めてサーバまわりの勉強にもなるので、疲れはするし、いやな汗もかくけど、ちょっと楽しい気持ちもあったり、なかったりであります。

https のサイトをうちのサーバに持ってきたので、httpd.conf の
Include conf/extra/httpd-ssl.conf 行を有効にして httpd の再起動をしようとしたら、

Syntax error on line 31 of /home/httpd/conf/extra/httpd-ssl.conf:
Invalid command 'SSLPassPhraseDialog', perhaps misspelled or defined by a module not included in the server configuration

なエラーが。

「module not included」とか言うてるけど、SSL は有効にして configure したはずじゃけどね・・・と、思って8ヶ月も前の作業ログを調べてみると、ああ、なんと、

# ./configure --enable-ssl=shared --with-ssl=/usr/local/ssl --enable-proxy=shared  --enable-proxy-ajp=shared

って、--enable-ssl してへんやん・・・とほほ(^^;

ということで、今度は

# ./configure --enable-modules=all --enable-so=yes --enable-ssl=shared --with-ssl=/usr/local/ssl --enable-proxy=shared  --enable-proxy-ajp=shared --enable-ssl

というオプションで configure して make & make install。

よっしゃ!と早速 httpd を起動しようとすると、今度は、

/home/httpd/bin/httpd: error while loading shared libraries: libcrypto.so.0.9.8: cannot open shared object file: No such file or directory

な、エラー。

ああ、俺のせいだ。libcrypto.so.0.9.8 のパスを通すのを忘れてた。

以前書いた「OpenSSL のインストール」の中の、共有ライブラリのパス追加の作業を行い、今度こそバッチリ httpd は起動した。

centos_dvd.gif

 

あり?

CentOS 5.3 64ビット版の DVD ISOイメージって壊れて伝播してる?

どこのサイトに言っても、サイズは 4.2GB って出てるのに、実際にダウンロードすると 250MB って・・・
DVD の ISO イメージが 250MB なんてこと、あるかーーーー!(^^;

本家が壊れたファイルをアップしたのが伝播したって感じ?
ようわからんなあ。

ということで、CentOS 5.3 って、インストールディスクが 7枚あって、ディスク交換が面倒なので DVD にしたかったのだけど、しかたないので CD の ISO イメージを地道にダウンロードしてインストールディスクを作成。

やっと、あと少しで 4台目のサーバのインストール終了。
たかが OS のインストール 4台だけで、1日かかってしまったぜ。(^^;

あとは、sshd 起動して、家からリモートでセットアップしよ。
観音の秘密基地、暑すぎ(^^;

室内で熱射病になりそう。(笑)

このアーカイブについて

このページには、過去に書かれたブログ記事のうちお仕事カテゴリに属しているものが含まれています。

次のカテゴリはお店です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

電気ウナギ的○○ mobile ver.

携帯版「電気ウナギ的○○」はこちら