DNS Resolve no php chroot

2

Eu criei um script que cria um chroot e configura o php-fpm e o apache2 para fazer o site funcionar. No meu script eu estou copiando todos os lib (s) requeridos para meu (s) diretório (s) chroot lib (s) usando isto:

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

mas eu vi que se eu usasse um pequeno roteiro como este:

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

Ele não resolve a menos que haja libnss_dns.so.1 em libs. Agora minha pergunta é: qual é o arquivo que eu preciso para copiar o libnss_dns para o meu chroot?

PS: não quero copiá-lo manualmente porque quero que meu script seja de arquitetura cruzada.

    
por Nurrl 03.12.2016 / 11:09

1 resposta

2

Não há nenhuma opção que você possa fornecer para o recurso ldd e nenhum recurso ldd para o qual você pode ligar para incluir libnss_dns.so.1 na lista de bibliotecas a serem copiadas. Essa biblioteca é carregada dinamicamente em tempo de execução devido ao conteúdo dos arquivos de configuração que não têm nada a ver com o vinculador dinâmico (a saber, /etc/nsswitch.conf ) e ldd simplesmente não podem saber quais bibliotecas o programa pode ou não carregar dinamicamente dessa maneira .

Você descobrirá que provavelmente haverá toda uma variedade de outros arquivos que você precisa copiar manualmente para fazer um chroot funcional: tudo de /dev/null para configuração local, dependendo do que estiver usando. / p>

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

Infelizmente, obter um chroot é uma coisa inerentemente não portátil. Ou seja, não há APIs padrão que você possa usar para configurar uma.

(Eu acho que você não quer dizer "arquitetura cruzada" aqui: supondo que você tenha um procedimento de trabalho para configurar um chroot, digamos, SPARC, o mesmo procedimento deve funcionar bem, digamos, x86_64, dado o mesmo sistema operacional.)

Você pode tentar usar algo como debootstrap para configurar um novo chroot. Pelo menos, ele está ligado a um gerenciador de pacotes, portanto, garante que todas as dependências estejam presentes. Mesmo assim, debootstrap deixa vários arquivos de sistema (como /etc/fstab ) em um tipo de estado TODO.

    
por 03.12.2016 / 14:24