3連休がっつり休んでしまったせいなのか夏休みぼけをしていた私。
ついうっかりこんなコマンドを朝出社してすぐに実行してしまいました。
1
|
# yum -y remove libcurl
|
消えてゆく。。。PHPもyumもrpmも・・・
泣きそうでしたが、再インストールするわけにも行かないので復旧をさせようと。
復旧手順は意外と単純。
※rpmが消えていない他のサーバで作業すること
1.CentOSのrpmパッケージをを取得してくる。
2.rpm2cpioで適当なフォルダに展開
3.展開したフォルダをtarで固める
4.rpmを消してしまった鯖に転送して展開する
5.rpmコマンドを使ってyumをいれる
ということで早速作業
※手元にCentOS5.5の鯖しかなかったので最初はCentOS5.5で作業しました。これが悲劇の・・・
1.CentOSのrpmパッケージをを取得してくる。
1
2
3
4
|
$ mkdir -p ~/rpm/tmp
$ cd ~/rpm
$ wget http://ftp.riken.jp/Linux/centos/6/os/i386/Packages/rpm-4.8.0-12.el6.i686.rpm
$ wget http://ftp.riken.jp/Linux/centos/6/os/i386/Packages/rpm-libs-4.8.0-12.el6.i686.rpm
|
こんな感じにパッケージをwgetで普通にとってきます。
2.rpm2cpioで適当なフォルダに展開
1
2
3
4
5
6
7
8
9
10
|
$ cd tmp/
$ rpm2cpio ../rpm-4.8.0-12.el6.i686.rpm | cpio -id
cpio: warning: skipped 36771 bytes of junk
cpio: warning: skipped 18244 bytes of junk
cpio: warning: archive header has reverse byte-order
....
cpio: warning: skipped 11627 bytes of junk
cpio: ?J?!????5?>s??=w??>Iw??????N;?5D??9B????ל?g4-??: unknown file type
cpio: premature end of file
|
あれ、展開しようとするとなんかエラーがでる。。。
おかしいなぁ。。とここで1時間ぐらい悩む。
検索してみたところ以下のような文章が見つかった。。。
「SLES11と Fedora 11からは RPMパッケージが cpio形式から tar.gz形式に変更されています。」
な、なんですと・・・
ってことはCentOS6もそうなんですか?
んでよく見てみると「最新の rpm2cpio(rpm-4.4.2.3-37.10.1)に変更する必要があります。」
一応、CentOS5.5鯖のrpmのバージョンを確認してみる
1
2
|
$ rpm --version
RPM バージョン 4.4.2.3
|
ですよね。。。。
なんかyumでupdateできなかったし急遽VMwareに入れてたCentOS6で上記の手順を再度行う。
そして再びrpm2cpioをする
1
2
3
4
5
|
$ rpm --version
RPM バージョン 4.8.0
$ rpm2cpio ../rpm-4.8.0-12.el6.i686.rpm | cpio -id
3795 blocks
|
どうやらうまくいったみたい。やっぱrpmのバージョンが古かったのね。
3.展開したフォルダをtarで固める
1
2
|
$ tar zcvf ../rpm-4.8.0-12.el6.i686.gz *
$ rm -rf *
|
これでgzが作成できました。めでたしめでたし。
ついでにさっき落としたrpm-libs-4.8.0-12.el6.i686.rpmのgzも作る。こんな感じで
1
2
3
4
|
$ rpm2cpio ../rpm-libs-4.8.0-12.el6.i686.rpm | cpio -id
1434 blocks
$ tar zcvf ../rpm-libs-4.8.0-12.el6.i686.gz *
$ rm -rf *
|
4.rpmを消してしまった鯖に転送して展開する
あとは、gzファイルをrpm消してしまった鯖にscpか何かで転送してあげる。
1
2
3
|
cd ../
scp rpm-4.8.0-12.el6.i686.gz root@転送先:/
scp rpm-libs-4.8.0-12.el6.i686.gz root@転送先:/
|
んで転送先の鯖にてtarで解凍すればおしまい。
1
2
3
|
# cd /
# tar zxvf rpm-4.8.0-12.el6.i686.gz
# tar zxvf rpm-libs-4.8.0-12.el6.i686.gz
|
ちゃんとrpmコマンドがつかえるようになっているか確かめる
1
2
|
$ rpm --version
RPM バージョン 4.8.0
|
これでrpmコマンドが使えるようになった!!!
5.rpmコマンドを使ってyumをいれる
あとはyumのrpmいれればいいのかと思いましたが、そうはいかなかったです。。
rpmがインストールされていないことになっており、rpm -qaしてもrpmがはいってないってことになっています。。。
yumはrpm必須なんで、yumも必然的にインストールできなくなります。。
しかたないのでrpmをいれることに
1
|
# rpm -ivh http://ftp.riken.jp/Linux/centos/6/os/i386/Packages/rpm-4.8.0-12.el6.i686.rpm
|
ちょっとメッセージわすれてしまいましたが、librpm.so.1ないのでダメみたいなこといわれます。
先にrpm-libのほうをいれたどうかとおもいましたがそれもダメでした・・・
でも検索するとちゃんとlibrpm.so.1があるのでもういいやとおもい–nodepsつけてインストールしますた。
1
2
|
# rpm -ivh --nodeps http://ftp.riken.jp/Linux/centos/6/os/i386/Packages/rpm-4.8.0-12.el6.i686.rpm
# rpm -ivh http://ftp.riken.jp/Linux/centos/6/os/i386/Packages/rpm-libs-4.8.0-12.el6.i686.rpm
|
これでrpmは入りました。
※もしかしたら他の依存関係もあったかもしれませんが必死すぎて忘れました。。。適当に依存関係発生したらパッケージつっこめばおkです。
で、yumを入れます。
yumをrpmでいれるまえにyum-plugin-fastestmirrorが必要と言われ、yum-plugin-fastestmirrorを先にいれようとするとyumがひつようといわれるので、–nodepsオプションでyum-plugin-fastestmirrorを先にいれるようにしましょう。
また、その他依存関係のあるパッケージも先にいれておきます。
1
2
3
4
5
6
7
8
9
|
# rpm -ivh http://ftp.riken.jp/Linux/centos/6/os/i386/Packages/libcurl-7.19.7-16.el6.i686.rpm
# rpm -ivh http://ftp.riken.jp/Linux/centos/6/os/i386/Packages/libcurl-devel-7.19.7-16.el6.i686.rpm
# rpm -ivh http://ftp.riken.jp/Linux/centos/6/os/i386/Packages/python-pycurl-7.19.0-5.el6.i686.rpm
# rpm -ivh http://ftp.riken.jp/Linux/centos/6/os/i386/Packages/python-pycurl-7.19.0-5.el6.i686.rpm
# rpm -ivh http://ftp.riken.jp/Linux/centos/6/os/i386/Packages/python-urlgrabber-3.9.1-7.el6.noarch.rpm
# rpm -ivh http://ftp.riken.jp/Linux/centos/6/os/i386/Packages/gpgme-1.1.8-3.el6.i686.rpm
# rpm -ivh http://ftp.riken.jp/Linux/centos/6/os/i386/Packages/pygpgme-0.1-18.20090824bzr68.el6.i686.rpm
# rpm -ivh --nodeps http://ftp.riken.jp/Linux/centos/6/os/i386/Packages/yum-plugin-fastestmirror-1.1.26-11.el6.noarch.rpm
# rpm -ivh http://ftp.riken.jp/Linux/centos/6/os/i386/Packages/yum-3.2.27-14.el6.centos.noarch.rpm
|
これで無事yumコマンドが使えるようになります。
ほんとパッケージを削除するときは-yコマンドはやめたほうがいいですね。。。
yumとrpmが消えたせいで、今日半日時間をつぶしてしまいました・・・
参考
- rpmを誤ってアンインストールしてしまったときの対処方法
- FAQ: Linux全般