仮想コンソールマネージャ(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 |
|
OVM for SPARC |
|
OVM for SPARCのほうが割り当てリソースなども表示されるので便利
仮想マシンの詳細表示
KVM |
|
ストレージプールの一覧表示
KVM |
|
OVM for SPARCにはストレージプールの概念はない。
ストレージプールの情報表示
KVM |
|
仮想ネットワークの表示
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 |
|
仮想マシンの管理
正直、GUI(仮想マシンマネージャ)から管理したほうが楽ですよ。どうせ仮想マシンのGUIコンソール使うんだし。現場がSSHしかリモート接続許可していないとか、CUI萌え~な人はどうぞ。
仮想マシン用ディスク作成
KVM |
例
|
OVM for SPARC |
※先にゲストドメインを作ってあげないといけない。 |
仮想マシン作成
KVM | ※実行前にブート可能なCDROMイメージを用意すること
例 失敗してますが・・・
/etc/libvirt/qemu以下に仮想マシン定義のxmlファイルができている
|
OVM for SPARC |
|
仮想マシン CUIコンソール接続
KVM |
※「^]」はctrl+] |
OVM for SPARC | ※CONS列の番号がポート番号
|
仮想マシン停止
KVM |
※acpiを有効にしておかないとシャットダウンできない |
OVM for SPARC |
|
仮想マシン 強制停止
KVM |
|
vrishコマンドのヘルプ
KVM |
|
ダメだ。ぜんぜんまとまってない・・・
[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