2012-05-13

2012-05-06

ssl接続エラー(ruby)

rubyをrvmで更新したら、SSL接続できなくなったので改善メモ
SSL操作中にこんなエラーが発生したら...
Connection reset by peer - SSL_connect (Errno::ECONNRESET)
  1. rvm pkg install opensslでOpenSSLをインストール
  2. 必要ならRubyを再コンパイル:rvm reinstall 1.9.3
  3. 認証局証明書をダウロードしてSSLではそちらを使うようにする
  4. wget http://curl.haxx.se/ca/cacert.pem
    export  SSL_CERT_FILE=$HOME/cacert.pem
    
で解決できる。
どうやら、sslのセキュリティアップデートに伴った処置らしい。

(via: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed
rvm on ubuntu 11.10
node.js の make でこける)

2012-05-04

kdump取得結果

bt
PID: 4205   TASK: ffff880207818000  CPU: 1   COMMAND: "threaded-ml"
 #0 [ffff880202263c90] machine_kexec at ffffffff8103836a
 #1 [ffff880202263d00] crash_kexec at ffffffff810b4358
 #2 [ffff880202263dd0] oops_end at ffffffff8165d628
 #3 [ffff880202263e00] pgtable_bad at ffffffff81642a13
 #4 [ffff880202263e40] do_page_fault at ffffffff816602ce
 #5 [ffff880202263f50] page_fault at ffffffff8165cbf5
    RIP: 00007f1f07078c9f  RSP: 00007f1efe8b2980  RFLAGS: 00010202
    RAX: 00007f1f0898bba0  RBX: 00007f1f183fa000  RCX: 00007f1efe8b2a48
    RDX: 00007f1efe8b2a44  RSI: 00007f1efa302000  RDI: 00007f1f0b4a5660
    RBP: 00007f1efa302000   R8: 00007f1efe8b2a30   R9: 00007f1efe8b2a38
    R10: 0000000000000000  R11: 0000000000000000  R12: 00007f1efe8b2a48
    R13: 00007f1efe8b2a44  R14: 00007f1efe8b2a30  R15: 0000000000000003
    ORIG_RAX: ffffffffffffffff  CS: 0033  SS: 002b
log
[ 9390.534891] threaded-ml: Corrupted page table at address 7f1f183fa008
[ 9390.534896] PGD 1f8cd6067 PUD 1f8cd5067 PMD 1c3b88067 PTE 80006f01f3ac9067
[ 9390.534903] Bad pagetable: 000d [#1] SMP 
[ 9390.534907] CPU 1 
[ 9390.534908] Modules linked in: ip6table_filter ip6_tables ebtable_nat ebtables bnep rfcomm ipt_MASQUERADE iptable_nat nf_nat nf_conntrack_ipv4 nf_defrag_ipv4 xt_state nf_conntrack ipt_REJECT bluetooth xt_CHECKSUM iptable_mangle xt_tcpudp iptable_filter ip_tables x_tables bridge stp kvm_intel kvm parport_pc ppdev binfmt_misc dm_crypt nvidia(P) snd_hda_codec_realtek snd_hda_intel snd_hda_codec snd_hwdep snd_pcm snd_seq_midi snd_rawmidi snd_seq_midi_event snd_seq snd_timer snd_seq_device psmouse joydev mxm_wmi snd serio_raw wmi soundcore i7core_edac edac_core snd_page_alloc mac_hid lp parport firewire_ohci r8169 pata_jmicron firewire_core crc_itu_t floppy usbhid hid
[ 9390.534969] 
[ 9390.534973] Pid: 4205, comm: threaded-ml Tainted: P           O 3.2.0-24-generic #37-Ubuntu MICRO-STAR INTERNATIONAL CO.,LTD MS-7583/P55-GD65 (MS-7583)  
[ 9390.534979] RIP: 0033:[<00007f1f07078c9f>]  [<00007f1f07078c9f>] 0x7f1f07078c9e
[ 9390.534986] RSP: 002b:00007f1efe8b2980  EFLAGS: 00010202
[ 9390.534989] RAX: 00007f1f0898bba0 RBX: 00007f1f183fa000 RCX: 00007f1efe8b2a48
[ 9390.534992] RDX: 00007f1efe8b2a44 RSI: 00007f1efa302000 RDI: 00007f1f0b4a5660
[ 9390.534995] RBP: 00007f1efa302000 R08: 00007f1efe8b2a30 R09: 00007f1efe8b2a38
[ 9390.534998] R10: 0000000000000000 R11: 0000000000000000 R12: 00007f1efe8b2a48
[ 9390.535001] R13: 00007f1efe8b2a44 R14: 00007f1efe8b2a30 R15: 0000000000000003
[ 9390.535005] FS:  00007f1efe8b3700(0000) GS:ffff88022fc40000(0000) knlGS:0000000000000000
[ 9390.535008] CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b
[ 9390.535011] CR2: 00007f1f183fa008 CR3: 00000001ce38f000 CR4: 00000000000006e0
[ 9390.535014] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
[ 9390.535018] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
[ 9390.535021] Process threaded-ml (pid: 4205, threadinfo ffff880202262000, task ffff880207818000)
[ 9390.535023] 
[ 9390.535025] RIP  [<00007f1f07078c9f>] 0x7f1f07078c9e
[ 9390.535029]  RSP <00007f1efe8b2980>
ps
2808      1   1  ffff8801d6e4ade0  IN   3.3 1239756 298300  firefox
4205   2808   1  ffff880207818000  RU   2.3 1281412 206972  threaded-ml

kdumpをubuntuで使ってみる

  1. 必要なもの
  2. ダンプするのに必要
    • kdump-tools
    • kexec-tools
    • linux-crashdump (UbuntuHPではこれだけでいいと記載..)
    解析するのに必要
    • crash
    • デバッグ情報が付加されたカーネル
  3. 設定する
    • /boot/grub/menu.lstを編集する
    • カーネルの起動オプションに、crashkernelを追加する。
      カーネルの再コンパイルは必要なし。
      /proc/iomemをみて、サイズとオフセットを指定する。(PC、カーネルの種類やディストリビューションによって異なるはず)
      ubuntu12.04は自動で設定してくれるかもしれない。
    • kdump-toolsの自動起動設定をする。
    • /etc/default/kdump-toolsを編集してダンプを有効にする。 セカンドカーネルを指定しないと、デフォルトのカーネルが使用されるようだ。 (デフォルトのカーネルが2重で読み込まれるイメージ)
      USE_KDUMP=1
      
      service命令を使うなどして、kdump-toolsを自動起動するようにしておく。 手動で起動するようにしておいても問題ない。
    • PCの再起動
    • カーネルオプションを有効にするため、再起動する。 kdumpが自動起動の場合/proc/iomemはこのようになる。
        01000000-016699ab : Kernel code
        016699ac-01ce4fff : Kernel data
        01dd3000-01f28fff : Kernel bss
        2e000000-35ffffff : Crash kernel
      
      失敗している場合は、/var/log/dmesgを見て、オプション文字列の打ち間違いや、確保しているサイズ、オフセットの確認する。
  4. ハングアップさせてみる。
  5. SysReqコマンドで擬似ハングアップができます。 全画面が停止状態になり、ディスクアクセスが始まります。(それなりに長い)
    Xorgを使用している場合は、(かなり動作が遅くなっていますが)平然とXorgが起動し始めたりします。
    ダンプが終わると、自動的に再起動します。
  6. 解析してみる
  7. 実は、デバッグシンボル付きのカーネルが必要。 ここから 解析に使うのカーネルを(パッケージから)インストール。
    これでようやく解析できる。
    sudo crash -S  /usr/lib/debug/boot/vmlinux-3.2.0-24-generic  dump.201205030221
    

syntaxhighlighterのテスト

function foo()
{
}