tech:script_bash_redhat_centos_comparaison_des_paquets_installes_entre_deux_machines
Table des matières
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
