カイワレの大冒険 Third

技術的なことや他愛もないことをたまに書いてます

プロセスの現在の状況を追うためにstraceを使ったという話し

なんかyumでパッケージ入れていたら、インストール途中で進まなくなってしまい、ニッチモサッチモいかなかったので、strace使ったという話し。とりあえず備忘録。

httpdでもなんでもいいのですが、yum経由でパッケージを入れようとする。そんな日の出来事。通常はこんなこと起こらないと思うけど。

# yum install httpd
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
Setting up Install Process
Resolving Dependencies
--> Running transaction check
(以下中略)

Downloading Packages:
Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing     : httpd [################################################                                 ] 1/1

なんか止まってしもうた… 全然進まん。

というわけです。ログとかになんか吐いてくれたり、変なプロセス立ち上がってくれてればわかりやすいのですが、どうも分からない。

ということで、トレースしましょうという話し。 まず該当PIDを得る。

# ps auxww |grep yum
root      4871  6.0  0.1 266324 45848 pts/0    S+   15:16   0:02 /usr/bin/python /usr/bin/yum install httpd
root      4876  0.0  0.0  65368   876 pts/1    S+   15:17   0:00 grep yum

4871が止まってしまっているPIDですな。フリーズフリーズ。

んで、今どうなってるのか知りたかったので、ここで「strace」を使う。

# strace -p4871
Process 4871 attached - interrupt to quit
write(18, "\340\255\242\340\211\112: \143\103\146\343\253\224\342\222\216 www-data \341\211\157\345\455"..., 75 <unfinished ...>
Process 4871 detached

ということで、ユーザ・グループ情報周りで何か書き込んでるとき、とまってるっぽい。
ので、ぱっと調べてみる。

# id www-data
id: www-data: そのようなユーザは存在しません

# less /etc/shadow
# less /etc/group

とかとか。 グループに残ってた。ので、vigrで編集して、www-data削除。

# vigr
このシステムではシャドウグループが使われています。
今すぐ /etc/gshadow を編集しますか [y/n]? y

その上で、「yum install httpd」したら、
無事installできましたという話し。もっと良いアプローチあるかも。

vigrで直接編集しちゃったけど、以下で良かった気がするなぁ。もう手遅れだけど…

# /usr/sbin/groupdel www-data
groupdel: error removing group entry
groupdel: error removing shadow group entry

ひとまずgdb使わなくても、システムコールだけで行けるというケースでした。
こういうとき他の人がどうアプローチするか気になるので、誰か続きをば。


P.S.
そもそもインストールされてないはずのパッケージに関するグループ情報が既にあること自体おかしいのだけれど、このケースは、yum install httpdを実行している最中に何かが原因で途中で処理を止めてしまって、そのためなのか、再実行したら上述した症状を呈し、中途半端に情報が残っていたというレアケースだと思われる。