# размер устанавливаемого пакета

## dio

Как с помощью emerge узнать размер всех устанавливаемых пакетов и их зависимостей?

----------

## Urs

 *Quote:*   

> 
> 
> Как с помощью emerge узнать размер всех устанавливаемых пакетов и их зависимостей?
> 
> 

 

С помощью самой emerge, вроде никак. Есть повод изучить Питон  :Smile: 

Вот я тут разбирался над похожей проблемой, выдрал из esearch (кстати - рекомендую, emerge esearch).

esize.py - возвращает размер пакета:

```

#!/usr/bin/env python2.2

import portage

import sys

def getfs(pkg):

    # from /usr/bin/emerge

    try:

        mysum = 0

        mydigest = portage.portdb.finddigest(pkg)

        myfile = open(mydigest, "r")

        for line in myfile.readlines():

            mysum += int(line.split(" ")[3])

        myfile.close()

        mystr = str(mysum/1024)

        mycount = len(mystr)

        while (mycount > 3):

            mycount -= 3

            mystr = mystr[:mycount] + "," + mystr[mycount:]

        mysum = mystr + " kB"

        return mysum

    except:

        return "[no/bad digest]"

for pkg in sys.argv[1:]:

    pkgv = pkg

    if len(pkgv) > 1:

        filesize = getfs(pkgv)

    else:

        filesize = 0

    print pkgv + "  -  " + filesize

```

Результат:

```

$ esize.py kde-base/kdebase-3.2.0_beta1

kde-base/kdebase-3.2.0_beta1  -  16,131 kB

```

Теперь это дело можно пристроить, как-нибудь так:

```

$ emerge -pe nano| perl -ne 'if (m/.+] (.+)/) { print "$1\n" }' | xargs esize.py

```

Получаем список зависимостей nano -> пихаем в perl -> получаем в виде <категория>/<пакейдж> -> пихаем список в esize.py

Итого:

```

sys-devel/gnuconfig-20030708  -  26 kB

sys-devel/libtool-1.4.3-r1  -  1,663 kB

sys-libs/db-1.85-r1  -  264 kB

sys-libs/gdbm-1.8.0-r5  -  130 kB

sys-devel/gettext-0.11.5-r1  -  3,636 kB

sys-apps/sed-4.0.7  -  677 kB

sys-apps/texinfo-4.5  -  1,264 kB

sys-apps/groff-1.18.1-r3  -  2,310 kB

sys-apps/cronbase-0.2.1-r2  -  0 kB

sys-apps/man-1.5l-r6  -  213 kB

dev-lang/tcl-8.3.4  -  2,594 kB

sys-libs/db-4.0.14-r2  -  2,638 kB

sys-libs/zlib-1.1.4-r2  -  143 kB

dev-python/python-fchksum-1.6.1-r1  -  36 kB

sys-apps/bzip2-1.0.2-r2  -  649 kB

sys-devel/m4-1.4  -  315 kB

sys-devel/autoconf-2.57-r1  -  1,225 kB

sys-devel/automake-1.7.5-r2  -  1,888 kB

sys-apps/coreutils-5.0-r3  -  3,867 kB

sys-apps/debianutils-1.16.7-r3  -  25 kB

app-shells/bash-2.05b-r7  -  1,923 kB

sys-libs/readline-4.3-r4  -  940 kB

dev-libs/openssl-0.9.6k  -  2,132 kB

media-libs/libpng-1.2.5-r4  -  369 kB

sys-devel/flex-2.5.4a-r5  -  372 kB

x11-base/opengl-update-1.5  -  0 kB

sys-apps/gawk-3.1.3  -  2,029 kB

sys-kernel/linux-headers-2.4.19-r1  -  25,432 kB

sys-apps/miscfiles-1.3-r1  -  2,153 kB

sys-devel/gcc-config-1.3.3-r1  -  0 kB

sys-libs/cracklib-2.7-r7  -  20 kB

sys-devel/gcc-3.2.3-r2  -  20,716 kB

dev-libs/glib-1.2.10-r5  -  411 kB

sys-libs/pwdb-0.61-r4  -  133 kB

sys-libs/pam-0.75-r11  -  977 kB

sys-apps/shadow-4.0.3-r7  -  1,030 kB

sys-apps/pam-login-3.11  -  128 kB

sys-apps/util-linux-2.11z-r6  -  1,254 kB

sys-apps/baselayout-1.8.6.10-r1  -  185 kB

net-misc/dhcpcd-1.3.22_p4-r2  -  148 kB

media-libs/freetype-2.1.4  -  996 kB

x11-misc/ttmkfdir-3.0.9  -  19 kB

dev-libs/expat-1.95.6-r1  -  285 kB

sys-apps/ed-0.2-r3  -  181 kB

media-libs/fontconfig-2.2.1  -  599 kB

app-arch/unzip-5.50-r2  -  1,043 kB

app-arch/cabextract-0.6  -  90 kB

x11-base/xfree-4.3.0-r3  -  71,026 kB

dev-lang/tk-8.3.4-r1  -  2,531 kB

dev-lang/python-2.2.3-r5  -  6,552 kB

sys-apps/portage-2.0.49-r15  -  230 kB

sys-devel/libperl-5.8.0  -  10,764 kB

dev-lang/perl-5.8.0-r12  -  10,854 kB

sys-devel/binutils-2.14.90.0.6-r6  -  10,155 kB

sys-libs/glibc-2.3.2-r1  -  13,417 kB

sys-devel/patch-2.5.9  -  197 kB

sys-libs/ncurses-5.3-r2  -  2,019 kB

sys-libs/slang-1.4.9  -  616 kB

app-editors/nano-1.2.2  -  868 kB

```

Вот.

----------

## inv

etcat size <пакет>

Или нужет размер скачиваемых файлов? для этого тоже есть скрипт.

----------

## Urs

 *Quote:*   

> 
> 
> для этого тоже есть скрипт.
> 
> 

 

И какой же? Поделись.

----------

## Zoltan

emerge -s показывает size of downloaded files, то есть сколько надо скачать.

----------

## dio

 *Zoltan wrote:*   

> emerge -s показывает size of downloaded files, то есть сколько надо скачать.

 

но не показывает размер всех зависимостей, emerge -sp ничего не даёт.

P.s. Скрипт от Urs работает хорошо

----------

## inv

 *Zoltan wrote:*   

> emerge -s показывает size of downloaded files, то есть сколько надо скачать.

 

х.м. а в man'е написано, что -s  - это search.

```
$ sudo emerge -s dopewars

Searching...   

[ Results for search key : dopewars ]

[ Applications found : 1 ]

 

*  games-strategy/dopewars

      Latest version available: 1.5.9

      Latest version installed: 1.5.9: 0

      Size of downloaded files: 1,154 kB

      Homepage:    http://dopewars.sourceforge.net/

      Description: Re-Write of the game Drug Wars

$ sudo get_size dopewars

games-strategy/dopewars-1.5.9

                         1154Kb          dopewars-1.5.9.tar.gz (ok)

    Pkg size: 1154Kb   Download: 0

Total Size: 1154Kb      Download: 0

```

----------

## inv

Конечно был случай, когда он не срабатывал, только что там конкретно было - непомню, поэтому если что, то пишите,

если у вас emerge -p работает только через sudo, то и этот сприпт надо запускать через sudo, он внутри себя выполняет emerge -p

А как в форум файл добавить ?

придётся сюда вставлять:

Если нигде не пропустил, строчки случайно, то заработает.

---get_size---

#!/bin/sh

print_size()

{

        SIZE=$1

        OUT_SIZE=$SIZE

#       if [ $SIZE -gt 1500000 ]; then

#               OUT_SIZE=`expr $SIZE / 1024 / 1024`Mb

 if [ $SIZE -gt 10000 ]; then

                OUT_SIZE=`expr $SIZE / 1024`Kb

        fi

#       fi

        echo $OUT_SIZE;

}

PKG=$*

if [ -z "$PKG" ]; then

        echo pack

        exit 1

fi

PKGS=`emerge -p $PKG | grep '^\[' | sed 's/^................//' | sed 's/ \[.*$/

/'`

TOTAL_SIZE=0

TOTAL_SIZE_DOWNLOAD=0

for P in $PKGS; do

        GROUP=`echo $P | sed 's/\/.*$//'`

        CP=`echo $P | sed 's/^.*\///'`

        PK=`echo $CP | sed 's/-[0-9].*$//'`

        echo "$GROUP/$CP"

        if [ -e /usr/portage/$GROUP/$PK/$CP.ebuild ]; then

                DIGEST="/usr/portage/$GROUP/$PK/files/digest-$CP"

                if [ -e $DIGEST ]; then

                        FILES=`cat $DIGEST | awk '{print $4_"|"_$3}'`

                        PKG_SIZE=0

                        PKG_SIZE_DOWNLOAD=0

                        for F in $FILES; do

                                FILE=`echo $F | sed 's/^.*|//'`

                                SIZE=`echo $F | sed 's/|.*$//'`

                                OUT_SIZE=`print_size $SIZE`

                                OUT_EX=''

                                if [ ! -e /usr/portage/distfiles/$FILE ]; then

                                        PKG_SIZE_DOWNLOAD=`expr $PKG_SIZE_DOWNLO

AD + $SIZE`

                                else

                                        OUT_EX=' (ok)'

                                fi

                                echo -e "\t\t\t" $OUT_SIZE "\t" $FILE $OUT_EX

                                PKG_SIZE=`expr $PKG_SIZE + $SIZE`

                        done

                        echo "    Pkg size: `print_size $PKG_SIZE` "   " Downloa

d: `print_size $PKG_SIZE_DOWNLOAD`"

                        TOTAL_SIZE=`expr $TOTAL_SIZE + $PKG_SIZE`

                        TOTAL_SIZE_DOWNLOAD=`expr $TOTAL_SIZE_DOWNLOAD + $PKG_SI

ZE_DOWNLOAD`

                else

                        echo digest- Not found

                fi

        else

                echo .ebuild Not found

        fi

done

echo Total Size: `print_size $TOTAL_SIZE` "    " Download: `print_size $TOTAL_SI

ZE_DOWNLOAD`

---end---

----------

## inv

Блин, в прошлом сообщении забыл ``code'' нажать, sorry, если очень напрягает, то могу ещё раз запостить.

----------

## Urs

[url]

http://www.gentoo.it/utility/get_size

[/url]

 :Smile: 

----------

