
Se siete utilizzatori di distribuzioni Linux Debian o derivate vi sarete certamente trovati una volta nella vita di fronte a un quesito: quali dipendenze sono state installate da un pacchetto appena aggiunto al sistema?
La risposta a questa domanda è articolata, in particolare se avete predilezione verso la linea di comando. Nella varietà dei tool grafici che fanno da frontend al sistema APT (ossia il package manager di Debian) è probabile esista qualche metodo per nulla esoterico per vedere riassunte da qualche parte queste informazioni, ma dalla linea di comando le cose rischiano di complicarsi.
Di fatto, tutto si riduce all’analisi del file /var/log/apt/history.log
. È all’interno di questo file che, ogni volta che viene eseguita un’operazione mediante il comando apt
, vengono registrate tutte le informazioni del caso inerenti all’operazione, incluse quindi eventuali dipendenze installate.
Un esempio semplicissimo, ho avuto recentemente bisogno di installare il pacchetto arduino
che contiene la IDE per programmare con i SoC (System on a Chip) open-source di origine italiana. Il comando per completare l’operazione è apt install arduino
e quanto segue è ciò che è stato registrato all’interno del file di log:
Start-Date: 2025-09-05 11:11:29
Commandline: apt install arduino
Requested-By: rasca (1000)
Install: libcommons-net-java:amd64 (3.9.0-1, automatic), gcc-avr:amd64 (1:14.2.0-2, automatic), libeclipse-jdt-annotation-java:amd64 (2.2.700+eclipse4.29-2, automatic), liblistserialsj-dev:amd64 (1.4.0+repack-1+b2, automatic), libmongodb-java:amd64 (3.6.3-2, automatic), libxml-commons-external-java:amd64 (1.4.01-6, automatic), libbcutil-java:amd64 (1.80-3, automatic), libjna-java:amd64 (5.15.0-1, automatic), librhino-java:amd64 (1.7.15-1, automatic), libjackson2-annotations-java:amd64 (2.14.0-1, automatic), libcommons-io-java:amd64 (2.19.0-1, automatic), liblightcouch-java:amd64 (0.2.0-1, automatic), libjzlib-java:amd64 (1.1.3-3, automatic), libslf4j-java:amd64 (1.7.32-2, automatic), libsemver-java:amd64 (0.10.2-2, automatic), java-wrappers:amd64 (0.5, automatic), extra-xdg-menus:amd64 (1.0-7, automatic), arduino:amd64 (2:1.8.19+dfsg1-3), libjackson2-core-java:amd64 (2.14.1-1, automatic), libcommons-exec-java:amd64 (1.3-3, automatic), libhttpclient-java:amd64 (4.5.14-1, automatic), libjunixsocket-java:amd64 (2.6.1-1, automatic), libjsch-java:amd64 (0.2.19-1, automatic), libjunixsocket-jni:amd64 (2.6.1-1, automatic), binutils-avr:amd64 (2.43.50.20250108-1, automatic), libhttpcore-java:amd64 (4.4.16-1, automatic), libjna-jni:amd64 (5.15.0-1, automatic), libjna-platform-java:amd64 (5.15.0-1, automatic), libbatik-java:amd64 (1.18+dfsg-2, automatic), liblog4j2-java:amd64 (2.19.0-2, automatic), libjssc-java:amd64 (2.8.0-4, automatic), librxtx-java:amd64 (2.2.0+dfsg-3.1, automatic), avr-libc:amd64 (1:2.2.1-1, automatic), libhidapi-libusb0:amd64 (0.14.0-1+b2, automatic), libusb-0.1-4:amd64 (2:0.1.12-35+b1, automatic), libserialport0:amd64 (0.1.2-1, automatic), libcommons-lang3-java:amd64 (3.17.0-1, automatic), libjaxp1.3-java:amd64 (1.3.05-6, automatic), libgoogle-gson-java:amd64 (2.10.1-1, automatic), libcommons-compress-java:amd64 (1.27.1-2, automatic), libastylej-jni:amd64 (3.1-3+b3, automatic), libjackson2-databind-java:amd64 (2.14.0+ds-1, automatic), arduino-ctags:amd64 (5.8-arduino11-3, automatic), libbcpg-java:amd64 (1.80-3, automatic), arduino-builder:amd64 (1.3.25-5+b2, automatic), libxmlgraphics-commons-java:amd64 (2.10-3, automatic), libftdi1:amd64 (0.20-4+b2, automatic), librsyntaxtextarea-java:amd64 (2.5.8-2, automatic), avrdude:amd64 (7.1+dfsg-3+b2, automatic), libjmdns-java:amd64 (3.5.5-1, automatic), arduino-core-avr:amd64 (1.8.6+dfsg-2, automatic), libbcprov-java:amd64 (1.80-3, automatic), liblistserialsj1:amd64 (1.4.0+repack-1+b2, automatic), libcommons-codec-java:amd64 (1.18.0-1, automatic)
End-Date: 2025-09-05 11:11:45
L’installazione automatica delle dipendenze porta con sé un numero molto ampio di pacchetti e, tornando a quanto citato prima, per essere certi di ripulire tutto nel caso si scelga di rimuovere il pacchetto principale ci sono due opzioni:
- Si utilizza il comando
sudo apt autoremove
pensato proprio allo scopo di rimuovere pacchetti installati come dipendenza, ma presenta il problema che se questi si accumulano di fatto non c’è una discriminante. - Si effettua un parsing del log a colpi di
sed
e si ottiene una lista da “trattare” in qualche modo.
Fino ad oggi questi erano gli unici modi sfruttabili, ma – e qui sta la notizia – le cose stanno per cambiare, come racconta Linuxiac, grazie ad una patch che è stata presentata da Simon Johansson sul GitLab del progetto Debian.
Lo scopo è introdurre due nuove opzioni al comando apt
, rispettivamente:
history-list
che restituirà la lista di tutte le operazioni effettuate in precedenza, ciascuna identificata mediante ID univoco.history-info
che, dato uno specifico ID, restituirà informazioni dettagliate a proposito della transazione effettuata.
Quindi, finalmente, così come in altre soluzioni “concorrenti” dove questo tipo di funzionalità esiste da tempo (vedi in dnf
, il package manager dei sistemi Red Hat/Fedora), il sistema APT finalmente si adegua, andando a rendere la vita dei suoi utenti un pochino più semplice.
Più difficile dire quando con precisione la funzionalità sarà disponibile, ma essendo parte di una merge request pubblica sarà possibile per ciascuno tracciarne la progressione.
Da sempre appassionato del mondo open-source e di Linux nel 2009 ho fondato il portale Mia Mamma Usa Linux! per condividere articoli, notizie ed in generale tutto quello che riguarda il mondo del pinguino, con particolare attenzione alle tematiche di interoperabilità, HA e cloud.
E, sì, mia mamma usa Linux dal 2009.
Lascia un commento