タイトル/名前 | 更新者 | 更新日 |
---|---|---|
技術/Java/Solaris10のサービス管理とLog4j-syslogd | msakamoto-sf | 2009-04-04 10:20:51 |
技術/Java/PostgreSQLと文字コードメモ | msakamoto-sf | 2009-04-04 10:20:03 |
日記/2007/02/05/TurboLinux10SでturbopkgからTurboPlusへの移行 | msakamoto-sf | 2009-04-04 10:11:48 |
日記/2007/01/23/TurboLinux10のbindのアップデートで嵌った | msakamoto-sf | 2009-04-04 10:09:18 |
日記/2007/03/21/蝋印(ろう印):シールスタンプ(SealStamp)について | msakamoto-sf | 2009-04-04 09:57:20 |
技術/Linux/xscreensaver | msakamoto-sf | 2009-04-04 09:46:22 |
日記/2007/03/28/IEでPOSTの度にルートディレクトリへのGETリクエストも発行される? | msakamoto-sf | 2009-04-04 09:35:46 |
日記/2007/03/29/IO::All, File::DirWalk, Path::Class, そしてorz, workyモジュール | msakamoto-sf | 2009-04-04 09:33:23 |
日記/2007/03/31/CのerrnoにあたるPerlの$!は、使用前にクリアが必要 | msakamoto-sf | 2009-04-04 09:30:48 |
日記/2007/04/03/底数、つまり*進数を変換するモジュール(2進数<>16進数など) | msakamoto-sf | 2009-04-04 09:28:59 |
お仕事で、Javaからsyslogdにログ出力する必要が生じました。しかも、Solaris上のsyslogです。
Log4jのAppenderで、syslogのプロトコルを用いてネットワーク接続で出力するSyslogAppenderがあるとの事なので、Solaris10もどうにかインストールできましたので試してみました。
log4j-1.2.13.jarを使用した。
package test.log4j; import org.apache.log4j.Logger; public class SyslogSample { public static void main(String[] args) { Logger logger = Logger.getLogger("syslog"); logger.debug("--debug--"); logger.info("--info--"); logger.warn("--warn--"); logger.error("--error--"); logger.fatal("--fatal--"); } }
log4j.appender.syslog=org.apache.log4j.net.SyslogAppender log4j.appender.syslog.Facility=local5 log4j.appender.syslog.SyslogHost=192.168.250.50 log4j.appender.syslog.FacilityPrinting=true log4j.appender.syslog.layout=org.apache.log4j.PatternLayout log4j.appender.syslog.layout.ConversionPattern=AA%5p %c{1} - %m%n log4j.appender.console=org.apache.log4j.ConsoleAppender log4j.rootLogger=console, syslog
Solaris上でのsyslog設定やサービスの再起動は初めてだったので、色々と試行錯誤になってしまった。
ちなみに、ローカルでの確認はloggerコマンドを用いて次のようにした。
logger -p local5.notice -t HOGE abcdefg
Solaris10では、"SMF(Service Management Facility)という機能により、様々なサービスの起動・停止・再起動・依存関係を統合して管理できるようになった。今回、設定ファイル変更に伴う再起動を行うsyslogdも、SMFを通じて再起動をする。
[root@basara /]# svcs STATE STIME FMRI legacy_run 19:21:23 lrc:/etc/rcS_d/S50sk98sol legacy_run 19:22:23 lrc:/etc/rc2_d/S10lu ... online 22:21:37 svc:/system/system-log:default offline 19:21:08 svc:/application/print/ipp-listener:default offline 19:22:12 svc:/application/print/rfc1179:default
通常なら次のコマンドであるプロセスを対象としているサービス名を取得できる。
[root@basara /]# svcs -p sendmail STATE STIME FMRI online 19:22:23 svc:/network/smtp:sendmail 19:22:23 376 sendmail 19:22:23 378 sendmail
しかし、syslogdに関してはこれが利用できない。
[root@basara /]# svcs -p syslogd svcs: パターン 'syslogd' がどのインスタンスとも一致しません STATE STIME FMRI
そこで、ふとsyslogdのmanを確認していると・・・
$ man syslogd ... System Administration Commands syslogd(1M) svc:/system/system-log:default Administrative actions on this service, such as enabling, disabling, or requesting restart, can be performed using svcadm(1M). The service's status can be queried using the svcs(1) command.
というわけで、
[root@basara /]# svcs -l system/system-log:default fmri svc:/system/system-log:default name system log 有効 true 状態 online next_state none state_time 2006年07月02日 (日) 22時21分37秒 logfile /var/svc/log/system-system-log:default.log リスタータ svc:/system/svc/restarter:default contract_id 109 dependency require_all/none svc:/milestone/sysconfig (online) dependency require_all/none svc:/system/filesystem/local (online) dependency optional_all/none svc:/system/filesystem/autofs (online) dependency require_all/none svc:/milestone/name-services (online)
これがsyslogdのようである。下記参照。
以上より、次のコマンドでsyslogdを再起動できた。
# svcadm restart system/system-log:default
まず、/etc/syslog.confに次のようなエントリを追加してみた。
local5.* /var/log/log4j.log
以下の点で間違い。
ちなみに先の間違っているエントリを使用すると、次のようなログが/var/adm/messagesに出る。
Jul 2 22:10:06 basara syslogd: line 18: unknown priority name "* /var/log/log4j.log"
ログファイルを作らずに、loggerコマンドなどで試してみたところ、/var/adm/messagesに以下のログが出力された。
Jul 2 22:18:07 basara syslogd: /var/log/log4j.log: ファイルもディレクトリもありません。
そこでtouchで作成してみたところ、まだ上記ログが出る。syslogdを再起動してみたら直った。
次のファイルで、外部接続の許可を制御できる。
/etc/default/syslogd
デフォルトで「LOG_FORMAT_REMOTE=YES」がコメントアウトされており、また、それがデフォルトである。禁止したい場合はNOを設定する。今回はリモートのJavaからの出力を試みるので、デフォルトのママにしておく。
上記の注意点を参考に、syslog.confの変更およびログファイルをtouchにより作成し、syslogdの再起動を行ったところ、loggerコマンドで以下のようなログを出力できた。
# tail /var/log/log4j.log Jul 2 22:19:20 basara HOGE: [ID 702911 local5.notice] abcdefg
以下に、実際に出力された模様を示す。
# (このタイミングでWindows側のJavaからSyslogSampleを実行) Message from syslogd@[192.168.250.100.11.180] at Sun Jul 2 22:23:24 2006 ... [192.168.250.100.11.180] local5:AAFATAL syslog - --fatal--^M # tail /var/log/log4j.log Jul 2 22:21:40 basara HOGE: [ID 702911 local5.notice] abcdefg Jul 2 22:23:24 [192.168.250.100.11.180] local5:AADEBUG syslog - --debug--^M Jul 2 22:23:24 [192.168.250.100.11.180] local5:AA INFO syslog - --info--^M Jul 2 22:23:24 [192.168.250.100.11.180] local5:AA WARN syslog - --warn--^M Jul 2 22:23:24 [192.168.250.100.11.180] local5:AAERROR syslog - --error--^M Jul 2 22:23:24 [192.168.250.100.11.180] local5:AAFATAL syslog - --fatal--^M
以下の点がローカルのloggerと異なっている。
log4j.propertiesを修正し、SyslogHostを"localhost"にしてSolaris10上で実行してみる。
[msakamoto@basara java]$ java -cp .:./lib/log4j-1.2.13.jar test.log4j.SyslogSample Message from syslogd@localhost at Sun Jul 2 22:58:05 2006 ... localhost local5:AAFATAL syslog - --fatal--
実行側のコンソールに、fatalメッセージが割り込んでいるのが分かる。これは正常である。
# tail /var/log/log4j.log Jul 2 22:58:05 localhost local5:AADEBUG syslog - --debug-- Jul 2 22:58:05 localhost local5:AA INFO syslog - --info-- Jul 2 22:58:05 localhost local5:AA WARN syslog - --warn-- Jul 2 22:58:05 localhost local5:AAERROR syslog - --error-- Jul 2 22:58:05 localhost local5:AAFATAL syslog - --fatal--
こちらがsyslogdの出力しているログである。"AA"以降がJava側で指定しているメッセージフォーマットである。
やはり、ローカルのloggerとフォーマットが異なる。
Log4jのSyslogAppender経由で出力するsyslogは、ローカルでloggerコマンドにより出力するログ形式とはフォーマットが異なる。
ただし、上記は自分で設定したfacilityに出力した場合であり、今回仕事ではuser.errorで固定で出力する。その場合は、まだ実験していない。
余談だが、この実験を終えた後、「今日一日installからここまでずう~~っと動かしっぱなしだったな」と、風呂にはいるのを兼ねて一旦PCを落とした。
その後再起動し、VMwareからSolaris10を立ち上げたら ネットワークカードの初期化に失敗してるし。
急いでグラフィカルログインから(こういうときがあるから迂闊にコンソールにできない。いや、単にLinuxでいうstartxに該当する手順を知らないだけなんだけど)、svcsを叩いてみたら 見事に network/physical:default が offline になってるし。
あわてて /etc/inet/hosts, ipnodes を確認してみたら localhostだけになってて、自分で指定したホスト名のエントリがいつの間にか消去されてるし。
・・・誰だ?自分じゃないはず。・・・まさか、Sun Studio 11とかそのパッチの影響か・・・?確かにSun Studio 11を入れた頃には一通り環境が整いつつあったので、再起動はかけていない。
とりあえず急いで、対応する.savedファイルを確認してホスト名のエントリを書き戻す。
# svcadm enable -r network/physical:default
をやろうとすると(*1)、maintenanceモードに入っているからと怒られる。
ん?ひょっとして
# svcadm reflesh network/physical:default
したのがまずかったか?もう一度svcsしてみたら確かに"maintenance"と表示されてしまっている。
# svcadm clear network/physical:default
したらmaintenanceモードが消えたので、もう一度 enable してみる。
これで、ようやく"online"になってくれた・・・。念のため再起動かけてみると、無事指定しているIPアドレスが取得できたようで、SSHからもログインできた。
あ~~・・・焦った・・・。
PostgreSQLとJavaの文字コード関連を調べた時のメモ。 2006年3月時点での情報です。
PostgreSQL 8だと、SET NAMESしたら怒られた。
testsuite=> set names to 'UTF8'; ERROR: unrecognized configuration parameter "names"
Java側で"set client_encoding to XXX"させてみたら、今度は
org.postgresql.util.PSQLException: The server's client_encoding parameter was changed to EUC_JP. The JDBC driver requirs client_encoding to be UNICODE for correct operation.
として怒られた。
サイトには「TurboLinux 10 Server アップデートキットを適用すれば」云々あるけど、そもそもアップデートキットってどこだよ《゚Д゚》ゴラァァァァァァァァァァァァア!!って感じ。
「サポート」の「ダウンロード」も、FTPのディレクトリにしかたどり着けないし。
しょうがないので、lftpコマンドを起動して、
/pub/TurboLinux/stable/tested/Server/10/i586
より手動でパッケージをDLする。
まず、
turbolicense-tlverify-0.3-7.i586.rpm turbolicensecfg-1.0.0-21.i586.rpm
をDLしてインストールし、ライセンスファイルを取得する。
/etc/turbolicense/celica_license.txt
に、ライセンスファイルがDLされる。
続いて以下のパッケージをDL
turboplus-1.0.0-77.i586.rpm turboplus-base-1.0.0-77.i586.rpm
(今思えば、turboplus-1.0.0-77.i586.rpmは不要だったかもしれない。gettext用とおぼしきメッセージファイル(*.mo)しか入ってないし。)
[root@murasame root]# rpm -ivh turboplus-base-1.0.0-77.i586.rpm error: Failed dependencies: libpcrs.so.0 is needed by turboplus-base-1.0.0-77 pcrs is needed by turboplus-base-1.0.0-77 turbolicensecfg-base is needed by turboplus-base-1.0.0-77
というわけで、更に追加で
pcrs-0.0.3-2.i586.rpm
をDLし、インストール。
[root@murasame root]# rpm -ivh --nodeps turboplus-base-1.0.0-77.i586.rpm Preparing... ########################################### [100%] file /etc/turboautopkg.conf from install of turboplus-base-1.0.0-77 conflicts with file from package zabom-2.2.1-9 file /usr/bin/cuickin from install of turboplus-base-1.0.0-77 conflicts with file from package zabom-2.2.1-9 file /usr/sbin/turboautoupdate from install of turboplus-base-1.0.0-77 conflicts with file from package zabom-2.2.1-9 file /usr/sbin/turbosetautopkg from install of turboplus-base-1.0.0-77 conflicts with file from package zabom-2.2.1-9 file /usr/sbin/turbosetautopkggui from install of turboplus-base-1.0.0-77 conflicts with file from package zabom-2.2.1-9 file /usr/sbin/turboupdateck from install of turboplus-base-1.0.0-77 conflicts with file from package zabom-2.2.1-9
・・・んだよ、それ。むかついたので、/etc/turboautopkg.confだけバックアップしておいて、
rpm -vih --nodeps --force turboplus-base-1.0.0-77.i586.rpm
で無理矢理インストール。
で、"turbo+ --cui"でとりあえず起動できた。
・・・不安だ。zabom入ったままだしなあ・・・。だって、zabom消そうとすると
[root@murasame root]# rpm -e zabom error: Failed dependencies: zabom is needed by (installed) mongoose-2.0-2004092707 zabom = 2.2.1-9 is needed by (installed) zabom-devel-2.2.1-9
とかいわれるんだもん。怖い。
あ、あと、何かVMware上のTLX10SにはImageMagick-perlが入ってないことが判明。とりあえず動作確認で、turbo+でさくっと入れておいた。
どこで嵌ったのかというと、bind-9.2.3-4のRPMのpreuninstallスクリプトが狂ってた為、アンインストールに失敗してしまったところ。
turbopkgでアップデートしてみたら、
[root@murasame root]# rpm -qa | grep bind bind-9.2.3-9 #<<<<<< 9.2.3-9 ypbind-1.17.3-1 bind-libs-9.2.3-9 bind-utils-9.2.3-9 bind-9.2.3-4 #<<<<<< 9.2.3-4?? bind-chroot-9.2.3-9
こんな感じでbindが二つも登録されてしまった。9.2.3-4の方のアンインストールに失敗したみたい。
しょうがないので、bind-chrootとcaching-nameserverを削った後、bind-9.2.3-9を-eで消して、9.2.3-4については
$ rpm -q --scripts bind-9.2.3-4
でpreuninstallスクリプトを見てみたところif~fiの最後のfiの位置がおかしかったことが判明。手動でpre/postのuninstallスクリプトを動かしておき、
$ rpm -e --noscripts bind-9.2.3-4
でスクリプトを動かさずに削る。
・・・bindとbind-chrootはupdateサイトから再取得。caching-nameserverについてはInstallサイトから再取得。
サーバ引っ越しでrootユーザのパスワードを郵送する事にしてみたのだが、開封されていないことを確認するにはどうしようということで、格好付けと見栄えで蝋印を使ってみようと思った。
が、現状入手するには輸入物を扱う文房具ショップでないと難しい。カテゴリも探しづらく、レター用品でカテゴライズしているところもあれば、普通に印鑑として扱っているところもあるし、輸入雑貨としてまとめているところもある。
楽天やおしゃれな大きめの文房具ショップでは、
RUBINATO(ルビナート)
ムッハ社
の二社のシールスタンプを主に扱っている。
http://www.rakuten.ne.jp/gold/yosii/index-b.html
http://www.rakuten.ne.jp/gold/nagasawa/main-top/main-top1.htm
http://www.itoya-store.jp/store/Top.do
この三店の他にも、輸入文具を扱っているところであれば結構見かけることは見かける。
RUBINATOはかなりのブランドらしい。
http://www.rubinato.it/
イタリアを本拠地としている。特にe-shopを経営しているわけでもないようだ。シールスタンプについて言えば、記念品や観光地のおみやげ品をターゲットにカスタマイズデザインも請け負ってるみたい。・・・個人で注文できるかは不明。聞いてみるか。
ムッハ社はよく分からない。
今回はまあ、初手なので、ルビナートのフクロウのセットをヨシイから購入。送料込みで4800円強。まあまあだろう。フクロウのデザインを選んだのは、知恵の神様だから。あるいは、不正なログインはその眼で捉えて逃さない、という意味も込み。クローバーも良かったんだけど、四つ葉のクローバの花言葉って「真実の愛」とか「私のものになって」とかいう意味だから、rootユーザのパスワードが入っている封筒には明らかに似合わないので見送った。
※2007/03前後、TurboLinux Server 10 を使っていた当時のメモ
RPMは
xscreensaver
というパッケージそのまま。で、manとかも入ってる。
ざっと眺めると
xscreensaver-demo
というGUI設定プログラムが同梱されており、基本的にそれを使って設定することを推奨している。実際やってみたら、とても手動じゃ作れなさそうな
$HOME/.xscreensaver
が出来上がった。
GLSlideShowとかいうスクリーンセーバを選べば、"Advance"タグで選択したディレクトリ中の画像をランダムで表示してくれるみたい。
→使ってみたら、OpenGL使ってるだけあって派手なんだけどCPU食い過ぎ。どうしてこういうのばっかしなんだ。
結局ブランクスクリーンセーバにして、しかも30分後に。これじゃあ、VMwareじょうなので、ホストのWindows側で勝手にDisplayをOFFってくれる。実質無効。
他、下記リンク参照。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=37122&forum=11
要は、通常はPOST遷移するはずが、ログ見てみると間にGETを挟むクライアントが超低確率で存在するけどこれってなんなの?という話。
珍しく素早く解決されているが、要はMicrosoftのIE6の"コンテンツアドバイザ"という機能の仕様。全く・・・。
http://support.microsoft.com/kb/924456/ja
本当に何を考えているんだ?本当、余計な事しかしないよな・・・。IE系は。まあ、MS系のサイトやMSの血を引くWebアプリはそれをデフォにしてるのが多いから、IE使う方がむしろ却って気楽なんだけど。
ただ、どうもデフォじゃ上記機能は無効化されているみたい。自分も個人のWinXPProで確認。コレ、弄った記憶も無いし。というかこの機能、今じゃセキュリティソフトやプロバイダなどの、別の上位レイヤーで実装されている機能だよな。コンテンツ内容を判別してるなんて。
メモ。
http://blog.livedoor.jp/dankogai/archives/50795362.html
ここら辺から始まった、「ディレクトリ中のファイル取り出しと処理」系で派生。
http://d.hatena.ne.jp/nekokak/20070324/1174746102
で、File::DirWalkが紹介。続いて
http://blog.livedoor.jp/dankogai/archives/50796757.html
で、IO::Allが紹介。さらに、どっかの関連エントリで
http://d.hatena.ne.jp/tokuhirom/20070325/1174800458
でも、File::DirWalkに続いて Path::Class が紹介。さらにここのサイトの
http://d.hatena.ne.jp/tokuhirom/20070325/1174824272
で、Inline::* というモジュールの存在を知る。
→Inline::のCPAN
http://search.cpan.org/~ingy/Inline-0.44/Inline.pod
すげえ。で、作者のIngyというのは何者か?
http://search.cpan.org/~ingy/
・・・すげえ。で、すごいのが
http://search.cpan.org/~ingy/orz-0.12/lib/orz.pm
http://search.cpan.org/~ingy/worky-0.10/lib/worky.pm
・・・ジョークCPAN?ジョークRFCってあるけど。
というわけで色々すごかったメモ。
errno自体がもともと、Cのレベルでそうした処理が必要。
これを忘れると、他のモジュール内で発生した(しかし理由があって故意にスルーした)errnoなどがクリアされずに残っていて、自分で呼んだシステムコールは正常なのに、errnoが残っている為、$!がセットされているように見える場合が有る。
errnoの判定が必要なシステムコールの呼び出し前には、errnoクリア。これは、CもPerlも同じようである。
CPANには Math-BaseCalc というのが挙げられている。おおよそこれで用が足りるかも知れない。ソースも一本のみなので、わざわざcpanをインストールせずとも、適当にPODを削ってパッケージ名を弄ればローカルでも適当に動かせそう。
ちなみにActivePerlのPPMには、他にも、
Math-Base36 : 36進数、つまり0-9, A-Z.
Math-Base85 : RFC1924に基づく85進数
Math-BaseArith : よくわかんない。
Math-Roman : ローマ数字に変換(すげえ。)
Math-BaseCnv : よく分かんないけど、Math-BaseCalcのお手軽・スピード優先タイプみたい。
なんかが入ってた。CPANに移植してくれないかな。