PHP chrootのDNSを確認する

PHP chrootのDNSを確認する

私はchrootを生成し、php-fpmとapache2を設定してWebサイトが機能するようにするスクリプトを作成しました。私のスクリプトでは、以下を使用して必要なすべてのライブラリをchroot lib(s)ディレクトリにコピーします。

fileArray=$(ldd /usr/bin/php* 2>/dev/null | awk 'NF == 4 {print $3}; NF == 2 {print $1}' | sort -u)

for file in $fileArray
do
  dirName="$(dirname $file)"
  [ ! -d "$serverDir$dirName" ] && mkdir -p "$serverDir$dirName" || :
  cp $file "$serverDir$dirName"
done

しかし、次のような小さなスクリプトを使用すると、次のことがわかりました。

<?php 
  print_r(gethostbynamel("google.com")); 
?>

libnss_dns.so.1がライブラリに存在しない場合は解決されません。今私の質問は:libnss_dnsを私のchrootに "ldd"コピーするためにどんなファイルが必要ですか?

PS:私のスクリプトがアーキテクチャの簡易化になりたいので、手動でコピーしたくありません。

答え1

オプションを指定しlddたり、ldd関数を呼び出してコピーするlibnss_dns.so.1ライブラリのリストに含めることはできません。構成ファイルの内容は動的リンカー(例/etc/nsswitch.conf:)とは無関係であり、lddプログラムがこのようにしてどのライブラリーを動的にロードするかを知る方法がないため、ライブラリーは実行時に動的にロードされます。

/dev/null動作するchrootを作成するには、使用している項目によっては、ロケール設定から地域設定まですべてのファイルを手動でコピーする必要があります。

PS:私のスクリプトがアーキテクチャの簡易化になりたいので、手動でコピーしたくありません。

残念chrootながら、それを正しくすることは本質的に移植性がないことです。つまり、設定に使用できる標準APIはありません。

(ここでは「クロスアーキテクチャ」を意味するわけではありません。SPARCにルート指定のワーカープログラムがあると仮定すると、同じプログラムが同じOSのx86_64で正しく実行される必要があります。)

debootstrap新しいchrootを設定するのと同じことを試すことができます。少なくともパッケージマネージャに関連付けられているので、すべての依存関係が存在することを確認してください。それにもかかわらず、debootstrap複数のシステムファイル(例:)は/etc/fstabTODO状態のままです。

関連情報