Como recuperar uma pasta deletada cheia de arquivos gerenciados pelo dpkg?

1

Estou tentando criar um contêiner do Docker interativo com base em uma imagem do Docker de terceiros, em que /usr/share/man foi excluído para economizar espaço na camada. Todo arquivo que pertence a essa pasta é parte de um pacote apt que funciona bem. Gostaria de restaurar apenas as páginas de manual excluídas dos pacotes que eu instalei atualmente.

A maneira de resolver esse problema para um pacote individual é para reinstalá-lo . Eu poderia potencialmente --reinstall cada pacote no contêiner com algo como

apt-get --reinstall install \
    $(dpkg --get-selections | awk '$2=="install"{print $1}')

mas existe uma maneira seletiva de fazer o dpkg recriar uma pasta deletada sem ter que recorrer a um processo que consuma tempo e largura de banda toda vez que eu reconstruir?

    
por Dan 18.08.2016 / 04:28

1 resposta

2

Você precisará reinstalar os pacotes afetados porque a imagem local não terá nenhum conteúdo para ser reparada.

No entanto, você pode potencialmente minimizar a quantidade de reparos necessários.

Você pode determinar quais pacotes têm arquivos em /usr/share/man com um loop, como

for pkg in $(dpkg --get-selections | awk '$2=="install" { print $1}')
do
  f=$(dpkg -L $pkg | grep /usr/share/man)
  if [ -n "$f" ]
  then
    echo $pkg has files in /usr/share/man
  fi
done

Você pode reinstalar esses pacotes.

Podemos até limitar ainda mais aqueles que estão faltando olhando /var/lib/dpkg/info/$pkg.info para os arquivos man e comparar com o que está faltando e apenas reinstalá-los.

No entanto, no final do dia, acho que você vai reinstalar um lote de pacotes. Na minha instalação do Jessie, 703 pacotes tinham arquivos em /usr/share/man . Isso é melhor que os 2200 pacotes instalados, mas ainda muito. Um espelho local para evitar o tráfego de rede parece indicado.

    
por 18.08.2016 / 04:55