¿Cómo saber el espacio en disco ocupado por los paquetes en OpenWrt?

16

Estoy tratando de configurar OpenWrt en mi dispositivo y me quedé sin espacio. Estaba descargando algunos paquetes de herramientas. Ahora, ¿cómo puedo determinar sus pesos para decidir qué desinstalar?

¿Es posible mostrar el tamaño de los paquetes instalados con OPKG?

Suzan Cioc
fuente

Respuestas:

11

No todos los entornos OpenWrt están configurados de la misma manera, por lo que mi respuesta es un tiro en la oscuridad ...

El resultado de ejemplo se toma de OpenWrt-12.09 en un "TP-Link TL-WDR4300".

ssh en su enrutador.

Comprueba tus archivos

root@AP9:~# df
Filesystem           1K-blocks      Used Available Use% Mounted on
rootfs                    5184      2124      3060  41% /
/dev/root                 2048      2048         0 100% /rom
tmpfs                    63340       948     62392   1% /tmp
tmpfs                      512         0       512   0% /dev
/dev/mtdblock3            5184      2124      3060  41% /overlay
overlayfs:/overlay        5184      2124      3060  41% /
/dev/sda1             31234700    593536  29075728   2% /mnt/sda1

/dev/sda1 es la tarjeta micro SD de mi dispositivo UMTS ... simplemente ignore esto.

Muchos enrutadores se actualizan de forma similar a la que se ve aquí: un sistema de archivos superpuestos hace que un sistema de archivos superpuestos pseudoescriba un sistema de archivos raíz de solo lectura.

Mira adentro /overlay...

root@AP9:~# cd /overlay/usr/lib/opkg/info/
root@AP9:/overlay/usr/lib/opkg/info# ls *.list | tail -3
usb-modeswitch-data.list
usb-modeswitch.list
zlib.list

Este directorio contiene la información sobre paquetes instalados adicionalmente. Los archivos que terminan en .listson listas de archivos instalados por el paquete con el mismo nombre (sin .list):

root@AP9:/overlay/usr/lib/opkg/info# cat zlib.list 
/usr/lib/libz.so.1.2.7
/usr/lib/libz.so.1
/usr/lib/libz.so

El paquete zlibtiene 3 archivos instalados.

root@AP9:/overlay/usr/lib/opkg/info# du $(cat zlib.list) 
71      /usr/lib/libz.so.1.2.7
1       /usr/lib/libz.so.1
1       /usr/lib/libz.so

El paquete zlibtiene 73kbytes de archivos instalados.

Un crudo 1-liner para unir todo esto y su producción se acorta:

# awk 'BEGIN{D="cd /overlay/usr/lib/opkg/info&&";C=D"ls *.list";while(C|getline>0){P=substr(F=$1,1,length($1)-5);J=D"du -sk $(cat "F")";s=0;while(J|getline>0){s+=$1;t+=$1}close(J);print s"\t"P}print t"\t---TOTAL---"}'
26      blkid
30      block-mount
17      chat
55      comgt
6       kmod-fs-exportfs
(((...some lines skipped...)))
14      portmap
48      swap-utils
223     usb-modeswitch-data
45      usb-modeswitch
73      zlib
4184    ---TOTAL---

HTH!


Añadido 2014-10-17:

La siguiente salida se toma de OpenWrt-12.09 en un "TP-Link TL-WR703N" y muestra cómo agregar la clasificación de la salida por tamaño de paquete.

Echa un vistazo a dónde y cómo Sentra la variable en el juego ...

# awk 'BEGIN{D="cd /overlay/usr/lib/opkg/info&&";C=D"ls *.list";S="sort -n";while(C|getli
ne>0){P=substr(F=$1,1,length($1)-5);J=D"du -sk $(cat "F")";s=0;while(J|getline>0){s+=$1;t+=$1}close(J)
;print s"\t"P|S}close(S);print t"\t---TOTAL---"}'
5       kmod-lib-crc16
5       luci-proto-3g
12      libuuid
13      kmod-usb-serial-wwan
17      chat
24      kmod-usb-acm
24      libusb
26      blkid
30      block-mount
41      kmod-usb-serial
45      usb-modeswitch
48      kmod-usb-serial-option
48      swap-utils
55      comgt
67      kmod-usb-storage
148     libblkid
154     kmod-scsi-core
223     usb-modeswitch-data
382     kmod-fs-ext4
1367    ---TOTAL---

De nuevo: HTH!


Añadido 2018-01-13:

La forma anterior se probó en OpenWrt-AA.

Ahora mirando LEDE-17.01, una ruta ha cambiado: Reemplazar /overlaycon /overlay/upperarreglos esto.

Status quo ( opkg-list-user-installed-sorted-by-sizeno como 1-liner):

#!/usr/bin/awk -f
BEGIN {
        D="cd /overlay/upper/usr/lib/opkg/info&&"
        C=D"ls *.list"
        S="sort -n"
        while(C|getline>0) {
                P=substr(F=$1,1,length($1)-5)
                J=D"du -sk $(cat "F")"
                s=0
                while(J|getline>0) {
                        s+=$1
                        t+=$1
                }
                close(J)
                print s"\t"P|S
        }
        close(S)
        print t"\t---TOTAL---"
}

Prueba de funcionamiento:

root@zsun0:~# ./opkg-list-user-installed-sorted-by-size
8       luci-ssl
9       libustream-mbedtls
13      px5g-mbedtls
338     libmbedtls
368     ---TOTAL---

Pregunta abierta: ¿Cuándo sucedió este cambio en /overlayla estructura de? LEDE-17 es el sucesor de OpenWrt-CC y no tengo sistemas que ejecuten OpenWrt a la mano. Entonces, si necesita esto en OpenWrt-BB o -CC, eche un vistazo /overlayprimero.


fuente
¡Increíble! Solo falta la clasificación ;-)
bonanza
@bonanza ... ¡Puf! O "simsAWKlabim" en AWKish ... ;-D
4

Según la solución de yeti , existe otra posibilidad, que podría ser más rápida. En lugar de calcular el tamaño con dulos archivos del listarchivo, podemos usar el tamaño declarado en el controlarchivo.

Algo como mi pequeño opkg_sizesguion

cd /usr/lib/opkg/info
for i in *.control
do
  echo `grep Size "$i" | cut -f 2 -d :` "${i%.control}"
done

Si desea que se ordene la salida, puede ejecutarla a través de sort:

./opkg_sizes | sort -n

EDITAR

Comparando los resultados de mi guión con las diferencias reveladas de yeti . Es porque él se refirió /overlay/usr/lib/opkg/infomientras yo pensaba que el /overlayprefijo es innecesario. Bueno, no entiendo completamente por qué, pero /usr/lib/opkg/infotambién da los paquetes del sistema, mientras /overlay/usr/lib/opkg/infoque solo da los paquetes del usuario.

Entonces, si el usuario también está interesado en los paquetes del sistema, use la primera versión. Pero para lograr solo los paquetes del usuario, simplemente reemplace la primera línea para:

 cd /overlay/usr/lib/opkg/info

Después de hacerlo, ambos scripts se refieren a los mismos paquetes, pero con números diferentes ... (además de la diferencia obvia entre bytes y kilobytes :-))


root@ap8:~# ls -l 1412453029-14.07-wdr4300-default-packages 
-rw-r--r--    1 root     root          2683 Oct  4 20:03 1412453029-14.07-wdr4300-default-packages
root@ap8:~# du 1412453029-14.07-wdr4300-default-packages 
3       1412453029-14.07-wdr4300-default-packages

lsmuestra el tamaño en bytes, dumuestra el tamaño de todos los bloques asignados por el archivo.

Zvika
fuente
Se le preguntó cuánto espacio consumen los paquetes descargados. Eliminar los paquetes que se instalan en el firmware actualizado no libera espacio en el sistema de archivos superpuestos. . . . . . Al menos esta es la forma en que interpreto la pregunta ...
Estoy de acuerdo con tu comprensión de la pregunta. Pero pensé que la superposición / debería reflejar el sistema real, tal vez tener más información; pero me sorprendió que contenga menos información.
Zvika
Además, es extraño que los 2 métodos den números diferentes ...
Zvika
ducuenta en granularidad del sistema de archivos. Y / overlay es solo la parte escrita de las capas del sistema de archivos.
Bien, supongo que concluye que su respuesta es mejor ...
Zvika
2

Esta respuesta es una versión mejorada de la respuesta de Zvika . Dado que el código fuente es sustancialmente diferente, creo que es mejor agregarlo como una respuesta adicional, en lugar de una edición del original.

#!/bin/sh
grep -H Installed-Size: /overlay/usr/lib/opkg/info/*.control | \
  sed 's,^.*/\([^/]\+\)\.control:Installed-Size: *\(.*\),\2\t\1,'

El código original requería demasiados tenedores, lo que lo hacía tan lento como un segundo. Este código mejorado es más corto y solo usa tres procesos, lo que lleva a un tiempo de ejecución increíblemente rápido de 0.02s (en mi enrutador).

Puedes modificar los caminos:

  • /overlay/usr/lib/opkg/info/*.control→ paquetes instalados por el usuario. Estos son los paquetes que se pueden eliminar para liberar espacio.
  • /rom/usr/lib/opkg/info/*.control→ paquetes del sistema. Estos no se pueden desinstalar. (A menos que realmente sepa lo que está haciendo). Dado que están almacenados en la partición de solo lectura, eliminarlos no liberará espacio adicional.
  • /usr/lib/opkg/info/*.control → todos los paquetes.
Denilson Sá Maia
fuente
0

Para mí, la forma más fácil era usar find;

find / -size +500k

con salida a continuación;

# find / -size +500k
/lib/libc.so
/lib/modules/4.4.92/mac80211.ko
/overlay/upper/usr/lib/libcrypto.so.1.0.0
/overlay/upper/usr/lib/libdns.so.165.0.4
/overlay/upper/usr/sbin/sshd
/rom/lib/libc.so
/rom/lib/modules/4.4.92/mac80211.ko
/usr/lib/libcrypto.so.1.0.0
/usr/lib/libdns.so.165.0.4
/usr/sbin/sshd

Estos fueron los archivos "grandes" en mi instalación LEDE. Necesitaba espacio adicional en mi enrutador para poder formatear, particionar y montar un poco de espacio de almacenamiento USB. Ajústelo +500kal tamaño de archivo que más le convenga.

Johnny5
fuente