Debian-facile

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

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

#1 05-10-2019 03:04:24

Beta-Pictoris
Membre
Lieu : Angers
Distrib. : Buster
Inscription : 12-08-2015

apt-history

Bonjour,

Le script qui suit reprend la même idée que la commande "yum history" que l'on trouve sur la famille des distributions Linux Fedora :


#!/usr/bin/perl -w

# Commande apt-history

use v5.10 ;
use Getopt::Long ;

my $base = "$ENV{HOME}/.apt-history" ;

GetOptions
    'update'      => \&update ,
    'list'        => \&list   ,
    'info=i'      => \&info   ,
    'remove=i'    => \&remove ,
    'help'    => \&help   ;

sub update
{
    use IO::Uncompress::Gunzip qw( gunzip $GunzipError ) ;

    my $log_files = "/var/log/apt/history.log*" ;
    my $n = 1 ;
    my $d ;
    my $h ;
    my $o ;
    my $c ;
    my $p ;

    dbmopen my %h , $base , 0644 ;

    say "" ;

    foreach ( sort { -M $b <=> -M $a } glob $log_files )
    {
  say "Traitement du fichier de log $_" ;

  my $f = IO::Uncompress::Gunzip -> new ( $_ ) or die "gunzip failed: $GunzipError\n" ;

  while ( <$f> )
  {
      if ( $_ =~ m/^Start-Date: (.{10,10}).*(.{8,8})/ )
      {
    ( $d , $h ) = ( $1 , $2 ) ;
    ( $c ) = <$f> =~ m/^Commandline: (.*)/ ;
    ( $o , $p ) = <$f> =~ m/^(.*?): (.*)/ ;
    ( $o , $p ) = <$f> =~ m/^(.*?): (.*)/ if $o eq "Requested-By" ;
    $p =~ s/\(.*?\)//g ;
    $p =~ s/, //g ;
    $h { $n++ } = "$d;$h;$o;$c;$p" ;
      }
  }
  close $f ;
    }
    dbmclose %h ;

    say "" ;
}

sub list
{
    use Term::ReadKey ;

    my ( $width_chars ) = GetTerminalSize() ;

    dbmopen my %h , $base , 0644 ;

    say "" ;

    foreach ( sort { $a <=> $b } keys %h )
    {
  my ( $d , $h , $o , $c ) = split ";" , $h { $_ } ;

  say substr sprintf ( "%5d | %s | %s | %-9s | %s" , $_ , $d , $h , $o , $c ) , 0 , $width_chars ;
    }

    dbmclose %h ;

    say "" ;
}

sub info
{
    my ( $opt , $n ) = @_ ;

    dbmopen my %h , $base , 0644 ;

    my ( $d , $h , $o , $c , $p ) = split ";" , $h { $n } ;
    say "\nDate :\t\t$d" ;
    say "Heure :\t\t$h" ;
    say "Opération :\t$o" ;
    say "\nCommande :\n$c" ;
    say "\nPaquets mis en jeu:\n$p\n" ;

    dbmclose %h ;
}

sub remove
{
    my ( $opt , $n ) = @_ ;

    dbmopen my %h , $base , 0644 ;

    my ( $d , $h , $o , $c , $p ) = split ";" , $h { $n } ;

    say "\napt -s --purge autoremove $p" ;
    say `apt -s --purge autoremove $p` ;

    dbmclose %h ;
}

sub help
{
    say "\napt-history 0.0.1\n" ;
    say "Usage : apt-history [options] argument\n" ;
    say "apt-history est un outil en ligne de commande qui permet de gérer l'historique des transactions sur les paquets deb.\n" ;
    say "Les options :" ;
    say "\t--update\t- importe les fichiers de logs dans la base de données locale.";
    say "\t--list\t\t- affiche l'historique des transactions sur les paquets." ;
    say "\t--info n\t- affiche les détails de la transaction n." ;
    say "\t--remove n\t- simule la désinstallation des paquets mis en jeux lors de la transaction n.\n" ;
}
 


En plus de perl, vous devrez, éventuellement, installer le paquet "libterm-readkey-perl" pour faire fonctionner ce script.

Par ailleurs, pensez à rendre le script exécutable avec 'chmod' par exemple.

Dites-moi s'il y a des choses que vous trouvez incorrectes.

Dernière modification par Beta-Pictoris (06-10-2019 15:12:11)

En ligne

#2 06-10-2019 12:43:48

Beta-Pictoris
Membre
Lieu : Angers
Distrib. : Buster
Inscription : 12-08-2015

Re : apt-history

Bonjour smile

Ne soyez pas timide ! smile

N'hésitez pas à tester ce truc et me dire s'il sert à quelque chose ! smile

Par ailleurs, je vois que l'indentation dans les balises de code perl est boguée. wink

Dernière modification par Beta-Pictoris (06-10-2019 12:44:34)

En ligne

#3 06-10-2019 14:52:50

otyugh
CA Debian-Facile
Lieu : Quimperlé/Arzano
Distrib. : Debian Stable
Inscription : 20-09-2016
Site Web

Re : apt-history

Ne connaissant pas yum de Fedora... x)

Tu pourrai faire une petite demo ? Genre quand j'avais fait un script pour ffmpeg, ça ne parlait à personne avant que je ponde une vidéo d'un "cas d'usage" tout simple : https://pouet.chapril.org/system/media_ … 1567014214

datalove-datalove-s1-2.png agendadulibre-lagendadulibre.png arzinfo-arzinfo.png

En ligne

#4 06-10-2019 15:24:39

Beta-Pictoris
Membre
Lieu : Angers
Distrib. : Buster
Inscription : 12-08-2015

Re : apt-history

Pour la vidéo, on verra plus tard.
Voici un exemple d'utilisation :

./apt-history --update


Traitement du fichier de log /var/log/apt/history.log.6.gz
Traitement du fichier de log /var/log/apt/history.log.5.gz
Traitement du fichier de log /var/log/apt/history.log.4.gz
Traitement du fichier de log /var/log/apt/history.log.3.gz
Traitement du fichier de log /var/log/apt/history.log.2.gz
Traitement du fichier de log /var/log/apt/history.log.1.gz
Traitement du fichier de log /var/log/apt/history.log
 


./apt-history --list


.........................................................................
  552 | 2019-09-20 | 23:46:55 | Install   | apt install racket
  553 | 2019-09-21 | 09:10:13 | Upgrade   | apt full-upgrade
  554 | 2019-09-21 | 09:13:12 | Purge     | apt --purge autoremove tuned
  555 | 2019-09-21 | 09:13:52 | Install   | apt install tlp
  556 | 2019-09-21 | 09:20:11 | Purge     | apt --purge autoremove tlp
  557 | 2019-09-22 | 20:27:46 | Install   | apt install perl-tk
  558 | 2019-09-24 | 19:04:03 | Upgrade   | /usr/bin/unattended-upgrade -d
  559 | 2019-09-25 | 07:54:44 | Upgrade   | /usr/bin/unattended-upgrade -d
  560 | 2019-09-25 | 07:54:48 | Upgrade   | /usr/bin/unattended-upgrade -d
  561 | 2019-09-25 | 07:54:59 | Upgrade   | /usr/bin/unattended-upgrade -d
  562 | 2019-09-28 | 13:52:34 | Upgrade   | /usr/bin/unattended-upgrade -d
  563 | 2019-09-28 | 13:52:38 | Upgrade   | /usr/bin/unattended-upgrade -d
  564 | 2019-09-28 | 13:53:03 | Upgrade   | /usr/bin/unattended-upgrade -d
  565 | 2019-09-28 | 13:53:07 | Upgrade   | /usr/bin/unattended-upgrade -d
  566 | 2019-09-28 | 13:53:11 | Upgrade   | /usr/bin/unattended-upgrade -d
  567 | 2019-09-28 | 13:53:15 | Upgrade   | /usr/bin/unattended-upgrade -d
  568 | 2019-09-28 | 18:22:50 | Install   | apt install libterm-readkey-perl/stable
  569 | 2019-09-29 | 22:15:29 | Upgrade   | /usr/bin/unattended-upgrade -d
  570 | 2019-10-01 | 21:17:10 | Install   | apt install msmtp
  571 | 2019-10-02 | 20:19:21 | Upgrade   | /usr/bin/unattended-upgrade -d
  572 | 2019-10-02 | 20:19:25 | Upgrade   | /usr/bin/unattended-upgrade -d
 


./apt-history --info 568


Date :    2019-09-28
Heure :   18:22:50
Opération :  Install

Commande :
apt install libterm-readkey-perl/stable

Paquets mis en jeu:
libterm-readkey-perl:amd64
 


 ./apt-history --remove 568


apt -s --purge autoremove libterm-readkey-perl:amd64

WARNING: apt does not have a stable CLI interface. Use with caution in scripts.

NOTE: Ceci n'est qu'une simulation !
      apt a besoin des privilèges du superutilisateur
      pour pouvoir vraiment fonctionner.
      Veuillez aussi noter que le verrouillage est désactivé,
      et la situation n'est donc pas forcément représentative
      de la réalité !
Lecture des listes de paquets…
Construction de l'arbre des dépendances…
Lecture des informations d'état…
Les paquets suivants seront ENLEVÉS :
  libterm-readkey-perl*
0 mis à jour, 0 nouvellement installés, 1 à enlever et 5 non mis à jour.
Purg libterm-readkey-perl [2.38-1]
 

Dernière modification par Beta-Pictoris (06-10-2019 15:26:07)

En ligne

#5 06-10-2019 15:32:54

Beta-Pictoris
Membre
Lieu : Angers
Distrib. : Buster
Inscription : 12-08-2015

Re : apt-history

A noter, il y a, aussi, une petite aide integrée :

 ./apt-history --help



apt-history 0.0.1

Usage : apt-history [options] argument

apt-history est un outil en ligne de commande qui permet de gérer l'historique des transactions sur les paquets deb.

Les options :
  --update  - importe les fichiers de logs dans la base de données locale.
  --list    - affiche l'historique des transactions sur les paquets.
  --info n  - affiche les détails de la transaction n.
  --remove n  - simule la désinstallation des paquets mis en jeux lors de la transaction n.
 

En ligne

#6 07-10-2019 09:42:25

captnfab
Admin-Girafe
Lieu : /dev/random
Distrib. : Debian Stretch/Buster/Sid/Rc-Buggy
Noyau : Linux (≥ 4.12)
(G)UI : i3-wm (≥ 4.13)
Inscription : 07-07-2008
Site Web

Re : apt-history

Plop,

Sympa comme script smile

J'ai tenté, j'ai eu quelques erreurs

apt-history --update


Traitement du fichier de log /var/log/apt/history.log.12.gz
Traitement du fichier de log /var/log/apt/history.log.11.gz
Use of uninitialized value $c in concatenation (.) or string at /home/xxxx/.local/bin/apt-history line 49, <GEN2> line 37.
Use of uninitialized value $c in concatenation (.) or string at /home/xxxx/.local/bin/apt-history line 49, <GEN2> line 63.
Use of uninitialized value $c in concatenation (.) or string at /home/xxxx/.local/bin/apt-history line 49, <GEN2> line 104.
Traitement du fichier de log /var/log/apt/history.log.10.gz
Traitement du fichier de log /var/log/apt/history.log.9.gz
Use of uninitialized value $c in concatenation (.) or string at /home/xxxx/.local/bin/apt-history line 49, <GEN6> line 18.
Use of uninitialized value $c in concatenation (.) or string at /home/xxxx/.local/bin/apt-history line 49, <GEN6> line 53.
Use of uninitialized value $c in concatenation (.) or string at /home/xxxx/.local/bin/apt-history line 49, <GEN6> line 59.
Use of uninitialized value $c in concatenation (.) or string at /home/xxxx/.local/bin/apt-history line 49, <GEN6> line 65.
Traitement du fichier de log /var/log/apt/history.log.8.gz
Use of uninitialized value $c in concatenation (.) or string at /home/xxxx/.local/bin/apt-history line 49, <GEN8> line 68.
Traitement du fichier de log /var/log/apt/history.log.7.gz
Traitement du fichier de log /var/log/apt/history.log.6.gz
Traitement du fichier de log /var/log/apt/history.log.5.gz
Use of uninitialized value $c in concatenation (.) or string at /home/xxxx/.local/bin/apt-history line 49, <GEN14> line 187.
Use of uninitialized value $c in concatenation (.) or string at /home/xxxx/.local/bin/apt-history line 49, <GEN14> line 210.
Use of uninitialized value $c in concatenation (.) or string at /home/xxxx/.local/bin/apt-history line 49, <GEN14> line 222.
Traitement du fichier de log /var/log/apt/history.log.4.gz
Traitement du fichier de log /var/log/apt/history.log.3.gz
Traitement du fichier de log /var/log/apt/history.log.2.gz
Use of uninitialized value $c in concatenation (.) or string at /home/xxxx/.local/bin/apt-history line 49, <GEN20> line 41.
Use of uninitialized value $c in concatenation (.) or string at /home/xxxx/.local/bin/apt-history line 49, <GEN20> line 47.
Traitement du fichier de log /var/log/apt/history.log.1.gz
Traitement du fichier de log /var/log/apt/history.log



dpkg -l libterm-readkey-perl


Souhait=inconnU/Installé/suppRimé/Purgé/H=à garder
| État=Non/Installé/fichier-Config/dépaqUeté/échec-conFig/H=semi-installé/W=attend-traitement-déclenchements
|/ Err?=(aucune)/besoin Réinstallation (État,Err: majuscule=mauvais)
||/ Nom                  Version      Architecture Description
+++-====================-============-============-=======================================
ii  libterm-readkey-perl 2.38-1       amd64        perl module for simple terminal control


captnfab,
Association Debian-Facile, bépo.
TheDoctor: Your wish is my command… But be careful what you wish for.
Je suis parrain linux !

Hors ligne

#7 07-10-2019 18:58:04

Beta-Pictoris
Membre
Lieu : Angers
Distrib. : Buster
Inscription : 12-08-2015

Re : apt-history

Tu as des fichiers de log qui ne respectent, peut-être, pas le format utilisé par apt sur buster.

Exemple de blocs que l'on trouve dans les fichiers de logs :


Start-Date: 2019-10-01  21:17:10
Commandline: apt install msmtp
Install: msmtp:amd64 (1.8.3-1)
End-Date: 2019-10-01  21:17:12

 


La variable $c correspond à ce qui suit le "Commandline: " de la seconde ligne.

Dernière modification par Beta-Pictoris (07-10-2019 19:00:48)

En ligne

#8 08-10-2019 09:37:35

captnfab
Admin-Girafe
Lieu : /dev/random
Distrib. : Debian Stretch/Buster/Sid/Rc-Buggy
Noyau : Linux (≥ 4.12)
(G)UI : i3-wm (≥ 4.13)
Inscription : 07-07-2008
Site Web

Re : apt-history

Toutes ces commandes sont des commandes apt valides. Peut-être que ton script ne les parse pas toutes correctement ?

Commandline: apt autoremove
Commandline: apt dist-upgrade
Commandline: apt install dehydrated
Commandline: apt install dehydrated -t sid
Commandline: apt install dehydrated-apache2
Commandline: apt install firefox -t sid
Commandline: apt install gpodder
Commandline: apt install grim
Commandline: apt install gtk-4-examples -t sid
Commandline: apt install imv
Commandline: apt install libreoffice -t sid
Commandline: apt install libreoffice -t sid --no-install-recommends
Commandline: apt install ocaml
Commandline: apt install postfix
Commandline: apt install rofi
Commandline: apt install rustc -t sid
Commandline: apt install sass-stylesheets-compass
Commandline: apt install sassc
Commandline: apt install slurp
Commandline: apt install sway -t experimental
Commandline: apt install sway swayidle swaylock
Commandline: apt install thunderbird -t experimental
Commandline: apt install wl-clipboard
Commandline: apt install xterm
Commandline: apt install xwayland
Commandline: apt purge argyll ca-certificates-mono ebtables firebird3.0-common fonts-noto-hinted icedtea-netx icedtea-netx-common irqbalance libapache2-mod-php5.6 libatk-adaptor:amd64 libreoffice-sdbc-firebird libxml-commons-resolver1.1-java linux-image-4.19.0-1-amd64 mono-runtime-common orca speech-dispatcher xbrlapi
Commandline: apt purge fusedav ibus-qt4 libssl1.0.2
Commandline: apt purge gtk-4-examples
Commandline: apt purge libdbus-glib-1-dev libreoffice-avmedia-backend-gstreamer
Commandline: apt purge libpython2.7-dev:amd64
Commandline: apt purge linux-image-4.19.0-4-amd64
Commandline: apt purge ruby-sass
Commandline: apt purge vim vim-addon-manager vim-common vim-gtk3 vim-gui-common vim-runtime vim-syntastic vim-tiny
Commandline: apt purge xtron
Commandline: apt-get install -y -o DPkg::Options::=--force-confold xtron
Commandline: apt-get install autoconf2.13 build-essential nodejs python-dev python-pip python-setuptools unzip uuid zip
Commandline: apt-get install libasound2-dev libcurl4-openssl-dev libdbus-1-dev libdbus-glib-1-dev libgtk-3-dev libgtk2.0-dev libpulse-dev libx11-xcb-dev libxt-dev python-dbus xvfb yasm
Commandline: apt-get install nasm
Commandline: apt-get purge -y -o DPkg::Options::=--force-confold xtron



Il y a aussi des blocs sans Commandline :

Start-Date: 2019-08-19  11:56:15
Requested-By: xxxxx (1000)
Install: libsqlite3-dev:amd64 (3.29.0-2)
End-Date: 2019-08-19  11:56:16


captnfab,
Association Debian-Facile, bépo.
TheDoctor: Your wish is my command… But be careful what you wish for.
Je suis parrain linux !

Hors ligne

#9 08-10-2019 19:39:46

Beta-Pictoris
Membre
Lieu : Angers
Distrib. : Buster
Inscription : 12-08-2015

Re : apt-history

J'ai modifié le script pour qu'il tienne compte des blocs sans "Commandline" :

#!/usr/bin/perl -w

# Commande apt-history
# Version 0.0.2

use v5.10 ;
use Getopt::Long ;

my $base = "$ENV{HOME}/.apt-history" ;

GetOptions
    'update'      => \&update ,
    'list'        => \&list   ,
    'info=i'      => \&info   ,
    'remove=i'    => \&remove ,
    'help'    => \&help   ;

sub update
{
    use IO::Uncompress::Gunzip qw( gunzip $GunzipError ) ;

    my $log_files = "/var/log/apt/history.log*" ;
    my $n = 1 ;
    my $regexp = qr/^(.*?): (.*)/ ;
    my ( $d , $h , $c , $o , $p ) ;

    dbmopen my %h , $base , 0644 ;

    %h = () ;

    say "" ;

    foreach ( sort { -M $b <=> -M $a } glob $log_files )
    {
  say "Traitement du fichier de log $_" ;

  my $f = IO::Uncompress::Gunzip -> new ( $_ ) or die "gunzip failed: $GunzipError\n" ;

  while ( <$f> )
  {
      $c = "?" ;
      if ( $_ =~ m/^Start-Date: (.{10,10}).*(.{8,8})/ )
      {
    ( $d , $h ) = ( $1 , $2 ) ;
    ( $o , $p ) = <$f> =~ m/$regexp/ ;
    if ( $o eq "Commandline" )
    {
        $c = $p ;
        ( $o , $p ) = <$f> =~ m/$regexp/ ;
    }
    ( $o , $p ) = <$f> =~ m/$regexp/ if $o eq "Requested-By" ;
    $p =~ s/\(.*?\)//g ;
    $p =~ s/, //g ;
    $h { $n++ } = "$d;$h;$o;$c;$p" ;
      }
  }
  close $f ;
    }
    dbmclose %h ;

    say "" ;
}

sub list
{
    use Term::ReadKey ;

    my ( $width_chars ) = GetTerminalSize() ;

    dbmopen my %h , $base , 0644 ;

    say "" ;

    foreach ( sort { $a <=> $b } keys %h )
    {
  my ( $d , $h , $o , $c ) = split ";" , $h { $_ } ;

  say substr sprintf ( "%5d | %s | %s | %-9s | %s" , $_ , $d , $h , $o , $c ) , 0 , $width_chars ;
    }

    dbmclose %h ;

    say "" ;
}

sub info
{
    my ( $opt , $n ) = @_ ;

    dbmopen my %h , $base , 0644 ;

    my ( $d , $h , $o , $c , $p ) = split ";" , $h { $n } ;
    say "\nDate :\t\t$d" ;
    say "Heure :\t\t$h" ;
    say "Opération :\t$o" ;
    say "\nCommande :\n$c" ;
    say "\nPaquets mis en jeu:\n$p\n" ;

    dbmclose %h ;
}

sub remove
{
    my ( $opt , $n ) = @_ ;

    dbmopen my %h , $base , 0644 ;

    my ( $d , $h , $o , $c , $p ) = split ";" , $h { $n } ;

    say "\napt -s --purge autoremove $p" ;
    say `apt -s --purge autoremove $p` ;
    say "Pour supprimer définitivement les paquets, utilisez la commande suivante :\n" ;
    say "apt --purge autoremove $p\n" ;

    dbmclose %h ;
}

sub help
{
    say "\napt-history 0.0.2\n" ;
    say "Usage : apt-history [options] argument\n" ;
    say "apt-history est un outil en ligne de commande qui permet de gérer l'historique des transactions sur les paquets deb.\n" ;
    say "Les options :" ;
    say "\t--update\t- importe les fichiers de logs dans la base de données locale.";
    say "\t--list\t\t- affiche l'historique des transactions sur les paquets." ;
    say "\t--info n\t- affiche les détails de la transaction n." ;
    say "\t--remove n\t- simule la désinstallation des paquets mis en jeux lors de la transaction n.\n" ;
}
 



J'espère qu'il marchera mieux. smile

Dernière modification par Beta-Pictoris (08-10-2019 19:40:10)

En ligne

#10 08-10-2019 20:07:21

Debian Alain
Adhérent(e)
Lieu : zone 51
Distrib. : W$10 / stable / ubuntu / F29 / testing
Noyau : Linux 5.2.0-3 amd 64 SMP debian 5.2.9-2
(G)UI : Gnome wayland / Gdm3
Inscription : 11-03-2017

Re : apt-history

super , ton utilitaire , Beta-Pictoris !

./apt-history --help


apt-history 0.0.2

Usage : apt-history [options] argument

apt-history est un outil en ligne de commande qui permet de gérer l'historique des transactions sur les paquets deb.

Les options :
  --update  - importe les fichiers de logs dans la base de données locale.
  --list    - affiche l'historique des transactions sur les paquets.
  --info n  - affiche les détails de la transaction n.
  --remove n  - simule la désinstallation des paquets mis en jeux lors de la transaction n.
 



./apt-history --update


Traitement du fichier de log /var/log/apt/history.log.12.gz
Traitement du fichier de log /var/log/apt/history.log.11.gz
Traitement du fichier de log /var/log/apt/history.log.10.gz
Traitement du fichier de log /var/log/apt/history.log.9.gz
Traitement du fichier de log /var/log/apt/history.log.8.gz
Traitement du fichier de log /var/log/apt/history.log.7.gz
Traitement du fichier de log /var/log/apt/history.log.6.gz
Traitement du fichier de log /var/log/apt/history.log.5.gz
Traitement du fichier de log /var/log/apt/history.log.4.gz
Traitement du fichier de log /var/log/apt/history.log.3.gz
Traitement du fichier de log /var/log/apt/history.log.2.gz
Traitement du fichier de log /var/log/apt/history.log.1.gz
Traitement du fichier de log /var/log/apt/history.log
 



exemple :

./apt-history --info 2509


Date :    2019-10-08
Heure :   14:59:17
Opération :  Install

Commande :
apt install --reinstall conky-std

Paquets mis en jeu:
conky-std:amd64

Dernière modification par Debian Alain (08-10-2019 20:29:43)


1498812139.jpg Antonio Vivaldi - Winter (Trance Remix) (Scots Diesel Remixes )
RYZEN7 1700X - PRIME X370 PRO - 16 Go DDR4 - RADEON PULSE RX 550 4GB DDR5 OC UEFI - CORSAIR RM750X - SSD crucial MX500 500GB

Hors ligne

#11 09-10-2019 21:21:04

Beta-Pictoris
Membre
Lieu : Angers
Distrib. : Buster
Inscription : 12-08-2015

Re : apt-history

Nouvelle version du script : smile

#!/usr/bin/perl -w

# Commande apt-history
# Version 0.0.3

use v5.10 ;
use strict ;
use Getopt::Long ;

my $base = "$ENV{HOME}/.apt-history" ;

GetOptions
    'update'      => \&update ,
    'list'        => \&list   ,
    'info=i'      => \&info   ,
    'remove=i'    => \&remove ,
    'help'    => \&help   ;

sub update
{
    use IO::Uncompress::Gunzip qw( gunzip $GunzipError ) ;

    my $log_files = "/var/log/apt/history.log*" ;
    my $n = 1 ;
    my ( $d , $h , $c , $o , $p ) ;

    dbmopen my %h , $base , 0644 ;

    %h = () ;

    say "" ;

    foreach ( sort { -M $b <=> -M $a } glob $log_files )
    {
  say "Importation du fichier de log $_" ;

  my $f = IO::Uncompress::Gunzip -> new ( $_ ) or die "gunzip failed: $GunzipError\n" ;

  while ( <$f> )
  {
      if ( ( $d , $h ) = m/^Start-Date: (.{10,10}).*(.{8,8})/ )
      {
    $c = "?" ;
    while ( <$f> =~ m/^(.*?): (.*)/ )
    {
        do { $c = $2 ; next } if $1 eq "Commandline" ;
        next if $1 eq "Requested-By" ;
        last if $1 eq "End-Date" ;
        ( $o , $p ) = ( $1 , $2 ) ;
    }
    $p =~ s/\(.*?\)|, //g ;
    $h { $n++ } = "$d;$h;$o;$c;$p" ;
      }
  }
  close $f ;
    }
    dbmclose %h ;

    say "" ;
}

sub list
{
    use Term::ReadKey ;

    my ( $width_chars ) = GetTerminalSize() ;

    dbmopen my %h , $base , 0644 ;

    say "" ;

    foreach ( sort { $a <=> $b } keys %h )
    {
  my ( $d , $h , $o , $c ) = split ";" , $h { $_ } ;

  say substr sprintf ( "%5d | %s | %s | %-9s | %s" , $_ , $d , $h , $o , $c ) , 0 , $width_chars ;
    }

    dbmclose %h ;

    say "" ;
}

sub info
{
    my ( $opt , $n ) = @_ ;

    dbmopen my %h , $base , 0644 ;

    my ( $d , $h , $o , $c , $p ) = split ";" , $h { $n } ;
    say "\nDate :\t\t$d" ;
    say "Heure :\t\t$h" ;
    say "Opération :\t$o" ;
    say "\nCommande :\n$c" ;
    say "\nPaquets mis en jeu:\n$p\n" ;

    dbmclose %h ;
}

sub remove
{
    my ( $opt , $n ) = @_ ;

    dbmopen my %h , $base , 0644 ;

    my ( $d , $h , $o , $c , $p ) = split ";" , $h { $n } ;

    say "\napt -s --purge autoremove $p" ;
    say `apt -s --purge autoremove $p` ;
    say "Pour supprimer définitivement les paquets, utilisez la commande suivante :\n" ;
    say "apt --purge autoremove $p\n" ;

    dbmclose %h ;
}

sub help
{
    say "\napt-history 0.0.3\n" ;
    say "Usage : apt-history [options] argument\n" ;
    say "apt-history est un outil en ligne de commande qui permet de gérer l'historique des transactions sur les paquets deb.\n" ;
    say "Les options :" ;
    say "\t--update\t- importe les fichiers de logs dans la base de données locale.";
    say "\t--list\t\t- affiche l'historique des transactions sur les paquets." ;
    say "\t--info n\t- affiche les détails de la transaction n." ;
    say "\t--remove n\t- simule la désinstallation des paquets mis en jeux lors de la transaction n.\n" ;
}

Dernière modification par Beta-Pictoris (10-10-2019 17:30:28)

En ligne

#12 10-10-2019 09:13:12

captnfab
Admin-Girafe
Lieu : /dev/random
Distrib. : Debian Stretch/Buster/Sid/Rc-Buggy
Noyau : Linux (≥ 4.12)
(G)UI : i3-wm (≥ 4.13)
Inscription : 07-07-2008
Site Web

Re : apt-history

Merci Beta-Pictoris.
Détail: la commande help ne renvoie pas le bon numéro de version du script big_smile

captnfab,
Association Debian-Facile, bépo.
TheDoctor: Your wish is my command… But be careful what you wish for.
Je suis parrain linux !

Hors ligne

#13 10-10-2019 17:31:06

Beta-Pictoris
Membre
Lieu : Angers
Distrib. : Buster
Inscription : 12-08-2015

Re : apt-history

yep, c'est corrigé.

Alors, ça marche mieux ? smile

En ligne

#14 11-10-2019 09:19:54

captnfab
Admin-Girafe
Lieu : /dev/random
Distrib. : Debian Stretch/Buster/Sid/Rc-Buggy
Noyau : Linux (≥ 4.12)
(G)UI : i3-wm (≥ 4.13)
Inscription : 07-07-2008
Site Web

Re : apt-history

Carrément, ça change tout ! big_smile

captnfab,
Association Debian-Facile, bépo.
TheDoctor: Your wish is my command… But be careful what you wish for.
Je suis parrain linux !

Hors ligne

Pied de page des forums