logo Debian Debian Debian-France Debian-Facile Debian-fr.org Forum-Debian.fr Debian ? Communautés logo inclusivité

Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).

#26 27-10-2015 09:38:06

paskal
autobahn
Lieu : ailleurs
Inscription : 14-06-2011
Site Web

Re : [wiki] - Script bash - Lister les paquets installés et leur provenance

Le script est en cause vu qu'il ne gère pas les cas particuliers.
En cette circonstance, l'état de ton système est "précieux" en cela qu'il peut permettre d'améliorer ce script.  cool

I'd love to change the world
But I don't know what to do
So I'll leave it up to you...

logo-sur-fond.png

Hors ligne

#27 27-10-2015 21:24:32

Philou92
Adhérent(e)
Lieu : Hauts de Seine
Distrib. : Debian bookworm
Noyau : Linux 6.1.0-21-amd64
(G)UI : LightDM et Xfce4.18
Inscription : 29-04-2015

Re : [wiki] - Script bash - Lister les paquets installés et leur provenance

J'ai suivi mon idée et ai corrigé légèrement la boucle "for" du script comme ci-dessous.
Pour moi cela fonctionne parfaitement. Je n'ai plus d'erreur et le paquet wine est correctement renseigné. smile

for i in `dpkg -l | grep ^ii | awk '{print $2}'` ; do
    apt-cache policy $i  > "$temp_file"
#    let j=`cat -n $temp_file | grep 100\ \/var\/lib\/dpkg\/status | awk '{print $1}'`-1;
    echo "$i: `cat -n $temp_file | sed -n "6"p | awk '{print $3" "$4" "$5" "$6}'`" >> "$deblist";
done



Résultat (partiel) du fichier deblist

whois: http://ftp.fr.debian.org/debian/ jessie/main amd64 Packages
wine: http://ftp.fr.debian.org/debian/ jessie/main amd64 Packages
wine32: http://ftp.fr.debian.org/debian/ jessie/main i386 Packages
wine64: http://ftp.fr.debian.org/debian/ jessie/main amd64 Packages


Tousse antique Ovide !

Hors ligne

#28 27-10-2015 21:36:16

paskal
autobahn
Lieu : ailleurs
Inscription : 14-06-2011
Site Web

Re : [wiki] - Script bash - Lister les paquets installés et leur provenance

cool

I'd love to change the world
But I don't know what to do
So I'll leave it up to you...

logo-sur-fond.png

Hors ligne

#29 23-05-2016 10:13:56

Severian
Membre
Distrib. : Debian GNU/Linux 9.4 (stretch)
Noyau : Linux 4.14.0-0.bpo.3-amd64
(G)UI : Openbox 3.6.1-4
Inscription : 13-12-2014

Re : [wiki] - Script bash - Lister les paquets installés et leur provenance

petit retour sur le script

il n'y a aucune commande qui exige d'être en root pour exécuter ce script, la seule obligation c'est l'utilisation du répertoire /var/cache/ pour recevoir le fichier deblist
en utilisant un répertoire utilisateur ce script "fonctionne"

autre point, si un paquets est présent sur deux dépôts (avec le même n° de version) ça ne donne pas forcément le bon dépôt
exemple

apt-cache policy acpi


acpi:
  Installé : 1.7-1
  Candidat : 1.7-1
 Table de version :
 *** 1.7-1 0
        990 http://httpredir.debian.org/debian/ jessie/main amd64 Packages
         50 http://httpredir.debian.org/debian/ stretch/main amd64 Packages
        100 /var/lib/dpkg/status


résultat de Debsources pour acpi

cat .log/deblist | grep acpi


acpi: http://httpredir.debian.org/debian/ stretch/main amd64 Packages
acpi-support-base: http://httpredir.debian.org/debian/ jessie/main amd64 Packages
acpid: http://httpredir.debian.org/debian/ jessie/main amd64 Packages


le retour de la ligne

let j=`cat -n $temp_file | grep 100\ \/var\/lib\/dpkg\/status | awk '{print $1}'`-1;


va lire la ligne précedente à 100 /var/lib/dpkg/status donc erroné dans le cas acpi

Hors ligne

#30 23-05-2016 19:53:52

Severian
Membre
Distrib. : Debian GNU/Linux 9.4 (stretch)
Noyau : Linux 4.14.0-0.bpo.3-amd64
(G)UI : Openbox 3.6.1-4
Inscription : 13-12-2014

Re : [wiki] - Script bash - Lister les paquets installés et leur provenance

j'ai "retravaillé" le script pour qu'il enregistre clairement les provenances des paquets installé

à testé, normalement il fonctionne pour jessie et stretch (et bon désolé je ne suis pas codeur, ce n'est pas très propre et il est sûrement possible de faire mieux tongue)

#!/bin/bash

temp_file="/tmp/policy"
if [ ! -d ~/DebSources/ ]; then
  mkdir ~/DebSources
fi

update() {
#if [ `id -u` -ne 0 ]; then echo "Vous devez être ROOT"; exit 1; fi
find ~/DebSources/ -name *.lst -exec rm -f {} \;
for i in `dpkg -l | grep ^ii | awk '{print $2}'` ; do
    apt-cache policy $i > "$temp_file"
    let "j=`cat -n $temp_file |  grep '\*\*\*' | awk '{print $1}'`+1";
    t1=`cat -n $temp_file | sed -n "$j"p | awk '{print $3}'`
    t2=`cat -n $temp_file | sed -n "$j"p | awk '{print $4}'`
    t21=`echo $t2 | tr "/" " " | awk '{print $1}'`
    t22=`echo $t2 | tr "/" " " | awk '{print $2}'`
    t23=`echo $t2 | tr "/" " " | awk '{print $3}'`
    if [ "$t1" = "/var/lib/dpkg/status" ]; then
    if [ ! -d ~/DebSources/local/ ]; then
      mkdir ~/DebSources/local
    fi
    echo -e "`echo $i | cut -d: -f1`\t\t`dpkg -l $i | grep ^ii | awk '{print $3}'`\t\t`cat -n $temp_file | sed -n "$j"p | awk '{print $3" "$4" "$5" "$6}'`" >> ~/DebSources/local/local.lst;
    elif [ "$t22" = "updates" ]; then
    for g in "jessie" "stretch"; do
      if [ "$t21" = "$g" ]; then
        if [ ! -d ~/DebSources/"security-"$g"-"$t22 ]; then
          mkdir ~/DebSources/"security-"$g"-"$t22
        fi
        for h in "main" "contrib" "non-free"; do
          if [ "$t23" = "$h" ]; then
            echo -e "`echo $i | cut -d: -f1`\t\t`dpkg -l $i | grep ^ii | awk '{print $3}'`\t\t`cat -n $temp_file | sed -n "$j"p | awk '{print $3"\t"$4"\t"$5"\t"$6}'`" >> ~/DebSources/"security-"$g"-"$t22/$h.lst;
          fi
        done
      fi
    done
  else   
    for k in "jessie" "jessie-updates" "jessie-backports" "stretch" "stretch-updates"; do
      if [ "$t21" = "$k" ]; then
        if [ ! -d ~/DebSources/$k ]; then
          mkdir ~/DebSources/$k
        fi
        for l in "main" "contrib" "non-free"; do
          if [ "$t22" = "$l" ]; then
            echo -e "`echo $i | cut -d: -f1`\t\t`dpkg -l $i | grep ^ii | awk '{print $3}'`\t\t`cat -n $temp_file | sed -n "$j"p | awk '{print $3"\t"$4"\t"$5"\t"$6}'`" >> ~/DebSources/$k/$l.lst;
          fi
        done
      fi
    done
    fi
done
rm -f "$temp_file" > /dev/null;
}


if [ `find ~/DebSources -name *.lst | wc -l` -eq 0 ] && [ "$1" != "-u" ]; then
    echo "Veuillez faire '`basename $0` -u' SVP";
    exit 1;
fi

case $1 in
    -h)
        echo "Usage: `basename $0` -u   : met à jour la base de donnée (root)"
        echo "       `basename $0`  : affiche la base de donnée"
        exit 0;
        ;;
    -u)
        update
        exit 0
        ;;
    *)
        find ~/DebSources/ -name '*.lst' -exec bash -c 'echo -e "\n$1\n"; nl -ba "$1"' _ '{}' \;
        ;;
esac
 

Hors ligne

Pied de page des forums