今考えると、おそらくキーボードの設定がそもそもの原因だったのかなと思うが、半年くらい前から root パスワードが通らなくなってしまった ESXi 4.1 の仮想サーバがあった。
何とかしなきゃなと思ってはいたが、昨日あることが原因でその中で動いているホスト2台から応答が無くなってしまった。
ESXiサーバ自体を再起動するにも root パスワード必要だしとあれやこれやもがいた結果、意を決して電源ブチギリすることに。無事ESXiは起動したが、応答がなかったホストからはやはり応答がない。
コンソールを見ることが出来ないのでわからないけどもシングルユーザーモードで止まってるパターンだろうと想像した。

もがいている途中に当然 VMWareのKnowledge Base は参照していたが、そこには

ESXi ホストの再インストールが、ESXi のパスワードをリセットする方法としてサポートされている唯一の方法です。その他の方法を使用すると、ESXi アーキテクチャの複雑な性質のためにホスト障害が起こるか、サポートされない構成になる可能性があります。ESXi にはサービス コンソールがないため、シングル ユーザー モードのようなパスワードをリセットする従来の Linux メソッドは適用されません。

とある。(http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=2078942

んー、再インストールはしんどい。(すでに時間深夜23時ころ)
しかもその唯一の方法、なんかすごくうまくいかない気がする!!!

更に検索すると、ESXiの起動ディスクをマウントし、etc/shadowを変更して又戻してうまく行った人を発見し、やってみた。

又ESXiサーバ、ブチギリ。(毎回寿命縮まる・・・)
ふたをあけ、起動ディスクにしているUSBメモリを取り出し、手元のMacBook Airにマウント。Hypervisor0〜Hyperviosor4がマウントされるので、

$  cp Hypervisor1/local.tgz ./

$ tar zxvf local.tgz

$ cd etc

$ vi shadow

そして、

root:/jjTTYxQozxraE:1234:0:99999:7:::
nobody:*:13358:0:99999:7:::
nfsnobody:!!:13358:0:99999:7:::
dcui:*:13358:0:99999:7:::
daemon:*:13358:0:99999:7:::
vimuser:*:13631:0:99999:7:::

赤い部分(適当に変更してあります。)を削除して保存。

root::0:99999:7:::
nobody:*:13358:0:99999:7:::
nfsnobody:!!:13358:0:99999:7:::
dcui:*:13358:0:99999:7:::
daemon:*:13358:0:99999:7:::
vimuser:*:13631:0:99999:7:::

更に、

$ cd ../

$ mv local.tgz local.tgz.bak (バックアップ)

$ tar zcvf local.tgz etc/

$ cp local.tgz Hypervisor1/

ここでUSBメモリをアンマウントし、元のサーバに戻して起動。

・・・・・・途中まではうまく起動したので、喜んでトイレに行って帰ると画面が真っ赤になっている・・・・・。
手元の local.tgz と local.tgz.bak のファイルサイズを見ると妙にlocal.tgz のほうがサイズが大きい。やけくそでlocal.tgz.bak を元に戻し起動すると通常通り起動する。
また電源ブチギリ(すでにブチギリに対する耐性は出来た)

ファイルサイズが違うのは BSD tar とLinux tar の違いだろうと思うが、手元にはBSDマシンばかりである。
そこで、初心者に優しそうな ここからUbuntuの仮想ディスクイメージをダウンロードし、VirtualBOXで起動を試みるも、なんか難しいこと言われて起動すらしない。
次に、このあたりからCentOSのイメージをダウンロードしVMWare Fusionで起動、起動したので上記と同じことを繰り返し、無事、root のパスワードが空の状態で起動が成功した。

その後、予想通りシングルユーザーモードで止まっている2台のホストを起動し、事なきを得た。

という疲れた話でした。

書いてしまえば簡単なんですけど、いつか誰かのためになれば。

ここ数日、サーバ周りではまりまくり。の備忘録。

maillogに、こんなのとか、

qmail: 1368543623.962078 warning: unable to stat mess/0/0

こんなのが出まくった時

qmail: 1368574718.903321 warning: trouble opening info/18/635922; will try again later

queue-fix

cd /usr/ports/mail/queue-fix
make install clean
rehash

思い切り良く行く。

svc -d /var/service/qmail
cd /var/qmail
rm -rf ./*
queue-fix /var/qmail/queue
svc -u /var/service/qmail

もういい加減、qmail使うのやめよう・・・・

所持しているSoftbankのiPhone4が調子悪い(通話が出来ない、ホームボタンが調子悪い)のでauのガラケーを4Sに機種変更した。 Softbankの方はどうするかきめかねてるけどまぁ、2台持つのも無駄なので緩やかに移行していこうかと考えてる。
Softbankの方は既にiOS5にしていた事もあり、移行は 問題なく進んだが、i.softbank.jpのメール、転送が出来ないという事に気づいた。 メール自体はIMAPなので普通に設定したら使えるがプッシュ通知がないのがどうにも不便である。
調べてみると色々方法はあるが、今回はIMAProwlというものを用いて擬似的にプッシュ通知させてみる事にした。 ついでにezweb もIMAPであるから同じく設定したら動くんじゃね?というもくろみ。

準備

さて、今回必要なのは、IMAProwl を動かす、ruby1.9が使えて常時オンラインなサーバとProwlというiPhoneアプリ(現在250円)

Ruby1.9のインストール

自宅のサーバを使う事にしたが、ruby環境が1.8だったので使える様にしておく。我が家のFreeBSD8.1の環境では、

#portinstall lang/ruby19

とやると、/usr/local/bin/ruby19 にruby1.9がインストールされる。(ruby1.8は/usr/local/bin/ruby で、共存が可能)事前にインストールしておく。

Prowl

App Store からProwl をインストールする。続いてアカウントを作成しログインする。

左上のRegisterから、アカウントを作成する。

Username: Password:にそれぞれ入力し、アカウントを作成した後、iPhoneアプリのProwlにもどりログインしておく。

Prowl APIKeyの取得

http://www.prowlapp.com/ で、上記のUsername/Password でログイン。

API Keys のタブをクリックし、 Generate key ボタンをクリックする。
作成されたAPI Key は後ほど使用。

IMAProwlのインストール

このスクリプトのインストールはFreeBSDのサーバ上で、

#cd /home/uname/bin
#git clone git://github.com/takuo/IMAProwl.git

とgit cloneすると、/home/uname/bin/IMAProwl 以下に諸々がインストールされる。
(インストールはお好きな場所で。)
ログファイルを置く場所が必要になるので、

#cd /home/uname/bin/IMAProwl
#mkdir logs

とログ用のディレクトリも用意しておく。

IMAProwlの設定

設定ファイルはインストールディレクトリの config.yml を編集して行う。

## -*- encoding: utf-8 -*-
##
## example configuration (version >= 1.2)
##
## if undefine LogDir, Debug mode is forcefully enabled.
LogDir: /home/uname/bin/IMAProwl/logs/
Debug: false
Daemon: true

## API Key can be defined up to 5-keys with comma separated values.
Prowl:
APIKey: ****************************************

LogDir: に先ほど作成したログ作成用のディレクトリを指定
APIKey: に先ほど取得したAPI Keyを指定

## IMAP Accounts.

Application: SoftBank
User: username
Pass: password
Host: imap.softbank.jp
BodyLength: 256
SubjectLength: 20
Priority: 0
Format: “Subject:%{subject} From:%{from}”
NOOPInterval: 20 # NOOP(check) interval with no-IDLE mode. (in seconds)
NoIDLE: true # unnecessary, because it should be auto-detected.
Enable: true # diable this account. Set true to enable this account.

Application: au
User: username
Pass: password
Host: imap.ezweb.ne.jp
BodyLength: 256
SubjectLength: 20
Priority: 0
Format: “Subject:%{subject} From:%{from}”
NOOPInterval: 20 # NOOP(check) interval with no-IDLE mode. (in seconds)
NoIDLE: true # unnecessary, because it should be auto-detected.
Enable: true # diable this account. Set true to enable this account.

User: にIMAPのアカウント名
Pass: にIMAPパスワードを指定

※FreeBSD特有の設定

imaprowl.rb の編集
imaprowl.rb の先頭行を

#!/usr/bin/ruby

から

#!/usr/local/bin/ruby19

へ書き換える(pathの変更)

IMAProwlの起動

cd /home/uname/bin/IMAProwl
./imaprowl.rb &

毎回起動するので起動用のスクリプトを用意しておくと良いですね。

めでたしめでたし。

【追記】

IMAProwlの起動は、

cd /home/uname/bin/IMAProwl
./imaprowl.rb

でオッケーだ。(daemonモードで動くので。)

6/26、オープンソースカンファレンス2010北海道で、FreeBSD次の一歩と題し少しお話をして来た。
FreeBSDの話を聞きに来た方は少数だったかもしれないが、満席+いすを追加したくらいで感謝、感謝。
スライドは公開するほどの物でもないけど、一応公開しておく事にした。

というより、壊した?
今までこんな事は無かったのだけど、少し前にサーバが不調で新しいハードウエアに移行した物があり、ezmlmで作ったメーリングリストがよくわからないけどおかしくなってしまった。
具体的にはezmlm-listなどで確認すると正常に登録されているアドレスなのだがそのアドレスからポストしても、

Sorry, only subscribers may post. If you are a subscriber, please
forward this message to mlname@mldomain to get your new
address included (#5.7.2)
(ML名は伏せとく。)
と言うようなエラーが帰って来てしまうと言うもの。
色々あーだこーだやったがもうわかんないので、作り直した。
まぁうまく行ったようなのでメモ。
vpopmailを使っているので、まずは儀式的に、、
su vpopmail
メーリングリスト登録者のバックアップ
cd /var/home/mldomain/mlname
ezmlm-list /var/home/mldomain/mlname > ml_sub_list
メーリングリストの削除
rm /var/home/vpopmail/domains/mldomain/.qmail-mlname*
mv /var/home/vpopmail/domains/mldomain/mlname /var/home/vpopmail/domains/mldomain/mlname.bak
メーリングリストの再作成
ezmlm-make -afnux /var/home/vpopmail/domains/mldomain/mlname /var/home/vpopmail/domains/mldomain/.qmail-mlname mlname mldomain
設定他の復帰
cd /var/home/vpopmail/mldomain/mlname
cp ../mlname.bak/charset .
cp ../mlname.bak/editor .
cp ../mlname.bak/headeradd .
cp ../mlname.bak/headerremobe .
cp ../mlname.bak/prefix .
(まぁ、それぞれに合わせて。)
テスト
ezmlm-sub test@domain(自分のアドレス)
取りあえず一通テスト。 
テストがうまく行ったら、numが出来てると思うので、
vi /var/home/vpopmail/mldomain/mlname/num 
:の左側の数字を編集する。
395:9
ezmlm-unsub test@domain(自分のアドレス)
archiveの復帰
cp -R /var/home/vpopmail/mldomain/mlname.bak/archive/* ./archive/
メーリングリスト登録者の復帰
ezmlm-sub /var/home/vpopmail/mldomain/mlname < ../mlname.bak/ml_sub_list
こんな感じで、多分元に戻ったはず(笑)
なんかうまく行ったみたいです。

たまにFreeBSDな話。

以前に6.3-RELEASEから7.1-RELEASE(くらいだったと思う)のアップデートを失敗して、強引に6.4-RELEASEで動かしていたマシンがあって、だましだまし使っていたが、いよいよどうにもならなくなって来たので思い腰を上げてアップデートを試みた。
結果うまく行ったのでそのメモ。
まず、なんでソースツリーをNFS越しかと言うと、自身ではmake buildworldがエラーで止まるので他のマシンでbuildworldを行い、/usr/src, /usr/obj をNFS mountし、installwoldをしょうと考えた。
まぁ、普段ならこういう強引なことも平気でやるのだが、今回の場合、何がおかしいのかもうわからないのでいろいろ不安な中、半分祈りつつ、、、w

[buildworldを行うマシンでの作業]

  • ソースツリーを最新にする(今回は7.2-RELEASE)
  • /etc/make.confをinstall側サーバにあわせて設定する
  • cd /usr/src
  • make -j8 buildworld (-j8はおまけ)
  • make -j8 buildkernel

正常に終了したら、

  • /usr/src, /usr/obj をNFSでexport出来るように設定

[install側での作業]

  • buildworld側サーバの/usr/src, /usr/objをそれぞれ/usr/src, /usr/objにNFS mount
  • cd /usr/src
  • make installkernel
  • /etc/rc.confを最低限の設定にする
    • これはreboot後、NFSを使わなくてはならならず、シングルユーザモードになれないので気休め程度に。
    • あと、6系から7系はライブラリが入れ替わり、多分、結構動かない物があるので。
    • ネットワーク周りの設定とnfs_clientの設定だけ残した。
  • reboot
  • 新しいkernelで起動を確認後、/usr/src, /usr/obj をNFS mount
  • mergemaster -p
  • make installworld
  • make delete-old
  • mergemaster
  • reboot
  • make delete-old-libs
  • reboot
  • /usr/ports/misc/compat6x/ をインストール
  • /etc/rc.conf を元に戻す
  • reboot
  • portupgrade -af
    • としたい所だが、取りあえず、compat6xで全部動いたので、ひとつづつupgrade (イマココ)

という、全くもって参考にならないメモでした。

今回、Wordpress に移行したのは、これを見つけたからと言うのもある。

tDiaryではiPhoneから昼ごはんの写真を送るのにメールを経由していたのだが、サーバを取り替えるにあたり、vpopmailからpostfixにMTAを置き換え、virtualdomainの場合、メール経由でスクリプトに渡すのがめんどくさい(出来ない訳ではない)ので、いろいろ検索している最中にこれを見つけた。

取りあえずなかなか良い感じである。