способы расчета необходимого дискового пространства до загрузки пакета

Следующее не является дубликатом Как определить размер пакета при использовании apt перед загрузкой? , это скорее дополнительный вопрос.

Рассмотрим следующие две реализации для получения необходимого дискового пространства:

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

и

#!/bin/bash

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

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

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

echo "$NEEDED kb"

Теоретически они должны возвращать аналогичные результаты, но для больших пакетов в $LIST они дают очень разные результаты, вторая реализация возвращает гораздо большие результаты (например, 13,5 ГБ против 16,2 ГБ). Я знаю, что вторая реализация медленнее, потому что она пытается выполнить работу apt-get в bash, что намного медленнее, но я намеревался написать вторую версию, чтобы получить результат в kb, потому что я не мог узнайте, как получить результат в килобайтах из первой реализации, главным образом потому, что apt-get масштабирует единицу, от байтов до гигабайт, и я не знаю, какую самую большую единицу он считает.

Может ли кто-нибудь помочь мне выяснить, почему существует такая большая разница?

3
задан 13 April 2017 в 15:24

3 ответа

Первое, кажется, точно.

второй походит на него, мог бы рассматривать размер весь , зависимостям вместо было нужно зависимости.

apt-cache depends

поднимает все зависимости.

Пример:

, Если бы я должен был установить "potrace", мне только были бы нужны "potrace" и "libpotrace0", но список зависимостей от способного кэша зависит, также поднимает "libc6" и "zlib1g", которые оба уже установлены в моей системе.

1
ответ дан 13 April 2017 в 15:24

Спасибо за весь вход я закончил со следующим:

NEEDED_SPACE_KB=$(echo n | apt-get install $INSTALLABLE_DEBUG_PACKAGES | grep "disk space" | awk '{ print $4, $5 }' | sed 's#GB# * 1000 MB#; s#MB# * 1000 #; s#kB##; s#B# /1000#;' | bc)
2
ответ дан 13 April 2017 в 15:24

Я предполагаю, что небольшие пакеты не просят относительно входа у Да или No и не показывают с размером после первого выполнения сценария . Вот почему Ваш сценарий, вероятно, может иногда занимать много времени и выставочное вычисление путания.

Так или иначе я записал этот сценарий для получения всегда общего размера в 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

производит:

454656 kB

РЕДАКТИРОВАНИЕ: Объяснение первого предложения о размере: Я подразумеваю, что для небольших пакетов (я не могу помнить порог размера) apt-get не спрашивает fro Да или нет, таким образом, для них echo N бессмысленно для следующие разы сценария, работает, потому что apt-get установит их, и это покажет размеру пакета только первый раз выполнения сценария, другие времена, Вы выполняете сценарий, так мало пакетов уже установлено и Вы пропускаете их размер в вычислении. Это - частично ответы, почему это иногда занимает много времени.

1
ответ дан 13 April 2017 в 15:24

Другие вопросы по тегам:

Похожие вопросы: