[Eisfair] Alte Lib-Pakete aufräumen

Marcus Röckrath marcus.roeckrath at gmx.de
Sa Aug 3 15:08:17 CEST 2024


Hallo,

Marcus Röckrath wrote:

Ich habe bislang immer als Grundlage den Inhalt von /var/install/packages 
genommen, aber vielleicht will man es auch auf Basis der installed.db 
machen, daher hier eine Variante, die ohne Parameter aufgerufen die Info-
Dateien aus /var/install/packages nimmt, mit dem Schalter eisman jedoch die 
Paketdatenbank von eisman:

#/bin/bash                                                                                                                                                                                    
                                                                                                                                                                                              
if [ "$1" = eisman ]                                                                                                                                                                          
then                                                                                                                                                                                          
    installedlibs=$(eisman query --installed --format={N} "lib*" | \                                                                                                                          
                    grep -v "\-dev$" | \                                                                                                                                                      
                    grep -v "\-doc$" | \                                                                                                                                                      
                    grep -v "\-plugins$" | \                                                                                                                                                  
                    grep -v "\-prog$" | \                                                                                                                                                     
                    grep -v "\-tools$" | \                                                                                                                                                    
                    grep -v "\-utils$")                                                                                                                                                       
else                                                                                                                                                                                          
    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)
fi

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

Wenn die Infos in /var/install/packages zu denen der Paketdatenbank passen, 
sollte es natürlich keinen Unterschied machen. In dem man beide Varianten 
mal startet, kann man natürlich auch Unstimmigkeiten entdecken, also

- laut DB installierte Pakete deren Info-File fehlt

- Info-File vorhanden aber nicht installiert

-- 
Gruß Marcus
[eisfair-Team]



Mehr Informationen über die Mailingliste Eisfair