Come rimuovere pacchetti MacPorts inutilizzati?

91

Ogni volta che installo un programma tramite MacPorts, ottiene e installa molte dipendenze. Quando disinstallo il programma, come faccio a ripristinare in modo ricorsivo tutte le dipendenze non utilizzate con MacPorts?

    
posta hpy 13.03.2011 - 15:13
fonte

6 risposte

102

Per evitare di tagliare accidentalmente foglie che potrebbero essere le cose che hai richiesto, devi installare il pacchetto port_cutleaves quindi eseguire sudo port_cutleaves link

MacPorts 1.9.0 ha aggiunto sqlite portdbformat e MacPorts 2.0.0 ha abbandonato il vecchio formato flat . Il formato di porta DB sqlite è il valore predefinito per le nuove installazioni; le vecchie installazioni che sono state aggiornate alla versione 1.9.x continueranno a utilizzare il formato flat 1 . Puoi convertire un sistema diflat 1.9.x% nel formato sqlite eseguendo l'aggiornamento a MacPorts 2.0 o modificando il valore portdbformat in /opt/local/etc/macports/macports.conf e quindi emettendo un comando port come root ( per esempio sudo port installed ).

Una delle caratteristiche del nuovo formato è che tiene traccia delle installazioni di porte "richieste" o "non richieste". Una porta non richiesta è una che è stata installata solo perché alcune altre porte dipendono da essa. Il pseudo-portname leaves si espande su tutte le porte non richieste su cui non dipende nessuna altra porta installata. Puoi usarlo per "ripulire" le porte non necessarie anche se inizialmente non le hai disinstallate con sudo port uninstall --follow-dependencies portname (che farà ciò che vuoi, ma solo se ti ricordi di usarlo ogni volta che disinstalli qualcosa).

Dovresti esaminare le tue foglie esistenti prima di disinstallarle.

port echo leaves

Alcune foglie comuni ( automake , gperf , libtool , pkgconfig ) sono dipendenze build-time delle porte comuni, quindi potresti volerle "richiedere" ( sudo port setrequested port1 port2 port3 … ) per evitare di disinstallarle solo per reinstallarli in seguito.

Puoi disinstallare le foglie rimanenti abbastanza facilmente:

sudo port uninstall leaves

Nota: prima di potare le tue foglie, potresti anche voler disinstallare vecchie versioni di porte che non sono più "attive". Questo potrebbe rivelare qualche foglia in più (ad esempio, porte che dipendono da porte installate, ma inattive):

sudo port uninstall inactive

Ci sono diverse sezioni nel Guida MacPorts che descrive anche il processo di utilizzo di leaves per disinstallare le porte non necessarie.

    
risposta data 14.03.2011 - 07:13
fonte
8

Dai documenti :

The uninstall action will uninstall an installed port.

%% sudo port uninstall vile Note

To also recursively uninstall the ports that the given port depends on, use the ‑‑follow‑dependencies flag. This will not uninstall dependencies that are marked as requested or that have other dependents.

To recursively uninstall all ports that depend on the given port before uninstalling the port itself, use the ‑‑follow‑dependents flag.

If a port is a dependency of another installed port, uninstall will not remove it unless you remove the dependent port(s) first. To override this behavior, use the -f (force) switch. This will obviously break the dependents. Don't force uninstall ports unless you know what you are doing.

%% sudo port -f uninstall vile

Notare l'avvertenza maggiore nell'ultimo paragrafo. Le dipendenze sono esattamente tali dipendenze e le diverse app possono (richiedono) la stessa dipendenza.

    
risposta data 13.03.2011 - 17:07
fonte
3

Il comando per rimuovere una porta e i suoi dipendenti è:

sudo port uninstall foo --follow-dependents

Tuttavia, se la porta che si sta disinstallando ha dipendenti, non verrà disinstallata senza il flag -f (force).

Ovviamente dovresti iniziare leggendo la Guida MacPorts esaminando specificamente la Sezione di guida per l'installazione.

    
risposta data 13.03.2011 - 17:06
fonte
3

C'è anche uno script nella directory contrib di MacPorts chiamata port_cutleaves che puoi eseguire per rimuovere le dipendenze non necessarie: link . Ti verrà chiesta ogni porta da disinstallare e potrai mantenerne alcuni, se lo desideri.

    
risposta data 30.07.2012 - 00:54
fonte
1

Penso che le altre risposte, e il --follow-dependents flag, non facciano quello che vuoi. Se installi A e A richiede B , quindi grazie ai meravigliosi sistemi di gestione dei pacchetti, verrà installato B per te. Puoi disinstallare B e il flag --follow-dependents ne sarà a conoscenza e rimuovere A . Ma cosa succede se disinstalli A , che è più probabile, perché A è ciò che hai installato manualmente in primo luogo? In questo caso, B viene lasciato indietro.

Se usi Fink, il pacchetto debfoster è progettato per ripulire il tuo sistema e rimuovere le dipendenze inutilizzate.

Debfoster will help you get rid of packages (libraries for example) get left behind on your system when the program that required it was removed or upgraded to a version that doesn't have the dependency.

Sebbene debfoster non funzioni per MacPorts, sembra che ci siano porte di debfoster , ad esempio portsfoster , anche se sembra essere stato interrotto ...

Forse nessuna soluzione attualmente esiste per MacPorts.

    
risposta data 13.03.2011 - 17:23
fonte
1

Ho scritto alcuni script per automatizzare la pulizia delle porte: link

Lo script 'macportsfoster' produrrà un elenco di tutte le porte non richieste da nessun elemento nell'elenco richiesto, ordinato in modo tale che 'port disattivate $ (macportsfoster)' rimuoverà tutti in un solo colpo.

    
risposta data 11.05.2012 - 03:26
fonte

Leggi altre domande sui tag