壊れたportageを手動で修復する
1.
portageを手動で修復する
目的
このセクションでは、emerge sys-apps/portageが実行できない場合に、portageを手動で更新・修復する方法を説明します。
難しくはありませんが、それでも十分慎重に行う必要がありますので、以下のステップに正確に従って下さい(ただし必要ならば常識を適用して下さい)。
注意: 以下の手順を自動化するスクリプトはこちらから入手できます。
|
portageのtarballを入手する
最初のステップでは、portageの最新バージョンのtarballを入手します。以下の文章では例としてportage-2.1.1を使います(これが執筆時点で最新の安定バージョンです)が、できればPortageツリーから入手可能なバージョンに置き換えて下さい。
警告:
もし現在インストールしているpythonのバージョンが2.4未満ならば(python -Vで表示されます)、それと互換性のあるportageのバージョンを選択する必要があります。少なくともpython 2.3を使用しているなら、portage-2.1.1.tar.bz2を使って下さい。python 2.2ならば、portage-2.0.51.22.tar.bz2を使って下さい。
|
portageが動作しなくなってしまった理由にもよりますが、tarballを取得するのにportageが使える可能性が残っていますので、最初のステップとしてemerge --fetchonly sys-apps/portageを実行して下さい。これがうまくいかない場合のみ、以下の手順でtarballを手動取得する必要があります。
コード表示 1.1: wgetでportageのtarballを取得する |
# wget -P /usr/portage/distfiles http://distfiles.gentoo.org/distfiles/portage-2.1.1.tar.bz2
|
以上の手順で、tarballが/usr/portage/distfiles/portage-2.1.1.tar.bz2として準備できます。
インストール済みのバージョンを置き換える
次のステップではtarballをどこか一時的な領域に展開しますが、例えばそれを/root/portage-recoverとすると、コマンドは以下のようになります。
コード表示 1.2: portageのtarballを展開する |
# cd /root
# mkdir portage-recover
# cd portage-recover
# tar xfj /usr/portage/distfiles/portage-2.1.1.tar.bz2
|
ここまで来ればあとは、現在インストールしているpythonとbashのファイルを、tarballのものと置き換えるだけです(ほとんどの場合はということですが)。そのためには以下を実行して下さい。
コード表示 1.3: インストール済みのファイルを置き換える |
# cd /root/portage-recover/portage-2.1.1
# cp -R pym bin /usr/lib/portage/
|
GentooをFreeBSD上で使用しているのでなければ、sedラッパースクリプトを削除したほうが良いでしょう。このスクリプトは、必要ない上に古いバージョンのbashでは問題を引き起こすことで知られています。
コード表示 1.4: sedラッパースクリプトを削除する |
# rm -f /usr/lib/portage/bin/sed
|
注意:
portageを意図せず「unmerge」で削除してしまった場合や、もしくはそのほかの理由で/etc/make.globalsがない場合は、cnf/make.globalsも/etcにコピーして戻して下さい。これをしないと、portageがおかしな挙動を示すかもしれません。
|
注意:
portageの以前のバージョンが2.1未満だった場合は、次のステップに進む前にemerge --metadataを実行して下さい。これは、バージョン2.1以降で使用されている新フォーマットにebuildのmetadataを変換する必要があるためです。portageの以前のバージョンが分からない場合でも、このコマンドを実行してしまって構いません。
|
これで正常なportageが再びインストールできているはずです。しかしシステムを不整合の無い状態にするために、emerge sys-apps/portageをもう一度すぐに実行して下さい。
emergeを実行しようとして、command not foundというエラーメッセージを受け取った場合は、シンボリックリンクを再作成する必要があります。
コード表示 1.5: emergeへのシンボリックリンクを再作成する |
# ln -s ../lib/portage/bin/emerge /usr/bin/emerge
|
もし上記のステップでうまく行かなかった場合は、portageの破損ではなく、この文書の範疇を超えた他の問題と考えられます。よくある問題の一覧を再度確認し、またbugzillaで問題が報告されていないか見てみて下さい。
このドキュメントの内容は、他のものが明示されない限りは、
CC-BY-SA-2.5ライセンスです。
Gentoo Name and Logo Usage Guidelines (日本語訳)が適用されます。
|