なんか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を実行している最中に何かが原因で途中で処理を止めてしまって、そのためなのか、再実行したら上述した症状を呈し、中途半端に情報が残っていたというレアケースだと思われる。