WebOS Goodies

WebOS の未来を模索する、ゲームプログラマあがりの Web 開発者のブログ。

WebOS Goodies へようこそ! WebOS はインターネットの未来形。あらゆる Web サイトが繋がり、共有し、協力して創り上げる、ひとつの巨大な情報システムです。そこでは、あらゆる情報がネットワーク上に蓄積され、我々はいつでも、どこからでも、多彩なデバイスを使ってそれらにアクセスできます。 WebOS Goodies は、さまざまな情報提供やツール開発を通して、そんな世界の実現に少しでも貢献するべく活動していきます。
Subscribe       

パッケージのブロックへの対処方法

先週末は久々になんの予定もなかったので、溜まっていたサーバーメンテナンスの作業を済ましてしまいました。今週はその作業から書いておいて役に立ちそうなものをピックアップして書いていこうと思います。項目ごとに分けて書いていくので、今週はほぼ毎日ペースで投稿できるかと思います。

本日は、うちの GentooLinux で "sys-apps/shadow" というパッケージが "sys-apps/pam-login" にブロックされて更新できないという現象を例にして、このような場合への対処方法をご紹介します。

ブロックする原因の調査

数週間前からだと思うのですが、 "emerge –update –pretend world" すると、こんな風に表示されるようになりました。

Calculating world dependencies... done!
[blocks B     ] sys-apps/pam-login (is blocking sys-apps/shadow-4.0.15-r2)
[ebuild     U ] sys-apps/shadow-4.0.15-r2 [4.0.14-r1]

"[blocks B ]" という表示は、 直後に表示されているパッケージが別のパッケージをブロックしていて、アップデートできないことを示しています。上記の場合、 "sys-apps/pam-login" が "sys-apps/shadow" をブロックしているということになります。

このようなときは、ブロックしているパッケージ(今回なら "sys-apps/pam-login")をアンインストールしなければ正常にアップデートすることができません。しかし、安易にパッケージを削除してしまうと、システムの動作に支障をきたすことがあります。とくに今回は "sys-apps/pam-login" といういかにも重要そうなパッケージなので、ちょっと怖いですね(^^;。そういうときは、以下のコマンドで changelog を確認してみましょう。

emerge --changelog --update --pretend sys-apps/shadow

これで、今回アップデートする分の changelog が表示されます。その中から pam-login の記述を探すと、以下の部分が該当しそうです。

12 Mar 2006; Diego Petten� <flameeyes@gentoo.org> +files/login.defs,
+files/login.pamd, +shadow-4.0.14-r2.ebuild:
Merge pam-login back into shadow, as 4.x version was already being used;
this means that upgrade from 4.0.14-r1 requires to remove pam-login before.

どうやら pam-login の機能が shadow にマージされたようです。はっきりと "requires to remove pam-login before" と書いてあるので、 "sys-apps/pam-login" は削除してしまっても大丈夫そうですね。

安全な更新方法

削除するパッケージがさほど重要なものでない場合、単純にブロックしているパッケージを "emerge –unmerge" で削除してから普通にシステム全体を更新すれば OK です。しかし、今回のようにシステムの根幹を支えるパッケージの場合、安易に削除してその後のパッケージ更新でトラブルがあった場合、最悪システムが起動不能に陥ってしまいます。

そのようなリスクを最小限に抑えるため、以下のように emerge を実行します。

emerge --buildpkgonly --nodeps shadow && emerge -C pam-login && emerge --usepkgonly shadow

このコマンドは、概ね以下のような処理を行います。

  1. shadow をコンパイルして、バイナリパッケージを作成。ただしこの時点ではまだインストールしない。
  2. pam-login をアンインストール。
  3. (1) で作成したバイナリパッケージをインストール。

(1) の時点でコンパイルエラーが出たとしても、 pam-login はまだ生きているのでシステムの動作に支障はありません。また、 (3) は単にバイナリをインストールしているだけなので、エラーが発生する可能性はかなり低いはずです。これでも (3) の作業中に停電したりするとまずいと思われますが、そこは日頃の行いが試されるということで(^^;。この方法はクリティカルなパッケージを差し替えるときに常套手段として使えます。覚えておくと良いと思います。

もっとも、 VMware ならスナップショットを作っておくというのが一番安全ですけどね!(゜∀゜)

関連記事

この記事にコメントする

Recommendations
Books
「Closure Library」の入門書です。
詳しくはこちらの記事をどうぞ!
Categories
Recent Articles