[Eisfair] Alte Lib-Pakete aufräumen

Marcus Röckrath marcus.roeckrath at gmx.de
Sa Aug 3 12:05:46 CEST 2024


Hallo,

Marcus Röckrath wrote:

> Ich habe mir mal folgendes Skript geschrieben, um Libs zu entdecken, die
> nicht required werden:
> 
> #/bin/bash
>                                                                                                                                                                                               
> installedlibs=$(ls -1 /var/install/packages/lib* | \
>                 grep -v "\-dev$" | \
>                 grep -v "\-doc$" | \
>                 grep -v "\-plugins$" | \
>                 grep -v "\-prog$" | \
>                 grep -v "\-tools$" | \
>                 grep -v "\-utils$" | \
>                 cut -d "/" -f 5)
>                                                                                                                                                                                               
> for i in ${installedlibs}
> do
>     if ! egrep -q "<linked-package>${i}[ <]" /var/install/packages/*
>     then
>         if ! egrep -q "<require-.*>${i}[ <]" /var/install/packages/*
>         then
>             if [ $(eisman usage ${i} | wc -l) -eq 1 ]
>             then

Eigentlichj reicht obiges schon im Normalfall, der Rest behandelt den Fall, 
dass es für eine Lib inzwischen ein neu benamtes Replacement gibt, aber 
dieses Replacement, aus welchen Gründen auch immer, noch nicht installiert 
ist, obwohl auch ein Require auf den neuen Namen schon durch die 
installierten Pakete gegeben ist.

Keine Ahnung, ob dieser Fall überhaupt ohne manuelle Eingriffe eintreten 
kann, ich dies aber zumindest abdecken will - was Checks in Skripten angeht, 
bin ich da durchaus etwas paranoid.

Irgendwie habe ich gestern gemerkt, dass dieser Teil, möglicherweise auch 
durch optische Änderungen im eisman-Output nicht ganz sauber war und auch 
nicht mehrfache Paketumbenennung berücksichtigte.

Daher habe ich das ganze mal überarbeitet (Zeilesprünge beachten):

#/bin/bash

installedlibs=$(ls -1 /var/install/packages/lib* | \
                grep -v "\-dev$" | \
                grep -v "\-doc$" | \
                grep -v "\-plugins$" | \
                grep -v "\-prog$" | \
                grep -v "\-tools$" | \
                grep -v "\-utils$" | \
                cut -d "/" -f 5)

for i in ${installedlibs}
do
    libneeded=true
    if ! grep -E -q "<linked-package>${i}[ <]" /var/install/packages/* && \
       ! grep -E -q "<require-.*>${i}[ <]" /var/install/packages/* && \
       [ $(eisman usage ${i} | wc -l) -eq 1 ]
    then
        libneeded=false
        replacement=$(eisman query --outdated --fields="name,substitude" | \                                                                                                                  
                      grep -E -A 1 "^name[ \t]*${i}$" | grep "^substitude" | 
\                                                                                                                
                      head -1 | awk '{ print $2 }')                                                                                                                                           
        while [ -n "${replacement}" ]                                                                                                                                                         
        do                                                                                                                                                                                    
            if grep -E -q "<linked-package>${replacement}[ <]" 
/var/install/packages/* || \                                                                                                   
               grep -E -q "<require-.*>${replacement}[ <]" 
/var/install/packages/* || \                                                                                                       
               [ $(eisman usage ${replacement} | wc -l) -gt 1 ]                                                                                                                               
            then                                                                                                                                                                              
                libneeded=true                                                                                                                                                                
                break                                                                                                                                                                         
            else                                                                                                                                                                              
                replacement=$(eisman query --outdated --
fields="name,substitude" | \                                                                                                          
                              grep -E -A 1 "^name[ \t]*${replacement}$" | 
grep "^substitude" | \                                                                                              
                              head -1 | awk '{ print $2 }')                                                                                                                                   
            fi                                                                                                                                                                                
        done                                                                                                                                                                                  
        if [ "${libneeded}" = false ]                                                                                                                                                         
        then                                                                                                                                                                                  
            if eisman query --quiet ${i}                                                                                                                                                      
            then                                                                                                                                                                              
                echo ${i}                                                                                                                                                                     
            else                                                                                                                                                                              
                echo ${i} "(package retired or not existing)"
            fi
        fi
    fi
done

-- 
Gruß Marcus
[eisfair-Team]



Mehr Informationen über die Mailingliste Eisfair