Linux での CPU 使用率の steal (st) 値

※ このエントリは、はてなグループ終了に伴う、サブブログからの引越エントリ(2009/09)です。
※ 情報が古い可能性もありますので、ご留意ください。



top とか vmstat で眺めていると st (steal) という項目がある。

これは、kernel 2.6.16.21 以降で新しく加わった項目で、ゲスト OS がリソース要求を行ったにもかかわらず、CPU リソースを割り当ててもらえなかった時間の割合らしい。

●steal値で把握できるCPUリソースの状況

 この状態は、vmstatコマンドを使えば容易に確認できます。usr列、sys列の値が合計で50%までしか上昇せず、代わりにsteal列に残りの50%近い値が表示されると思います。

  steal列には、ゲストOSがリソース要求を行ったにもかかわらずCPUリソースを割り当ててもらえなかった時間の割合が表示されます。steal列に 0%以外の値が表示されている場合はCPU利用率閾値設定が行われているか、ほかのゲストOSあるいはホストOSが同時にCPUリソースを要求して「取り合い」の状態になっていることが考えられます。

 特に閾値を設定していないにもかかわらずこのstealの値が高いようであれば、そのホストサーバは全体として過負荷になっているか、前述のCPUマッピング設定がアンバランスになっている可能性が高いと判断できます。

http://www.atmarkit.co.jp/flinux/rensai/xen05/xen05b.html

/etc/sudoers に記述が無い設定が効いている・・・

※ このエントリは、はてなグループ終了に伴う、サブブログからの引越エントリ(2012/02)です。
※ 情報が古い可能性もありますので、ご留意ください。



と思ったら、LDAP の方で設定されていた。
/etc/ldap.conf には、以下の文字列が。

sudoers_base ou=SUDOers,ou=xxx,dc=xxx,dc=xxx,dc=jp


そこで、ldapsearch で確認してみると、以下のとおり。

$ ldapsearch -h xxx.xxx.xxx.xxx -x -b 'ou=SUDOers,ou=xxx,dc=xxx,dc=xxx,dc=jp'
# extended LDIF
#
# LDAPv3
# base <ou=SUDOers,ou=xxx,dc=xxx,dc=xxx,dc=jp> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#

# SUDOers, xxx, xxx.xxx.jp
dn: ou=SUDOers,ou=xxx,dc=xxx,dc=xxx,dc=jp
objectClass: organizationalUnit
objectClass: top
ou: SUDOers

# defaults, SUDOers, xxx, xxx.xxx.jp
dn: cn=defaults,ou=SUDOers,ou=xxx,dc=xxx,dc=xxx,dc=jp
cn: defaults
description: Default sudoOption's go here
objectClass: top
objectClass: sudoRole
sudoOption: env_reset

# admin_name, SUDOers, xxx, xxx.xxx.jp
dn: cn=admin_name,ou=SUDOers,ou=xxx,dc=xxx,dc=xxx,dc=jp
cn: admin_name
objectClass: top
objectClass: sudoRole
sudoHost: ALL
sudoRunAsUser: ALL
sudoOption: !authenticate
sudoUser: admin_name
sudoCommand: ALL

・・・・・以下省略・・・・・

なるほど。

参考

sudoUser
 次のうちのいづれか。ユーザ名、uid ('#' が頭に付く)、 Unix グループ名 ('%' が頭に付く)、
 ユーザのネットグループ名 ('+' が頭に付く)。


sudoHost
 次のうちのいづれか。ホスト名、IP アドレス、ネットワークアドレス、ホストのネットグループ名 ('+' が頭に付く)。
 ALLという特別な値はいかなるホストにもマッチする。


sudoCommand
 Unix のコマンド。コマンドライン引数を付けてもよく、glob 文字 (ワイルドカードとも言う) を含んでいてもよい。
 ALLという特別な値は、いかなるコマンドにもマッチする。コマンドに感嘆符 '!' を接頭辞として付けると、
 ユーザにそのコマンドの実行を禁じることになる。


sudoOption
 働きは、前述のグローバルオプションと同じだが、それが属している sudoRoleエントリに対してのみ効果がある。


sudoRunAsUser
 変身対象となるユーザ名か、uid ('#' が頭に付く)。あるいは、変身対象ユーザをリストに含む Unix のグループ名か
 ('%' が頭に付く)、ユーザのネットグループ名 ('+' が頭に付く)。特別な値 ALLは、いかなるユーザにもマッチする。


sudoRunAsGroup
 変身対象となる Unix グループ名 か gid ('#' が頭に付く)。特別な値 ALLはいかなるグループにもマッチする。

http://linuxjm.sourceforge.jp/html/sudo/man5/sudoers.ldap.5.html

LDAP を使って sudo の設定を参照するときの詳細

LDAP を使って sudo の設定を参照するとき、LDAP の問い合わせは sudo の実行ごとにたった二回か三回行われるだけである。一回目の問い合わせは、グローバル・オプションを解析するために行われる。二回目の問い合わせは、sudo を実行するユーザのユーザ名や所属グループに対応するエントリを見つけるためだ (特別なタグ ALL が何にでもマッチするのは、この場合も同様である)。ユーザ名やグループに対応するエントリが得られなかった場合は、三回目の問い合わせが行われ、ユーザのネットグループを含んでいるすべてのエントリーを取得して、問題のユーザがそのどれかに属していないかをチェックする。


LDAP と non-LDAP の sudo 設定の相違点

LDAP を使用する場合、sudo の設定の処理方法に /etc/sudoers の場合とは微妙な違いがいくつかある。たぶん最大の違いは、RFC に書いてあるとおり、 LDAP の順序づけは不定なので、属性やエントリが何らかの決まった順序で返されることを期待できないということだろう。ただし、あるエントリーにコマンドに関して相反するルールがある場合は、否定する方が優先される。これはパラノイア的動作と言われるものだ (もっとも、それが一番明示的なマッチだとはかぎらないのだが)。

http://linuxjm.sourceforge.jp/html/sudo/man5/sudoers.ldap.5.html

nsswitch.conf の設定

ビルド時に無効にしないかぎり、sudo はネームサービス・スイッチ・ファイル /etc/nsswitch.conf を調べて、sudo の設定を参照する順番を決める。すなわち、/etc/nsswitch.conf に sudoers: という文字列に始まる行を探し、その行によって参照順を決定するのである。気をつけてほしいのは、sudo は参照中、マッチする項目に一度出会ったからと言って、そこで参照を終わりにしないことだ。しかも、後でマッチしたものが前にマッチしたものよりも優先されるのである。

以下の参照元が有効である。

files       /etc/sudoers から sudo の設定を読み込む
ldap        LDAP から sudo の設定を読み込む

なお、 [NOTFOUND=return]
の記述があると、先行する参照元にユーザが見つからなかった場合、参照を中断することになる。

http://linuxjm.sourceforge.jp/html/sudo/man5/sudoers.ldap.5.html

umount できない使用中のデバイスを確認する

※ このエントリは、はてなグループ終了に伴う、サブブログからの引越エントリ(2011/12)です。
※ 情報が古い可能性もありますので、ご留意ください。



umount しようとした場合、以下のエラーで失敗したことが一度くらいありますよね。

  • デバイスを使用中です
  • device is busy
  • デバイスがビジーです
# umount /mnt
umount /mnt: デバイスがビジーです。
       (このデバイスがプロセスによって使われているのであれば、lsof(8)やfuser(1)を使って調査するのが有益かもしれません)

最近の Ubuntu はご丁寧に、どうやって調査すればいいかまで教えてくれる。

# fuser -muv /mnt
                     USER        PID ACCESS COMMAND
/mnt:                root     kernel mount (root)/media/44DA-6855
                     nami       4863 ..c.. (nami)bash

こんな感じで、誰が・どのプロセスが、使用しているかを確認することができます。

↑の通り、fuser でもいいし、"lsof /mnt" とかでもいけるはず。

/etc/fstab の記述ミスで Linux OS が起動しなくなった場合

※ このエントリは、はてなグループ終了に伴う、サブブログからの引越エントリ(2012/07)です。
※ 情報が古い可能性もありますので、ご留意ください。



fstab に記述しているデバイスが見つからない・壊れててアクセスできない場合とかに、メンテナンスモードで "/etc/fstab" を編集しようとしても、読み込み専用でマウントされているので編集できない。

そんな場合は、、、

# mount -o remount,rw /

こんな感じで、書き込みもできるようにマウントしなおすとOK。

"Linux Kernel in a Nutshell" と "Linux Device Drivers, Third Edition" の 書籍 PDF

※ このエントリは、はてなグループ終了に伴う、サブブログからの引越エントリ(2012/03)です。
※ 情報が古い可能性もありますので、ご留意ください。



少し古いけど、無料で公開されています。(English)

Intel のネットワークアダプタのドライバを RPM にしてアップデートを実施

※ このエントリは、はてなグループ終了に伴う、サブブログからの引越エントリ(2011/03)です。
※ 情報が古い可能性もありますので、ご留意ください。



FUJITSU さんの RX200S6 に、CentOS 5 を入れて動かしていたのですが、先日ハングアップしてしまう現象があったので、ドライバのアップデートをした。

RX200 は dmidecode で確認する限り

Port Connector Information
        Internal Reference Designator: Intel 82575EB CH 1
        Internal Connector Type: None
        External Reference Designator: LAN-1/Management
        External Connector Type: RJ-45
        Port Type: Network Port

な感じで、インテル製のオンボード NIC なので、下記のページから最新版のドライバをダウンロードして、rpm 化してからインストールした。


ちなみに、今日 (2011/03) 時点の最新版のバージョンは 2.4.13

ダウンロードして展開

# wget http://downloadmirror.intel.com/13663/eng/igb-2.4.13.tar.gz
# tar zxvf igb-2.4.13.tar.gz

ビルドして RPM にする

# cd igb-2.4.13
# cat igb-2.4.13/igb.spec

一応、SPEC ファイルを確認して・・・(別に省略しても良いです)

# cp igb-2.4.13/igb.spec /usr/src/redhat/SPECS/
# cp igb-2.4.13.tar.gz /usr/src/redhat/SOURCES/

SPEC ファイルと展開元 (ダウンロードした) のファイルをコピー (もしくは移動)。

# cd /usr/src/redhat/SPECS/
# ls
igb.spec

ちゃんと SPEC ファイルがあるのか確認して・・・

# rpmbuild -ba igb.spec

RPMを作ります!

# cd /usr/src/redhat/

# tree RPMS/
RPMS/
|-- noarch
`-- x86_64
    `-- igb-2.4.13-1.x86_64.rpm

2 directories, 1 file


# tree SRPMS/
SRPMS/
`-- igb-2.4.13-1.src.rpm

0 directories, 1 file

-ba オプションなので、rpm と srpm ができているはず。

ドライバのインストール

# rpm -ivh igb-2.4.13-1.x86_64.rpm
準備中...                ########################################### [100%]
   1:igb                    ########################################### [100%]
original pci.ids saved in /usr/local/share/igb

完成した RPM をインストールしてやれば完了。その後リブート。
元のファイルは "/usr/local/share/igb" あたりにあった。

インストール前

# dmesg | grep Intel

・・・省略・・・

Intel(R) Gigabit Ethernet Network Driver - version 1.3.16-k2
Copyright (c) 2007-2009 Intel Corporation.
igb 0000:01:00.0: Intel(R) Gigabit Ethernet Network Connection
igb 0000:01:00.1: Intel(R) Gigabit Ethernet Network Connection

ドライバインストール後

# dmesg | grep Intel

・・・省略・・・

Intel(R) Gigabit Ethernet Network Driver - version 2.4.13
Copyright (c) 2007-2010 Intel Corporation.
igb 0000:01:00.0: Intel(R) Gigabit Ethernet Network Connection
igb 0000:01:00.1: Intel(R) Gigabit Ethernet Network Connection

Fusion-io ioDrive / ioDrive2 のアレコレ

※ このエントリは、はてなグループ終了に伴う、サブブログからの引越エントリ(2010/11, 2011/02, 2012/05, 06, 07)です。
※ 情報が古い可能性もありますので、ご留意ください。


Fusion-io ioDrive Duo で "device busy."


検証サーバに ioDrive Duo を刺して触ろうとしていた時のこと。

早速、デタッチして一応フォーマットしようと思ったら、、、怒られる。

# fio-detach /dev/fct0
Detaching: [====================] (100%) /
Error: failed to detach /dev/fct0: device busy.

あぁ、↓の方で記載している "Failed to communicate with device." が出た時のパターンかなと思いきや、それも違った。


ちょっと調べると、、、おや?

# ls /dev/md*
md/    md127

見慣れぬ RAID デバイスが・・・。昔誰かが使った時に組まれたものっぽい。

# mdadm --detail /dev/md127
/dev/md127:
        Version : 0.90
  Creation Time : Thu Feb  2 11:13:34 2012
     Raid Level : raid0
     Array Size : 625001472 (596.05 GiB 640.00 GB)
   Raid Devices : 2
  Total Devices : 2
Preferred Minor : 127
    Persistence : Superblock is persistent

    Update Time : Thu Feb  2 11:13:34 2012
          State : clean
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0

     Chunk Size : 256K

           UUID : b734xxxx:b4b4xxxx:1fb1xxxx:91c5xxxx
         Events : 0.1

    Number   Major   Minor   RaidDevice State
       0     252        0        0      active sync   /dev/fioa
       1     252       16        1      active sync   /dev/fiob

ほほう。Duo だからね。誰かが組んだんだろう。

# mdadm --manage /dev/md127 --stop
mdadm: stopped /dev/md127

というわけで、stop させて、

# fio-detach /dev/fct0
Detaching: [====================] (100%) /

デタッチしましたとさ。ここから fio-format してスッキリ。

Fujitsu RX200 S7 で Fusion-io ioDrive Duo

PCI バスの帯域幅的にもいけそうだ!

# hdparm -t /dev/md0

/dev/md0:
 Timing buffered disk reads:  4744 MB in  3.00 seconds = 1580.78 MB/sec
# fio-pci-check

Root Bridge PCIe 8750 MB/sec needed max

      Bridge 00:02.02 (04-08)
          Needed 2000 MB/sec Avail 4000 MB/sec

            Bridge 04:00.00 (05-08)
                Needed 2000 MB/sec Avail 4000 MB/sec
              * Correctable Error(s): Detected
              * Unsupported Request(s): Detected
                Clearing Errors
                Slot Power limit: 25.0W (25000mw)

                  Bridge 05:05.00 (07-07)
                      Needed 1000 MB/sec Avail 1000 MB/sec
                    * Correctable Error(s): Detected
                    * Unsupported Request(s): Detected
                      Clearing Errors

                        ioDrive 07:00.0 (1005) Firmware 107053
                            Slot Power limit: 25.0W (25000mw)

                  Bridge 05:06.00 (08-08)
                      Needed 1000 MB/sec Avail 1000 MB/sec
                    * Correctable Error(s): Detected
                    * Unsupported Request(s): Detected
                      Clearing Errors

                        ioDrive 08:00.0 (1005) Firmware 107053
                            Slot Power limit: 25.0W (25000mw)

Fusion-io ioDrive2 を自動でアタッチ (attach) させないようにする

"/etc/modprobe.d/iomemory-vsl.conf" を編集して、以下を設定すると、自動アタッチが無効になる。

options iomemory-vsl auto_attach=0

Fusion-io ioDrive/ioDrive2 使用時、PCI スロットの速度確認

fio-pci-check コマンドで。

ioDrive Duo (2.2.3 build 66)

# fio-pci-check

Root Bridge PCIe 8000 MB/sec needed max

      Bridge 00:07.00 (06-0a)
          Needed 2000 MB/sec Avail 4000 MB/sec

            Bridge 06:00.00 (07-0a)
                Needed 2000 MB/sec Avail 4000 MB/sec
                Slot Power limit: 25.0W (25000mw)

                  Bridge 07:05.00 (09-09)
                      Needed 1000 MB/sec Avail 1000 MB/sec

                        ioDrive 09:00.0 Firmware 101583
                            Slot Power limit: 25.0W (25000mw)

                  Bridge 07:06.00 (0a-0a)
                      Needed 1000 MB/sec Avail 1000 MB/sec

                        ioDrive 0a:00.0 Firmware 101583
                            Slot Power limit: 25.0W (25000mw)

ioDrive2 (3.1.1 build 172)

# fio-pci-check

Root Bridge PCIe 14000 MB/sec needed max
    ERROR: invalid link speed (value 0x0)
    ERROR: invalid link width (value 0x0)

      Bridge 00:03.00 (04-04)
          Needed 2000 MB/sec Avail 2000 MB/sec
          ERROR: invalid maximum link speed (0x3)

            ioDrive 04:00.0 Firmware 107004
                Slot Power limit: 25.0W (25000mw)

なんか足りないのか奇麗に取りきれていない・・・が。

Fusion-io ioDrive2 で "Failed to communicate with device." が出た時

デバイスをデタッチしようとした時などに

# fio-detach /dev/fioa
Detaching: [====================] (100%)
Error: Device '/dev/fioa' had an error while detaching. Failed to communicate with device.

と出る時は、それ物理ボリュームのデバイスが指定できてないかも。

# fio-detach /dev/fct0
Detaching: [====================] (100%) /
 fioa - detached.

こんな感じで指定しましょう。

でも、まだ出ちゃう時とかは、、、

# fio-detach /dev/fct0
Detaching: [====================] (100%)
Error: Device '/dev/fct0' had an error while detaching. Internal failure.

まだマウントしたままとかで、使われている状態のままかも。umount できているか確認しましょう。

Fusion-io ioDrive2 の fio-status

# fio-status -a

Found 1 ioMemory device in this system
Fusion-io driver version: 3.1.1 build 172

Adapter: Single Controller Adapter
        Fusion-io ioDrive2 1.205TB, Product Number:F00-001-1T20-CS-0001, FIO SN:XXXXXXX91
        ioDrive2 Adapter Controller, PN:XXXXXXXXX09
        External Power: NOT connected
        PCIe Bus voltage: avg 12.00V
        PCIe Bus current: avg 0.77A
        PCIe Bus power: avg 9.20W
        PCIe slot available power: 25.00W
        PCIe negotiated link: 4 lanes at 5.0 Gt/sec each, 2000.00 MBytes/sec total
        Connected ioMemory modules:
          fct0: Product Number:F00-001-1T20-CS-0001, SN:XXXXXXX91

fct0    Attached as 'fioa' (block device)
        ioDrive2 Adapter Controller, Product Number:F00-001-1T20-CS-0001, SN:XXXXXXX91
        ioDrive2 Adapter Controller, PN:XXXXXXXXX09
        SMP(AVR) Versions: App Version: 1.0.9.0, Boot Version: 0.0.3.1
        Powerloss protection: protected
        PCI:04:00.0, Slot Number:2
        Vendor:1aed, Device:2001, Sub vendor:1aed, Sub device:2001
        Firmware v6.0.0, rev 107004 Public
        1205.00 GBytes block device size
        Format: v500, 2353515625 sectors of 512 bytes
        PCIe slot available power: 25.00W
        PCIe negotiated link: 4 lanes at 5.0 Gt/sec each, 2000.00 MBytes/sec total
        Internal temperature: 54.14 degC, max 56.11 degC
        Internal voltage: avg 1.01V, max 1.02V
        Aux voltage: avg 2.48V, max 2.49V
        Reserve space status: Healthy; Reserves: 100.00%, warn at 10.00%
        Rated PBW: 17.00 PB, 99.99% remaining
        Lifetime data volumes:
           Physical bytes written: 904,009,537,672
           Physical bytes read   : 999,422,573,856
        RAM usage:
           Current: 13,050,432 bytes
           Peak   : 13,050,432 bytes

Fusion-io ioDrive Duo (MLC 640GB)で ベンチマーク (hdparm -t)

とりあえず、"hdparm -t" で簡易的に3回繰り返す感じで実行。

# hdparm -t /dev/md0

/dev/md0:
 Timing buffered disk reads:  3870 MB in  3.00 seconds = 1289.98 MB/sec

# hdparm -t /dev/md0

/dev/md0:
 Timing buffered disk reads:  3976 MB in  3.00 seconds = 1325.24 MB/sec

# hdparm -t /dev/md0

/dev/md0:
 Timing buffered disk reads:  3760 MB in  3.00 seconds = 1252.90 MB/sec

"Fusion-io ioDrive Duo MLC 640GB" で fio-status

fio-status -a

# fio-status -a

Found 2 ioDrives in this system with 1 ioDrive Duo
Fusion-io driver version: 2.1.0 build 240

Adapter: ioDrive Duo
        HP 640GB MLC PCIe ioDrive Duo for ProLiant Servers, Product Number:600282-B21 SN:xxxxx
        ioDrive Duo HL, PN:001xxxxxxxx, Mfr:004, Date:20100919
        External Power: NOT connected
        Powerloss protection: available
        PCIE Bus voltage: avg 11.90V, min 11.75V, max 11.98V
        PCIE Bus current: avg 0.00A, max 2.90A
        PCIE Bus power: avg 0.00W, max 0.00W
        PCIE Power limit threshold: 24.75W
        PCIE slot available power: 25.00W
        PCIE bus errors: correctable, unsupported request
        PCIE negotiated link: 8 lanes at 5.00 Gbits/sec each, 4000 MBytes/sec total
        Connected ioDimm modules:
          fct0: HP 640GB MLC PCIe ioDrive Duo for ProLiant Servers, Product Number:600282-B21 SN:xxxxx
          fct1: HP 640GB MLC PCIe ioDrive Duo for ProLiant Servers, Product Number:600282-B21 SN:xxxxx

fct0    Attached as 'fioa' (block device)
        HP 640GB MLC PCIe ioDrive Duo for ProLiant Servers, Product Number:600282-B21 SN:xxxxx
        HP ioDIMM 320GB, PN:002xxxxxxxx, Mfr:004, Date:20100917
        Located in 0 Upper slot of ioDrive Duo SN:xxxxxx
        Powerloss protection: protected
        PCI:07:00.0, Slot Number: Unavailable
        Vendor:1aed, Device:1005, Sub vendor:103c, Sub device:178e
        Firmware v5.0.3, rev 43247
        322.46 GBytes block device size, 396 GBytes physical device size
        Error correction: 11 bits per 240 bytes
        Format v004, 629,806,848 sectors of 512 bytes
        FPGA ID:0 Format UID:00000000908b0132b735004210daa400
        PCIE slot available power: 25.00W
        PCIE negotiated link: 4 lanes at 2.50 Gbits/sec each, 1000 MBytes/sec total
        Internal temperature: avg 50.7 degC, max 56.1 degC
        Board temperature: 40 degC
        Internal voltage: avg 1.028V, max 1.031V
        Aux voltage: avg 2.461V, max 2.464V
        Media status: Healthy; Reserves: 100.00%, warn at 10.00%
        Lifetime data volumes:
           Physical bytes written: 2,213,319,448,568
           Physical bytes read   : 2,189,074,722,536

fct1    Attached as 'fiob' (block device)
        HP 640GB MLC PCIe ioDrive Duo for ProLiant Servers, Product Number:600282-B21 SN:xxxxx
        HP ioDIMM 320GB, PN:002xxxxxxxx, Mfr:004, Date:20100917
        Located in 1 Lower slot of ioDrive Duo SN:xxxxxx
        Powerloss protection: protected
        PCI:08:00.0, Slot Number: Unavailable
        Vendor:1aed, Device:1005, Sub vendor:103c, Sub device:178e
        Firmware v5.0.3, rev 43247
        322.46 GBytes block device size, 396 GBytes physical device size
        Error correction: 11 bits per 240 bytes
        Format v004, 629,806,848 sectors of 512 bytes
        FPGA ID:0 Format UID:0000000115630132b735004210daa400
        PCIE slot available power: 25.00W
        PCIE negotiated link: 4 lanes at 2.50 Gbits/sec each, 1000 MBytes/sec total
        Internal temperature: avg 49.2 degC, max 54.1 degC
        Board temperature: 39 degC
        Internal voltage: avg 1.014V, max 1.014V
        Aux voltage: avg 2.458V, max 2.461V
        Media status: Healthy; Reserves: 100.00%, warn at 10.00%
        Lifetime data volumes:
           Physical bytes written: 2,211,806,766,816
           Physical bytes read   : 2,185,788,095,984

fio-status --help

# fio-status --help
Fusion-io fio-status utility (2.1.0.240 optimusprime@4a5881616570)
  General information utility for Fusion-io devices.
  Copyright 2006-2010 Fusion Multisystems, Inc., dba Fusion-io. All rights reserved.
usage: fio-status [<options>] [<dev>]
  <dev> is a pathname to the control device (fctx).
  Options:
   -a          --all               Report all available information.
   -c          --count             fio-board-count mode: Report the number of Fusion-io boards installed.
   -d          --data-volume       Report the volume of data read and written.
   -fk         --format key        Force alternate 'key=value' format output.
   -v          --version           Print version information
   -h          --help              Print the help menu

"kernel: Machine check events logged"

※ このエントリは、はてなグループ終了に伴う、サブブログからの引越エントリ(2011/12)です。
※ 情報が古い可能性もありますので、ご留意ください。



"/var/log/messages" に下記のログが出力されていたので、

Dec 13 12:03:11 hostname kernel: Machine check events logged


"/var/log/mcelog" の MCE ログを確認した。

HARDWARE ERROR. This is *NOT* a software problem!
Please contact your hardware vendor
CPU 2 BANK 8 TSC 388b1e83c7ccf6 [at 2395 Mhz 76 days 21:52:6 uptime (unreliable)]
MISC 4400040283 ADDR 2c6820f80
MCG status:
MCi status:
Error overflow
MCi_MISC register valid
MCi_ADDR register valid
MCA: MEMORY CONTROLLER RD_CHANNELunspecified_ERR
Transaction: Memory read error
STATUS cc029fc00001009f MCGSTATUS 0

メモリのエラーくさいな...

rpm でインストール/アンインストール時に実行されるスクリプトを確認する

※ このエントリは、はてなグループ終了に伴う、サブブログからの引越エントリ(2011/12)です。
※ 情報が古い可能性もありますので、ご留意ください。



既にインストールしているパッケージをアンインストールする際に、preuninstall とか postuninstall の script で何が行われるか確認したい時は、、、

# rpm -q --scripts (パッケージ名)

こんな感じで確認する。

# rpm -qp (rpmファイル)

rpmファイルに対して、確認したときは↑な感じ。
例えば、インストール前に、preinstallとかpostinstallのscriptを見たい時ですね。

サンプル

# rpm -qi igb
Name        : igb                          Relocations: (not relocatable)
Version     : 3.2.9                             Vendor: Intel Corporation
Release     : 1                             Build Date: 2011年12月13日 22時34分37秒
Install Date: 2011年12月13日 22時35分20秒      Build Host: localhost.localdomain
Group       : System Environment/Kernel     Source RPM: igb-3.2.9-1.src.rpm
Size        : 3190427                          License: GPL
Signature   : (none)
URL         : http://support.intel.com
Summary     : Intel(R) Gigabit Ethernet Connection
Description :
This package contains the Linux driver for the Intel(R) Gigabit Family of Server Adapters.

が、インストール済の場合は、、、

# rpm -q --scripts igb
postinstall scriptlet (using /bin/sh):
FL="/usr/share/doc/igb-3.2.9/file.list
    /usr/share/doc/igb/file.list"
FL=$(for d in $FL ; do if [ -e $d ]; then echo $d; break; fi;  done)

if [ -d /usr/local/lib/igb ]; then
        rm -rf /usr/local/lib/igb
fi
if [ -d /usr/local/share/igb ]; then
        rm -rf /usr/local/share/igb
fi

# Save old drivers (aka .o and .o.gz)
echo "original pci.ids saved in /usr/local/share/igb";
if [ "/dev/null" != "/dev/null" ]; then
        echo "original pcitable saved in /usr/local/share/igb";
fi
for k in $(sed 's/\/lib\/modules\/\([0-9a-zA-Z_\.\-]*\).*/\1/' $FL) ;
do
        d_drivers=/lib/modules/$k
        d_usr=/usr/local/share/igb/$k
        mkdir -p $d_usr
        cd $d_drivers; find . -name igb.*o -exec cp --parents {} $d_usr \; -exec rm -f {} \;
        cd $d_drivers; find . -name igb_*.*o -exec cp --parents {} $d_usr \; -exec rm -f {} \;
        cd $d_drivers; find . -name igb.*o.gz -exec cp --parents {} $d_usr \; -exec rm -f {} \;
        cd $d_drivers; find . -name igb_*.*o.gz -exec cp --parents {} $d_usr \; -exec rm -f {} \;
        cp --parents /usr/share/hwdata/pci.ids /usr/local/share/igb/
        if [ "/dev/null" != "/dev/null" ]; then
                cp --parents /dev/null /usr/local/share/igb/
        fi
done

# Add driver link
for f in $(sed 's/\.new$//' $FL) ; do
        ln -f $f.new $f
done

# Check if kernel version rpm was built on IS the same as running kernel
BK_LIST=$(sed 's/\/lib\/modules\/\([0-9a-zA-Z_\.\-]*\).*/\1/' $FL)
MATCH=no
for i in $BK_LIST
do
        if [ $(uname -r) == $i ] ; then
                MATCH=yes
                break
        fi
done
if [ $MATCH == no ] ; then
        echo -n "WARNING: Running kernel is $(uname -r).  "
        echo -n "RPM supports kernels (  "
        for i in $BK_LIST
        do
                echo -n "$i  "
        done
        echo ")"
fi

LD="/usr/share/doc/igb";
if [ -d /usr/share/doc/igb-3.2.9 ]; then
        LD="/usr/share/doc/igb-3.2.9";
fi

#Yes, this really needs bash
bash -s /usr/share/hwdata/pci.ids \
        /dev/null \
        $LD/pci.updates \
        $LD/pci.ids.new \
        $LD/pcitable.new \
        igb \
<<"END"
#! /bin/bash
# $1 = system pci.ids file to update
# $2 = system pcitable file to update
# $3 = file with new entries in pci.ids file format
# $4 = pci.ids output file
# $5 = pcitable output file
# $6 = driver name for use in pcitable file

exec 3<$1
exec 4<$2
exec 5<$3
exec 6>$4
exec 7>$5
driver=$6
IFS=

# pattern matching strings
ID="[[:xdigit:]][[:xdigit:]][[:xdigit:]][[:xdigit:]]"
VEN="${ID}*"
DEV="   ${ID}*"
SUB="           ${ID}*"
TABLE_DEV="0x${ID}      0x${ID} \"*"
TABLE_SUB="0x${ID}      0x${ID} 0x${ID} 0x${ID} \"*"

line=
table_line=
ids_in=
table_in=
vendor=
device=
ids_device=
table_device=
subven=
ids_subven=
table_subven=
subdev=
ids_subdev=
table_subdev=
ven_str=
dev_str=
sub_str=

# force a sub-shell to fork with a new stdin
# this is needed if the shell is reading these instructions from stdin
while true
do
        # get the first line of each data file to jump start things
        exec 0<&3
        read -r ids_in
        if [ "$2" != "/dev/null" ];then
        exec 0<&4
        read -r table_in
        fi

        # outer loop reads lines from the updates file
        exec 0<&5
        while read -r line
        do
                # vendor entry
                if [[ $line == $VEN ]]
                then
                        vendor=0x${line:0:4}
                        ven_str=${line#${line:0:6}}
                        # add entry to pci.ids
                        exec 0<&3
                        exec 1>&6
                        while [[ $ids_in != $VEN ||
                                 0x${ids_in:0:4} < $vendor ]]
                        do
                                echo "$ids_in"
                                read -r ids_in
                        done
                        echo "$line"
                        if [[ 0x${ids_in:0:4} == $vendor ]]
                        then
                                read -r ids_in
                        fi

                # device entry
                elif [[ $line == $DEV ]]
                then
                        device=`echo ${line:1:4} | tr "[:upper:]" "[:lower:]"`
                        table_device=0x${line:1:4}
                        dev_str=${line#${line:0:7}}
                        ids_device=`echo ${ids_in:1:4} | tr "[:upper:]" "[:lower:]"`
                        table_line="$vendor     $table_device   \"$driver\"     \"$ven_str|$dev_str\""
                        # add entry to pci.ids
                        exec 0<&3
                        exec 1>&6
                        while [[ $ids_in != $DEV ||
                                 $ids_device < $device ]]
                        do
                                if [[ $ids_in == $VEN ]]
                                then
                                        break
                                fi
                                if [[ $ids_device != ${ids_in:1:4} ]]
                                then
                                        echo "${ids_in:0:1}$ids_device${ids_in#${ids_in:0:5}}"
                                else
                                        echo "$ids_in"
                                fi
                                read -r ids_in
                                ids_device=`echo ${ids_in:1:4} | tr "[:upper:]" "[:lower:]"`
                        done
                        if [[ $device != ${line:1:4} ]]
                        then
                                echo "${line:0:1}$device${line#${line:0:5}}"
                        else
                                echo "$line"
                        fi
                        if [[ $ids_device == $device ]]
                        then
                                read -r ids_in
                        fi
                        # add entry to pcitable
                        if [ "$2" != "/dev/null" ];then
                        exec 0<&4
                        exec 1>&7
                        while [[ $table_in != $TABLE_DEV ||
                                 ${table_in:0:6} < $vendor ||
                                 ( ${table_in:0:6} == $vendor &&
                                   ${table_in:7:6} < $table_device ) ]]
                        do
                                echo "$table_in"
                                read -r table_in
                        done
                        echo "$table_line"
                        if [[ ${table_in:0:6} == $vendor &&
                              ${table_in:7:6} == $table_device ]]
                        then
                                read -r table_in
                        fi
                        fi
                # subsystem entry
                elif [[ $line == $SUB ]]
                then
                        subven=`echo ${line:2:4} | tr "[:upper:]" "[:lower:]"`
                        subdev=`echo ${line:7:4} | tr "[:upper:]" "[:lower:]"`
                        table_subven=0x${line:2:4}
                        table_subdev=0x${line:7:4}
                        sub_str=${line#${line:0:13}}
                        ids_subven=`echo ${ids_in:2:4} | tr "[:upper:]" "[:lower:]"`
                        ids_subdev=`echo ${ids_in:7:4} | tr "[:upper:]" "[:lower:]"`
                        table_line="$vendor     $table_device   $table_subven   $table_subdev   \"$driver\"     \"$ven_str|$sub_str\""
                        # add entry to pci.ids
                        exec 0<&3
                        exec 1>&6
                        while [[ $ids_in != $SUB ||
                                 $ids_subven < $subven ||
                                 ( $ids_subven == $subven &&
                                   $ids_subdev < $subdev ) ]]
                        do
                                if [[ $ids_in == $VEN ||
                                      $ids_in == $DEV ]]
                                then
                                        break
                                fi
                                if [[ ! (${ids_in:2:4} == "1014" &&
                                         ${ids_in:7:4} == "052C") ]]
                                then
                                        if [[ $ids_subven != ${ids_in:2:4} || $ids_subdev != ${ids_in:7:4} ]]
                                        then
                                                echo "${ids_in:0:2}$ids_subven $ids_subdev${ids_in#${ids_in:0:11}}"
                                        else
                                                echo "$ids_in"
                                        fi
                                fi
                                read -r ids_in
                                ids_subven=`echo ${ids_in:2:4} | tr "[:upper:]" "[:lower:]"`
                                ids_subdev=`echo ${ids_in:7:4} | tr "[:upper:]" "[:lower:]"`
                        done
                        if [[ $subven != ${line:2:4} || $subdev != ${line:7:4} ]]
                        then
                                echo "${line:0:2}$subven $subdev${line#${line:0:11}}"
                        else
                                echo "$line"
                        fi
                        if [[ $ids_subven == $subven  &&
                              $ids_subdev == $subdev ]]
                        then
                                read -r ids_in
                        fi
                        # add entry to pcitable
                        if [ "$2" != "/dev/null" ];then
                        exec 0<&4
                        exec 1>&7
                        while [[ $table_in != $TABLE_SUB ||
                                 ${table_in:14:6} < $table_subven ||
                                 ( ${table_in:14:6} == $table_subven &&
                                   ${table_in:21:6} < $table_subdev ) ]]
                        do
                                if [[ $table_in == $TABLE_DEV ]]
                                then
                                        break
                                fi
                                if [[ ! (${table_in:14:6} == "0x1014" &&
                                         ${table_in:21:6} == "0x052C") ]]
                                then
                                        echo "$table_in"
                                fi
                                read -r table_in
                        done
                        echo "$table_line"
                        if [[ ${table_in:14:6} == $table_subven &&
                              ${table_in:21:6} == $table_subdev ]]
                        then
                                read -r table_in
                        fi
                        fi
                fi

                exec 0<&5
        done

        # print the remainder of the original files
        exec 0<&3
        exec 1>&6
        echo "$ids_in"
        while read -r ids_in
        do
                echo "$ids_in"
        done

        if [ "$2" != "/dev/null" ];then
        exec 0>&4
        exec 1>&7
        echo "$table_in"
        while read -r table_in
        do
                echo "$table_in"
        done
        fi

        break
done <&5

exec 3<&-
exec 4<&-
exec 5<&-
exec 6>&-
exec 7>&-

END

mv -f $LD/pci.ids.new  /usr/share/hwdata/pci.ids
if [ "/dev/null" != "/dev/null" ]; then
mv -f $LD/pcitable.new /dev/null
fi

uname -r | grep BOOT || /sbin/depmod -a > /dev/null 2>&1 || true
preuninstall scriptlet (using /bin/sh):
# If doing RPM un-install
if [ $1 -eq 0 ] ; then
        FL="/usr/share/doc/igb-3.2.9/file.list
                /usr/share/doc/igb/file.list"
        FL=$(for d in $FL ; do if [ -e $d ]; then echo $d; break; fi;  done)

        # Remove driver link
        for f in $(sed 's/\.new$//' $FL) ; do
                rm -f $f
        done

        # Restore old drivers
        if [ -d /usr/local/share/igb ]; then
                cd /usr/local/share/igb; find . -name 'igb.*o*' -exec cp --parents {} /lib/modules/ \;
                cd /usr/local/share/igb; find . -name 'igb_*.*o*' -exec cp --parents {} /lib/modules/ \;
                rm -rf /usr/local/share/igb
        fi
fi
postuninstall scriptlet (using /bin/sh):
uname -r | grep BOOT || /sbin/depmod -a > /dev/null 2>&1 || true

こんな感じ。(サンプル的に長かった...)

Ruby のインストール (ビルド) 時のオプションとかを表示する方法

※ このエントリは、はてなグループ終了に伴う、サブブログからの引越エントリ(2011/11)です。
※ 情報が古い可能性もありますので、ご留意ください。


※ 2019年現在向けに、少々内容を修正しています。

$ ruby -rrbconfig -e 'pp RbConfig::CONFIG'

で、見れる。これは便利。メモメモ。


↓はサンプル。

$ ruby -rrbconfig -e 'pp RbConfig::CONFIG'
{"DESTDIR"=>"",
 "MAJOR"=>"2",
 "MINOR"=>"6",
 "TEENY"=>"3",
 "PATCHLEVEL"=>"62",
 "INSTALL"=>"/usr/local/opt/coreutils/libexec/gnubin/install -c",
 "EXEEXT"=>"",
 "prefix"=>"/Users/namikawa/.rbenv/versions/2.6.3",
 "ruby_install_name"=>"ruby",
 "RUBY_INSTALL_NAME"=>"ruby",
 "RUBY_SO_NAME"=>"ruby.2.6",
 "exec"=>"exec",
 "ruby_pc"=>"ruby-2.6.pc",
 "CC_WRAPPER"=>"",
 "PACKAGE"=>"ruby",
 "BUILTIN_TRANSSRCS"=>" enc/trans/newline.c",
 "MANTYPE"=>"doc",
 "vendorarchhdrdir"=>
  "/Users/namikawa/.rbenv/versions/2.6.3/include/ruby-2.6.0/vendor_ruby/x86_64-darwin18",
 "sitearchhdrdir"=>
  "/Users/namikawa/.rbenv/versions/2.6.3/include/ruby-2.6.0/site_ruby/x86_64-darwin18",
 "rubyarchhdrdir"=>
  "/Users/namikawa/.rbenv/versions/2.6.3/include/ruby-2.6.0/x86_64-darwin18",
 "vendorhdrdir"=>
  "/Users/namikawa/.rbenv/versions/2.6.3/include/ruby-2.6.0/vendor_ruby",
 "sitehdrdir"=>
  "/Users/namikawa/.rbenv/versions/2.6.3/include/ruby-2.6.0/site_ruby",
 "rubyhdrdir"=>"/Users/namikawa/.rbenv/versions/2.6.3/include/ruby-2.6.0",
 "RUBY_SEARCH_PATH"=>"",
 "UNIVERSAL_INTS"=>"",
 "UNIVERSAL_ARCHNAMES"=>"",
 "configure_args"=>
  " '--prefix=/Users/namikawa/.rbenv/versions/2.6.3' '--with-openssl-dir=/usr/local/opt/openssl' '--with-readline-dir=/usr/local/opt/readline' 'CC=clang' 'CFLAGS= -O3 -Wno-error=shorten-64-to-32 ' 'LDFLAGS=-L/Users/namikawa/.rbenv/versions/2.6.3/lib ' 'CPPFLAGS=-I/Users/namikawa/.rbenv/versions/2.6.3/include '",
 "CONFIGURE"=>"configure",
 "vendorarchdir"=>
  "/Users/namikawa/.rbenv/versions/2.6.3/lib/ruby/vendor_ruby/2.6.0/x86_64-darwin18",
 "vendorlibdir"=>
  "/Users/namikawa/.rbenv/versions/2.6.3/lib/ruby/vendor_ruby/2.6.0",
 "vendordir"=>"/Users/namikawa/.rbenv/versions/2.6.3/lib/ruby/vendor_ruby",
 "sitearchdir"=>
  "/Users/namikawa/.rbenv/versions/2.6.3/lib/ruby/site_ruby/2.6.0/x86_64-darwin18",
 "sitelibdir"=>
  "/Users/namikawa/.rbenv/versions/2.6.3/lib/ruby/site_ruby/2.6.0",
 "sitedir"=>"/Users/namikawa/.rbenv/versions/2.6.3/lib/ruby/site_ruby",
 "rubyarchdir"=>
  "/Users/namikawa/.rbenv/versions/2.6.3/lib/ruby/2.6.0/x86_64-darwin18",
 "rubylibdir"=>"/Users/namikawa/.rbenv/versions/2.6.3/lib/ruby/2.6.0",
 "ruby_version"=>"2.6.0",
 "sitearch"=>"x86_64-darwin18",
 "arch"=>"x86_64-darwin18",
 "sitearchincludedir"=>
  "/Users/namikawa/.rbenv/versions/2.6.3/include/x86_64-darwin18",
 "archincludedir"=>
  "/Users/namikawa/.rbenv/versions/2.6.3/include/x86_64-darwin18",
 "sitearchlibdir"=>"/Users/namikawa/.rbenv/versions/2.6.3/lib/x86_64-darwin18",
 "archlibdir"=>"/Users/namikawa/.rbenv/versions/2.6.3/lib/x86_64-darwin18",
 "libdirname"=>"libdir",
 "RUBY_EXEC_PREFIX"=>"/Users/namikawa/.rbenv/versions/2.6.3",
 "RUBY_LIB_VERSION"=>"",
 "RUBY_LIB_VERSION_STYLE"=>"3\t/* full */",
 "RI_BASE_NAME"=>"ri",
 "ridir"=>"/Users/namikawa/.rbenv/versions/2.6.3/share/ri",
 "rubysitearchprefix"=>
  "/Users/namikawa/.rbenv/versions/2.6.3/lib/ruby/x86_64-darwin18",
 "rubyarchprefix"=>
  "/Users/namikawa/.rbenv/versions/2.6.3/lib/ruby/x86_64-darwin18",
 "MAKEFILES"=>"Makefile GNUmakefile",
 "PLATFORM_DIR"=>"",
 "THREAD_MODEL"=>"pthread",
 "SYMBOL_PREFIX"=>"_",
 "EXPORT_PREFIX"=>"",
 "COMMON_HEADERS"=>"",
 "COMMON_MACROS"=>"",
 "COMMON_LIBS"=>"",
 "MAINLIBS"=>"-lpthread -lgmp -ldl -lobjc",
 "ENABLE_SHARED"=>"no",
 "DLDSHARED"=>"clang -dynamiclib",
 "DLDLIBS"=>"",
 "SOLIBS"=>"-lpthread -lgmp -ldl -lobjc",
 "LIBRUBYARG_SHARED"=>"",
 "LIBRUBYARG_STATIC"=>
  "-lruby.2.6-static -framework Security -framework Foundation -lpthread -lgmp -ldl -lobjc",
 "LIBRUBYARG"=>
  "-lruby.2.6-static -framework Security -framework Foundation -lpthread -lgmp -ldl -lobjc",
 "LIBRUBY"=>"libruby.2.6-static.a",
 "LIBRUBY_ALIASES"=>"libruby.2.6.dylib",
 "LIBRUBY_SONAME"=>"libruby.2.6.dylib.2.6",
 "LIBRUBY_SO"=>"libruby.2.6.dylib.2.6.3",
 "LIBRUBY_A"=>"libruby.2.6-static.a",
 "RUBYW_INSTALL_NAME"=>"",
 "rubyw_install_name"=>"",
 "EXTDLDFLAGS"=>"",
 "EXTLDFLAGS"=>"",
 "strict_warnflags"=>"",
 "warnflags"=>
  "-Wall -Wextra -Wdeclaration-after-statement -Wdeprecated-declarations -Wdivision-by-zero -Wimplicit-function-declaration -Wimplicit-int -Wpointer-arith -Wshorten-64-to-32 -Wwrite-strings -Wmissing-noreturn -Wno-constant-logical-operand -Wno-long-long -Wno-missing-field-initializers -Wno-overlength-strings -Wno-parentheses-equality -Wno-self-assign -Wno-tautological-compare -Wno-unused-parameter -Wno-unused-value -Wunused-variable -Wextra-tokens",
 "debugflags"=>"-ggdb3",
 "optflags"=>"-O3",
 "NULLCMD"=>":",
 "ENABLE_DEBUG_ENV"=>"",
 "DLNOBJ"=>"dln.o",
 "INSTALL_STATIC_LIBRARY"=>"yes",
 "MJIT_SUPPORT"=>"yes",
 "EXECUTABLE_EXTS"=>"",
 "ARCHFILE"=>"",
 "LIBRUBY_RELATIVE"=>"no",
 "EXTOUT"=>".ext",
 "PREP"=>"miniruby exe/$(PROGRAM)",
 "CROSS_COMPILING"=>"no",
 "TEST_RUNNABLE"=>"yes",
 "rubylibprefix"=>"/Users/namikawa/.rbenv/versions/2.6.3/lib/ruby",
 "setup"=>"Setup",
 "ENCSTATIC"=>"",
 "EXTSTATIC"=>"",
 "STRIP"=>"strip -A -n",
 "SOEXT"=>"dylib",
 "TRY_LINK"=>"",
 "PRELOADENV"=>"DYLD_INSERT_LIBRARIES",
 "LIBPATHENV"=>"DYLD_FALLBACK_LIBRARY_PATH",
 "RPATHFLAG"=>"",
 "LIBPATHFLAG"=>" -L%s",
 "LINK_SO"=>
  "\n" +
  "dsymutil $@; { test -z '$(RUBY_CODESIGN)' || codesign -s '$(RUBY_CODESIGN)' -f $@; }",
 "ASMEXT"=>"S",
 "LIBEXT"=>"a",
 "DLEXT2"=>"",
 "DLEXT"=>"bundle",
 "LDSHAREDXX"=>"clang++ -dynamic -bundle",
 "LDSHARED"=>"clang -dynamic -bundle",
 "CCDLFLAGS"=>"-fno-common",
 "STATIC"=>"",
 "ARCH_FLAG"=>"",
 "DLDFLAGS"=>
  "-L/Users/namikawa/.rbenv/versions/2.6.3/lib  -Wl,-undefined,dynamic_lookup -Wl,-multiply_defined,suppress",
 "ALLOCA"=>"",
 "MATHN"=>"yes",
 "dsymutil"=>"dsymutil",
 "codesign"=>"codesign",
 "POSTLINK"=>
  "dsymutil $@; { test -z '$(RUBY_CODESIGN)' || codesign -s '$(RUBY_CODESIGN)' -f $@; }",
 "WERRORFLAG"=>"-Werror",
 "CHDIR"=>"cd -P",
 "RMALL"=>"rm -fr",
 "RMDIRS"=>"rmdir --ignore-fail-on-non-empty -p",
 "RMDIR"=>"rmdir --ignore-fail-on-non-empty",
 "CP"=>"cp",
 "RM"=>"rm -f",
 "PKG_CONFIG"=>"pkg-config",
 "DOXYGEN"=>"",
 "DOT"=>"",
 "MAKEDIRS"=>"/usr/local/opt/coreutils/libexec/gnubin/mkdir -p",
 "MKDIR_P"=>"/usr/local/opt/coreutils/libexec/gnubin/mkdir -p",
 "INSTALL_DATA"=>"/usr/local/opt/coreutils/libexec/gnubin/install -c -m 644",
 "INSTALL_SCRIPT"=>"/usr/local/opt/coreutils/libexec/gnubin/install -c",
 "INSTALL_PROGRAM"=>"/usr/local/opt/coreutils/libexec/gnubin/install -c",
 "SET_MAKE"=>"",
 "LN_S"=>"ln -s",
 "NM"=>"nm",
 "DLLWRAP"=>"",
 "WINDRES"=>"",
 "OBJCOPY"=>":",
 "OBJDUMP"=>"objdump",
 "ASFLAGS"=>"",
 "AS"=>"as",
 "ARFLAGS"=>"-no_warning_for_no_symbols -o ",
 "AR"=>"libtool -static",
 "RANLIB"=>":",
 "try_header"=>"",
 "CC_VERSION_MESSAGE"=>
  "Apple LLVM version 10.0.1 (clang-1001.0.46.4)\n" +
  "Target: x86_64-apple-darwin18.5.0\n" +
  "Thread model: posix\n" +
  "InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin",
 "CC_VERSION"=>"clang --version",
 "CSRCFLAG"=>"",
 "COUTFLAG"=>"-o ",
 "OUTFLAG"=>"-o ",
 "CPPOUTFILE"=>"-o conftest.i",
 "GNU_LD"=>"no",
 "LD"=>"ld",
 "GCC"=>"yes",
 "EGREP"=>"/usr/bin/grep -E",
 "GREP"=>"/usr/bin/grep",
 "CPP"=>"clang -E",
 "CXXFLAGS"=>
  "-O3 -ggdb3 -Wall -Wextra -Wdeclaration-after-statement -Wdeprecated-declarations -Wdivision-by-zero -Wimplicit-function-declaration -Wimplicit-int -Wpointer-arith -Wshorten-64-to-32 -Wwrite-strings -Wmissing-noreturn -Wno-constant-logical-operand -Wno-long-long -Wno-missing-field-initializers -Wno-overlength-strings -Wno-parentheses-equality -Wno-self-assign -Wno-tautological-compare -Wno-unused-parameter -Wno-unused-value -Wunused-variable -Wextra-tokens",
 "CXX"=>"clang++",
 "OBJEXT"=>"o",
 "CPPFLAGS"=>
  "-I/Users/namikawa/.rbenv/versions/2.6.3/include  -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -D_DARWIN_UNLIMITED_SELECT -D_REENTRANT  ",
 "LDFLAGS"=>
  "-L. -L/Users/namikawa/.rbenv/versions/2.6.3/lib  -fstack-protector-strong -L/usr/local/lib",
 "CFLAGS"=>" -O3 -Wno-error=shorten-64-to-32  -pipe",
 "CC"=>"clang",
 "target_os"=>"darwin18",
 "target_vendor"=>"apple",
 "target_cpu"=>"x86_64",
 "target"=>"x86_64-apple-darwin18",
 "host_os"=>"darwin18.5.0",
 "host_vendor"=>"apple",
 "host_cpu"=>"x86_64",
 "host"=>"x86_64-apple-darwin18.5.0",
 "RUBY_VERSION_NAME"=>"ruby-2.6.0",
 "RUBYW_BASE_NAME"=>"rubyw",
 "RUBY_BASE_NAME"=>"ruby",
 "build_os"=>"darwin18.5.0",
 "build_vendor"=>"apple",
 "build_cpu"=>"x86_64",
 "build"=>"x86_64-apple-darwin18.5.0",
 "RUBY_API_VERSION"=>"2.6",
 "RUBY_PROGRAM_VERSION"=>"2.6.3",
 "HAVE_GIT"=>"yes",
 "GIT"=>"git",
 "cxxflags"=>
  "-O3 -ggdb3 -Wall -Wextra -Wdeclaration-after-statement -Wdeprecated-declarations -Wdivision-by-zero -Wimplicit-function-declaration -Wimplicit-int -Wpointer-arith -Wshorten-64-to-32 -Wwrite-strings -Wmissing-noreturn -Wno-constant-logical-operand -Wno-long-long -Wno-missing-field-initializers -Wno-overlength-strings -Wno-parentheses-equality -Wno-self-assign -Wno-tautological-compare -Wno-unused-parameter -Wno-unused-value -Wunused-variable -Wextra-tokens",
 "cppflags"=>"",
 "cflags"=>
  "-O3 -ggdb3 -Wall -Wextra -Wdeclaration-after-statement -Wdeprecated-declarations -Wdivision-by-zero -Wimplicit-function-declaration -Wimplicit-int -Wpointer-arith -Wshorten-64-to-32 -Wwrite-strings -Wmissing-noreturn -Wno-constant-logical-operand -Wno-long-long -Wno-missing-field-initializers -Wno-overlength-strings -Wno-parentheses-equality -Wno-self-assign -Wno-tautological-compare -Wno-unused-parameter -Wno-unused-value -Wunused-variable -Wextra-tokens",
 "target_alias"=>"",
 "host_alias"=>"",
 "build_alias"=>"",
 "LIBS"=>"",
 "ECHO_T"=>"",
 "ECHO_N"=>"",
 "ECHO_C"=>"\\\\c",
 "DEFS"=>"",
 "mandir"=>"/Users/namikawa/.rbenv/versions/2.6.3/share/man",
 "localedir"=>"/Users/namikawa/.rbenv/versions/2.6.3/share/locale",
 "libdir"=>"/Users/namikawa/.rbenv/versions/2.6.3/lib",
 "psdir"=>"/Users/namikawa/.rbenv/versions/2.6.3/share/doc/ruby",
 "pdfdir"=>"/Users/namikawa/.rbenv/versions/2.6.3/share/doc/ruby",
 "dvidir"=>"/Users/namikawa/.rbenv/versions/2.6.3/share/doc/ruby",
 "htmldir"=>"/Users/namikawa/.rbenv/versions/2.6.3/share/doc/ruby",
 "infodir"=>"/Users/namikawa/.rbenv/versions/2.6.3/share/info",
 "docdir"=>"/Users/namikawa/.rbenv/versions/2.6.3/share/doc/ruby",
 "oldincludedir"=>"/usr/include",
 "includedir"=>"/Users/namikawa/.rbenv/versions/2.6.3/include",
 "localstatedir"=>"/Users/namikawa/.rbenv/versions/2.6.3/var",
 "sharedstatedir"=>"/Users/namikawa/.rbenv/versions/2.6.3/com",
 "sysconfdir"=>"/Users/namikawa/.rbenv/versions/2.6.3/etc",
 "datadir"=>"/Users/namikawa/.rbenv/versions/2.6.3/share",
 "datarootdir"=>"/Users/namikawa/.rbenv/versions/2.6.3/share",
 "libexecdir"=>"/Users/namikawa/.rbenv/versions/2.6.3/libexec",
 "sbindir"=>"/Users/namikawa/.rbenv/versions/2.6.3/sbin",
 "bindir"=>"/Users/namikawa/.rbenv/versions/2.6.3/bin",
 "exec_prefix"=>"/Users/namikawa/.rbenv/versions/2.6.3",
 "PACKAGE_URL"=>"",
 "PACKAGE_BUGREPORT"=>"",
 "PACKAGE_STRING"=>"",
 "PACKAGE_VERSION"=>"",
 "PACKAGE_TARNAME"=>"",
 "PACKAGE_NAME"=>"",
 "PATH_SEPARATOR"=>":",
 "SHELL"=>"/bin/sh",
 "UNICODE_VERSION"=>"12.1.0",
 "UNICODE_EMOJI_VERSION"=>"12.0",
 "SDKROOT"=>"",
 "archdir"=>
  "/Users/namikawa/.rbenv/versions/2.6.3/lib/ruby/2.6.0/x86_64-darwin18",
 "topdir"=>
  "/Users/namikawa/.rbenv/versions/2.6.3/lib/ruby/2.6.0/x86_64-darwin18"}