tech:script_bash_redhat_centos_comparaison_des_paquets_installes_entre_deux_machines

Script bash RedHat CentOS comparaison des paquets installés entre deux machines

Exemple

Exemple 1

Entrées

rpms-ref.list

rpm-build-libs-4.11.1-16.el7.x86_64
rpm-4.11.1-16.el7.x86_64
rpm-python-4.11.1-16.el7.x86_64
rpm-libs-4.11.1-16.el7.x86_64
vim-common-7.4.160-1.el7.x86_64
vim-enhanced-7.4.160-1.el7.x86_64

rpms-local.list

rpm-python-4.11.3-21.el7.x86_64
rpm-libs-4.11.3-21.el7.x86_64
rpm-build-libs-4.11.3-21.el7.x86_64
rpm-4.11.3-21.el7.x86_64
atop-2.1-1.el7.x86_64

Exécution et sortie

Lister les paquets en trop / à effacer

$ ./comp-rpms.sh list-remove rpms-ref.list rpms-local.list
atop-2.1-1.el7.x86_64

Lister les paquets manquants / à installer

$ ./comp-rpms.sh list-install rpms-ref.list rpms-local.list
vim-common-7.4.160-1.el7.x86_64
vim-enhanced-7.4.160-1.el7.x86_64

Exemple 2

Rendre la Machine cible similaire à Machine référence

La machine cible doit avoir tous les dépôts de la machine de référence

Machine de référence

rpm -qa > rpms-ref.list

On dépose le fichier rpms-ref.list sur la Machine cible.

Machine cible

rpm -qa > rpms-local.list
 
yum remove $(./comp-rpms.sh list-remove rpms-ref.list rpms-local.list)
#for paq in $(./comp-rpms.sh list-remove rpms-ref.list rpms-local.list); do yum remove $paq ; done
 
LANG=C yum install --assumeno $(./comp-rpms.sh list-install-v rpms-ref.list rpms-local.list) |grep '^No package'
#yum install -y $(./comp-rpms.sh list-install-v rpms-ref.list rpms-local.list)
yum install -y $(./comp-rpms.sh list-install rpms-ref.list rpms-local.list)
 
yum downgrade $(./comp-rpms.sh list-same rpms-ref.list rpms-local.list)

Script

comp-rpms.sh

# !/bin/bash
 
FUNC=$1
REFERENCE=$2
CIBLE=$3
set -o nounset
 
 
regex-strip-version()
{
        local var=$1
        sed -e 's/-[0-9][0-9]*.*//g' $var
}
 
list-install()
{
        regex-strip-version $CIBLE > /tmp/rpm.list
 
        for PAQ in $(cat $REFERENCE)
        do
                grep "^$(regex-strip-version <(echo $PAQ))$" /tmp/rpm.list >/dev/null
                if [ $? -eq 1 ]
                then
                        echo "$PAQ"
                fi
        done
        rm -f /tmp/rpm.list
}
 
list-install-v()
{
        regex-strip-version <(list-install)
}
 
list-remove()
{
        regex-strip-version $REFERENCE > /tmp/rpm.list
 
        for PAQ in $(cat $CIBLE)
        do
                grep "^$(regex-strip-version <(echo $PAQ))$" /tmp/rpm.list >/dev/null
                if [ $? -eq 1 ]
                then
                        echo "$PAQ"
                fi
        done
}
 
list-remove-v()
{
        regex-strip-version <(list-remove)
}
 
list-same()
{
        regex-strip-version $CIBLE > /tmp/rpm.list
 
        for PAQ in $(cat $REFERENCE)
        do
                grep "^$(regex-strip-version <(echo $PAQ))$" /tmp/rpm.list >/dev/null
                if [ $? -eq 0 ]
                then
                        echo "$PAQ"
                fi
        done
        rm -f /tmp/rpm.list
}
 
list-same-v()
{
        regex-strip-version <(list-same)
}
 
usage()
{
        cat <<EOF
        $0 FONCTION <FICHIER REFERENCE> <FICHIER CIBLE>
        Exemple 1 :
           rpm -qa > rpms-local.list
           $0 list-remove rpms-ref.list rpms-local.list
EOF
        #typeset -F |awk '{print $3}' |grep -v "^main$"
}
 
main()
{
        if [ "$#" -lt 1 ]
        then
                usage
        else
                shift
                $FUNC $*
        fi
}
 
main $*
tech/script_bash_redhat_centos_comparaison_des_paquets_installes_entre_deux_machines.txt · Dernière modification : de Jean-Baptiste

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki