2012-10-20

ディスク入出力中のプロセスを表示

Linux 上で何らかのプロセスがディスク入出力を行なっているとき, そのプロセスを突き止める方法が書かれているページを見つけた.
watch -n 1 "(ps aux | awk '\$8 ~ /D/  { print \$0 }')"
この方法によってディスク入出力を頻繁に行なっている PID を突き止めることができる. どのファイルにアクセスしているかは,
ls -l /proc/PID/fd/
(PIDの部分はそのプロセスのPIDに置き換える) で確認できる.

FFmpeg

FFmpeg は, フリーの映像・音声処理ツールである. Linux 上でも使用することができるが, ビルド方法がやや特殊であるため, ここに書いておく.
  1. ソースを取得する.
    $ git clone git://source.ffmpeg.org/ffmpeg
    $ cd ffmpeg
  2. ビルドする. configure の際に, nonfree を有効にすると, フリーでない (再頒布できない) バイナリが生成される. 個人で使用する分には, nonfree が良いだろう. その他, 色々とオプションをつけておく.
    $ ./configure --enable-nonfree --enable-gpl --enable-version3 --enable-libmp3lame
    $ make
  3. インストールする. プログラムとマニュアルだけをインストールする場合は, install ではなく, install-progs ルールを使用する.
    $ sudo make install-progs

RHELでは, 以下のパッケージを予めインストールしておく.

  • lame-devel, lame-libs, rpmfusion.
  • yasm, epel.
  • ...

2012-10-09

NFS4にて所有者がnobodyになる

NFS4とLDAPとを使用していると, 稀にIDMAP (UID/GIDとユーザ名/グループ名との変換) で失敗することがある. 以下のようなログが出力される.
nslcd[1455]: [3c9869] no available LDAP server found
nfsidmap[1637]: nss_getpwnam: name 'hoge' not found in domain 'example.com'
nslcd[1455]: [334873] no available LDAP server found
このような時, 以下のコマンドでキャッシュをクリアすればよい.
sudo nfsidmap -v -u nobody

2012-07-19

mozc を英語配列レイアウトで使用する

Sawaによって提供されている Fedora の mozc は, 以前は US 配列のキーボードで使用することができた. ところが, アップデートによって, システムのレイアウトにかかわらず日本語配列に設定が上書きされてしまうようになった. これを直すには, 以下の様に /usr/share/ibus/component/mozc.xml に変更を加える.
--- /tmp/mozc.xml 2012-07-19 23:29:58.083716090 +0900
+++ /usr/share/ibus/component/mozc.xml 2012-07-19 23:25:29.366020706 +0900
@@ -14,7 +14,7 @@
   <language>ja</language>
   <icon>/usr/share/ibus-mozc/product_icon.png</icon>
   <symbol>&#x3042;</symbol>
-  <layout>jp</layout>
+  <layout>default</layout>
   <name>mozc-jp</name>
   <hotkeys>Control+space,Zenkaku_Hankaku</hotkeys>
   <longname>Mozc</longname>

2012-07-18

Milkyway がキー入力を受け付けない

Synopsys Milkyway がキー入力を受け付けないことがある. この時には, 環境変数 XMODIFIERS が設定されていないか確認する. もし設定されていたら, 以下のように XMODIFIERS を消す.
$ export -u XMODIFIERS # Borne shell
% unsetenv XMODIFIERS # C shell

2012-07-10

error while loading shared libraries というエラーが出た時

必要な共有オブジェクトが不足していると, 以下のようなエラーがでる.
error while loading shared libraries: libXXX.so.X: cannot open shared object file: No such file or directory

この場合, yum providesで探すことができる. まず, どのような名前の共有オブジェクトを探しているかを確認し, 以下のコマンドにより検索する.

$ sudo yum provides '*/libXXX.so.X'
これにより, この共有オブジェクトを提供しているパッケージ名が表示される.

もしホストが x86_64 で実行しているバイナリが32ビットのものである場合は, i586, i686 などのサフィックスのつくパッケージをインストールすると良い.

2012-06-14

共有オブジェクトのアップデート

ライブラリがアップデートされた際には, そのライブラリに含まれる共有オブジェクトを使用しているサービスを再起動する必要がある.

削除された共有オブジェクトを使用しているプロセスを探す

以下のコマンドにより, アップデートなどによって削除された共有オブジェクトを依然としてリンクしているプロセスのPIDを探すことができる.
sudo grep '\.so.*deleted' /proc/*/maps
同時にコマンド名を調べる時は,
sudo grep '\.so.*deleted' /proc/*/maps | cut -f3 -d/ | uniq | xargs ps

再起動

再起動するべきプロセスが見つかったら, service コマンドにより再起動を行えば良い.