微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

DNS解析在php chroot中

我创建了一个脚本,它创建了一个chroot并设置了PHP-fpm和apache2来使网站正常工作.
在我的脚本中,我使用以下方法将所有必需的lib复制到我的chroot lib(s)dir(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")); 
?>

除非libs中有libnss_dns.so.1,否则它无法解析.
现在我的问题是:我需要’ldd’将libnss_dns复制到我的chroot中的文件是什么?

PS:我不想手动复制它,因为我希望我的脚本是跨架构的.

解决方法:

没有可以提供给ldd的选项,也没有可以调用的ldd功能,使其在要复制的库列表中包含libnss_dns.so.1.该库是在运行时动态加载的,因为与动态链接器无关的配置文件内容(即/etc/nsswitch.conf)和ldd根本无法知道程序可能或可能不会在此动态加载的库.办法.

您会发现可能会有一大堆其他文件需要手动复制以生成工作chroot:从/ dev / null到语言环境配置的所有内容,具体取决于您使用的内容.

PS: I don’t want to copy it manually because I want my script to be cross architecture.

不幸的是,正确使用chroot本身就是一种非便携式的东西.也就是说,没有标准的API可用于设置一个.

(我认为你并不是指“交叉架构”:假设你有一个工作程序来设置一个chroot,比如SPARC,完全相同的程序应该可以正常工作,比如x86_64,给定相同的操作系统.)

您可能会尝试使用debootstrap之类的东西来设置新的chroot.至少它与包管理器绑定,因此它确保存在所有依赖项.即使这样,debootstrap确实会将一些系统文件(例如/ etc / fstab)保留为某种Todo状态.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐