glibc 事前設定エラー: libc を /usr/local にインストールしないでください。

glibc 事前設定エラー: libc を /usr/local にインストールしないでください。
.
.
.
checking for kernel header at least 3.2.0... ok
*** On GNU/Linux systems the GNU C Library should not be installed into
*** /usr/local since this might make your system totally unusable.
*** We strongly advise to use a different prefix.  For details read the FAQ.
*** If you really mean to do this, run configure again using the extra
*** parameter `--disable-sanity-checks'.
Pre-configuration commands finished with code: 1

Cコードを見たかったので、glibcを複製してclionで開きましたが、このエラーが発生しました。

  1. 私のシステムにどのように構築しますか:Debian?
  2. Debian はなぜそんなことをするのでしょうか。

答え1

  1. Debian はなぜそんなことをするのでしょうか。

/usr/local/libこれは、Debianによるものではなく、ほとんどのLinuxシステムでCコンパイラと動的リンカ/ローダが設定されているためです。同じ名前のライブラリがおよびにある場合、および/usr/libのライブラリが/usr/local/lib優先されます。

これにより、システム管理者はシステム内のすべてのライブラリをカスタムライブラリに簡単に置き換え、パッケージの更新後もカスタムライブラリを保持できます。

しかし、現在行っていることを実際に知らない限り、既存のインストールをカスタムインストールに置き換えるのはglibc良い考えではありません。新しいバージョンをインストールするために使用されるツールを含む、システムのほとんどすべてのコマンドとプログラムに影響します。glibc

~からglibc FAQ Wikiページ:

GNU/Linux システムの /usr/local に glibc がインストールされないのはなぜですか?

/usr/local/includeGNU C コンパイラはこれらのディレクトリを特別な方法で処理し、/usr/local/libシステムディレクトリを検索します。 GNU / Linuxでは、/usr/includeシステムディレクトリに/usr/lib潜在的に異なるglibcバージョンが含まれており、他のglibcインストールの特定のファイルを混在させることはサポートされておらず、破損する可能性があるため、システム全体が破損する可能性があります。

glibcのインストールをテストするには、別のディレクトリにインストールする必要がありますDESTDIR(他の値で上書きしないでください--prefix。これは--prefix=/usr許可されます)。

構築したばかりのGNU Cライブラリプロジェクトライブラリをどのようにインストールしますか?

/tmp/glibcこれらのライブラリをインストールする唯一の正しい方法は、まず via などの一時ディレクトリにインストールし、そのディレクトリをmake install DESTDIR=/tmp/glibc初期ルートディスクにコピーし、初期ルートディスクを起動し、結果をルートファイルシステムにコピーし、ルートファイルシステムを起動します。最後のステップとして機能します。それはただ今日はglibcをインストールする安全な方法です。

ただし、どのディストリビューションもこれを実行しないことに注意してください。そうすればそうするので彼らはそうしない。必要glibcをインストールして再起動してください。現在実行中のすべてのプロセスがセキュリティ更新後にglibcを再ロードする場合にのみ必要です(実行中のプロセスはまだ古いライブラリを実行するため)。代わりに、ディストリビューションはパッケージマネージャを使用してライブラリアーカイブを解凍し、実行中のシステムにインストールします。これは実際には非常に危険です。ある時点になると、システムに新しいライブラリと古いライブラリの混合コピーがあり、実行プロセスを開始できなくなる可能性があります。同様に、アップグレード中に言語ロケールを含むローカライズアーカイブが再作成されます。この期間中に必要なローカライゼーションがない場合(まだアーカイブで書き換えられていない場合)、プロセスは開始されない可能性があります。パッケージ管理システムも免疫されません。たとえば、rpmはglibcをインストールするときに新しいプロセスを実行せず、代わりに組み込みのluaインタプリタを使用してスクリプトを実行し、rpmが以前のプロセスを使用して全体を実行できるようにする必要がありました。凝集力でライブラリのコピーをインストールし、新しいコピーもインストールします。

要約すると、glibcをインストールする最善の方法は、他のシステムで使用されているディスクにインストールすることです。通常、これは初期ルートディスクで行うことができ、次善策は静的または操作されたアプリケーションを介してコピーすることです。不完全な部分的なインストールでは、新しいプロセスを実行せずにファイルが所定の位置にあります。そのうちの1つを選択してください。結局のところ、後者は、共有ランタイムを持つ負荷の高いシステムではサポートされなくなります。


  1. 私のシステムにどのように構築しますか:Debian?

FAQで述べたように、DESTDIR環境変数です。./configureglibcスクリプトのセキュリティチェックが実行されないようにする前に、これを実行してください。

LD_LIBRARY_PATHビルドが完了したら、環境変数を$DESTDIR/lib。ただし、上記のように、Debian標準バージョンのglibcに属する他のファイルと競合する可能性があります。

新しいglibcをテストするためのより良い方法は、仮想マシンを準備してからそのディスクをホストシステムにマウントすることです(仮想マシンは停止します)。これにより、必要になる前に新しいglibcのすべてのコンポーネントを仮想マシンにインストールできます。すべてのコンポーネントを実行します。リスク非互換性。その後、仮想マシンを起動し、何が起こっているのかを確認できます。

仮想マシンがまだ機能し、新しいglibcがその時点で実行したいテストに合格した場合その時ホストシステムへの新しいglibcのインストールについて考えることができます。これを行うには、慎重に計画を立てる必要があります。新しいglibcをインストールするために外部メディアから起動しますか?または、新しいglibcを*.debパッケージ(セット)としてパッケージ化し、パッケージマネージャを使用してインストールしますか?どちらにしても、より確実にバックアップが最新ですそしてブートメディアが用意されています。始める前に。

パッケージングパスを選択することにした場合は、まずディストリビューションのglibc標準バージョンのソースパッケージをロードし、パッケージングと埋め込みプリインストール/インストール後にスクリプトを詳細に検討することをお勧めします。パッケージマネージャは特定のコンテンツを持つことができます。プロセスの必須ステップ非常に正確

答え2

スクリプト--prefix=<some other directory>に渡す必要があります。ファイルが[0]configureにインストールされていることを確認してください。<some other directory>

glibcinの互換性のないバージョンをインストールすると、/usr/localシステムが利用できなくなる可能性があります。

コンパイルするには、glibcソースツリーのルートに移動して

cd build
../configure --prefix=<some other directory> # /tmp/compileGlibc
make -j$(nproc)

glibc.

make install

インストールファイルをにコピーします<some other directory>

また、スクリプトに渡してデフォルトのglibcコンパイルを使用することもできます。PREFIX--disable-sanity-checksconfigure

[0]https://sourceware.org/git/?p=glibc.git;a=blob;f=install;h=b29916e748c25a25888125ee3d162050d6339181;hb=HEAD

関連情報