- PR -

GLibcが壊れた場合

1
投稿者投稿内容
Ibsen
会議室デビュー日: 2002/04/10
投稿数: 12
投稿日時: 2003-03-17 11:29
Linuxの初心者です。
今、@ITさんのLFS(Linux From Scratch)で
RPMでパッケージをインストールしようとしましたが、

#ldd /usr/lib/rpm/rpmq
/usr/lib/rpm/rpmq: /lib/libc.so.6: version `GLIBC_2.3' not found (required by /usr/lib/librpm-4.1.so)
のようにバージョンエラーになります。

現在GLibcは2.2.5なので単純に2.3にあげようとインスールしたのですが
make checkを怠りmake installしたので、GLibcが機能しなくなりました。
(いろいろいじったので)。
インストール前のバックアップはありません。

このような場合は、再度スクラッチからやり直すしかないのでしょうか。
それとも、Red hatで起動して、/mnt/lfsのGlibcを普及できますか。

また、通常このようなGlibc2.2.5-->Glibc2.3へのアップは以前の
コンパイルしたパッケージはすべて再コンパイルすべきなのでしようか。

どのような質問にすべきかもわからない現状で済みませんが、
よろしくアドバイスお願いします。

dario
会議室デビュー日: 2003/03/11
投稿数: 11
投稿日時: 2003-03-18 01:13
ちょっと混乱しているようなので質問させて下さい。
そちらの環境は、
・RedHatからLFSで環境を作った。RedHatのglibcは2.2.5
・LFSの元のglibcのバージョンは2.2.5
・LFSでブートできるようにした後、glibcのバージョンを2.3にあげた。
・rpmで何かインストールしようとした。
・エラーになった。
ということでしょうか?

以下解決になっていませんが、一般的なコメント。
基本的にglibcのバージョンをあげると動的にリンクしている
プログラムは再コンパイル、ということになると思います。

ディストリビューションでもglibcのバージョンがあがると
メジャーバージョンアップしますよね。
今まで古いバージョンのglibcを参照していたプログラムは
参照先のものが入れ替わってしまうわけですから、
使えなくなってしまっても仕方がないと思います。

LFSで最初に基本的なコマンドを静的にリンクしておくのも
glibcが入れ替わっても使えることを確保するためなんです。

glibcの入れ替えは自分が何をやっているのか理解していないうちは
やらない方が安全だと思います。
#もっともやってみて勉強するというのも大事ですけどね。

これ以上の話は私の不完全な回答を補足してくれる識者のツッコミに期待。
Ibsen
会議室デビュー日: 2002/04/10
投稿数: 12
投稿日時: 2003-03-18 10:12
>そちらの環境は、
>RedHatからLFSで環境を作った。RedHatのglibcは2.2.5
!--はglibcは2.2.4です。--!

>LFSの元のglibcのバージョンは2.2.5
!--はglibcは2.2.5です。--!

>rpmで何かインストールしようとした。
>エラーになった。
!--LFSでブートできるようにした後、rpmをインストールしてrpm実行でエラーに--!


>LFSでブートできるようにした後、glibcのバージョンを2.3にあげた。
!--コンパイルしました。--!

ということでしょうか?
!--以上の通りです。--!

>基本的にglibcのバージョンをあげると動的にリンクしている
>プログラムは再コンパイル、ということになると思います。
!--
   やはりそうですか。と言うことはパッケージがどのバージョンのGlibc対応
   になっているか事前に知るしかないのですね。      
 --!

>glibcの入れ替えは自分が何をやっているのか理解していないうちは
>やらない方が安全だと思います。
!--  
  今回の経験でLinux環境が大体つかむことができました。
  変更する場合はバックアップとる。
  Glibcのアップはテスト環境でテスト後インストールする。    
 --!

深夜のご回答ありがとう御座いました。
その他、お気づきの点ありましたらお願いします。

以上
Ibsen
会議室デビュー日: 2002/04/10
投稿数: 12
投稿日時: 2003-03-18 16:13
結局/libを下記のLibのみにして
---------------
ld-linux.so.2
libc.so.6
libdl.so.2
libncurses.so.5
librt.so.1
---------------
glibc2.2.5を再インストールしました。
やはりglibc2.3.2はparseエラーになります。
-----------------
gcc -shared -static-libgcc -Wl,-O1 -Wl,-z,defs -Wl,-dynamic-linker=/lib/ld-
.
.
build/elf/interp.os /static/src/glibc-2.3.2/glibc-build/elf/ld.so -lgcc
/static/lib/gcc-lib/i686-pc-linux-gnu/3.2/../../../../i686-pc-linux-gnu/bin/ld:/static/src/glibc-2.3.2/glibc-build/libc.so.lds:110: parse error

collect2: ld returned 1 exit status
make[1]: *** [/static/src/glibc-2.3.2/glibc-build/libc.so] Error 1
------------------
この場合、どのようにエラー解析していくのか。
初心者にとっては無理ですね。
ftp://sources.redhat.com/pub/glibc/releases/
に新しいglibc2.3.2があるので再度チャレンジします。
しかし、つながらない。
t-wata
大ベテラン
会議室デビュー日: 2002/07/12
投稿数: 209
お住まい・勤務地: 東京
投稿日時: 2003-03-18 18:04
よく解らないことだらけですが、、

> 今、@ITさんのLFS(Linux From Scratch)で

これが非常に気になります。この記事では、LFS単独起動まで書いてないのですが、
ちゃんとブックを見て、ブートローダの設定までして、LFS環境を起動したのでしょうか?
もし、ブートローダの設定までしたとして、古い環境(Redhat)は消してしまったのですか?Redhatの環境を消してないなら、Redhatで立ち上げてglibcのコンパイルをすればよいのでは?

> !--LFSでブートできるようにした後、rpmをインストールしてrpm実行でエラーに--!

バイナリをインストールしたのですか?それともソースから?
そもそも、元のRedhatについてるrpmのバイナリをインストールしとけばglibc >= 2.3なんて要求されないと思うんですが。
Ibsen
会議室デビュー日: 2002/04/10
投稿数: 12
投稿日時: 2003-03-19 09:29
>よく解らないことだらけですが、
 !--
  ポイントの説明が不足しまして申し訳ありません。
 --!

>> 今、@ITさんのLFS(Linux From Scratch)で
>これが非常に気になります。この記事では、LFS単独起動まで書いてないのですが、
>ちゃんとブックを見て、ブートローダの設定までして、LFS環境を起動したのでしょうか?
 !--
  今気づきましたが、確かに書いてなかったです。
  以後ブックを読んでブートローダの設定、LFS環境を起動しました。
 --!

もし、ブートローダの設定までしたとして、古い環境(Redhat)は消してしまったのですか?
 !--
  残しています。
 --!

Redhatの環境を消してないなら、Redhatで立ち上げてglibcのコンパイルをすればよいのでは?
 !--
  これも確かにそうなのですが、ここが説明不足でした。
  LFSだけになった場合の環境でどうするかが抜けていました。
 --!

> !--LFSでブートできるようにした後、rpmをインストールしてrpm実行でエラーに--!
バイナリをインストールしたのですか?それともソースから?
 !--
  rpmはRedhatからソースを持ってきてコンパイルしました。
 --!

そもそも、元のRedhatについてるrpmのバイナリをインストールしとけばglibc >= 2.3なんて要求されないと思うんですが。
 !--
  先ほどと同じような理由(LFSだけになった場合の環境でどうする)ですが、
  元のRedhatについてるrpmのバイナリをインストールすると言うのは、
  LFSに具体的にどうインストールするのか教えて欲しいです。
 --!


t-wata
大ベテラン
会議室デビュー日: 2002/07/12
投稿数: 209
お住まい・勤務地: 東京
投稿日時: 2003-03-19 13:54
>   LFSだけになった場合の環境でどうするかが抜けていました。

glibcをコンパイルするなら、もとのRedhatの環境で立ち上げて、
chrootしてからコンパイルする方が安全だと思いますが。
いずれにせよ、ブートローダは、Redhat、LFSの両方が起動可能な
ように設定しておくと良いでしょう。

> rpmはRedhatからソースを持ってきてコンパイルしました。

ソースからコンパイルしたのは、chroot環境ですよね。LFSを立ち上げて、
そこでrpmをソースからコンパイルしても同じですか?

> 元のRedhatについてるrpmのバイナリをインストールすると言うのは、
> LFSに具体的にどうインストールするのか教えて欲しいです。

rpm2targzとか、rpm2cpioとかで、rpmファイルから、バイナリを取り出して、
展開するだけです。
rpm2targzは、slackwareのFTPサイトからソースをダウンロードできます。

RPMを使う目的は、何でしょう?LFSで、パッケージ管理をしたいって事でしょうか?
だとしたら、LFSより、gentooの方が良いような。。。何かに特化した(それ以外の
事はできない)Linuxを構築するとか、勉強するのが目的なら、LFSが良いとは思いま
すが。

# ちなみに私は、gentoo使ってます。
Ibsen
会議室デビュー日: 2002/04/10
投稿数: 12
投稿日時: 2003-03-19 14:33
>いずれにせよ、ブートローダは、Redhat、LFSの両方が起動可能な
>ように設定しておくと良いでしょう。
 !--
  実感しました。
 --!

>ソースからコンパイルしたのは、chroot環境ですよね。LFSを立ち上げて、
>そこでrpmをソースからコンパイルしても同じですか?
 !--
  LFSで立ち上げコンパイルしました。
  chroot環境ではコンパイルしていません。逆にここでするとどうなるか。
 --!

>rpm2targzは、slackwareのFTPサイトからソースをダウンロードできます。
 !--
  ありがとうございます。調べてやってみます。
 --!

>RPMを使う目的は、何でしょう?LFSで、パッケージ管理をしたいって事でしょうか?
>だとしたら、LFSより、gentooの方が良いような。。。何かに特化した(それ以外の
>事はできない)Linuxを構築するとか、勉強するのが目的なら、LFSが良いとは思いま
>すが。
 !--
  LFS環境でxxパッケージのテストを、そのパッケージがRPMインストールでした。
  今回はLinuxの勉強のためにLFS環境をテストしました。
  gentooの言葉は良く見かけますが、中身はまだ知りません。
  今後調べます。助言ありがとうございました。
 --!
1

スキルアップ/キャリアアップ(JOB@IT)