[KVM]仮想GUIコンソールで日本語キーボードにする方法

仮想コンソールマネージャ(virt-manager)で仮想マシンを作成すると、キーボードが英字配列になってしまい、記号等が刻印どおりに入力できない。この不便な状態からキーボード入力を日本語配列に修正する方法。
仮想マシンを定義しているxmlの「graphics type=’vnc’」を定義している行に「 keymap=’ja’」を追記して修正する。
仮想マシンを定義してるxmlファイルの場所は/etc/libvirt/qemu/[仮想マシン名].xml
修正前
<graphics type='vnc' port='-1' autoport='yes' />

修正後
<graphics type='vnc' port='-1' autoport='yes' keymap='ja'/>

[KVM] virshコマンドまとめ(おまけつき)

KVMをCUIで管理するときに使用するvirshコマンドの使い方まとめ。(随時更新予定)
ただまとめるだけだと他の技術ブログと同じような内容になってしまうので、意味もなくOracle VM for SPARC(LDOM)のldmコマンドとも比較してみる。(ニッチ過ぎる・・・)


  • 所謂「仮想マシン」の呼び名は正式に「ゲストドメイン」です
  • 太文字は打ち込んだコマンドです
  • []で囲まれた斜体は可変値を表します

情報表示系

仮想マシンの一覧表示

KVM
# virsh list --all
  Id    名前                         状態
 ----------------------------------------------------
  1     win2000                        実行中
  -     windows8.1                     シャットオフ
 ※--allを付けないと状態が実行中の仮想マシンのみ表示される
OVM for SPARC
# ldm list-domain
 NAME             STATE      FLAGS   CONS    VCPU  MEMORY   UTIL  UPTIME
 primary          active     -n-cv-  UART    16    1984M    0.8%  2h 19m
 testvm           bound      ------  5000    32    4G

OVM for SPARCのほうが割り当てリソースなども表示されるので便利


仮想マシンの詳細表示

KVM
# virsh dominfo [仮想マシン名]
Id:             1
名前:         win2000
UUID:           0983fb9c-1040-ffaf-4e0e-e37f364df13e
OS タイプ:   hvm
状態:         実行中
CPU:            1
CPU 時間:     343.4s
最大メモリー: 1048576 KiB
使用メモリー: 1048576 KiB
永続:         はい (yes)
自動起動:   無効にする
管理済み保存: いいえ (no)
セキュリティモデル: none
セキュリティ DOI: 0

 

ストレージプールの一覧表示

KVM
# virsh  pool-list
 名前               状態     自動起動
 ----------------------------------------->
 default              動作中  はい (yes)

OVM for SPARCにはストレージプールの概念はない。


ストレージプールの情報表示

KVM
# virsh  pool-info [ストレージプール名]
名前:         default
UUID:           fad29cc4-7345-156b-3cf8-f6748d91ab25
状態:         実行中
永続:         はい (yes)
自動起動:   はい (yes)
容量:         426.76 GiB
割り当て:   30.43 GiB
利用可能:   396.34 GiB

こっちでみないとストレージプールのパスがわからない

# virsh  pool-dumpxml [ストレージプール名]
<pool type='dir'>
  <name>default</name>
  <uuid>fad29cc4-7345-156b-3cf8-f6748d91ab25</uuid>
  <capacity unit='bytes'>458231758848</capacity>
  <allocation unit='bytes'>32669159424</allocation>
  <available unit='bytes'>425562599424</available>
  <source>
  </source>
  <target>
    <path>/var/lib/libvirt/images</path>
    <permissions>
      <mode>0755</mode>
      <owner>-1</owner>
      <group>-1</group>
    </permissions>
  </target>
</pool>

 


仮想ネットワークの表示

KVM
# virsh net-list
名前               状態     自動起動  永続
--------------------------------------------------
default              動作中  はい (yes)  はい (yes)

 

 


物理マシンのインタフェース表示

 
KVM
# virsh  iface-list --all
名前               状態     MAC アドレス
--------------------------------------------
br0                  動作中  00:23:54:73:13:30
eth1                 停止状態 00:1b:21:a1:85:0c
eth2                 停止状態 00:40:26:f9:7e:ea
lo                   動作中  00:00:00:00:00:00

 

OVMforSPARC
# dladm show-dev
e1000g0         リンク: up      速度: 100   Mbps        デュプレックス: half
e1000g1         リンク: unknown 速度: 0     Mbps        デュプレックス: half
e1000g2         リンク: unknown 速度: 0     Mbps        デュプレックス: half
e1000g3         リンク: unknown 速度: 0     Mbps        デュプレックス: half
e1000g4         リンク: unknown 速度: 0     Mbps        デュプレックス: half
e1000g5         リンク: unknown 速度: 0     Mbps        デュプレックス: half

 仮想マシンの管理

正直、GUI(仮想マシンマネージャ)から管理したほうが楽ですよ。どうせ仮想マシンのGUIコンソール使うんだし。現場がSSHしかリモート接続許可していないとか、CUI萌え~な人はどうぞ。

仮想マシン用ディスク作成

 KVM
 # qemu-img create -f qcow2 [仮想ディスクファイルのパス] [サイズ]

# qemu-img create -f qcow2 /vmdata/images/test.qcow2 8G
# ls -l /vmdata/images/test.qcow2
-rw-r--r-- 1 root root 262144  8月 13 01:45 2014 /vmdata/images/test.qcow2
 OVM for SPARC
 # mkfile 64g /export/home/LDOM/testvm_vdisk1 # 仮想ディスク作成
# ldm add-vdsdev /export/home/LDOM/testvm_vdisk1 vol1@vds0 # 制御ドメインに仮想ディスクを登録
# ldm list-services
VCC
    NAME             LDOM             PORT-RANGE
    vcc0             primary          5000-5100
VSW
    NAME             LDOM             MAC               NET-DEV   ID   DEVICE     LINKPROP   DEFAULT-VLAN-ID PVID VID                  MTU   MODE   INTER-VNET-LINK
    vsw0             primary          00:14:4f:f9:b6:f6 igb2      0    switch@0              1               1                         1500         on
    vsw1             primary          00:14:4f:f8:d9:6b igb3      1    switch@1              1               1                         1500         on
VDS
    NAME             LDOM             VOLUME         OPTIONS          MPGROUP        DEVICE
    vds0             primary          vol1                                           /export/home/LDOM/testvm_vdisk1
# ldm add-vdisk vdisk1 vol1@vds0 testvm  # 制御ドメインに登録したディスクをゲストドメインに割り当て
# ldm list-domain -o disk testvm
NAME
testvm
DISK
    NAME             VOLUME                      TOUT ID   DEVICE  SERVER         MPGROUP
    vdisk1           vol1@vds0                        0                        

※先にゲストドメインを作ってあげないといけない。
※仮想ディスクを一旦制御ドメインに登録して、制御ドメインからゲストドメインに割り当てるイメージ

 


仮想マシン作成

KVM ※実行前にブート可能なCDROMイメージを用意すること

# virt-install --connect=qemu:///system \
--name=[仮想マシン名] \
--hvm --accelerate \
--disk path=[仮想ディスクのパス],size=[仮想ディスクサイズ(GB)],device=disk,bus=virtio,format=qcow2 \
--ram=[メモリサイズ(MB)] \
--vcpus=[仮想CPU数] \
--cdrom [CDROMイメージのパス] \
--network network=[接続先仮想ネットワーク名],model=virtio \
--graphics vnc \
--vnc --os-type=linux

例 失敗してますが・・・
# virt-install --connect=qemu:///system --name=testvm --hvm --accelerate \
 --disk path=/vmdata/images/test.qcow2,size=8,device=disk,bus=virtio,format=qcow2 \
 --ram=2048 --vcpus=1 --cdrom /vmdata/ISO/CentOS-6.4-x86_64-bin-DVD1.iso --network network=default,model=virtio --vnc --os-type=linux
Starting install...
ドメインを作成中...                              |    0 B     00:00
ディスプレイをオープンできません:
Run 'virt-viewer --help' to see a full list of available command line options
Domain creation completed. You can restart your domain by running:
virsh --connect qemu:///system start testvm

成功すると仮想マシンが起動している

 # virsh list --all
 Id    名前                         状態
----------------------------------------------------
 1     win2000                        実行中
 2     testvm                         実行中
 -     windows8.1                     シャットオフ

/etc/libvirt/qemu以下に仮想マシン定義のxmlファイルができている

# ls /etc/libvirt/qemu
networks  testvm.xml  win2000.xml  windows8.1.xml
# virsh domblklist testvm
ターゲット ソース
------------------------------------------------
vda        /vmdata/images/test.qcow2
hdc        /vmdata/ISO/CentOS-6.4-x86_64-bin-DVD1.iso
# virsh domiflist testvm
インターフェース 種類     ソース  モデル   MAC
-------------------------------------------------------
-          network    default    virtio      52:54:00:8b:41:a4
OVM for SPARC
# ldm add-domain testvm
# ldm list-domain
NAME             STATE      FLAGS   CONS    VCPU  MEMORY   UTIL  UPTIME
primary          active     -n-cv-  UART    16    1984M    0.3%  1h 33m
testvm           inactive   ------
# ldm add-vcpu 32 testvm  # CPU割り当て
# ldm list-domain
NAME             STATE      FLAGS   CONS    VCPU  MEMORY   UTIL  UPTIME
primary          active     -n-cv-  UART    16    1984M    0.2%  1h 34m
testvm           inactive   ------          32
# ldm add-memory 4096M testvm # メモリ割り当て
# ldm list-domain
NAME             STATE      FLAGS   CONS    VCPU  MEMORY   UTIL  UPTIME
primary          active     -n-cv-  UART    16    1984M    0.2%  1h 34m
testvm           inactive   ------          32    4G
# ldm add-vnet id=0 vnet0 vsw0 testvm # NIC割り当て
# ldm add-vnet id=1 vnet1 vsw1 testvm # NIC 割り当て
# ldm list-domain -o network testvm
NAME
testvm
NETWORK
    NAME             SERVICE                     ID   DEVICE     MAC               MODE   PVID VID                  MTU   LINKPROP
    vnet0            vsw0                        0               00:14:4f:fb:7b:c7        1
    vnet1            vsw1                        1               00:14:4f:f8:65:42        1

 仮想マシン CUIコンソール接続

KVM
# virsh console [仮想マシン名]
ドメイン testvm に接続しました
エスケープ文字は ^] です

※「^]」はctrl+]
※他のセッションを奪う場合は–force オプションを付ける

OVM for SPARC ※CONS列の番号がポート番号

# ldm list-domain
NAME             STATE      FLAGS   CONS    VCPU  MEMORY   UTIL  UPTIME
primary          active     -n-cv-  UART    16    1984M    0.8%  2h 19m
testvm           bound      ------  5000    32    4G
# telnet localhost 5000

 仮想マシン停止

KVM
# virsh shutdown [仮想マシン名]
ドメイン [仮想マシン名] をシャットダウンしています

※acpiを有効にしておかないとシャットダウンできない

OVM for SPARC
# ldm stop-domain testvm
LDom testvm stopped

 

仮想マシン 強制停止

KVM
# virsh destroy [仮想マシン名]
ドメイン [仮想マシン名] は強制停止されました
※物理マシンの電源ブチ切りと同じです。良い子のみんなはしてはいけません。
※仮想マシンがフリーズしたときの最終手段

vrishコマンドのヘルプ

KVM
 # virsh help
グループ別コマンド:
 Domain Management (ヘルプのキーワード 'domain'):
    attach-device                  XML ファイルによるデバイスの接続
    attach-disk                    ディスクデバイスの接続
    attach-interface               ネットワークインターフェースの接続
    autostart                      ドメインの自動起動
    blkdeviotune                   ブロックデバイスの I/O チューニングパラメーターの設定または取得
    blkiotune                      ブロック I/O パラメーターの取得または設定
    blockcommit                    ブロックのコミット操作の開始
    blockcopy                      ブロックコピー操作の開始
    blockjob                       アクティブなブロック操作の管理
    blockpull                      既存のイメージからのディスクの配置
    blockresize                    ドメインのブロックデバイスの容量変更
    change-media                   CD またはフロッピードライブのメディアの変更
    console                        ゲストのコンソールへの接続
    cpu-baseline                   ベースライン CPU の計算
    cpu-compare                    XML ファイルに記載された CPU とホスト CPU の 比較
    cpu-stats                      ドメインの CPU 統計情報の表示
    create                         XML ファイルによるドメインの作成
    define                         XML ファイルによるドメインの定義(起動なし)
    desc                           ドメインの説明またはタイトルの表示または設定
    destroy                        ドメインの強制停止
    detach-device                  XML ファイルによるデバイスの切断
    detach-disk                    ディスクデバイスの切断
    detach-interface               ネットワークインターフェースの切断
    domdisplay                     ドメインのディスプレイ接続 URI
    domhostname                    ドメインのホスト名の表示
    domid                          ドメイン名または UUID からドメイン ID への変 換
    domif-setlink                  仮想インターフェースのリンクステートの設定
    domiftune                      仮想インターフェースのパラメーターの取得・設 定
    domjobabort                    ドメインの実行中ジョブの中止
    domjobinfo                     ドメインのジョブ情報
    domname                        ドメイン ID または UUID からドメイン名への変 換
    dompmsuspend                   電源管理機能を使用したドメインの穏やかな一時 停止
    dompmwakeup                    ドメインのサスペンド状態からの再開
    domuuid                        ドメイン名または ID からドメイン UUID への変 換
    domxml-from-native             ネイティブ設定からドメイン XML への変換
    domxml-to-native               ドメイン XML からネイティブ設定への変換
    dump                           解析用ファイルへのドメインのコアダンプ
    dumpxml                        XML 形式のドメイン情報
    edit                           ドメインの XML 設定の編集
    inject-nmi                     ゲストへの NMI の送信
    send-key                       ゲストへのキーコードの送信
    managedsave                    ドメインの状態の管理保存
    managedsave-remove             ドメインの管理保存の削除
    maxvcpus                       コネクションの最大仮想 CPU 数
    memtune                        メモリーのパラメーターの取得または設定
    migrate                        他ホストへのドメインのマイグレーション
    migrate-setmaxdowntime         最大許容停止時間の設定
    migrate-setspeed               マイグレーションの最大帯域の設定
    migrate-getspeed               マイグレーションの最大帯域の取得
    numatune                       NUMA パラメーターの取得または設定
    reboot                         ドメインの再起動
    reset                          ドメインのリセット
    restore                        ファイルの保存状態からドメインの復元
    resume                         ドメインの再開
    save                           ドメインの状態のファイルへの保存
    save-image-define              ドメインの状態保存ファイルの XML の再定義
    save-image-dumpxml             XML 形式の状態保存されたドメイン情報
    save-image-edit                ドメインの状態保存ファイルの XML の編集
    schedinfo                      スケジューラーのパラメーターの表示/設定
    screenshot                     カレントドメインのコンソールについてのスクリ ーンショットの取得およびファイルへの保存
    setmaxmem                      最大メモリー上限の変更
    setmem                         メモリー割り当て量の変更
    setvcpus                       仮想 CPU 数の変更
    shutdown                       ドメインの穏やかな停止
    start                          停止状態の(定義済み)ドメインの起動
    suspend                        ドメインの一時停止
    ttyconsole                     TTY コンソール
    undefine                       ドメインの定義解除
    update-device                  XML ファイルによるデバイスの更新
    vcpucount                      ドメインの仮想 CPU 数
    vcpuinfo                       ドメインの仮想 CPU 情報の表示
    vcpupin                        ドメインの仮想 CPU アフィニティーの制御または表示
    emulatorpin                    ドメインのエミュレーターアフィニティの制御ま たは確認
    vncdisplay                     VNC ディスプレイ
 Domain Monitoring (ヘルプのキーワード 'monitor'):
    domblkerror                    ブロックデバイスにおけるエラーの表示
    domblkinfo                     ドメインのブロックデバイス容量の情報
    domblklist                     ドメインの全ブロックの一覧表示
    domblkstat                     ドメインのデバイスブロックの状態の取得
    domcontrol                     ドメイン制御インターフェース状態
    domif-getlink                  仮想インターフェースのリンクステートの取得
    domiflist                      すべてのドメインの仮想インターフェースの取得
    domifstat                      ドメインのネットワークインターフェースの状態 取得
    dominfo                        ドメインの情報
    dommemstat                     ドメインのメモリー統計情報の取得
    domstate                       ドメインの状態
    list                           ドメインの一覧表示
 Host and Hypervisor (ヘルプのキーワード 'host'):
    capabilities                   ケイパビリティ
    freecell                       NUMA 空きメモリー
    hostname                       ハイパーバイザーのホスト名の表示
    node-memory-tune               ノードメモリーパラメーターの取得または設定
    nodecpustats                   ノードの CPU 統計情報の表示
    nodeinfo                       ノード情報
    nodememstats                   ノードのメモリー統計の表示
    nodesuspend                    指定された間ホストデバイスの一時停止
    qemu-attach                    QEMU 接続
    qemu-monitor-command           QEMU モニターコマンド
    qemu-agent-command             QEMU ゲストエージェントコマンド
    sysinfo                        ハイパーバイザーのシステム情報の表示
    uri                            ハイパーバイザーの正規化 URI の表示
    version                        バージョンの表示
 Interface (ヘルプのキーワード 'interface'):
    iface-begin                    現在のインターフェース設定のスナップショット 作成、後からコミット (iface-commit) または復元 (iface-rollback) 可能
    iface-bridge                   ブリッジデバイスの作成および既存ネットワーク デバイスへの接続
    iface-commit                   iface-begin 後の変更のコミットおよび復元ポイ ントの開放
    iface-define                   XML ファイルによる物理ホストインターフェース の定義(起動なし)
    iface-destroy                  物理ホストインターフェイスの停止("if-down"  による無効化)
    iface-dumpxml                  XML 形式のインターフェース情報
    iface-edit                     XML 設定を物理ホストインターフェイス用に編集
    iface-list                     物理ホストのインターフェイスの一覧表示
    iface-mac                      インターフェース名からインターフェースの MAC アドレスへの変換
    iface-name                     インターフェースの MAC アドレスからインターフェース名への変換
    iface-rollback                 iface-begin により作成された以前の保存された 設定へのロールバック
    iface-start                    物理ホストインターフェイスの開始("ifup" による有効化)
    iface-unbridge                 スレーブデバイスの切断後、ブリッジデバイスの 定義解除
    iface-undefine                 物理ホストインターフェイスの定義解除(設定か ら削除)
 Network Filter (ヘルプのキーワード 'filter'):
    nwfilter-define                XML ファイルによるネットワークフィルターの定 義または更新
    nwfilter-dumpxml               XML 形式のネットワークフィルター情報
    nwfilter-edit                  ネットワークフィルターの XML 設定の編集
    nwfilter-list                  ネットワークフィルターの一覧表示
    nwfilter-undefine              ネットワークフィルターの定義解除
 Networking (ヘルプのキーワード 'network'):
    net-autostart                  ネットワークの自動起動
    net-create                     XML ファイルによるネットワークの作成
    net-define                     XML ファイルによるネットワークの登録(起動な し)
    net-destroy                    ネットワークの強制停止
    net-dumpxml                    XML 形式のネットワーク情報
    net-edit                       ネットワークの XML 設定の編集
    net-info                       ネットワーク情報
    net-list                       ネットワークの一覧表示
    net-name                       ネットワーク UUID からネットワーク名への変換
    net-start                      停止状態の(定義済み)ネットワークの起動
    net-undefine                   停止状態のネットワークの登録削除
    net-update                     update parts of an existing network's configuration
    net-uuid                       ネットワーク名からネットワーク UUID への変換
 Node Device (ヘルプのキーワード 'nodedev'):
    nodedev-create                 ノードに XML ファイルで定義されたデバイスの作成
    nodedev-destroy                ノードのデバイスの削除(停止)
    nodedev-detach                 デバイスドライバーからノードデバイスの切断
    nodedev-dumpxml                XML 形式のノードデバイス詳細
    nodedev-list                   ホストにあるデバイスの一覧表示
    nodedev-reattach               デバイスドライバーへのノードデバイスの再接続
    nodedev-reset                  ノードデバイスのリセット
 Secret (ヘルプのキーワード 'secret'):
    secret-define                  XML ファイルによるシークレットの定義または変 更
    secret-dumpxml                 XML 形式の secret 属性
    secret-get-value               シークレット値の出力
    secret-list                    シークレットの一覧表示
    secret-set-value               シークレット値の設定
    secret-undefine                シークレットの定義解除
 Snapshot (ヘルプのキーワード 'snapshot'):
    snapshot-create                XML によるスナップショットの作成
    snapshot-create-as             一組の引数からのスナップショットの作成
    snapshot-current               カレントスナップショットの取得または設定
    snapshot-delete                ドメインのスナップショットの削除
    snapshot-dumpxml               ドメインのスナップショットの XML 形式ダンプ
    snapshot-edit                  スナップショットの XML の編集
    snapshot-info                  スナップショット情報
    snapshot-list                  ドメインのスナップショットの一覧表示
    snapshot-parent                スナップショットの親の名前の取得
    snapshot-revert                ドメインのスナップショットへの復帰
 Storage Pool (ヘルプのキーワード 'pool'):
    find-storage-pool-sources-as   潜在的なストレージプールソースの検索
    find-storage-pool-sources      潜在的なストレージプールソースの探索
    pool-autostart                 プールの自動起動
    pool-build                     プールの構築
    pool-create-as                 一組の引数からプールの作成
    pool-create                    XML ファイルによるプールの作成
    pool-define-as                 一組の引数からのプールの定義
    pool-define                    XML ファイルによるプールの定義(起動なし)
    pool-delete                    プールの削除
    pool-destroy                   プールの強制停止
    pool-dumpxml                   XML 形式のプール情報
    pool-edit                      ストレージプールの XML 設定の編集
    pool-info                      ストレージプール情報
    pool-list                      プールの一覧表示
    pool-name                      プール UUID からプール名への変換
    pool-refresh                   プールのリフレッシュ
    pool-start                     (以前に定義した)停止状態のプールの起動
    pool-undefine                  停止状態のプールの定義解除
    pool-uuid                      プール名からプール UUID への変換
 Storage Volume (ヘルプのキーワード 'volume'):
    vol-clone                      ボリュームのクローン
    vol-create-as                  一組の引数からボリュームの作成
    vol-create                     XML ファイルによるボリュームの作成
    vol-create-from                別のボリュームを入力として使用したボリューム の作成
    vol-delete                     ボリュームの削除
    vol-download                   ボリュームのファイルへのダウンロード
    vol-dumpxml                    XML 形式のボリューム情報
    vol-info                       ストレージボリューム情報
    vol-key                        任意のボリューム名またはパスのボリュームキー の表示
    vol-list                       ボリューム一覧の表示
    vol-name                       任意のボリュームキーまたはパスのボリューム名 の表示
    vol-path                       任意のボリューム名またはキーのボリュームパス の表示
    vol-pool                       任意のボリュームキーまたはパスのストレージプ ールの表示
    vol-resize                     ボリュームの容量変更
    vol-upload                     ボリュームへのファイルのアップロード
    vol-wipe                       ボリュームの完全消去
 Virsh itself (ヘルプのキーワード 'virsh'):
    cd                             カレントディレクトリーの変更
    connect                        ハイパーバイザーへの(再)接続
    echo                           引数のエコー
    exit                           対話式ターミナルの終了
    help                           ヘルプの表示
    pwd                            カレントディレクトリーの表示
    quit                           対話式ターミナルの終了

ダメだ。ぜんぜんまとまってない・・・
 
 

[linux]rsyslogで特定の文字列を含むメッセージを別のファイルに出力させる

rsyslogで特定の文字列を含むメッセージを別のファイルに出力させる方法。
iptablesのログなどを/var/log/messages以外に出力させたいときなどに使用可能。
「iptables」という文字列を含むメッセージを/var/log/iptablesに出力させるにはこんな感じ。「~」で除外して/var/log/messagesに出力させなくするのがポイント。

# vi /etc/rsyslog.conf
:msg,contains,“iptables” /var/log/iptables;LocalFormat
:msg,contains,”iptables” ~
:(省略)
*.info;mail.none;authpriv.none;cron.none                /var/log/messages;LocalFormat

[linux]rsyslog(messagesなど)にログレベル(severity,重大度)を表示する

rsyslogで出力するシステムログにログレベル(シビリティ・重大度)を表示させる方法。
syslogでは起動オプションを付ける方法であったが、rsyslogでは設定ファイルに定義する。
設定ファイル(/etc/rsyslog.conf)には、ログレベルを追加したログフォーマットを「$template」で始まる行で定義し、出力する定義のアクションにログフォーマットを指定する。

# vi /etc/rsyslog.conf
:(省略)
$template LocalFormat,”%timereported% %hostname% %syslogfacility-text%.%syslogseverity-text%: %syslogtag%%msg:::sp-if-no-1st-sp%%msg:::drop-last-lf%\n”
:(省略)
*.info;mail.none;authpriv.none;cron.none /var/log/messages;LocalFormat

出力されるログはこんな感じ

Oct 20 03:21:26 hogehoge kern.warning: kernel: [iptables SYN FLOOD] IN=eth0 OUT= MAC=02:16:3e:4f:39:

「%syslogtag%」やら「%syslogfacility-text%」の意味は

# man rsyslog.conf

の「Available Properties」の項に書いてあるので、そっちを見て。

[linux]rshのタイムアウト

残念ながらRHEL(RedHat)のrshコマンドにはタイムアウトのオプションが実装されていない。
rsh実行中にOSPFなどの動的ルーティングで経路が変わったりネットワークの状態に変化があった場合、
rshコマンドのパケットが戻ってこれずに、いつまで経ってもrshコマンドが終了しないという困った状態になる。
rshコマンドのタイムアウトが実装されていない場合の回避方法。
スクリプト使います。
ポイントは

  • rshをバックグラウンド実行
  • bashの特殊変数SECONDSを使用して、スクリプト開始からの経過時間を取得し、それを利用する

です。

#!/bin/bash
# タイムアウト秒数指定
timeoutsec=120
rsh "リモートコマンド" &
# バックグラウンド実行(rsh)のpidを取得
bpid=$!
startsec=${SECONDS}
while [[ 1 == 1 ]]
do
    # rshコマンド終了チェック
    stdout=$( ps auwwwwx | egrep "^.+[[:space:]]${bpid}[[:space:]]")
    if [[ -z "${stdout}" ]];then
        # 終了している
    	break
    fi
    # 経過分数を取得
    nowsec=${SECONDS}
    # rsh開始からの経過分数取得
    (( divsec=${nowsec}-${startsec} ))
    if (( ${divsec} > ${timeoutsec} ));then
    	# タイムアウト
    	kill -9 ${bpid}
    fi
    sleep 10
done

 

[linux]RPMパッケージの依存性を調べる方法

rpmパッケージのパッケージ依存を調べる方法

インストール済みパッケージの場合

rpm -qR [パッケージ名]

で調べられる。

# rpm -qR kernel
rpmlib(VersionedDependencies) <= 3.0.3-1
fileutils
module-init-tools
initscripts >= 8.11.1-1
kernel-firmware >= 2.6.32-220.4.1.el6
grubby >= 7.0.4-1
dracut-kernel >= 002-18.git413bcf78
/sbin/new-kernel-pkg
/sbin/new-kernel-pkg
/bin/sh
/bin/sh
/bin/sh
rpmlib(FileDigests) <= 4.6.0-1
rpmlib(PayloadFilesHavePrefix) <= 4.0-1
rpmlib(CompressedFileNames) <= 3.0.4-1
rpmlib(PayloadIsXz) <= 5.2-1
rpmlib(VersionedDependencies) <= 3.0.3-1
fileutils
module-init-tools
initscripts >= 8.11.1-1
kernel-firmware >= 2.6.32-220.4.2.el6
grubby >= 7.0.4-1
dracut-kernel >= 002-18.git413bcf78
/sbin/new-kernel-pkg
/sbin/new-kernel-pkg
/bin/sh
/bin/sh
/bin/sh
rpmlib(FileDigests) <= 4.6.0-1
rpmlib(PayloadFilesHavePrefix) <= 4.0-1
rpmlib(CompressedFileNames) <= 3.0.4-1
rpmlib(PayloadIsXz) <= 5.2-1
rpmlib(VersionedDependencies) <= 3.0.3-1
fileutils
module-init-tools
initscripts >= 8.11.1-1
kernel-firmware >= 2.6.32-220.7.1.el6
grubby >= 7.0.4-1
dracut-kernel >= 002-18.git413bcf78
/sbin/new-kernel-pkg
/sbin/new-kernel-pkg
/bin/sh
/bin/sh
/bin/sh
rpmlib(FileDigests) <= 4.6.0-1
rpmlib(PayloadFilesHavePrefix) <= 4.0-1
rpmlib(CompressedFileNames) <= 3.0.4-1
rpmlib(PayloadIsXz) <= 5.2-1

 

rpmパッケージファイルから調べる場合

rpm -qpR [パッケージファイルパス]

で調べられる。

# rpm -qpR zabbix-1.8.5-2.el6.JP.x86_64.rpm
警告: zabbix-1.8.5-2.el6.JP.x86_64.rpm: ヘッダ V4 DSA/SHA1 Signature, key ID f32904ff: NOKEY
/bin/sh
/usr/sbin/useradd
logrotate
rpmlib(CompressedFileNames) rpmlib(FileDigests) rpmlib(PayloadFilesHavePrefix) rpmlib(PayloadIsXz)

[linux]パケットキャプチャ

linuxでパケットキャプチャ
通信してるか確かめるだけなら

# tcpdump -i <NICデバイス名> port <ポート番号> and host <IPアドレス>

通信している内容も確かめたいときは

# tcpdump -Xx -s 4096 -i <NICデバイス名> dst port <ポート番号>? and? src host? <IPアドレス>

後でwiresharkで確かめたいときは(ファイルに保存)

# tcpdump -w <保存するファイル名> -s 4096 -i <NICデバイス名> dst port <ポート番号>? and? src host? <IPアドレス>

ってか最初からwiresharkでやれよ!
CUIフェチなもんで。

[tomcat]tomcatがフリーズしたときの原因究明方法(完全自分用メモ)

tomcatがフリーズしたときの原因究明方法
tomcatのプロセスが生きてるのに、tomcatが反応しないときのフリーズ原因究明方法は、tomcatのプロセス(java)に対してSIGQUITシグナルを送信してJavaスレッドダンプを出力させて、それを見て無限ループもしくはデットロックしている場所を見つける。
Javaスレッドダンプはtomcatからみて標準出力、つまりcatalina.outに出力される。
Javaスレッドダンプには、出力時点で実行中のスレッドの情報(実行状態およびソース上の実行箇所)、Javaのデットロックの情報が出力されている。

# pid=$( ps auwwwwx | egrep “^tomcat.+java ” | grep -v grep | awk ‘{print $2}’ )
# kill -3 ${pid}
# less /usr/local/tomcat/logs/catalina.out

[linux]syslog(messagesなど)にログレベルを表示する

システムログ(syslogで出力するログ)に、ログレベルを出力させる方法。
ログレベル(重大度)でログ監視させたい場合に非常に便利。
rsyslog版はこちら
syslogdの起動オプションに「-SS」を追加する。
RHEL(CentOS)ならこんな感じ。

# vi /etc/sysconfig/syslog
:(省略)
SYSLOGD_OPTIONS=”-m 0 -SS
:(省略)

オプションを追加したらsyslogdを再起動

# service syslog restart

/var/log/messagesにはこんな感じで出力される

Aug 5 01:19:39 <syslog.info> hostname syslogd 1.4.1: restart.
Aug 5 01:19:39 <kern.info> hostname kernel: klogd 1.4.1, log source = /proc/kmsg started.

CDブートLinuxを使った、ディスク内容を完全消去する方法

CDブートLinuxを使った、ディスク内容を完全消去する方法。
CDブートできるものであればKNOPIXでも各種Linuxのレスキューモードでも何でも良い。
以下のコマンドを実行。

# dd if=/dev/urandom of=/dev/hda bs=104857600
# dd if=/dev/urandom of=/dev/hda bs=104857600
# dd if=/dev/zero of=/dev/hda

bsオプションは一度に書き込むバイト数。これを指定しないとデフォルトのものすごく小さな値が使われるので、ちまちまディスクを書き込むことになり、ものすごく時間がかかる。
/dev/urandomはランダムな値を出力する特殊なファイル。これを使ってディスク全体を2回ほど上書きすれば、ぐちゃぐちゃになるので復元不可能になる。
/dev/zeroは、まっさらな値を出力する特殊なファイル。これを使ってディスク全体を書き込むと、何にも記録されていない状態になる。
上では分けて書いたが、「;」を使って一行に一気に書いて実行すれば、一回一回の上書きごとにコマンドを打つ必要も待つ必要もない

# dd if=/dev/urandom of=/dev/hda bs=104857600;dd if=/dev/urandom of=/dev/hda bs=104857600;dd if=/dev/zero of=/dev/hda