新しいglibcバージョンをアプリケーションにchrootする方法は?

新しいglibcバージョンをアプリケーションにchrootする方法は?

プログラムを実行しようとしていますが、実行すると次のエラーが発生します。

./app: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.14' not found (required by ./app)

最初は手動でアップグレードする方法について読んでいglibcましたが、私のような上級ユーザーではないユーザーにとっては危険すぎるようです。私の友人が私に言ったが、chrootどのステップに従うべきかはよくわかりません。誰が私を助けることができますか?

私のシステム情報:

uname -a:Linux hostName 3.2.0-4-amd64 #1 SMP Debian 3.2.65-1+deb7u2 x86_64 GNU/Linux
Distro: Crunchbang 11 (Waldorf)
ldd --version: ldd (Debian EGLIBC 2.13-38+deb7u8) 2.13

ldd ./app:
  linux-vdso.so.1 =>  (0x00007ffdd593d000)
  libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007febe6450000)
  libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007febe623a000)
  libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007febe5eae000)
  libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007febe5c2c000)
   /lib64/ld-linux-x86-64.so.2 (0x00007febe677a000)

答え1

まず、このメッセージが表示されたら、実行したいアプリケーションをそのプラットフォーム/ディストリビューションで使用できないことに気づく必要があります。したがって、可能な限り最も痛みを伴う方法で競合が発生し、すべてのファイル、お金、家を持ち込む可能性が高くなります。 :)

特に、これはカーネルABIと密接に関連しており、他のバージョンのABI用にコンパイルされたglibcを実行するのは危険であるため、(g)libcに関連しています。これがライブラリのバージョン管理の理由です。

これらの警告をすべて受け取った後も試してみたい場合は、複雑な順序で次を使用できます。

  1. アプリケーションと同じディレクトリ(または他の未解決のディレクトリ)に適切なライブラリを抽出し、次のappコマンドを実行します。

    LD_LIBRARY_PATH=. ./app
    

テストにより、正しいライブラリが選択されていることを確認できますLD_LIBRARY_PATH=. ldd ./app。これは、rootユーザーとsuidアプリケーションには適用されません。

  1. 実際には、アプリケーション用のchroot環境を作成してみることができます。このchroot呼び出しは、ルート(/)ディレクトリで実行されているアプリケーションの場所をリセットすることに注意してください。実際、これは代替glibcライブラリを提供するだけでなく、みんなアプリケーションが使用するライブラリ、そのライブラリが使用するライブラリなどは、自給自足型環境を作成するために必要なすべてが揃うまで続きます。これはまた/dev/null/dev/stdin少なくとも、デバイスとファイル/dev/stdoutがあることを意味します。 Debian環境の良い例はインストール(確認)です。起動コマンド自体は簡単です。/dev/log/etc/passwd/etc/grouppostfix/var/spool/postfix/

    chroot /home/of/chrooted/app ./app
    
  2. 最良かつ簡単な方法は、dockerアプリケーションに適した画像を使用することです。インストールdocker自体は大きなトピックです。ドッカー設置ガイド。 3.8+以上のLinuxカーネルが前提条件です。これらの制限に加えて、これは他の展開/ライブラリセットを必要とするアプリケーションを実行するための最良の方法です。

また確認してみてくださいGLIBCを更新せずに新しいソフトウェアを実行するには?

答え2

ターゲットバージョンのディストリビューションを使用してchroot環境をインストールすることは、労働集約的なソリューションです。数ギガバイトのディスク容量が必要な場合がありますが、特にDebianとその派生製品では非常に苦痛ではありません。シュルート利用可能なchroot設定の完了ブート防止プログラムこの chroot 環境には、旧バージョンまたは最新バージョンの Debian または Ubuntu をインストールできます。バラより64ビットDebian / Ubuntuで32ビットプログラムを実行するにはどうすればよいですか?schroot + debootstrapガイドについて学びます。 GLIBC 2.14では、debootstrapを使用してインストールするバージョンとしてjessie(Debian)またはprecise(Ubuntu)を選択できます。trusty

デフォルトの schroot 設定では、次のコマンドを実行できます。

schroot -c jessie ./app

ホームディレクトリは自動的にchrootの同じパスにあります。アプリケーションがホームディレクトリにインストールされていて、ホームディレクトリ内の他のファイルまたはchrootにあるソフトウェアにのみアクセスしてもかまいません。

関連情報