• [^] # Re: Réinstallation plutôt que mise à jour

    Posté par (site web personnel) . En réponse au journal Counter-troll Ubuntu, une fois n'est pas coutume. Évalué à 3.

    PS: tu veux pas partager ton script?

    Aucun problème


    #!/bin/bash -norc

    ###############################################################################
    # This program do maintenance package tasks
    #
    # This program is under licence GPL :
    # http://www.gnu.org/licenses/gpl.html
    #
    # This program:
    # - Remove orphan packages
    # - Remove 'rc' packages (see "dpkg -l" result)
    # - Some of 'rc' packages are not empty, so we could remove it let's user
    # to delete it manually (package list supplied)
    #
    # Author: Olivier ALLARD-JACQUIN / http://olivieraj.free.fr/
    # Version: 1.1
    # Creation date: 2008年09月06日 Last update: 2009年02月16日
    ###############################################################################

    TotalPackageCount() {

    LANG=C dpkg -l | \
    grep "^[ir][ic]" | \
    wc -l
    }

    PackageCouldBePurgedCount() {

    LANG=C dpkg -l | \
    grep "^[r][c]" | \
    wc -l
    }

    SelectEmptyPackageToPurge() {

    for I in `LANG=C dpkg -l |grep "^[r][c]"|awk '{print 2ドル}'`; do

    if [ -n "`LANG=C dpkg -L $I | grep 'does not contain any files'`" ]; then

    echo -ne "$I "
    fi
    done
    }

    SelectNonEmptyPackageToPurge() {

    for I in `LANG=C dpkg -l |grep "^[r][c]"|awk '{print 2ドル}'`; do

    echo -ne "$I "
    done
    }

    PurgeOrphanedPackage() {

    local Result

    echo "+ Looking for orphaned packages..."

    IFS=$'\n'
    local Orphaned=`deborphan`
    unset IFS
    if [ -n "$Orphaned" ]; then

    echo " - Orphaned packages found ($Orphaned)"
    echo -ne " Do you want me to purge orphaned packages ? [Y/n] "
    read Result

    if [ -z "$Result" ] || [ "$Result" == "Y" ] || [ "$Result" == "y" ]; then

    echo " - Purging orphaned packages... "
    aptitude purge $Orphaned
    Result="$?"

    if [ "$Result" == "0" ]; then

    echo " - Purging orphaned packages... OK"
    else

    echo " - Purging orphaned packages... FAILED"
    fi

    else

    echo " - Skipping orphaned packages purge !"
    fi

    else

    echo " - No orphaned package found"
    fi
    }

    PurgeRcPackage() {

    local Result

    echo "+ Looking for 'rc' packages..."

    local Packages=`SelectEmptyPackageToPurge`
    if [ -n "$Packages" ]; then

    echo " - 'rc' packages found ($Packages)"
    echo -ne " Do you want me to purge 'rc' packages ? [Y/n] "
    read Result

    if [ -z "$Result" ] || [ "$Result" == "Y" ] || [ "$Result" == "y" ]; then

    echo " - Purging 'rc' packages... "
    aptitude purge $Packages
    Result="$?"

    if [ "$Result" == "0" ]; then

    echo " - Purging 'rc' packages... OK"
    else

    echo " - Purging orphaned packages... FAILED"
    fi

    else

    echo " - Skipping 'rc' packages purge !"
    fi

    else

    echo " - No 'rc' package could be deleted"

    Result=`PackageCouldBePurgedCount`
    if [ "$Result" != "0" ]; then

    echo " - I've found $Result 'rc' packages, but they are not empty
    - If you want, you could maunally purge those package, by using following command :
    aptitude purge `SelectNonEmptyPackageToPurge`
    - Skipping purge..."
    fi
    fi
    }

    MainProgram() {

    echo "+ Total installed packages: `TotalPackageCount`"
    echo "+ 'rc' packages could be removed: `PackageCouldBePurgedCount`"

    PurgeOrphanedPackage
    PurgeRcPackage

    echo "+ Total installed packages: `TotalPackageCount`"
    echo
    }

    # Main program
    MainProgram


    La mise en page DLFP casse toute l'indentation, mais le code reste lisible.

    Si une action a été faite (purge d'un paquet, etc..), on peut relancer le script afin de voir si il n'y a pas d'autres actions à refaire (par exemple, un nouvel orphelin). Je dois l'améliorer pour intégrer cela dans une boucle, mais ce n'est pas une de mes priorité actuelle.