Linuxで非ルートとして別の(新しい)glibc / gcc /…スタックを維持するにはどうすればよいですか


10

私たちの計算クラスターは、非常に古いバージョンのCentOSを実行し、古いカーネル(2.6.18)と、もちろん古いライブラリとバイナリを使用しています。すべてを更新するには、すべてのノードで多くの作業が必要になるため、これはオプションではありません。

(および/または)のC++11新しいバージョンを必要とする、したがって新しいバージョンを必要とするプログラムをコンパイルして使用しようとしています。私はシステムをいじりたくないので、ローカルディレクトリツリーで非rootユーザーとしてこれを実行したいと思います。gccclang

問題は、マシンに存在するものgccよりglibcも新しいものが必要であることです。したがって、おそらくここで説明するようglibcに、ローカルlib/ツリーでの別の新しいバージョンを維持する必要があります

私は失われていますどこでどのように必要なすべてのバイナリに私の地元のlibsのパスI「決め打ち」を行う、すなわち、あるgccg++など?LD_LIBRARY_PATHをローカルlib/ツリーに設定すると、コンパイルされていないELF file OS ABI invalid新しいlibm.so/ を使用したいため、すべてのシステムバイナリが機能しなくなります()libc.so

だから、それを包むために:(含む新しい、ローカル開発スタックを維持する適切な方法は何でglibcgccrootとしていじりせずに古いシステムに並列など)は?

副次的な質問として、LD_LIBRARY_PATHを設定することは、SE全体で解決策として投稿されglibcます。私にとって、システムバイナリ(などls)を実行しようとすると、上記のエラーが発生します。どうして?私は何か間違ったことをしましたか、これは意図された動作ですか?

回答:


10

基本的に3つのオプションがあります。

  1. ライブラリを囲むラッパーを使用します。これにより、LD_LIBRARY_PATH適切に設定され、目的のライブラリが実行されます。

    #!/bin/sh
    export LD_LIBRARY_PATH="path/goes/here"
    exec "$@"
    
  2. -rpath-Wl,rpath)とリンクして、ダイナミックリンカーの検索パスをバイナリに追加します(SOの回答も参照-ラッパーについても言及しています)。

  3. これを読むのは好きではありませんクラスターを更新してください( "your"に重点を置いていることに注意してください)。それはいつの日か行われる必要があるので、なぜ今日ではないでしょう。「オプションでない」は、ほとんどの場合少し強いです。他のユーザーもおそらく同じ問題を抱えています。

問題のある古いバイナリについて-バイナリには、優先される動的リンカーが埋め込まれています。そして、古い動的リンカは新しいABIを理解しません。次のようにバイナリを呼び出してみてくださいpath/to/your/ld-linux-<arch>.so binary

CFLAGSGCCのビルド:GCCのビルド環境でいつでもエクスポートを試すことができますが、確実に反映されます。さまざまなディストリビューションのビルドスクリプトは、いくつかの手掛かりを与える可能性があります(例:openSUSEの場合、.specファイルの 1880行目を見てください)。


こんにちはピーターフ、答えてくれてありがとう。私はオプション2を好みます。しかし、Makefileなどを変更せずに、どのようにしてrpathをgccなどにハードコードするのでしょうか。クラスターの更新について:もちろんこれは私たちの議題ですが、現在、あまりにも多くの人々がこれを使用して、より長いダウンタイムを正当化しています。また、それを更新するために、最初にそれを設定した会社を再び雇うつもりです。私たちのグループには、これについて十分な知識と経験を持っている人はいません。
janoliver 2014年

GCCについては、私の回答の更新を参照してください。クラスターのアップグレードの場合、私の個人的な推奨事項は、内部(または少なくとも長期的な外部)の第一人者を手に入れることです。通常、完全にアウトソーシングするよりも、長期的に見れば安価で柔軟性があります。最も重要な利点は、システム管理者とユーザー間のやり取りを通じてナレッジを理解することです。
peterph 2014年

絶望的に資金が不足しているドイツの科学システムの小さな研究グループとして、私たちは残念ながらこの仕事のために誰かを雇うことも、自分で時間を投資することもできません。あなたは正しいかもしれませんが、長い目で見ればこれは報われるかもしれませんが、今のところ、予算はこのようなものに対して制約されすぎています。これは会社にいないことの欠点です。;)
janoliver 2014年

あなたの大学からIT / CSの学生を取得します-優秀な人はそれを彼の/彼女の学士/修士論文に使用できるかもしれません。そして財政に関して:あなたがドイツにいて、あなたの東の隣人の一人ではないことをうれしく思います(おそらくオーストリアを除いて)。:)
peterph 2014年

リンカーに-rpath-Wl,rpath)を渡す代わりに、リンカーはLD_RUN_PATH環境変数から検索パスへのパスも追加します
rakslice
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.