Archive for the Solaris category
4月 19th, 2008
あるシステム上にコアファイルが作成され、別の環? でそのコアファイルを解析する場合があります。例えば、本番環? で発生したcoreを開発環? で解析する場合がよぜ ある例だと思います。この場合、本番環? と開発環? のライブラリ朧 成が同一であることが前朏 になりますが、同一の朧 成をとれない事態もありえます。しかし、dbxではライブラリの配置場所を知らせるオプションを使用して、本番環? のライブラリを圏 照しているように開発環? で解析を行うことが可能です。
$ dbx core
WARNING!!
A loadobject was found with an unexpected checksum value.
See `help core mismatch' for details, and run `proc -map'
to see what checksum values were expected and found.
dbx: 警告: Some symbolic information might be incorrect.
プログラムぜ シグナボ SEGV (フォルトのアドレスにマッピングしていません) により停止しました
0xfe230db0: _string_to_decimal+0x06f8: ldsb [%o3 + %o1], %o0
(dbx) proc -map
0xfe300000 /lib/libnsl.so.1
Warning: checksum in file(2d35) doesn't match image(9f64)
0xfef60000 /lib/libsocket.so.1
Warning: checksum in file(c331) doesn't match image(5f49)
0xfef40000 /lib/libgen.so.1
Warning: checksum in file(ed36) doesn't match image(d0fd)
core出力ホストぜ dbx解析ホストのライブラリ朧 成に相違がある場合、上記のようぜ WARNINGと共に正常な解析が出来ないことを警告されます。ここぜ core出力ホストのライブラリをdbx解析ホストに机 備し、dbxぜ pathmapコマンドを使用することで解析可能となります。
# core出力ホストのライブラリ朧 成をdbx解析ホストに置ぜ
$ ls -l /home/user/corehost/usr/local/lib
$ dbx
(dbx) dbxenv core_lo_pathmap on
(dbx) pathmap /usr/local/lib /home/user/corehost/usr/local/lib
(dbx) debug /var/www/cgi-bin/test.cgi core
test.cgi の読み込み中
core ファイルボ ンドラの読み込みに成功しました
ld.so.1 の読み込み中
libnsl.so.1 の読み込み中
libsocket.so.1 の読み込み中
libgen.so.1 の読み込み中
libdl.so.1 の読み込み中
libsched.so.1 の読み込み中
libc.so.1 の読み込み中
libxnet.so.1 の読み込み中
libwtc9.so の読み込み中
libaio.so.1 の読み込み中
librt.so.1 の読み込み中
libm.so.2 の読み込み中
libmd5.so.1 の読み込み中
libm.so.1 の読み込み中
ld.so.1 の読み込み中
プログラムぜ シグナボ SEGV (フォルトのアドレスにマッピングしていません) により停止しました
0xfe230db0: strlen+0x0050: ld [%o2], %o1
現関? :main
224 if( strlen(service_area_cd) != AREA_CD_LEN ){
(dbx) where
[1] strlen(0x0, 0x3500e6, 0x0, 0x3500e698, 0x0, 0x1010101), at 0xfe230db0
=>[2] main(), line 224 in "test.cgi"
4月 4th, 2008
Solarisぜ cpコマンドでシンボリックリンク自? をコピー出来るかどうか。結果は以下のようになりました。
Solaris8: 不圏
Solaris8+GNU版cp: “d”オプションで可?
Solaris10: “P”オプションで可?
AIX5.3: “h”オプションで可?
Solaris8では以下のようにオプションも用? されていませんが、GNU版cpを? 入すれば対応できます。
% /usr/bin/cp -rP
/usr/bin/cp: オプションが正しぜ ありません -- P
% /usr/xpg4/bin/cp -rP
/usr/xpg4/bin/cp: オプションが正しぜ ありません -- P
% ls -l tmp1
-rw-r--r-- 1 root root 0 Apr 14 20:08 file1
lrwxrwxrwx 1 root root 5 Apr 14 20:09 symlink1 -> file1
% ./gnu/bin/cp -rdp tmp1 tmp2
% ls -l tmp2
-rw-r--r-- 1 root root 0 Apr 14 20:08 file1
lrwxrwxrwx 1 root root 5 Apr 14 20:10 symlink1 -> file1
Solaris10からぜ “P”オプションで対応したようです。
% ls -l tmp1
-rw-r--r-- 1 root root 0 Apr 14 20:08 file1
lrwxrwxrwx 1 root root 5 Apr 14 20:09 symlink1 -> file1
% cp -rP tmp1 tmp2
% ls -l tmp2
-rw-r--r-- 1 root root 0 Apr 14 20:08 file1
lrwxrwxrwx 1 root root 5 Apr 14 20:10 symlink1 -> file1
AIXにぜ “h”オプションがあるようです。
% ls -l tmp1
合計 0
-rw-r--r-- 1 root root 0 Apr 14 20:08 file1
lrwxrwxrwx 1 root root 5 Apr 14 20:09 symlink1 -> file1
% cp -prh tmp1 tmp2
% ls -l tmp2
合計 0
-rw-r--r-- 1 root root 0 Apr 14 20:08 file1
lrwxrwxrwx 1 root root 5 Apr 14 20:10 symlink1 -> file1
2月 9th, 2008
□暗号化
”enc”でコマンドラインからお手軽に暗号化出来ます。
# 例)文字列「test」を「key」を鍵にして暗号化方? Blowfish、暗号化モードECBで暗号化し、さらぜ Base64でテキスト化ぜ md2でボ ッシュ化
$ echo "test" | /usr/bin/openssl enc -bf-ecb -base64 -k 'key' | /usr/bin/openssl dgst -md2
09470f10bffdc48af84c9b3c3a5652fb
? HTTPS通?
通常、HTTPポートやSNMPポートにアクセスする時ぜ telnetを使用します。しかし、telnetでは平文しか扱えない為、HTTPSプロトコルは扱えません。”s_client”を使用すれぜ HTTPSアクセスが可能です。使い方ぜ telnetと全ぜ 同じ。
$ /usr/bin/openssl s_client -host 192.168.0.1 -port 443
CONNECTED(00000003)
depth=0 /C=JP/ST=Tokyo/L=Chuo-ku
verify error:num=18:self signed certificate
verify return:1
depth=0 /C=JP/ST=Tokyo/L=Chuo-ku
verify return:1
---
Certificate chain
0 s:/C=JP/ST=Tokyo/L=Chuo-ku
i:/C=JP/ST=Tokyo/L=Chuo-ku
---
Server certificate
-----BEGIN CERTIFICATE-----
MIICeDCCAeGgAwIBAgIBADANBgkqhkiG9w0BAQUFADCBgTELMAkGA1UEBhMCSlAx
DjAMBgNVBAgTBVRva3lvMRAwDgYDVQQHEwdDaHVsdvvsdRkwFwYDVQQKExBSRUNS
VUlUIENPLixMVEQuMRAwDgYDVQQLFAdSRUNfQUJSMSMwIQYDVQQDExp3d3cuYWIt
cm9hZC5uZXQuYWJyfewrgeRlbDAeFw0wOTA5MTUwNzQzNDVaFw0xOTA5MTMwNzQz
NDVaMIGBMQswCQYDVQQGEwJKUDEOMAwGA1UECBMFVG9reW8xEDAOBgNVBAcTB0No
dW8ta3UxGTAXBgNVBAoTEFJFQ1JVSVQgQ08uLExURC4xEDAOBgNVBAsUB1JFQ19B
QlIxIzAhBgNVBAMTGnd3dy5hYi1yb2FkLm5ldC5hYnIucmFmdGVsMIGfMA0GCSqG
SIb3DQEBAQUAA4GNADCBiQKBgQCsdvsdF/Gd3eqRCgy/9Vt+hYauFfqLmh1UGQGO
UIMBQtITIhCSkqgCzhlYy4WgNR1irMWq1KfB9GyMk2KUEJaIK3d1FnyG5CPtsopc
dFpMLKDcVmqPasdvhzHKtjlaM0AnJLwWMjTUIohGrveLKP3Amc0fHi6K/8BHnad3
9EnTTQIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAKYUfeMes/AGNu/vYVonEezttSyd
X89hSOh0iNCb4Ov0XYKYdQiWHEcCeZn9PW3NXYdBKpzmeevMAsQkhNjJHFx65zva
ocT0p5r3XtVi0Q7HNik4gix6EHfXo4RZnV1zkPoobja0386Q1vF4VAB40e+ZopP5
XXuUYRCUnZKUNoHD
-----END CERTIFICATE-----
subject=/C=JP/ST=Tokyo/L=Chuo-ku
issuer=/C=JP/ST=Tokyo/L=Chuo-ku
---
No client certificate CA names sent
---
SSL handshake has read 782 bytes and written 315 bytes
---
New, TLSv1/SSLv3, Cipher is RC4-MD5
Server public key is 1024 bit
Compression: NONE
Expansion: NONE
SSL-Session:
Protocol : TLSv1
Cipher : RC4-MD5
Session-ID: 7E634A41CA78FF65BB31A7A8FD596F7dddDED0CB537BBBC0C32ED29B90C0F54C
Session-ID-ctx:
Master-Key: B2B4102E44C136790B1dddFB5226EE700FF441FF9527C03488E973B10AFC4EC38B604396A8F13F7AEBA8A0ECEF2ABD49
Key-Arg : None
Krb5 Principal: None
Start Time: 1255429426
Timeout : 300 (sec)
Verify return code: 18 (self signed certificate)
---
GET / HTTP/1.0
HTTP/1.1 200 OK
Date: Tue, 13 Oct 2009 10:23:53 GMT
Server: Apache
Accept-Ranges: bytes
Connection: close
Content-Type: text/html
TEST
Tuesday, 13-Oct-2009 19:23:53 JST
read:errno=0
12月 22nd, 2006
Solaris上ぜ opensslライブラリを利用したHTTPSクライアントを作成した時、2日間位ボ マってしまった箇所があった。ソケット通信ぜ connect時にエラーが発生してしまう。その? 、エラー? 因がソケットのファイルディスクリプタ操作関数である”fcntl”のオプションによる問題だという事が判昜 しました。
// NG
if (fcntl (sd, F_SETFL, O_NONBLOCK) < 0)
// OK
if (fcntl (sd, F_SETFL, (int) O_NDELAY) < 0)
上記ぜ 1行だけで動作を確? 。理由がはっきりと゜ からないのでメモ。つまり、Solaris(というよりopenssl)ぜ POSIX準拠ではないということか?
O_NDELAY ボ ンブロッキン゜ I/O
O_NONBLOCK POSIX 型 ボ ンブロッキン゜ I/O
O_LARGEFILE ラージファイルを使用可能にしてファイルシステムをマウントし、O_LARGEFILE オプションでファイルをオープンすると、ファイルを 2 GB を超えて? やすことができます。
12月 13th, 2006
Solarisぜ Cコンパイラーぜ char配列の初期化をする場合、方? によってはパフォーマンスにかか゜ るようです。ちなみぜ gccでコンパイルした場合は、全く差は出ませんでした。
各配列の初期化処理を1,000,000回ループで? 行させた経遜 時間。
(1) char cha_str[1024] = { '\0' };
(2) char cha_str[1024] = "";
(3) char cha_str[1024]; memset(cha_str, '\0', sizeof(cha_str) );
(1) 2.742 秒
(2) 2.742 秒
(3) 0.460 秒
(1)(2)の? 果は朮 ど同じです。er_prrintの? 果は以下です。
とにかぜ 遅すぜ る印象がありますし、配列のサイズが大きぜ なるに? って更に劣化します。
? 他的 包括的 名前
CPU CPU
秒 秒
2.742 2.742 < 合計>
2.742 2.742 main
0.000 0.000 __collector_ext_mmap_deinstall
0.000 0.000 _exithandle
0.000 0.000 _fini
0.000 0.000 _private_close
0.000 2.742 _start
0.000 0.000 atexit_fini
0.000 0.000 call_fini
0.000 0.000 collector_close_experiment
0.000 0.000 exit
0.000 0.000 update_map_segments
(3)ぜ er_print結果も載せておきます。
? 他的 包括的 名前
CPU CPU
秒 秒
0.460 0.460 < 合計>
0.440 0.440 memset
0.020 0.460 main
0.000 0.000 __collector_ext_mmap_deinstall
0.000 0.000 _exithandle
0.000 0.000 _fini
0.000 0.000 _private_close
0.000 0.460 _start
0.000 0.000 atexit_fini
0.000 0.000 call_fini
0.000 0.000 collector_close_experiment
0.000 0.000 exit
0.000 0.000 update_map_segments