maneiras de calcular o espaço em disco requerido antes do download do pacote

3

O seguinte não é uma duplicata de Como determinar o tamanho de um pacote enquanto estiver usando o apt antes de baixar? , é mais uma questão adicional.

Considere as duas implementações a seguir para obter o espaço em disco necessário:

#!/bin/bash
echo n | sudo apt-get install $LIST | grep "disk space" | awk '{ print ,  }'

e

#!/bin/bash

PACKAGE_LIST=$(dpkg --get-selections | awk '{ print  }' | grep -v -e "-dbg" | cut -f1 -d":")

getsize () {
   size=$(apt-cache --no-all-versions show  | grep Installed-Size | awk '{ print  }')
   ((NEEDED+=$size))
}

for package in $LIST; do
   getsize $package
   DEPENDENCIES=$(apt-cache depends $package | grep Depends | awk '{ print  }')
   for dependency in $DEPENDENCIES; do
       if [[ ! $PACKAGE_LIST =~ [^.[:alnum:]-]"$dependency"[^.[:alnum:]-] ]]; then
          getsize $dependency
       fi
   done
done

echo "$NEEDED kb"

Em teoria, eles devem retornar resultados semelhantes, mas para pacotes grandes em $LIST eles retornam resultados muito diferentes, a segunda implementação retorna resultados muito maiores (por exemplo, 13,5 GB vs 16,2 GB). Eu sei que a segunda implementação é mais lenta, porque ela tenta fazer o trabalho do apt-get no bash, que é bem mais lento, mas minha intenção de escrever a segunda versão foi obter o resultado em kb, porque não consegui descubra como obter o resultado em kb desde a primeira implementação, principalmente porque o apt-get dimensiona a unidade, de bytes até gigabytes e não sei, qual a maior unidade que considera.

Alguém poderia me ajudar a descobrir por que existe uma diferença tão grande?

    
por GEO 02.08.2014 / 12:28

3 respostas

1

O primeiro parece ser preciso.

O segundo parece estar considerando o tamanho de todas as dependências em vez das dependências necessárias .

apt-cache depends

exibe todas as dependências.

Exemplo:

Se eu fosse instalar o "potrace" eu precisaria apenas de "potrace" e "libpotrace0", mas a lista de dependências do apt-cache depende também de "libc6" e "zlib1g" que já estão instalados no meu sistema .

    
por mchid 02.08.2014 / 12:39
2

Obrigado por toda a entrada, acabei com o seguinte:

NEEDED_SPACE_KB=$(echo n | apt-get install $INSTALLABLE_DEBUG_PACKAGES | grep "disk space" | awk '{ print ,  }' | sed 's#GB# * 1000 MB#; s#MB# * 1000 #; s#kB##; s#B# /1000#;' | bc)
    
por GEO 11.08.2014 / 00:42
1

Eu suponho que pequenos pacotes não são solicitados para entrada Sim ou Não e não são mostrados com o tamanho após a primeira execução do script . É por isso que seu script provavelmente demora muito tempo e mostra cálculos confusos.

De qualquer forma, escrevi este script para obter sempre o tamanho total em kB .

#!/bin/bash
LIST="openarena chromium-bsu"
echo n | sudo apt-get install $LIST | grep "disk space" | while IFS=, read a b; do echo $b ; done  | 
sed 's/,//g' |
while IFS=\  read a b c; do 
if [ "$b" == "kB" ]; then echo $a $b;
else
 if [ "$b" == "MB" ]; then echo -n $(($a*1024)); echo " kB" 
 fi
fi
 done

produz:

454656 kB

EDIT: Explicação para a primeira sentença sobre tamanho: Quero dizer que para pequenos pacotes (não me lembro de um limite de tamanho) apt-get não pergunta para Sim ou Não, então para eles echo N é inútil para os próximos tempos em que o script está sendo executado porque apt-get será instale-os e ele mostrará o tamanho do pacote apenas na primeira vez que executar o script, outras vezes você executará o script de tais pacotes pequenos que já estão instalados e você está perdendo seu tamanho no cálculo. Isso é parcialmente responde por que demora muito tempo às vezes.

    
por Ruslan Gerasimov 02.08.2014 / 13:33

Tags