ひよっこ。

I want to…

Archive for the ‘OS’ Category

混ぜるな危険….(RPMとyumの衝突)

Posted by hikaruworld : 2010 1月 7

先日誰かの作成した環境を触っていたら、Tomcatの起動時に以下のようなエラーが発生していました。

[root]# /etc/init.d/tomcat5 start
Starting tomcat5: /usr/bin/rebuild-jar-repository: error: Could not find jdbc-stdext Java extension for this JVM
/usr/bin/rebuild-jar-repository: error: Could not find jndi Java extension for this JVM
/usr/bin/rebuild-jar-repository: error: Some detected jars were not ftound for this jvm
/usr/bin/rebuild-jar-repository: error: Could not find jaas Java extension for this JVM
/usr/bin/rebuild-jar-repository: error: Some detected jars were not found for this jvm

エラーメッセージをググったり、検索したりしてみると直接の原因は以下で、ライブラリが見つからないようです。

[root]# ls -la /usr/share/tomcat5/common/lib
lrwxrwxrwx 1 root   root       38  1月  7 10:35 [jdbc-stdext].jar -> /could/not/find/extension/for/this/jvm
lrwxrwxrwx 1 root   root       38  1月  7 10:35 [jndi].jar -> /could/not/find/extension/for/this/jvm

サーバを検索してみると、以下に実体を発見したので、
シンボリックリンクを切り替えてみたが、やっぱりうまく行きません。

[root]# locate jndi.jar
/usr/lib/jvm/java-1.4.2-gcj-1.4.2.0/jre/lib/jndi.jar
/usr/lib/jvm-exports/java-1.4.2-gcj-1.4.2.0/jndi.jar

色々調べていると、まさに以下の現象が発生していました。Thanks. ありえるえりあ

step4.
最初、http://java.sun.com/のJ2SE5 JDKのrpmをインストールしていました。tomcat5パッケージのインストールで[エラーA](脚注)が出ました。jta以外(jaas,jce, jsse)はJ2SE5に標準で統合済みです。tomcat5のrpmパッケージとSunが配布するrpmパッケージにずれがあります。パッケージ管理の一番の障害(いわゆる「混ぜるな危険」)です。
こういう場合はおとなしく、片方に従う方が楽です。JPackageに身を任せた以上、JPackageのrpmパッケージを使うことにします(JPackageのrpmはspecファイルだけがあり、インストールするファイルの実体はSun配布のJDKです)。

つまり、JavaはSun標準のものをRPMでインストールし(てパスを通したので)、
Tomcatはyumでインストール(yum側のJavaを見ている?)したためにパッケージの内容がずれているとorz…
仕方ないので、上記忠告通りJPackageのPRMパッケージを利用することにします。
Tomcatをソースからインストールする方が楽なんだけど、やらないのは大人の事情です)

  1. まずは、jpakcageがyumでインストールされているか確認します。
    [root]# yum install jpackage-utils
    ~中略~
    Package jpackage-utils - 1.7.3-1jpp.2.el5.noarch is already installed.
    Nothing to do
    

    既にインストールされているようです。

  2. 次にJPackage上のJavaのバージョンを確認します。
    [root]# alternatives --config java
    
    1 プログラムがあり 'java' を提供します。
    
      選択       コマンド
    -----------------------------------------------
    *+ 1           /usr/lib/jvm/jre-1.4.2-gcj/bin/java
    

    gcj版のJava1.4.2がインストールされています。
    今回のアプリケーションはJava1.5以上が必要なため、JPackageにjava1.5をインストールする必要があります。

  3. 以降は、http://d.hatena.ne.jp/KishikawaKatsumi/20080504/1209922424を参考に作業します。Thanks!
    JPackageから、対象のjdkをダウンロード
    今日、この時点ではjdk5のバージョンは1.5.0.14のものしか置いてなかったので、これにあわせます。
    (SRPMをビルドすればよいかも知れないけど、いまいちよくわからないのでやりません。ありえるえりあさんの記事を参考にしてください。)
  4. バージョンに合ったJDKをダウンロード
    Sunから。自分の場合JDK1.5なのでアーカイブから落とします(Linux RPM in self-extracting file)。
    バージョンはあわせておかないとインストール時にエラーになるので注意してください。
    JPackageをインストールする際に対応するJDKが必要になるようです。
    ない状態でJPackageだけインストールしようとすると依存性のエラーで落ちます。

    [root]# rpm -ivh --test java-1.5.0-sun-compat-1.5.0.14-1jpp.i586.rpm
    警告: java-1.5.0-sun-compat-1.5.0.14-1jpp.i586.rpm: ヘッダ V3 DSA signature: NOKEY, key ID c431416d
    エラー: 依存性の欠如:
            jdk = 2000:1.5.0_14-fcs は java-1.5.0-sun-compat-1.5.0.14-1jpp.i586 に必要とされています
    
  5. SunのJDK及びJPackageのJDKのインストール
    省略。実行権与えて実行すればインストールまで済ませてくれます。
  6. JDKの切り替え
    [root]# alternatives --config java
    
    2 プログラムがあり 'java' を提供します。
    
      選択       コマンド
    -----------------------------------------------
     + 1           /usr/lib/jvm/jre-1.4.2-gcj/bin/java
    *  2           /usr/lib/jvm/jre-1.5.0-sun/bin/java
    
    Enter を押して現在の選択 [+] を保持するか、選択番号を入力します:
    

    2.を押下してjre1.5に切り替えます。

  7. バージョンチェック
    [root]# java -version
    java version "1.5.0_11"
    Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_11-b03)
    Java HotSpot(TM) Client VM (build 1.5.0_11-b03, mixed mode, sharing)
    

以上です。
alternatives なんてコマンドを今日知りました。

Posted in OS, program | タグ: , , , | Leave a Comment »

RemoteDesktopのバグでキーボード情報がクリアされない?

Posted by hikaruworld : 2009 5月 14

たぶんRemoteDesktop側のバグみたいなので、一応書いておく。

■現象
windowsキーを押していないにも関わらず、winキーが押したままの状態になる。

■環境
Windows XP SP3
リモートデスクトップ接続 6.0.6001

■発生方法
1. リモートデスクトップを起動し、適当に接続
2. リモートデスクトップを最大化
3. リモートデスクトップを最小化
5. winを押したままの状態でリモートデスクトップをタスクバーから選択して起動。
6. リモートデスクトップが最大化された状態になる。
7. winキーを離す。
8. リモートデスクトップを最小化する。
9. eとかを押して見るとwin+e(マイコンピュータ表示)の動きをする。

■回避方法
1. winボタンを一回押してスタートメニューを表示させる。

へんなことにはまってしまった。

Posted in OS | タグ: , , | Leave a Comment »

デフォルトブラウザをIEに

Posted by hikaruworld : 2009 1月 27

引用の引用。
まれに引っかかって毎回調べていたのでメモ。

観測気球さんのblogを見れ。

要するに、

  1. http://www.pc-tools.net/win32/setbrowser/
  2. プログラムのアクセスと既定の設定→既定の Web ブラウザ

基本は、2で。頻繁に切り替えるなら1だね。

本当にありがとうと力いっぱい感謝したい。

Posted in OS | タグ: , | Leave a Comment »

Windows7をインストール

Posted by hikaruworld : 2009 1月 12

Windows7のベータ版が配布されていたので、期間限定っぽいし、
ちょっくらダウンロードしてインストールしてみた。

http://www.microsoft.com/windows/windows-7/beta-download.aspx
選んだのは、32bit版の日本語版。
1/24までらしいので、欲しい人はお早めに。

しょっぱなから躓いたのが、Safariでダウンロードしようとしたらダウンロード画面から進まなくなった。
Firefoxでやり直したら問題なく。
おーい。

VirtualBox上だったのでいけるか心配だったけど、問題なくインストール完了。
GuestAddtionはだめっぽかった。
起動も問題なし。

とりあえず、AVG(アンチウィルスソフト)をインストールだけしておく。

ちょこっとさわってみる。
付箋紙とかがデフォルトでついている。
タスクバーがイメージのみになってたり。
メモリは少なめだけど、確かに基本操作まわりは軽い感じかなぁ。

ただ、WindowsXP世代で止まっている自分はVistaベースのUIは慣れん(汗

触った感じは、悪くいえばMacもどき?

うーん。
まぁ、こんなもんだろ。
これからちょこちょこ触ってみるか。。。

Posted in OS | Leave a Comment »

LinuxでのProxyのセッティング

Posted by hikaruworld : 2009 1月 8

Linuxのプロキシ超えの設定に関して。OSはRHEL4。

たまに必要になるんだけど、結構良く忘れるのでメモしておく。

wget

  • /etc/wgetrcを編集

# You can set the default proxies for Wget to use for http and ftp.
# They will override the value in the environment.
http_proxy = http://hoge.hoge.piyo.com:8080/
ftp_proxy = http://hoge.hoge.piyo.com:8080/

svn

  • ~/.subversion/servers

[global]
# プロキシを通さないリスト
http-proxy-exceptions = localhsot,127.0.*
# ホスト名
http-proxy-host = hoge.hoge.piyo.com
# ポート
http-proxy-port = 8080

職場で、http-proxy-exceptionsを設定せずにコミットしようとしたら、
エラーで落ちた

svn: コミットに失敗しました (詳しい理由は以下のとおりです):
svn: MKACTIVITY (URL: ‘/svn/hoge/!svn/act/8245d6fe-645b-0410-b3e1-bff8fe62c48e’): Could not parse response status line (http://192.168.0.xxx)

直接つないだから問題なくOK。セキュリティの問題か。。。

setuptools(easy_install)

設定ファイルがあるわけではないので、setuptoolsにのみ設定することはできないが、
以下のようにexportしておけばそちらを参照してくれる。

# export http_proxy=http://hoge.hoge.piyo.com:8080

とりあえず、忘れやすいのはこんなところかなぁ。

Posted in OS | タグ: , , , , | Leave a Comment »

PostgreSQLのSHMMAXの計算式の検証

Posted by hikaruworld : 2009 1月 8

SHMMAXの計算式の検証

PostgreSQL:8.2.4(特にカスタマイズせずにソースからインストール)
OS:RHEL4

※最近マイナーバージョンの差での問題にちょこちょこあたる(;-
今回も8.1系から8.2系で設定ファイル周りの記述が変更されているので注意。

上記でインストールした環境のデフォルト値からSHMMAX(/proc/sys/kernel/shmmax)の設定に必要な値の算出の検証を行う。

この辺りが詳しい。

※あくまで、PostgreSQLが必要とする共有メモリ。実際は当然その他のサービスのメモリを考慮する必要がある。
なお、ここでの検証はSHMMAXの値の算出を行うためであり、max_connectionsやshared_buffersの値の算出を導き出すためのものではない。
それはまたの機会に。。。

ところで、実は手っ取り早くSHMMAXの値を知るためにはとりあえずpg_ctlで起動してしまえばよい。
起動に失敗した場合は必要なサイズの詳細情報をPostgreSQLが教えてくれるからだ。

計算方法

表16-1より

大雑把には、必要とされるセグメントサイズは500キロバイト+上記表に記載された変数の量と見積もることができます。
(エラー時に表示されるメッセージには、割り当てに失敗したサイズが正確に記載されています。)
SHMMAXを1メガバイトとしてPostgreSQLを稼動させることができますが、受容できる性能を確保するためには少なくとも4メガバイト必要です。10メガバイト単位の設定を推奨します。

ドキュメントに書いてあるように、各値に対してここの計算式で値の算出を行う。
参考までにリンク先の式を張っておく。

名称 おおよその乗数(1増やした場合のバイト数)
max_connections 400 + 270 * max_locks_per_transaction
max_prepared_transactions 600 + 270 * max_locks_per_transaction
shared_buffers 8300 (BLCKSZが8Kであることが前提です。)
wal_buffers 8200 (XLOG_BLCKSZが8Kであることが前提です。)
max_fsm_relations 70
max_fsm_pages 6

算出方法

事前に(基本的には表の説明にもあるように8K)BLOCK_SIZEを確認しておく。
任意DBにログイン後、以下のSQLを実行する。

SHOW block_size

block_size
————
8192

max_connections

#max_connections = 100 # (change requires restart)

#max_locks_per_transaction = 64 # min 10 # (change requires restart)

  • 400 + 270 * 64(max_locks_per_transaction) = 17680
  • 100(max_connections) * 17680 = 1768000
max_prepared_transactions

#max_prepared_transactions = 5 # can be 0 or more

#max_locks_per_transaction = 64 # min 10
# (change requires restart)

  • 600 + 270 * 64(max_locks_per_transaction) = 17880
  • 5(max_prepared_transactions) * 17880 = 89400
shared_buffers

BLCKSZが8Kであることが前提です。

つまり、8KB辺りの増加量のため、8KB単位に乗算すると解釈。
なお、PostgreSQL8.2系からshared_buffersで設定する値が、ページ数(容量をブロックサイズで割ったもの)からByte数に変更されているとのこと。

shared_buffers = 24MB

  • 24(shared_buffers) * 1024 / 8(BLCKSZ) = 3072
  • 3072 * 8300 = 25497600
  • 24 * 1024 * 8300 = 203980800(????)
wal_buffers

XLOG_BLCKSZが8Kであることが前提です。

shared_buffers同様、8KB辺りの増加量。

wal_buffers = 64kB

  • 64(wal_buffers) / 8(XLOG_BLCKSZ) * 8200 = 65600
  • 64 * 8200 = 524800
max_fsm_relations

#max_fsm_relations = 1000 # min 100, ~70 bytes each
# (change requires restart)

  • 1000(’max_fsm_relations’) * 70 = 70000
max_fsm_pages

max_fsm_pages = 153600 # min max_fsm_relations*16, 6 bytes each
# (change requires restart)

  • 153600(max_fsm_pages) * 6 = 921600
合計値SHMMAXに必要な値の計算
  • 1768000+89400+25497600+65600+70000+921600+500*1024 = 28924200Byte
  • 28924200 / 1024 / 1024 = 27MB

実行時と計算値の検証

実際にPostgreSQLを起動し、占有する共有メモリの値をipcsで確認する。

ipcs -m

—— 共有メモリセグメント ——–
キー shmid 所有者 権限 バイト nattch 状態
0×00000002 65536 root 600 655360 2
0×00000000 196609 gdm 600 393216 2 対象
0×0052e2c1 262146 postgres 600 29237248 2

  • 29237248 / 1024 /1024 = 27M

多少誤差があるとしてもおおよその数字は計算結果と同じであることが確認できる。

OSのshmmaxの値

デフォルトの値は

cat /proc/sys/kernel/shmmax

でみてもわかるように、33554432Byteつまり32MBになっている。
ためしに、この値を小さめに設定(ここでは27Mを下回る値)にして、PostgreSQLの起動に失敗することを検証する。

[root@hoge]#echo 16777216 > /proc/sys/kernel/shmmax
[postgre@hoge]$pg_ctl start

すると、こんなエラーが発生する。

[postgres@hoge ~]$ FATAL: could not create shared memory segment: Invalid argument
DETAIL: Failed system call was shmget(key=5432001, size=29237248, 03600).
HINT: This error usually means that PostgreSQL’s request for a shared memory segment exceeded your kernel’s SHMMAX parameter. You can either reduce the request size or reconfigure the kernel with larger SHMMAX. To reduce the request size (currently 29237248 bytes), reduce PostgreSQL’s shared_buffers parameter (currently 3072) and/or its max_connections parameter (currently 100).
If the request size is already small, it’s possible that it is less than your kernel’s SHMMIN parameter, in which case raising the request size or reconfiguring SHMMIN is called for.
The PostgreSQL documentation contains more information about shared memory configuration.

DETAIL にも書いてあるように、29237248Byte確保できずに起動に失敗したと表示される。

Failed system call was shmget(key=5432001, size=29237248, 03600).

ふぅ。疲れた。

Posted in OS, server | タグ: , , | 2 Comments »

MacBookのVirtualbox2.1.0上にUbuntu8.10をインストールしてみる

Posted by hikaruworld : 2009 1月 6

先日購入したMacBookにようやくメモリが届いたので、
メモリに余裕も出たことだし、Virtualbox2.1.0にUbuntu8.10をインストールしてみた。

VirtualBoxとUbuntuに関しては、まぁ、適当に。
Ubuntu8.04のVirtualBox用のイメージが用意されていたが、
どうせなので新しいUbuntu8.10を直接インストールしてみる。

VirutalBox2.1.0:http://www.virtualbox.org/
Ubuntu8.10:http://www.ubuntulinux.jp/download/

はまったところは以下。

■Guest Addtionsのインストール。
ターミナルから実行すると、管理者権限が求められたので、su -したが、
Ubuntuはrootのパスワードが設定されていないらしい。

sudo

でやれとのこと。

■マウスの統合機能が働かない。
ここを参考に修正。http://forums.virtualbox.org/viewtopic.php?p=43200
/etc/X11/xorg.confに以下を追加。

Section “InputDevice”
Identifier “Configured Mouse”
Driver “vboxmouse”
Option “CorePointer”
EndSection

■キーボード配列がおかしい
システム→設定→キーボード→レイアウト
キーボードの型式をMacBook/MacBook Pro(Intl)に設定

TODO
■クリップボードのコピペとかはできないのかなぁ?
設定はあるけどうまく動いていない感じ。
■日本語入力と英語入力のキーボードの切り替えキーがうまくいかない。(xorg.confを触ればいいのかな、要調査)

ちょこちょこ気になる部分があるのだけど、これで無料とはありがたい。
次はCentOSでも入れてみるか。。。

しかしメモリが2倍になると快適だー。

Posted in OS | タグ: , , | Leave a Comment »

LinuxにSubversionクライアントをインストール

Posted by hikaruworld : 2009 1月 6

作業ログ。

RHEL4にSubversionクライアントのみ(バージョンは1.5.4)をソースからインストールする方法。

背景としては、ソースに関しては基本的にはSubversionで管理している訳だが、
実サーバにはSubversionがインストールされていないので、ちょっとしたスクリプトの配備時でも、
svn co(あるいは svn export) した後に、ftpであげるというめんどくさい状況に辟易したため。

要するにsvnコマンドがつかればいいのだけど、
実サーバなので余計なものをインストールしたくないし、
クライアントだけインストールする方法がないかなぁと思い探してみた。


基本的には、ここを参考に作業(というかほとんど同じ)。

./configure –includedir=/usr/local \
–without-berkeley-db \
–without-apache \
–without-apxs \
–without-swig \
–with-ssl \
–disable-nls

このconfigureでうまくいかなかった点は、apr及びapr-utilでエラーになった。
subversion1.5.4/INSTALLを読んでみると、
aprとapr-utilがREQUIREDと書いてあったので、

This will place ‘apr’, ‘apr-util’, ‘neon’, and ‘zlib’
directories directly into your unpacked Subversion distribution,
where they will be automatically configured and built by
Subversion’s build process.

上記にしたがって、neonと同様にapr及びapr-utilのディレクトリ名で、subversion1.5.4配下に配備。
※zlibも必須みたいだけど既にインストール済みなので気にしない。

–includedirを/usr/localに指定してconfigureを実行すると、
aprやapr-util、neonが/usr/local配下に展開された(汗
ので、/usr/local/subversion154とディレクトリを切って実行した。

というわけで実際の実行ログは以下。

# wget http://subversion.tigris.org/downloads/subversion-1.5.4.tar.gz
# wget wget http://www.webdav.org/neon/neon-0.28.3.tar.gz
# wget http://ftp.riken.jp/net/apache/apr/apr-1.3.3.tar.gz
# wget http://ftp.riken.jp/net/apache/apr/apr-util-1.3.4.tar.gz
# tar subversion-1.5.4.tar.gz
# tar neon-0.28.3.tar.gz
# tar apr-1.3.3.tar.gz
# tar apr-util-1.3.4.tar.gz
# mv neon-0.28.3 subversion1.5.4/neon
# mv apr-1.3.3 subversion1.5.4/apr
# mv apr-util-1.3.4 subversion1.5.4/apr-util
# mkdir /usr/local/subversion1.5.4
#./configure –includedir=/usr/local/subversion1.5.4 –without-berkeley-db –without-apache –without-apxs –without-swig –with-ssl –disable-nls
# make
# make install


以下、余談であるが、
SubversionのソースファイルのREADMEやINSTALLのドキュメント読めば、
懇切丁寧に書いてあったことに気がついたのはインストールした後である。(;

反省。

2009/1/6 投稿日がおかしかったので修正

Posted in OS, server | タグ: , , | Leave a Comment »

VirtualPCにRHEL4をインストールしてディスプレイの設定を直し忘れる。

Posted by hikaruworld : 2008 11月 16

VirtualPC2007RHEL4をインストールするときに
ディスプレイの設定をミスると(ってかデフォルトのままだと)
ログイン画面が横長になってまともに参照できなくなってしまう。

この件、よく知られている話なんだけど、いつも修正方法を忘れてしまうのでメモしておく。
※いまだに、Linuxになれない自分がいる。

  1. 起動画面でEnter
  2. キーボードでaを押す。
  3. <<space>> 3 でランレベル3で起動(CUIモード)
  4. /etc/x11/xorg.conf内の以下の設定を編集

    DefaultDepth 24

    から

    DefaultDepth 16

  5. reboot

Posted in OS | タグ: , , | Leave a Comment »

エフェメラルポートのバッティング

Posted by hikaruworld : 2008 11月 13

RHEL4上で起動しているTomcatをデフォルトの8080ポートで起動しようとしたら、唐突に以下のエラーで落ちた。

致命的: エンドポイントを初期化中のエラーです
java.net.BindException: Address already in use: JVM_Bind:8080

エラー自体は別段珍しいものではない。Tomcatのプロセスがつかみっぱなしになっているんだろう。
ただ昨日まで起動していたものが、突然起動しなくなるとはどういうことだと思いつつ、
とりあえずnetstatしてみる。

netstat -n –tcp | grep IPアドレス

必要な箇所だけ抜粋。
確かに使っているようだ。でも5432というと。。。

tcp 0 0 10.131.229.25:5432 10.131.229.25:8080 ESTABLISHED

続いて、lsof

lsof -i:8080

またまた、該当箇所のみ

COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
java 19463 root 18u IPv6 3159971 TCP hostname:8080->hostname:postgres (ESTABLISHED)

…変なものが見える。
PostgreSQLとのコネクションを張るのに8080を使っているようだ。

Tomcat上のアプリとDB間はパフォーマンスを考慮して、コネクションプーリングを持ちいているので、
Tomcat起動時にアプリ⇔DB間で、複数コネクションを複数のTCP接続で確立させ、
その際にコネクション分のポートがPostgreSQLによって確保されるわけだ。
おそらくこの際のポートの確保は、OSで設定されているエフェメラルポートから適当に割り振られるようだ。

PostgreSQLのエフェメラルポートの割り当てがどのように行われるかわからないが(挙動的にインクリメントっぽい)、
このコネクション確立時のポート確保とアプリケーションの起動ポートがバッティングする可能性があるようだ。

# この理解であっているのかな?あとで図でも書いてみるか。。

色々検索してみたが、サーバ構築時にエフェメラルポートの設定を考慮する必要があるのは周知の事実らしい。
すみません、存在すら全く知りませんでした。

RHEL4の場合は、以下のように設定すれば任意にエフェメラルポートを設定可能なようなので、
/etc/sysctl.confnet.ipv4.ip_local_port_rangeを以下のように追記した(要再起動)。

net.ipv4.ip_local_port_range = 20000 61000

上限値はメモリに依存するらしい。
なお、RHEL4のデフォルト設定は1024-65000(最大値は忘れた、確かこのあたりだった気がする)らしいが
この件に関するRHELのドキュメントが見つけられなかった。

探し方が悪い???
とりあえず検証してみて期待通りの動作をしているところまでは確認したが、気になるところである。

P.S
次のエントリーで書くが、このバグはコネクションプーリングのdestory漏れという、
あほなミスと重複して発生頻度が上がっていたようだ。(汗

参考リンク:

Posted in OS, Uncategorized | タグ: , , | Leave a Comment »