Comment connaître l'espace disque occupé par les packages dans OpenWrt?

16

J'essaie de configurer OpenWrt sur mon appareil et je suis à court d'espace. Je téléchargeais des packages d'outils. Maintenant, comment puis-je déterminer leurs poids afin de décider quoi désinstaller?

Est-il possible d'afficher la taille des packages installés avec OPKG?

Suzan Cioc
la source

Réponses:

11

Tous les environnements OpenWrt ne sont pas configurés de la même manière, donc ma réponse est un coup dans le noir ...

L'exemple de sortie provient d'OpenWrt-12.09 sur un "TP-Link TL-WDR4300".

ssh dans votre routeur.

Vérifiez vos fichiers.

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 est la carte micro SD de ma clé UMTS ... ignorez-la.

De nombreux routeurs sont flashés de la même manière comme on le voit ici: Un système de fichiers racine en lecture seule est rendu pseudo accessible en écriture par un système de fichiers en superposition.

Regardez à l'intérieur /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

Ce répertoire contient les informations sur les packages supplémentaires installés. Les fichiers se terminant par .listsont des listes de fichiers installés par le package avec le même nom (sans .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

Le package zlibcontient 3 fichiers installés.

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

Le package zlibcontient 73 Ko de fichiers installés.

Une doublure brute pour coller tout cela ensemble et sa production est raccourcie:

# 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!


Ajouté le 17-10-2014:

La sortie suivante est tirée d'OpenWrt-12.09 sur un "TP-Link TL-WR703N" et montre comment ajouter le tri de la sortie par taille de package.

Découvrez où et comment la variable Sentre en jeu ...

# 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---

Encore une fois: HTH!


Ajouté le 13-01-2018:

La méthode ci-dessus a été testée sur OpenWrt-AA.

Maintenant, en regardant LEDE-17.01, un chemin a changé: le remplacement /overlaypar des /overlay/uppercorrectifs.

Statu quo ( opkg-list-user-installed-sorted-by-sizepas comme 1 ligne):

#!/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---"
}

Essai:

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

Question ouverte: quand ce changement de /overlaystructure s'est-il produit? LEDE-17 est le successeur d'OpenWrt-CC et je n'ai aucun système exécutant OpenWrt à portée de main. Donc, si vous en avez besoin sur OpenWrt-BB ou -CC, regardez d' /overlayabord à l' intérieur .


la source
Impressionnant! Seul le tri est manquant ;-)
bonanza
@bonanza ... Poof! Ou "simsAWKlabim" dans AWKish ... ;-D
4

Sur la base de la solution de Yeti , il existe une autre possibilité, qui pourrait être plus rapide. Au lieu de calculer la taille avec dupour les fichiers du listfichier, nous pouvons utiliser la taille déclarée dans le controlfichier.

Quelque chose comme mon petit opkg_sizesscript

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

Si vous souhaitez que la sortie soit triée, vous pouvez l'exécuter via sort:

./opkg_sizes | sort -n

ÉDITER

Comparer les résultats de mon script aux différences révélées par le yéti . C'est parce qu'il a fait référence /overlay/usr/lib/opkg/infoalors que je pensais que le /overlaypréfixe n'était pas nécessaire. Eh bien, je ne comprends pas vraiment pourquoi, mais /usr/lib/opkg/infodonne également les packages système, tout en /overlay/usr/lib/opkg/infone donnant que les packages de l'utilisateur.

Donc, si l'utilisateur est également intéressé par les packages système, utilisez la première version. Mais pour n'atteindre que les packages de l'utilisateur, remplacez simplement la première ligne par:

 cd /overlay/usr/lib/opkg/info

Après cela, les deux scripts se réfèrent aux mêmes packages, mais avec des nombres différents ... (en plus de la différence évidente entre octets et kilo-octets :-))


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

lsmontre la taille en octets, dumontre la taille de tous les blocs alloués par le fichier.

Zvika
la source
Il a été demandé combien d'espace les packages téléchargés consommaient. La suppression des packages en cours d'installation dans le firmware flashé ne libère pas d'espace dans le système de fichiers de superposition. . . . . . C'est du moins ainsi que j'interprète la question ...
Je suis d'accord avec votre compréhension de la question. Mais je pensais que le / overlay devrait refléter le vrai système, peut-être avoir plus d' informations; mais j'ai été surpris qu'il contienne moins d' informations.
Zvika
Aussi, c'est bizarre que les 2 méthodes donnent des nombres différents ...
Zvika
ducompte dans le système de fichiers granularité de la taille des blocs. Et / overlay n'est que la partie écrite des couches du système de fichiers.
OK alors, je suppose que cela conclut que votre réponse est meilleure ...
Zvika
2

Cette réponse est une version améliorée de la réponse de Zvika . Étant donné que le code source est substantiellement différent, je pense qu'il est préférable de l'ajouter comme réponse supplémentaire, plutôt que de modifier l'original.

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

Le code d'origine nécessitait trop de fourches, ce qui le rendait aussi lent qu'une seconde. Ce code amélioré est plus court et n'utilise que trois processus, conduisant à un temps d'exécution extrêmement rapide de 0,02 s (sur mon routeur).

Vous pouvez modifier les chemins:

  • /overlay/usr/lib/opkg/info/*.control→ packages installés par l'utilisateur. Ce sont les packages qui peuvent être supprimés afin de libérer de l'espace.
  • /rom/usr/lib/opkg/info/*.control→ packages système. Ceux-ci ne peuvent pas être désinstallés. (À moins que vous ne sachiez vraiment ce que vous faites.) Comme ils sont stockés dans la partition en lecture seule, leur suppression ne libérera pas d'espace supplémentaire.
  • /usr/lib/opkg/info/*.control → tous les packages.
Denilson Sá Maia
la source
0

Pour moi, la façon la plus simple était d'utiliser find;

find / -size +500k

avec sortie ci-dessous;

# 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

Ce sont les "gros" fichiers de mon installation LEDE. J'avais besoin d'espace supplémentaire sur mon routeur pour pouvoir formater, partitionner et monter de l'espace de stockage USB. Ajustez +500kà une taille de fichier qui vous convient mieux.

Johnny5
la source